Name: series-workflowvm7g5 Phase: Succeeded StartedAt: 2026-08-14 14:34:02 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[0] Phase: Succeeded StartedAt: 2026-08-14 14:34:02 +0000 UTC FinishedAt: 2026-08-14 15:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 14:34:02 +0000 UTC FinishedAt: 2026-08-14 15:14:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB", "CFG80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB", "CFG80211", "USB" ], "series_id": "4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_update_bss_desc_with_ie", "mwifiex_set_sta_ht_cap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3NldF9zdGFfaHRfY2FwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXG5cbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFjNDI1YjkwYjYwMmQyMzNhYzYxNjRjZjQyOWVlYzlmYWJiYjc5MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNToxMTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgJiM0MzsxMzg0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOlxuJiM0MztcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl9odF9jYXApKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciAmIzQzO1xuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XG5AQCAtMTM5Miw2ICYjNDM7MTM5NCw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfb3BlciA9XG4gXHRcdFx0XHQoc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKikoY3VycmVudF9wdHIgJiM0MztcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xuQEAgLTE0MDAsNiAmIzQzOzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX3ZodF9jYXApKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2VkaXNhYmxlXzExYWMgPSBmYWxzZTtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9jYXAgPVxuIFx0XHRcdFx0KHZvaWQgKikoY3VycmVudF9wdHIgJiM0MztcbkBAIC0xNDA5LDYgJiM0MzsxNDE1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdFx0ICAgICAgYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7XG4gXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XG5AQCAtMTQxNyw2ICYjNDM7MTQyNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHRcdCAgICAgIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9CU1NfQ09FWF8yMDQwOlxuJiM0MztcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25fYnNzX2NvXzIwNDAgPSBjdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYnNzX2NvXzIwNDBfb2Zmc2V0ID1cbiBcdFx0XHRcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbkBAIC0xNDI3LDYgJiM0MzsxNDM3LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9PUE1PREVfTk9USUY6XG4mIzQzO1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSA9ICh2b2lkICopY3VycmVudF9wdHI7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZV9vZmZzZXQgPVxuIFx0XHRcdFx0XHQodTE2KSgodTggKilic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlIC1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuaW5kZXggN2QzNjMxZDIxMjIzNi4uODQ0MjIzYzA0ZTJlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmNcbkBAIC03MjEsNyAmIzQzOzcyMSw3IEBAIG13aWZpZXhfc2V0X3N0YV9odF9jYXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKmllcyxcbiBcbiBcdGh0X2NhcF9pZSA9ICh2b2lkICopY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCBpZXMsXG4gXHRcdFx0XHRcdCAgICAgaWVzX2xlbik7XG4tXHRpZiAoaHRfY2FwX2llKSB7XG4mIzQzO1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICYjNDM7IDEpO1xuIFx0XHRub2RlLVx1MDAzZWlzXzExbl9lbmFibGVkID0gMTtcbiBcdFx0bm9kZS1cdTAwM2VtYXhfYW1zZHUgPSBsZTE2X3RvX2NwdShodF9jYXAtXHUwMDNlY2FwX2luZm8pIFx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYwppbmRleCA5N2MwZWMzYjgyMmU3Li44MDU3Mjk4OWJjODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKQEAgLTEzODQsNiAmIzQzOzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkJCWJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25faHRfY2FwKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKIAkJCQkJKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTEzOTIsNiAmIzQzOzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25faHRfb3BlcikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25faHRfb3BlciA9CiAJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICopKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTE0MDAsNiAmIzQzOzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6CiYjNDM7CQkJaWYgKGVsZW1lbnRfbGVuICZsdDsgc2l6ZW9mKCpic3NfZW50cnktJmd0O2Jjbl92aHRfY2FwKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Rpc2FibGVfMTFhYyA9IGZhbHNlOwogCQkJYnNzX2VudHJ5LSZndDtiY25fdmh0X2NhcCA9CiAJCQkJKHZvaWQgKikoY3VycmVudF9wdHIgJiM0MzsKQEAgLTE0MDksNiAmIzQzOzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgICBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjoKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX3ZodF9vcGVyKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl92aHRfb3BlciA9CiAJCQkJKHZvaWQgKikoY3VycmVudF9wdHIgJiM0MzsKIAkJCQkJIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTE0MTcsNiAmIzQzOzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgICBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDoKJiM0MzsJCQlpZiAoIWVsZW1lbnRfbGVuKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX2Jzc19jb18yMDQwID0gY3VycmVudF9wdHI7CiAJCQlic3NfZW50cnktJmd0O2Jzc19jb18yMDQwX29mZnNldCA9CiAJCQkJKHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKQEAgLTE0MjcsNiAmIzQzOzE0MzcsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCSh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9PUE1PREVfTk9USUY6CiYjNDM7CQkJaWYgKHRvdGFsX2llX2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtvcGVyX21vZGUpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjsKIAkJCWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlX29mZnNldCA9CiAJCQkJCSh1MTYpKCh1OCAqKWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jCmluZGV4IDdkMzYzMWQyMTIyMzYuLjg0NDIyM2MwNGUyZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYwpAQCAtNzIxLDcgJiM0Mzs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsCiAKIAlodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLAogCQkJCQkgICAgIGllc19sZW4pOwotCWlmIChodF9jYXBfaWUpIHsKJiM0MzsJaWYgKGh0X2NhcF9pZSAmYW1wOyZhbXA7IGh0X2NhcF9pZS0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHsKIAkJaHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICYjNDM7IDEpOwogCQlub2RlLSZndDtpc18xMW5fZW5hYmxlZCA9IDE7CiAJCW5vZGUtJmd0O21heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC0mZ3Q7Y2FwX2luZm8pICZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgV2lGaSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBJRXMgKEluZm9ybWF0aW9uIEVsZW1lbnRzKSBhcmUgcGFyc2VkLiBUaGV5JiMzOTtyZSB0YXJnZXRpbmcgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSDigJMgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBJRSBkYXRhLiBJdCYjMzk7cyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBsZWFkIHRvIHJlbW90ZSBjb2RlIGV4ZWN1dGlvbiwgc28gaXQmIzM5O3MgZ29vZCB0aGV5JiMzOTtyZSBiZWluZyBwcm9hY3RpdmUuCgpOb3csIG15IG5leHQgdGhvdWdodCBpcyBhYm91dCBob3cgZWFzeSBpdCYjMzk7bGwgYmUgdG8gdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgc29tZSBvYnNjdXJlIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtd2lmaWV4YCBpcyB0aGUgTWFydmVsbCBXaUZpLUV4IERyaXZlci4gVGhlIGJpZyBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IG9yIHdpbGwgSSBuZWVkIGEgcGh5c2ljYWwgZGV2aWNlPyBHaXZlbiB0aGF0IGl0JiMzOTtzIHVzdWFsbHkgdGllZCB0byBQQ0llLCBTRElPLCBvciBVU0IgaW50ZXJmYWNlcywgdGhhdCBtZWFucyB0ZXN0aW5nIGdldHMgdHJpY2t5LiBXYWl0IGEgc2Vjb25kLCB0aGUgZmFjdCB0aGF0IGl0IHN1cHBvcnRzIFVTQiBpcyByZWFsbHkgaW50ZXJlc3RpbmcuIElmIGl0JiMzOTtzIGEgVVNCIGRyaXZlciwgSSBzaG91bGQgYmUgYWJsZSB0byBwb3RlbnRpYWxseSBmdXp6IGl0IHVzaW5nIFVTQiBnYWRnZXQgbW9kZSwgb3IgZXZlbiBhIGR1bW15IEhDRC4gVGhhdCBvcGVucyB1cCBhIG11Y2ggc2ltcGxlciB0ZXN0aW5nIHBhdGguIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGludGVyZmFjZXMgaXQgc3VwcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1XSUZJRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1XSUZJRVhfVVNCIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgZmFjdCB0aGF0IGBNV0lGSUVYX1VTQmAgaXMgc3VwcG9ydGVkIHJlYWxseSBvcGVucyB0aGUgZG9vciBmb3IgZWZmZWN0aXZlIGZ1enppbmcgdGhyb3VnaCBVU0IgZW11bGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBvZiB0b29scyBsaWtlIGBkdW1teV9oY2RgIG9yIGxldmVyYWdpbmcgc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCYjMzk7cyB0aGUgcm91dGUgSSYjMzk7bGwgd2FudCB0byBleHBsb3JlLgoKTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsIHNpdGVzIGZvciBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgY3JhZnRpbmcgcmVsZXZhbnQgZnV6emluZyBwYXlsb2Fkcy4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mzg9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQxOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTExMTI9bXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xMTgxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxMTgyOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0xNDE9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMTkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE5MjpcdHJldHVybiBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHByaXYtXHUwMDNlYWRhcHRlciwgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE5My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiwgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgc3RhdGlvbiAoU1RBKSBIVCBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQsIHByb2JhYmx5IGR1cmluZyBhc3NvY2lhdGlvbiBvciByZS1hc3NvY2lhdGlvbiB3aXRoIGFuIEFQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIgc3BlY2lmaWNzLi4uIEkgcmVjYWxsIHRoaXMgYmVpbmcgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aHJvdWdocHV0IGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlIGJ5IG5lZ290aWF0aW5nIEhUL1ZIVCBwYXJhbWV0ZXJzLiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNhcGFiYWlsaXRlcyBwcm9wZXJseSwgYmVjYXVzZSBpbXByb3BlciBIVCBjYXBhYmlsaXRpZXMgYmVpbmcgc2V0IHdvdWxkIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGFuZCBkZWNyZWFzZWQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkIGJhc2VkIG9uIHdoYXQgdGhlIEFQIGFkdmVydGlzZXMgYW5kIHdoYXQgdGhlIFNUQSBpcyBjYXBhYmxlIG9mLiBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmc7IGFyZSB3ZSBncmFjZWZ1bGx5IGRlZ3JhZGluZyB0byBsZWdhY3kgbW9kZXMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBvciBhcmUgd2UgY2F1c2luZyB1bmV4cGVjdGVkIGRpc2Nvbm5lY3RzPyBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVmZmVyIG92ZXJmbG93cyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gdGhlIGRhdGEgbWFuaXB1bGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiwgdGhlbiB0aGUgY2FsbCBzaXRlcywgdGhlbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGZpZ3VyaW5nIG91dCBwZXJmb3JtYW5jZSBwcm9ibGVtcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBjZXJ0YWluIEFQcy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gc2VlIGlmIGFueSBidWdzIGhhdmUgYmVlbiBmaXhlZCBpbiByZWNlbnQgZHJpdmVyIHJlbGVhc2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU5MTptd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1OTItXHRcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xMzgtXHRcdFx0XHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjEzOTpcdFx0XHRcdCAqIGluIG13aWZpZXhfc2V0X3N0YV9odF9jYXAoKSByZWFkcyBwYXN0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVx0XHRcdFx0ICogZXZlbnRfYm9keSBhbmQgb3V0IG9mIHRoZSBhZGFwdGVyIHNsYWIgb2JqZWN0LlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmM6MTY5Olx0XHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVx1MDAzZWFzc29jX3JlcV9pZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTcwLVx0XHRcdFx0ICAgICAgIHNpbmZvLVx1MDAzZWFzc29jX3JlcV9pZXNfbGVuLCBub2RlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jOjcxMzptd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jLTcxNC1cdFx0ICAgICAgIGludCBpZXNfbGVuLCBzdHJ1Y3QgbXdpZmlleF9zdGFfbm9kZSAqbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlNTIERlc2NyaXB0aW9uIGFuZCBIVCBDYXBhYmlsaXR5IFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIHNlZSB0aGF0IGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbmQgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLCBhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIHNlZW1zIHRvIG9yaWdpbmF0ZSBmcm9tIGBtd2lmaWV4X3NldF9nZW5faWVfaGVscGVyYCBpbiBgc3RhX2lvY3RsLmNgLCBhbmQgbGlrZWx5IG90aGVyIHBsYWNlcyB0b28uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBzbyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgY2FsbCBoaWVyYXJjaHk7IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEtub3dpbmcgdGhlIGNhbGwgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTUzNj1pbnQgbXdpZmlleF9nZXRfYnNzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTM3LVx0XHRcdCBzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyAqKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTUzODppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTM5LVx0XHRcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2NTU9c3RhdGljIGludCBtd2lmaWV4X3NhdmVfaGlkZGVuX3NzaWRfY2hhbm5lbHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2Njc6XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTEtXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTY5MjpcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTMtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2OTk9c3RhdGljIGludCBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MTA6XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzExLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzAtXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTczMTpcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzItXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9ODg9aW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMTQwLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE0MTppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE0Mi1cdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMzMj1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzUxOlx0XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1Mi1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtNDQ2LVx0LyogYmVhY29uX2llIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIGluIGZ1bmN0aW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDQ3Olx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00NDgtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgRnV6emluZyB0aGUgTVdJRklFWCBVU0IgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgYG13aWZpZXhgLiBTaW5jZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgbWFjODAyMTEvY2ZnODAyMTEgc3RhY2sgZm9yIG9wZXJhdGlvbnMgbGlrZSBzY2FubmluZyBhbmQgY29ubmVjdGluZywgdGhlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gSSByZW1lbWJlciBgbXdpZmlleGAgaXMgYSBmdWxsbWFjIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgcmVnaXN0ZXJzIHdpdGggY2ZnODAyMTEuIFNvLCBjYW4gSSBsZXZlcmFnZSBgbWFjODAyMTFfaHdzaW1gIHRvIGdldCBhdCBpdD8gTm8sIGJlY2F1c2UgYG1hYzgwMjExX2h3c2ltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG1hYzgwMjExIGRyaXZlcnMuIFJpZ2h0LCBvZiBjb3Vyc2UuCgpBaCwgYnV0IGBtd2lmaWV4YCBpcyBhIFVTQiBkcml2ZXIhIFRoYXQmIzM5O3MgdGhlIGtleS4gSWYgaXQmIzM5O3MgVVNCLCB0aGVuIGl0JiMzOTtzIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uLCBsaWtlIHdpdGggYGR1bW15X2hjZGAuIFN5emthbGxlciYjMzk7cyBnb3QgdGhhdCBVU0IgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gUGVyZmVjdCEgVGhhdCBjb25maXJtcyBpdC4gVGhlIGBtd2lmaWV4YCBVU0IgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4KCk5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYX1VTQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnPTI1PWNvbmZpZyBNV0lGSUVYX1BDSUVcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBNV0lGSUVYX1VTQmAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBNV0lGSUVYX1VTQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoaXMgdGhpbmcgcmVsaWFudCBvbj8mIzM0Oy4gSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBzZWxmLWNvbnRhaW5lZCB1bml0LCBvciBkb2VzIGl0IGxlYW4gaGVhdmlseSBvbiBvdGhlciBjb3JlIGNvbXBvbmVudHMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzPyBJJiMzOTttIHRoaW5raW5nLCBhcmUgd2UgdGFsa2luZyBhYm91dCBqdXN0IHN0YW5kYXJkIFVTQiBkcml2ZXIgZnJhbWV3b3JrIGRlcGVuZGVuY2llcywgb3IgYXJlIHRoZXJlIGN1c3RvbSBob29rcywgb3Igc3BlY2lhbGl6ZWQgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgdG8gY29uc2lkZXI/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLCB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaW4gYSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciByZXNvdXJjZSBjb25mbGljdHMsIGludGVycnVwdHMsIG9yIG1lbW9yeSByZWdpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgY3Jvc3MtZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSYjMzk7cyBmdW5jdGlvbiBjb21wbGV0ZWx5PwpXaGF0IGhhcHBlbnMgaWYgb25lIG9mIHRoZW0gZmFpbHMgLSBob3cgbXVjaCBvZiB0aGUgd2hvbGUgc3lzdGVtIGRvZXMgaXQgdGFrZSBkb3duPwoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cy4gRG9lcyBpdCBzaGFyZSByZXNvdXJjZXMgd2l0aCBvdGhlciBVU0IgZGV2aWNlcz8gSXMgdGhlcmUgYW55IGludGVyLW1vZHVsZSBjb21tdW5pY2F0aW9uIHRoYXQgSSBuZWVkIHRvIGFuYWx5emU/IEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCBvciBqdXN0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbG9va2luZyBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzIHRoYXQgY2FuIHNob3cgbWUgaXRzIGNvbm5lY3Rpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBNV0lGSUVYYCBhbmQgYFVTQmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIHBvdGVudGlhbCBpc3N1ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1XSUZJRVhgLiBVbmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hhdCBpdCByZWxpZXMgb24gYW5kIGlmIGFueXRoaW5nIHRoZXJlIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG13aWZpZXhgIERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBoYW5kbGVzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcy4gVGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBoZXJlIGFyZSBjbGVhcmx5IGBDRkc4MDIxMWAsIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYW5kIG9mIGNvdXJzZSwgYFVTQmAgaXRzZWxmLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCB3aXJlbGVzcyBkcml2ZXIsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBnb2luZyB0byBiZSB0aHJvdWdoIGNyYWZ0ZWQgVVNCIFVSQnMuCgpUaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIElFcyBhcmUgYmVpbmcgcGFyc2VkLiAgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGlzIGRlYWxpbmcgd2l0aCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIElFcywgd2hpbGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGhhbmRsZXMgYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMuICBUaGUgb2J2aW91cyBhdHRhY2sgdmVjdG9yIGlzIGEgZnV6emVyLiAgVGhhdCBmdXp6ZXIgY291bGQgYmUgbWltaWNraW5nIGVpdGhlciBhbiBBY2Nlc3MgUG9pbnQgKEFQKSBvciBhIFN0YXRpb24gKFNUQSkgYW5kIGluamVjdGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMgb3IsIG1vcmUgc3VidGx5LCBjcmFmdGluZyB0aGUgVVNCIHJlc3BvbnNlcyBkaXJlY3RseS4gU2luY2UgYG13aWZpZXhgIGlzIGEgVVNCIGRyaXZlciwgdGhlIGZ1enplciBlbXVsYXRpbmcgdGhlIFVTQiBkZXZpY2UgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsYXcsIHNvIEkmIzM5O2xsIGFsc28gYmUga2VlcGluZyBhbiBleWUgb24gYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgIGFuZCBgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudGAsIGFzIHRoZXkgbWlnaHQgYmUgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3Npbmcgb3IgcG90ZW50aWFsbHkgcmVsYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFzIGl0IGlzIGEgY29tbW9uIGluZGljYXRvciBvZiBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXNhc3NlbWJseSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mzg9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQxOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTExMTI9bXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xMTgxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxMTgyOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTAyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIExhbmRzY2FwZSBvZiBXaUZpIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgaXQuIEl0JiMzOTtzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoaXMgc2V0dXAgaXMgZGVmaW5pdGVseSBkeW5hbWljLCBjaGFuZ2luZy4gSSYjMzk7bSBub3QgZGVhbGluZyB3aXRoIGEgZml4ZWQgc3RhdGUgaGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5IHJpZ2h0IG5vdy4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluIGFuZCBjb25maXJtIHdoZXJlIHdlIHN0YW5kLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAgZnVuY3Rpb24gYW5kIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBzdGF0ZS4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfc2V0X3N0YV9odF9jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTU5MD12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTkyLVx0XHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmM9OTQ9aW50IG13aWZpZXhfcHJvY2Vzc191YXBfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTM4LVx0XHRcdFx0ICogZXZlbnQgd2FzIGNvcGllZCBpbnRvOyBvdGhlcndpc2UgdGhlIElFIHdhbGtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XHRcdFx0XHQgKiBpbiBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKCkgcmVhZHMgcGFzdFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTE0MC1cdFx0XHRcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcdFx0bXdpZmlleF9zZXRfc3RhX2h0X2NhcChwcml2LCBzaW5mby1cdTAwM2Vhc3NvY19yZXFfaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTE3MC1cdFx0XHRcdCAgICAgICBzaW5mby1cdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYz03MTI9dm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYy03MTQtXHRcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI5CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDQ1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTVdJRklFWCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBmaXg7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciB0byBmdXp6LiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB3aGVuIHBhcnNpbmcgSW5mb3JtYXRpb24gRWxlbWVudHMgd2l0aGluIHRoZSBgbXdpZmlleGAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy4gVGhpcyBpcyBnb29kOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgSSYjMzk7bGwgbmVlZCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXMgdGhlIGNvcmUuIEkgY2FuIGFsc28gaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIHRoZW0sIGFuZCBpdCB3b24mIzM5O3QgaHVydCB0byBoYXZlIHRoZW0gZXhwbGljaXRseSBzZXQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBNV0lGSUVYX1VTQmAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBpdCBkZXBlbmRzIG9uIGJvdGggYE1XSUZJRVhgIGFuZCBgVVNCYCwgYW5kIGBNV0lGSUVYYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIE9rYXksIHNvIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYENGRzgwMjExYCwgYW5kIGBVU0JgIGl0IGlzLiBUaGF0JiMzOTtzIHN1ZmZpY2llbnQgdG8gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBmaXhlcyBhIGZ1bmN0aW9uYWwgdnVsbmVyYWJpbGl0eSB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCB0aHJvdWdoIGEgVVNCIGRldmljZS4gVGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBhbmQgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgTVdJRklFWGAsIGBNV0lGSUVYX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYC4KCldhaXQgYSBzZWNvbmQsIHdoYXQgYWJvdXQgYE1XSUZJRVhfU0RJT2AgYW5kIGBNV0lGSUVYX1BDSUVgPyBDb3VsZCBzeXprYWxsZXIgaGFuZGxlIGZ1enppbmcgdGhvc2U/IFdoaWxlIHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIFVTQiBpcyBkZWZpbml0ZWx5IG11Y2ggYmV0dGVyIHN1cHBvcnRlZCwgZXNwZWNpYWxseSB3aXRoIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAuIFNvIHN0aWNraW5nIHdpdGggYE1XSUZJRVhfVVNCYCBpcyB0aGUgYmVzdCBiZXQuIEFscmlnaHQsIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3NldF9zdGFfaHRfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cblxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWM0MjViOTBiNjAyZDIzM2FjNjE2NGNmNDI5ZWVjOWZhYmJiNzkxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE1OjExOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCkBAIC0xMzg0LDYgJiM0MzsxMzg0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX2h0X2NhcCkpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCiAJCQkJCShjdXJyZW50X3B0ciAmIzQzOwogCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xMzkyLDYgJiM0MzsxMzk0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX2h0X29wZXIpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX2h0X29wZXIgPQogCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciAmIzQzOwogCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xNDAwLDYgJiM0MzsxNDA0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX1ZIVF9DQVBBQklMSVRZOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25fdmh0X2NhcCkpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtkaXNhYmxlXzExYWMgPSBmYWxzZTsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX3ZodF9jYXAgPQogCQkJCSh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7CkBAIC0xNDA5LDYgJiM0MzsxNDE1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICAgYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046CiYjNDM7CQkJaWYgKGVsZW1lbnRfbGVuICZsdDsgc2l6ZW9mKCpic3NfZW50cnktJmd0O2Jjbl92aHRfb3BlcikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25fdmh0X29wZXIgPQogCQkJCSh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCSBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xNDE3LDYgJiM0MzsxNDI1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICAgYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0JTU19DT0VYXzIwNDA6CiYjNDM7CQkJaWYgKCFlbGVtZW50X2xlbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyOwogCQkJYnNzX2VudHJ5LSZndDtic3NfY29fMjA0MF9vZmZzZXQgPQogCQkJCSh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CkBAIC0xNDI3LDYgJiM0MzsxNDM3LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOgomIzQzOwkJCWlmICh0b3RhbF9pZV9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O29wZXJfbW9kZSA9ICh2b2lkICopY3VycmVudF9wdHI7CiAJCQlic3NfZW50cnktJmd0O29wZXJfbW9kZV9vZmZzZXQgPQogCQkJCQkodTE2KSgodTggKilic3NfZW50cnktJmd0O29wZXJfbW9kZSAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYwppbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMKQEAgLTcyMSw3ICYjNDM7NzIxLDcgQEAgbXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLAogCiAJaHRfY2FwX2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIGllcywKIAkJCQkJICAgICBpZXNfbGVuKTsKLQlpZiAoaHRfY2FwX2llKSB7CiYjNDM7CWlmIChodF9jYXBfaWUgJmFtcDsmYW1wOyBodF9jYXBfaWUtJmd0O2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKSB7CiAJCWh0X2NhcCA9ICh2b2lkICopKGh0X2NhcF9pZSAmIzQzOyAxKTsKIAkJbm9kZS0mZ3Q7aXNfMTFuX2VuYWJsZWQgPSAxOwogCQlub2RlLSZndDttYXhfYW1zZHUgPSBsZTE2X3RvX2NwdShodF9jYXAtJmd0O2NhcF9pbmZvKSAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNgoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiAxMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBtd2lmaWV4IERyaXZlciBQYXRjaCBmb3IgSW5mb3JtYXRpb24gRWxlbWVudCBMZW5ndGggQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYG13aWZpZXhgIGRyaXZlci4gSXQmIzM5O3MgYWRkaW5nIGxlbmd0aCBjaGVja3MgdG8gdmFyaW91cyBJbmZvcm1hdGlvbiBFbGVtZW50cywgb3IgSUVzLCBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgcmVjZWl2ZWQgbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzLCBzcGVjaWZpY2FsbHkgaW4gYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIHByYWN0aWNlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hlY2tpbmcgaWYgdGhlIHJlcG9ydGVkIGxlbmd0aCBvZiBhbiBJRSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIHRoZSBkcml2ZXIgaXMgY2FzdGluZyB0aGUgSUUgZGF0YSB0by4gRm9yIGluc3RhbmNlLCBpZiBhbiBIVCBDYXBhYmlsaXR5IElFIGlzIHJlY2VpdmVkLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGBlbGVtZW50X2xlbmAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBgaWVlZTgwMjExX2h0X2NhcGAgc3RydWN0dXJlLiBJZiBub3QsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoZSBjb25jZXJuIGlzIHRoYXQgd2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIG1pZ2h0IHRyeSB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiB0aGUgc3RydWN0dXJlIHRoYXQgbGllICpiZXlvbmQqIHRoZSBhY3R1YWwgZGF0YSBwcm92aWRlZCBpbiB0aGUgSUUuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gIElmIHRoZSByZWNlaXZlZCBJRSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgc2l6ZSwgd2hhdCYjMzk7cyBsaWtlbHkgdG8gaGFwcGVuPyBUaGUgY29kZSB3b3VsZCBjYXN0IHRoZSBkYXRhIHBvaW50ZXIgYXMgcmVxdWVzdGVkIGJ1dCBtaWdodCB0cnkgdG8gcmVhZCBmaWVsZHMgKmJleW9uZCogdGhlIGVuZCBvZiB0aGUgcmVjZWl2ZWQgSUUuCgpXaGF0IGtpbmQgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZSBhcmUgd2UgbG9va2luZyBhdD8gVGhlIHBhdGNoIG5vdGVzIHRoaXMgbWlnaHQgYmUgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkLiBLQVNBTiBpcyB0aGUgdG9vbCBvZiBjaG9pY2UgdG8gY2F0Y2ggdGhhdCwgYW5kIGl0JiMzOTtzIGRldGVjdGluZyBPT0IgcmVhZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgaXQmIzM5O3Mgbm90IGEgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQqLCB3aGVyZSBLTVNBTiB3b3VsZCBiZSBhcHBsaWNhYmxlLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzb3VyY2UuIFRoZXNlIElFcyBhcmUgY29taW5nIGZyb20gbmV0d29yayBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzOyB0eXBpY2FsbHkgdGhpcyBkYXRhIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBidWZmZXIg4oCTIHRoZSBgaWVzYCBvciBgYmVhY29uX2J1ZmAuIElmIHRoZSByZXBvcnRlZCBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlLCB0aGVuIHRoZSBwcm9ncmFtIGlzIHJlYWRpbmcgcGFzdCBgZWxlbWVudF9sZW5gIGFuZCB3ZSBoYXZlIE9PQiByZWFkaW5nLgoKSWYgd2UmIzM5O3JlIGluIHRoZSAqbWlkZGxlKiBvZiBhIGJ1ZmZlciBmaWxsZWQgd2l0aCBtdWx0aXBsZSBJRXMsIGl0IHdpbGwgcmVhZCBpbnRvIHRoZSBuZXh0IElFJiMzOTtzIGRhdGEuIFRoYXQgaXMgZ29pbmcgdG8gY2F1c2UgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiAqdW5pbml0aWFsaXplZCogcmVhZCB1bmxlc3MgdGhlIGBpZXNgIGJ1ZmZlciBpdHNlbGYgaGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChoaWdobHkgdW5saWtlbHkpLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk15IG5leHQgdGhvdWdodDogaWYgdGhlIGRhdGEgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgIGFuZCB0aGVuIHRoZSByZWNlaXZlZCBkYXRhIGlzICpzbWFsbGVyKiB0aGFuIHdoYXQgd2FzIGFsbG9jYXRlZCwgdGhlbiB3ZSBjb3VsZCBiZSByZWFkaW5nIGludG8gdGhlIHVuaW5pdGlhbGl6ZWQgcGFydCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gdGhpcyBjYXNlLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VkLgoKSSYjMzk7bSB1c3VhbGx5IGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRhdGEgaW4gYHNrX2J1ZmZgcywgd2hpY2ggZXhwbGljaXRseSBrbm93IHRoZWlyIGRhdGEgbGVuZ3RoLiBJZiB5b3UgcmVhZCBwYXN0IHRoZSBgc2tiLSZndDtsZW5gLCB0aGF0IGlzIGFuIE9PQiByZWFkLCB3aGljaCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBzaW5jZSBpdCYjMzk7cyBhdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0aW9uLgoKU28sIEkgcmUtZm9jdXMuIFRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIHRvIHN0b3AgcmVhZGluZyBwYXN0IGBlbGVtZW50X2xlbmAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyBgZWxlbWVudF9sZW5gLCB3aGljaCBjb21lcyBmcm9tIHRoZSBJRSBoZWFkZXIgaXRzZWxmLiBUaGUgY2hlY2sgZW5mb3JjZXMgdGhhdCB0aGUgYGVsZW1lbnRfbGVuYCBtdXN0IGJlIHN1ZmZpY2llbnQgdG8gaG9sZCB0aGUgc3RydWN0dXJlLiAgSWYgYGVsZW1lbnRfbGVuYCBpcyBzbWFsbGVyLCBhbmQgb3RoZXIgSUVzIGZvbGxvdywgdGhlbiB3ZSBtaWdodCBvbmx5IHJlYWQgaW50byB0aGUgbmV4dCBJRSwgd2hpY2ggaXMgd3JvbmcgZGF0YSwgbm90IHVuaW5pdGlhbGl6ZWQuCgpJZiBpdCYjMzk7cyB0aGUgKmxhc3QqIElFIGFuZCB3ZSByZWFkIHBhc3QgYGVsZW1lbnRfbGVuYCwgdGhhdCYjMzk7cyByZWFkaW5nIHBhc3QgdGhlICplbmQgb2YgdGhlIGJ1ZmZlciosIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdGhhdCYjMzk7cyBLQVNBTiB0ZXJyaXRvcnkuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogVGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyBjYXVzZWQgYnkgcGFyc2luZyBpbmNvcnJlY3RseSBzaXplZCBJRXMuIFRoZSBkYXRhIG1heSBjb250YWluIGp1bmsgYnV0IGlzIG1vc3QgbGlrZWx5IG5vdCBhbiAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCogYW5kIEtNU0FOIGlzbiYjMzk7dCBsaWtlbHkgbmVlZGVkLgoKRG91YmxlLWNoZWNraW5nIGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYDogIGhlcmUgaXQmIzM5O3MgY2hlY2tpbmcgYHRvdGFsX2llX2xlbmAsIHdoaWNoIGlzIHRoZSAqcmVtYWluaW5nKiBidWZmZXIgc2l6ZS4gSWYgdGhpcyBgdG90YWxfaWVfbGVuYCBpcyBsZXNzIHRoYW4gd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBzdHJ1Y3QsIHRoZW4gaXQgd2lsbCByZXN1bHQgaW4gYW4gT09CLCBhbmQgS0FTQU4gc2hvdWxkIGNhdGNoIGl0LgoKKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4qKgoKTXkgcmF0aW9uYWxlIGZvciB0aGUgZmluYWwgd3JpdGUtdXAgd2lsbCBiZSB0byBlbXBoYXNpemUgdGhhdCB0aGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgcG90ZW50aWFsIE9PQiByZWFkcy4gSXQgc3RvcHMgdGhlIGNvZGUgZnJvbSBjYXN0aW5nIGEgcG9pbnRlciB0byBhbiBJRSBzdHJ1Y3R1cmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBvciByZW1haW5pbmcgYnVmZmVyIHNpemUuIFJlYWRpbmcgcGFzdCB0aGUgSUUgZGF0YSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGZvciBkZXRlY3RpbmcgdGhlc2UgT09CIGlzc3Vlcy4gTm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXG5cbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cblxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTE6NTEuNjAwODk5Nzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDI0ODM5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZVwiLFxuICAgIFwibXdpZmlleF9zZXRfc3RhX2h0X2NhcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXFxuXFxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyByZWFkcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIGludm9sdmVzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb25zIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTE6NTEuNjAwOTA3MDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzODU5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDE1OjExOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOlxcbitcXHRcXHRcXHRpZiAoZWxlbWVudF9sZW4gXFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cXHUwMDNlYmNuX2h0X2NhcCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKilcXG4gXFx0XFx0XFx0XFx0XFx0KGN1cnJlbnRfcHRyICtcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046XFxuK1xcdFxcdFxcdGlmIChlbGVtZW50X2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2ViY25faHRfb3BlcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9odF9vcGVyID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICopKGN1cnJlbnRfcHRyICtcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9WSFRfQ0FQQUJJTElUWTpcXG4rXFx0XFx0XFx0aWYgKGVsZW1lbnRfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXFx1MDAzZWJjbl92aHRfY2FwKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdGJzc19lbnRyeS1cXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XFxuIFxcdFxcdFxcdGJzc19lbnRyeS1cXHUwMDNlYmNuX3ZodF9jYXAgPVxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKShjdXJyZW50X3B0ciArXFxuQEAgLTE0MDksNiArMTQxNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046XFxuK1xcdFxcdFxcdGlmIChlbGVtZW50X2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2ViY25fdmh0X29wZXIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0YnNzX2VudHJ5LVxcdTAwM2ViY25fdmh0X29wZXIgPVxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKShjdXJyZW50X3B0ciArXFxuIFxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XFxuQEAgLTE0MTcsNiArMTQyNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX0JTU19DT0VYXzIwNDA6XFxuK1xcdFxcdFxcdGlmICghZWxlbWVudF9sZW4pXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJzc19jb18yMDQwX29mZnNldCA9XFxuIFxcdFxcdFxcdFxcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX09QTU9ERV9OT1RJRjpcXG4rXFx0XFx0XFx0aWYgKHRvdGFsX2llX2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2VvcGVyX21vZGUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0YnNzX2VudHJ5LVxcdTAwM2VvcGVyX21vZGUgPSAodm9pZCAqKWN1cnJlbnRfcHRyO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZW9wZXJfbW9kZV9vZmZzZXQgPVxcbiBcXHRcXHRcXHRcXHRcXHQodTE2KSgodTggKilic3NfZW50cnktXFx1MDAzZW9wZXJfbW9kZSAtXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXFxuaW5kZXggN2QzNjMxZDIxMjIzNi4uODQ0MjIzYzA0ZTJlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xcbkBAIC03MjEsNyArNzIxLDcgQEAgbXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbiBcXG4gXFx0aHRfY2FwX2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIGllcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBpZXNfbGVuKTtcXG4tXFx0aWYgKGh0X2NhcF9pZSkge1xcbitcXHRpZiAoaHRfY2FwX2llIFxcdTAwMjZcXHUwMDI2IGh0X2NhcF9pZS1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcXG4gXFx0XFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XFxuIFxcdFxcdG5vZGUtXFx1MDAzZWlzXzExbl9lbmFibGVkID0gMTtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlbWF4X2Ftc2R1ID0gbGUxNl90b19jcHUoaHRfY2FwLVxcdTAwM2VjYXBfaW5mbykgXFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMTo1Mi4wODcwNjc1OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTUxNzY5MDE1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gICAgXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIHBhcnNpbmcgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaW4gdGhlIG13aWZpZXggZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVtdWxhdGluZyBhIFVTQiBkZXZpY2UgYW5kIHNlbmRpbmcgbWFsaWNpb3VzIG1hbmFnZW1lbnQgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOlxuK1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9odF9vcGVyID1cbiBcdFx0XHRcdChzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25fdmh0X2NhcCkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfY2FwID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbkBAIC0xNDA5LDYgKzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjpcbitcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfb3BlcikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbiBcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDE3LDYgKzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDpcbitcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2Vic3NfY29fMjA0MF9vZmZzZXQgPVxuIFx0XHRcdFx0KHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHQodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOlxuK1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlX29mZnNldCA9XG4gXHRcdFx0XHRcdCh1MTYpKCh1OCAqKWJzc19lbnRyeS1cdTAwM2VvcGVyX21vZGUgLVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXG5pbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuQEAgLTcyMSw3ICs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG4gXG4gXHRodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLFxuIFx0XHRcdFx0XHQgICAgIGllc19sZW4pO1xuLVx0aWYgKGh0X2NhcF9pZSkge1xuK1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XG4gXHRcdG5vZGUtXHUwMDNlaXNfMTFuX2VuYWJsZWQgPSAxO1xuIFx0XHRub2RlLVx1MDAzZW1heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC1cdTAwM2VjYXBfaW5mbykgXHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMTo1Mi4wODcwNjk0MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYwNzA5NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBJRXMgKEluZm9ybWF0aW9uIEVsZW1lbnRzKSBhcmUgcGFyc2VkLiBUaGV5J3JlIHRhcmdldGluZyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIOKAkyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIElFIGRhdGEuIEl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byByZW1vdGUgY29kZSBleGVjdXRpb24sIHNvIGl0J3MgZ29vZCB0aGV5J3JlIGJlaW5nIHByb2FjdGl2ZS5cblxuTm93LCBteSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgaG93IGVhc3kgaXQnbGwgYmUgdG8gdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgc29tZSBvYnNjdXJlIGhhcmR3YXJlLiBMZXQncyBzZWUuLi4gYG13aWZpZXhgIGlzIHRoZSBNYXJ2ZWxsIFdpRmktRXggRHJpdmVyLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgb3Igd2lsbCBJIG5lZWQgYSBwaHlzaWNhbCBkZXZpY2U/IEdpdmVuIHRoYXQgaXQncyB1c3VhbGx5IHRpZWQgdG8gUENJZSwgU0RJTywgb3IgVVNCIGludGVyZmFjZXMsIHRoYXQgbWVhbnMgdGVzdGluZyBnZXRzIHRyaWNreS4gV2FpdCBhIHNlY29uZCwgdGhlIGZhY3QgdGhhdCBpdCBzdXBwb3J0cyBVU0IgaXMgcmVhbGx5IGludGVyZXN0aW5nLiBJZiBpdCdzIGEgVVNCIGRyaXZlciwgSSBzaG91bGQgYmUgYWJsZSB0byBwb3RlbnRpYWxseSBmdXp6IGl0IHVzaW5nIFVTQiBnYWRnZXQgbW9kZSwgb3IgZXZlbiBhIGR1bW15IEhDRC4gVGhhdCBvcGVucyB1cCBhIG11Y2ggc2ltcGxlciB0ZXN0aW5nIHBhdGguIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGludGVyZmFjZXMgaXQgc3VwcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjowMS40NDc3ODIzMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMDUyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNV0lGSUVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoxMjpjb25maWcgTVdJRklFWF9TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MjU6Y29uZmlnIE1XSUZJRVhfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjowMS43NDc4NDE1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDMwMzYxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1XSUZJRVhfVVNCIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYE1XSUZJRVhfVVNCYCBpcyBzdXBwb3J0ZWQgcmVhbGx5IG9wZW5zIHRoZSBkb29yIGZvciBlZmZlY3RpdmUgZnV6emluZyB0aHJvdWdoIFVTQiBlbXVsYXRpb24uIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgb2YgdG9vbHMgbGlrZSBgZHVtbXlfaGNkYCBvciBsZXZlcmFnaW5nIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCdzIHRoZSByb3V0ZSBJJ2xsIHdhbnQgdG8gZXhwbG9yZS5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsIHNpdGVzIGZvciBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgY3JhZnRpbmcgcmVsZXZhbnQgZnV6emluZyBwYXlsb2Fkcy4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjEwLjc3ODIwNTMxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTM4PWludCBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MTppbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTExMj1td2lmaWV4X3JldF84MDJfMTFfc2Nhbl9nZXRfdGx2X3B0cnMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTE4MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjExODI6aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0xNDE9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xOTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE5MjpcXHRyZXR1cm4gbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShwcml2LVxcdTAwM2VhZGFwdGVyLCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE5My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjEwLjg0NDkzMDU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTkwMTEwNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uLCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBzdGF0aW9uIChTVEEpIEhUIGNhcGFiaWxpdGllcyBhcmUgYmVpbmcgY29uZmlndXJlZCwgcHJvYmFibHkgZHVyaW5nIGFzc29jaWF0aW9uIG9yIHJlLWFzc29jaWF0aW9uIHdpdGggYW4gQVAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgTWFydmVsbCBXaUZpIGRyaXZlciBzcGVjaWZpY3MuLi4gSSByZWNhbGwgdGhpcyBiZWluZyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhcyBpdCBkaXJlY3RseSBpbXBhY3RzIHRocm91Z2hwdXQgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgYnkgbmVnb3RpYXRpbmcgSFQvVkhUIHBhcmFtZXRlcnMuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBjYXBhYmFpbGl0ZXMgcHJvcGVybHksIGJlY2F1c2UgaW1wcm9wZXIgSFQgY2FwYWJpbGl0aWVzIGJlaW5nIHNldCB3b3VsZCBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBhbmQgZGVjcmVhc2VkIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiB3aGF0IHRoZSBBUCBhZHZlcnRpc2VzIGFuZCB3aGF0IHRoZSBTVEEgaXMgY2FwYWJsZSBvZi4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nOyBhcmUgd2UgZ3JhY2VmdWxseSBkZWdyYWRpbmcgdG8gbGVnYWN5IG1vZGVzIGlmIHRoZXJlJ3MgYSBwcm9ibGVtLCBvciBhcmUgd2UgY2F1c2luZyB1bmV4cGVjdGVkIGRpc2Nvbm5lY3RzPyBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVmZmVyIG92ZXJmbG93cyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gdGhlIGRhdGEgbWFuaXB1bGF0aW9uLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiwgdGhlbiB0aGUgY2FsbCBzaXRlcywgdGhlbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGZpZ3VyaW5nIG91dCBwZXJmb3JtYW5jZSBwcm9ibGVtcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBjZXJ0YWluIEFQcy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gc2VlIGlmIGFueSBidWdzIGhhdmUgYmVlbiBmaXhlZCBpbiByZWNlbnQgZHJpdmVyIHJlbGVhc2VzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjIzLjQzNTA0NTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTk5MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU5Mi1cXHRcXHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTEzOC1cXHRcXHRcXHRcXHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XFx0XFx0XFx0XFx0ICogaW4gbXdpZmlleF9zZXRfc3RhX2h0X2NhcCgpIHJlYWRzIHBhc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVxcdFxcdFxcdFxcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcXHRcXHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNzAtXFx0XFx0XFx0XFx0ICAgICAgIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMtNzE0LVxcdFxcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjIzLjY1NzA0OTUxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNjk0NTM3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCU1MgRGVzY3JpcHRpb24gYW5kIEhUIENhcGFiaWxpdHkgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIHNlZSB0aGF0IGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEFuZCBgbXdpZmlleF9maWxsX25ld19ic3NfZGVzY2AsIGFjY29yZGluZyB0byBteSBub3Rlcywgc2VlbXMgdG8gb3JpZ2luYXRlIGZyb20gYG13aWZpZXhfc2V0X2dlbl9pZV9oZWxwZXJgIGluIGBzdGFfaW9jdGwuY2AsIGFuZCBsaWtlbHkgb3RoZXIgcGxhY2VzIHRvby5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc28gaXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBjYWxsIGhpZXJhcmNoeTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbXdpZmlleF9maWxsX25ld19ic3NfZGVzY2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gS25vd2luZyB0aGUgY2FsbCBjb250ZXh0IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjozMi4wMjY1MDYwMjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzAxOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1MzY9aW50IG13aWZpZXhfZ2V0X2Jzc19pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1MzctXFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4X2Jzc19pbmZvICopO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTUzODppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTUzOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2NTU9c3RhdGljIGludCBtd2lmaWV4X3NhdmVfaGlkZGVuX3NzaWRfY2hhbm5lbHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTY2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2Njc6XFx0cmV0ID0gbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhwcml2LCBic3MsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2NjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTY5MS1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2OTI6XFx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2OTk9c3RhdGljIGludCBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MTA6XFx0cmV0ID0gbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhwcml2LCBic3MsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTczMC1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MzE6XFx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzItXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9ODg9aW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xNDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE0MTppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xNDItXFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMzMj1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzUxOlxcdFxcdHJldCA9IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MocHJpdiwgYnNzLCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQ0Ni1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDQ3OlxcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQ0OC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTI6MzIuMDkwODE4MDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MTI4ODE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgdGhlIE1XSUZJRVggVVNCIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBgbXdpZmlleGAuIFNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBtYWM4MDIxMS9jZmc4MDIxMSBzdGFjayBmb3Igb3BlcmF0aW9ucyBsaWtlIHNjYW5uaW5nIGFuZCBjb25uZWN0aW5nLCB0aGUgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGBtd2lmaWV4YCBpcyBhIGZ1bGxtYWMgZHJpdmVyLCB3aGljaCBtZWFucyBpdCByZWdpc3RlcnMgd2l0aCBjZmc4MDIxMS4gU28sIGNhbiBJIGxldmVyYWdlIGBtYWM4MDIxMV9od3NpbWAgdG8gZ2V0IGF0IGl0PyBObywgYmVjYXVzZSBgbWFjODAyMTFfaHdzaW1gIGlzIHNwZWNpZmljYWxseSBmb3IgbWFjODAyMTEgZHJpdmVycy4gUmlnaHQsIG9mIGNvdXJzZS5cblxuQWgsIGJ1dCBgbXdpZmlleGAgaXMgYSBVU0IgZHJpdmVyISBUaGF0J3MgdGhlIGtleS4gSWYgaXQncyBVU0IsIHRoZW4gaXQncyBmdXp6YWJsZSB2aWEgVVNCIGVtdWxhdGlvbiwgbGlrZSB3aXRoIGBkdW1teV9oY2RgLiBTeXprYWxsZXIncyBnb3QgdGhhdCBVU0IgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gUGVyZmVjdCEgVGhhdCBjb25maXJtcyBpdC4gVGhlIGBtd2lmaWV4YCBVU0IgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cblxuTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzI4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjQxLjUwMzcwMjczN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NjUyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnPTI1PWNvbmZpZyBNV0lGSUVYX1BDSUVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTI6NDEuNTU5MTg4NTI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjk1NzA0MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYE1XSUZJRVhfVVNCYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBNV0lGSUVYX1VTQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhpcyB0aGluZyByZWxpYW50IG9uP1wiLiBJIG5lZWQgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJcyBpdCBhIHNlbGYtY29udGFpbmVkIHVuaXQsIG9yIGRvZXMgaXQgbGVhbiBoZWF2aWx5IG9uIG90aGVyIGNvcmUgY29tcG9uZW50cywgaGFyZHdhcmUgaW50ZXJmYWNlcywgb3Igc3BlY2lmaWMga2VybmVsIG1vZHVsZXM/IEknbSB0aGlua2luZywgYXJlIHdlIHRhbGtpbmcgYWJvdXQganVzdCBzdGFuZGFyZCBVU0IgZHJpdmVyIGZyYW1ld29yayBkZXBlbmRlbmNpZXMsIG9yIGFyZSB0aGVyZSBjdXN0b20gaG9va3MsIG9yIHNwZWNpYWxpemVkIGNvbW11bmljYXRpb24gcHJvdG9jb2xzIHRvIGNvbnNpZGVyP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLCB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaW4gYSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciByZXNvdXJjZSBjb25mbGljdHMsIGludGVycnVwdHMsIG9yIG1lbW9yeSByZWdpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgY3Jvc3MtZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIGZ1bmN0aW9uIGNvbXBsZXRlbHk/XG5XaGF0IGhhcHBlbnMgaWYgb25lIG9mIHRoZW0gZmFpbHMgLSBob3cgbXVjaCBvZiB0aGUgd2hvbGUgc3lzdGVtIGRvZXMgaXQgdGFrZSBkb3duP1xuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMuIERvZXMgaXQgc2hhcmUgcmVzb3VyY2VzIHdpdGggb3RoZXIgVVNCIGRldmljZXM/IElzIHRoZXJlIGFueSBpbnRlci1tb2R1bGUgY29tbXVuaWNhdGlvbiB0aGF0IEkgbmVlZCB0byBhbmFseXplPyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCBvciBqdXN0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbG9va2luZyBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzIHRoYXQgY2FuIHNob3cgbWUgaXRzIGNvbm5lY3Rpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjU0Ljg1NDg5NjkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNzpcXHRjb25maWcgTVdJRklFWF9VU0JcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDQwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcXG4gIDQzOlxcdFxcdCAgODc5Ny84OTk3IGNoaXBzZXQgd2l0aCBVU0IgaW50ZXJmYWNlLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICA0NjpcXHRcXHQgIG13aWZpZXhfdXNiLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjo1NC44NTQ5NzI3MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyOTY1OTUzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYE1XSUZJRVhgIGFuZCBgVVNCYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTVdJRklFWGAuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugd2lsbCBiZSBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGF0IGl0IHJlbGllcyBvbiBhbmQgaWYgYW55dGhpbmcgdGhlcmUgaXMgZ29pbmcgdG8gYmUgcHJvYmxlbWF0aWMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MDguMTUxNTcxMTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVdJRklFWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAgNzpcXHRcXHQgIDgwMi4xMW4vYWMgY2hpcHNldHMuXFxuICAgODpcXHRcXG4gICA5OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDEwOlxcdFxcdCAgbXdpZmlleC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MDguMTUxNjQzNTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTYzMzgzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbXdpZmlleGAgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyBkZWFsaW5nIHdpdGggYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUgYG13aWZpZXhgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGl0IGhhbmRsZXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaW4gODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzLiBUaGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIGhlcmUgYXJlIGNsZWFybHkgYENGRzgwMjExYCwgYE1XSUZJRVhgLCBgTVdJRklFWF9VU0JgLCBhbmQgb2YgY291cnNlLCBgVVNCYCBpdHNlbGYuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBVU0ItYmFzZWQgd2lyZWxlc3MgZHJpdmVyLCBzbyB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgZ29pbmcgdG8gYmUgdGhyb3VnaCBjcmFmdGVkIFVTQiBVUkJzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIElFcyBhcmUgYmVpbmcgcGFyc2VkLiAgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGlzIGRlYWxpbmcgd2l0aCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIElFcywgd2hpbGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGhhbmRsZXMgYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMuICBUaGUgb2J2aW91cyBhdHRhY2sgdmVjdG9yIGlzIGEgZnV6emVyLiAgVGhhdCBmdXp6ZXIgY291bGQgYmUgbWltaWNraW5nIGVpdGhlciBhbiBBY2Nlc3MgUG9pbnQgKEFQKSBvciBhIFN0YXRpb24gKFNUQSkgYW5kIGluamVjdGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMgb3IsIG1vcmUgc3VidGx5LCBjcmFmdGluZyB0aGUgVVNCIHJlc3BvbnNlcyBkaXJlY3RseS4gU2luY2UgYG13aWZpZXhgIGlzIGEgVVNCIGRyaXZlciwgdGhlIGZ1enplciBlbXVsYXRpbmcgdGhlIFVTQiBkZXZpY2UgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZmxhdywgc28gSSdsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG9uIGBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjYCBhbmQgYG13aWZpZXhfcHJvY2Vzc191YXBfZXZlbnRgLCBhcyB0aGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzaW5nIG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFzIGl0IGlzIGEgY29tbW9uIGluZGljYXRvciBvZiBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXNhc3NlbWJseSBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjIxLjExNTAzMDY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NTc0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTM4PWludCBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MTppbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTExMj1td2lmaWV4X3JldF84MDJfMTFfc2Nhbl9nZXRfdGx2X3B0cnMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTE4MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjExODI6aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MjEuMzgxNjE3MDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzc2NjcwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlIG9mIFdpRmkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGl0LiBJdCdzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoaXMgc2V0dXAgaXMgZGVmaW5pdGVseSBkeW5hbWljLCBjaGFuZ2luZy4gSSdtIG5vdCBkZWFsaW5nIHdpdGggYSBmaXhlZCBzdGF0ZSBoZXJlLiBUaGF0J3MgdGhlIGtleSB0YWtlYXdheSByaWdodCBub3cuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4gYW5kIGNvbmZpcm0gd2hlcmUgd2Ugc3RhbmQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGZ1bmN0aW9uIGFuZCBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgc3RhdGUuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzozNC4xNTgyOTA5MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTM2NzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU5Mi1cXHRcXHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTEzOC1cXHRcXHRcXHRcXHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XFx0XFx0XFx0XFx0ICogaW4gbXdpZmlleF9zZXRfc3RhX2h0X2NhcCgpIHJlYWRzIHBhc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVxcdFxcdFxcdFxcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcXHRcXHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNzAtXFx0XFx0XFx0XFx0ICAgICAgIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMtNzE0LVxcdFxcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjM0LjM2OTY2MzE4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgwNDUwNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTVdJRklFWCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYSBzdGF0aWMgZml4OyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSdtIGxvb2tpbmcgZm9yIHRvIGZ1enouIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYm91bmRzIGNoZWNraW5nIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyB3aXRoaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLiBUaGlzIGlzIGdvb2Q7IGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IEknbGwgbmVlZCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXMgdGhlIGNvcmUuIEkgY2FuIGFsc28gaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIHRoZW0sIGFuZCBpdCB3b24ndCBodXJ0IHRvIGhhdmUgdGhlbSBleHBsaWNpdGx5IHNldC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYE1XSUZJRVhfVVNCYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEFoLCByaWdodCwgaXQgZGVwZW5kcyBvbiBib3RoIGBNV0lGSUVYYCBhbmQgYFVTQmAsIGFuZCBgTVdJRklFWGAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLiBPa2F5LCBzbyBgTVdJRklFWGAsIGBNV0lGSUVYX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYCBpdCBpcy4gVGhhdCdzIHN1ZmZpY2llbnQgdG8gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGEgZnVuY3Rpb25hbCB2dWxuZXJhYmlsaXR5IHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIHRocm91Z2ggYSBVU0IgZGV2aWNlLiBUaGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYENGRzgwMjExYCwgYW5kIGBVU0JgLlxuXG5XYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IGBNV0lGSUVYX1NESU9gIGFuZCBgTVdJRklFWF9QQ0lFYD8gQ291bGQgc3l6a2FsbGVyIGhhbmRsZSBmdXp6aW5nIHRob3NlPyBXaGlsZSBzeXprYWxsZXIgaGFzIHNvbWUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBVU0IgaXMgZGVmaW5pdGVseSBtdWNoIGJldHRlciBzdXBwb3J0ZWQsIGVzcGVjaWFsbHkgd2l0aCBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgLiBTbyBzdGlja2luZyB3aXRoIGBNV0lGSUVYX1VTQmAgaXMgdGhlIGJlc3QgYmV0LiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyOSwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6NDcuMTc0MTczMTYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3OTI1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZVwiLFxuICAgIFwibXdpZmlleF9zZXRfc3RhX2h0X2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVcIixcbiAgICBcIm13aWZpZXhfc2V0X3N0YV9odF9jYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjQ3LjI2Mzk3NTQ2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NjE3NDM0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzo0Ny4yNjQ3MDIzODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU3NjEwMTAyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbGVuZ3RoIGNoZWNrcyBmb3IgdmFyaW91cyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBwYXJzZWQgZnJvbSBtYW5hZ2VtZW50IGZyYW1lcyBvciBmaXJtd2FyZSBldmVudHMgaW4gdGhlIG13aWZpZXggZHJpdmVyLiBXaXRob3V0IHRoZXNlIGNoZWNrcywgdGhlIGRyaXZlciBtYXkgY2FzdCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgKGUuZy4sIGBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcGApIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBsZW5ndGggb3IgdGhlIHJlbWFpbmluZyBidWZmZXIgbGVuZ3RoLlxcblxcbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxcblxcbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOlxuK1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9odF9vcGVyID1cbiBcdFx0XHRcdChzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25fdmh0X2NhcCkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfY2FwID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbkBAIC0xNDA5LDYgKzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjpcbitcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfb3BlcikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbiBcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDE3LDYgKzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDpcbitcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2Vic3NfY29fMjA0MF9vZmZzZXQgPVxuIFx0XHRcdFx0KHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHQodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOlxuK1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlX29mZnNldCA9XG4gXHRcdFx0XHRcdCh1MTYpKCh1OCAqKWJzc19lbnRyeS1cdTAwM2VvcGVyX21vZGUgLVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXG5pbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuQEAgLTcyMSw3ICs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG4gXG4gXHRodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLFxuIFx0XHRcdFx0XHQgICAgIGllc19sZW4pO1xuLVx0aWYgKGh0X2NhcF9pZSkge1xuK1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XG4gXHRcdG5vZGUtXHUwMDNlaXNfMTFuX2VuYWJsZWQgPSAxO1xuIFx0XHRub2RlLVx1MDAzZW1heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC1cdTAwM2VjYXBfaW5mbykgXHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzo0Ny4yNjQ3MDM4MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NjA5NzU5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIG13aWZpZXggRHJpdmVyIFBhdGNoIGZvciBJbmZvcm1hdGlvbiBFbGVtZW50IExlbmd0aCBDaGVja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYG13aWZpZXhgIGRyaXZlci4gSXQncyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyB0byB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzLCBvciBJRXMsIGR1cmluZyB0aGUgcGFyc2luZyBvZiByZWNlaXZlZCBtYW5hZ2VtZW50IGZyYW1lcyBvciBmaXJtd2FyZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIGlzc3Vlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoZWNraW5nIGlmIHRoZSByZXBvcnRlZCBsZW5ndGggb2YgYW4gSUUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGlzIGNhc3RpbmcgdGhlIElFIGRhdGEgdG8uIEZvciBpbnN0YW5jZSwgaWYgYW4gSFQgQ2FwYWJpbGl0eSBJRSBpcyByZWNlaXZlZCwgdGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBgZWxlbWVudF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgYGllZWU4MDIxMV9odF9jYXBgIHN0cnVjdHVyZS4gSWYgbm90LCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGUgY29uY2VybiBpcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGRyaXZlciBtaWdodCB0cnkgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gdGhlIHN0cnVjdHVyZSB0aGF0IGxpZSAqYmV5b25kKiB0aGUgYWN0dWFsIGRhdGEgcHJvdmlkZWQgaW4gdGhlIElFLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gIElmIHRoZSByZWNlaXZlZCBJRSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgc2l6ZSwgd2hhdCdzIGxpa2VseSB0byBoYXBwZW4/IFRoZSBjb2RlIHdvdWxkIGNhc3QgdGhlIGRhdGEgcG9pbnRlciBhcyByZXF1ZXN0ZWQgYnV0IG1pZ2h0IHRyeSB0byByZWFkIGZpZWxkcyAqYmV5b25kKiB0aGUgZW5kIG9mIHRoZSByZWNlaXZlZCBJRS5cblxuV2hhdCBraW5kIG9mIG1lbW9yeSBzYWZldHkgaXNzdWUgYXJlIHdlIGxvb2tpbmcgYXQ/IFRoZSBwYXRjaCBub3RlcyB0aGlzIG1pZ2h0IGJlIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZC4gS0FTQU4gaXMgdGhlIHRvb2wgb2YgY2hvaWNlIHRvIGNhdGNoIHRoYXQsIGFuZCBpdCdzIGRldGVjdGluZyBPT0IgcmVhZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgaXQncyBub3QgYSAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCosIHdoZXJlIEtNU0FOIHdvdWxkIGJlIGFwcGxpY2FibGUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzb3VyY2UuIFRoZXNlIElFcyBhcmUgY29taW5nIGZyb20gbmV0d29yayBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzOyB0eXBpY2FsbHkgdGhpcyBkYXRhIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBidWZmZXIg4oCTIHRoZSBgaWVzYCBvciBgYmVhY29uX2J1ZmAuIElmIHRoZSByZXBvcnRlZCBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlLCB0aGVuIHRoZSBwcm9ncmFtIGlzIHJlYWRpbmcgcGFzdCBgZWxlbWVudF9sZW5gIGFuZCB3ZSBoYXZlIE9PQiByZWFkaW5nLlxuXG5JZiB3ZSdyZSBpbiB0aGUgKm1pZGRsZSogb2YgYSBidWZmZXIgZmlsbGVkIHdpdGggbXVsdGlwbGUgSUVzLCBpdCB3aWxsIHJlYWQgaW50byB0aGUgbmV4dCBJRSdzIGRhdGEuIFRoYXQgaXMgZ29pbmcgdG8gY2F1c2UgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiAqdW5pbml0aWFsaXplZCogcmVhZCB1bmxlc3MgdGhlIGBpZXNgIGJ1ZmZlciBpdHNlbGYgaGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChoaWdobHkgdW5saWtlbHkpLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTXkgbmV4dCB0aG91Z2h0OiBpZiB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYW5kIHRoZW4gdGhlIHJlY2VpdmVkIGRhdGEgaXMgKnNtYWxsZXIqIHRoYW4gd2hhdCB3YXMgYWxsb2NhdGVkLCB0aGVuIHdlIGNvdWxkIGJlIHJlYWRpbmcgaW50byB0aGUgdW5pbml0aWFsaXplZCBwYXJ0IG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJbiB0aGlzIGNhc2UsIEtNU0FOIGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQuXG5cbkknbSB1c3VhbGx5IGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRhdGEgaW4gYHNrX2J1ZmZgcywgd2hpY2ggZXhwbGljaXRseSBrbm93IHRoZWlyIGRhdGEgbGVuZ3RoLiBJZiB5b3UgcmVhZCBwYXN0IHRoZSBgc2tiLVx1MDAzZWxlbmAsIHRoYXQgaXMgYW4gT09CIHJlYWQsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHNpbmNlIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi5cblxuU28sIEkgcmUtZm9jdXMuIFRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gc3RvcCByZWFkaW5nIHBhc3QgYGVsZW1lbnRfbGVuYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBlbGVtZW50X2xlbmAsIHdoaWNoIGNvbWVzIGZyb20gdGhlIElFIGhlYWRlciBpdHNlbGYuIFRoZSBjaGVjayBlbmZvcmNlcyB0aGF0IHRoZSBgZWxlbWVudF9sZW5gIG11c3QgYmUgc3VmZmljaWVudCB0byBob2xkIHRoZSBzdHJ1Y3R1cmUuICBJZiBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIsIGFuZCBvdGhlciBJRXMgZm9sbG93LCB0aGVuIHdlIG1pZ2h0IG9ubHkgcmVhZCBpbnRvIHRoZSBuZXh0IElFLCB3aGljaCBpcyB3cm9uZyBkYXRhLCBub3QgdW5pbml0aWFsaXplZC5cblxuSWYgaXQncyB0aGUgKmxhc3QqIElFIGFuZCB3ZSByZWFkIHBhc3QgYGVsZW1lbnRfbGVuYCwgdGhhdCdzIHJlYWRpbmcgcGFzdCB0aGUgKmVuZCBvZiB0aGUgYnVmZmVyKiwgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB0aGF0J3MgS0FTQU4gdGVycml0b3J5LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogVGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyBjYXVzZWQgYnkgcGFyc2luZyBpbmNvcnJlY3RseSBzaXplZCBJRXMuIFRoZSBkYXRhIG1heSBjb250YWluIGp1bmsgYnV0IGlzIG1vc3QgbGlrZWx5IG5vdCBhbiAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCogYW5kIEtNU0FOIGlzbid0IGxpa2VseSBuZWVkZWQuXG5cbkRvdWJsZS1jaGVja2luZyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWA6ICBoZXJlIGl0J3MgY2hlY2tpbmcgYHRvdGFsX2llX2xlbmAsIHdoaWNoIGlzIHRoZSAqcmVtYWluaW5nKiBidWZmZXIgc2l6ZS4gSWYgdGhpcyBgdG90YWxfaWVfbGVuYCBpcyBsZXNzIHRoYW4gd2hhdCdzIG5lZWRlZCBmb3IgdGhlIHN0cnVjdCwgdGhlbiBpdCB3aWxsIHJlc3VsdCBpbiBhbiBPT0IsIGFuZCBLQVNBTiBzaG91bGQgY2F0Y2ggaXQuXG5cbioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuKipcblxuTXkgcmF0aW9uYWxlIGZvciB0aGUgZmluYWwgd3JpdGUtdXAgd2lsbCBiZSB0byBlbXBoYXNpemUgdGhhdCB0aGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgcG90ZW50aWFsIE9PQiByZWFkcy4gSXQgc3RvcHMgdGhlIGNvZGUgZnJvbSBjYXN0aW5nIGEgcG9pbnRlciB0byBhbiBJRSBzdHJ1Y3R1cmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBvciByZW1haW5pbmcgYnVmZmVyIHNpemUuIFJlYWRpbmcgcGFzdCB0aGUgSUUgZGF0YSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGZvciBkZXRlY3RpbmcgdGhlc2UgT09CIGlzc3Vlcy4gTm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNiwiT3V0cHV0VG9rZW5zIjoyMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTQ6MjMuMDI1Njg0NjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cXG5cXG5JZiB0aGUgSUUgaXMgZm9sbG93ZWQgYnkgb3RoZXIgSUVzLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiByZWFkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYWRqYWNlbnQgSUVzICh3aGljaCBpcyBhIGxvZ2ljIGJ1ZywgYnV0IG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkKS4gSWYgdGhlIElFIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXFxuXFxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyByZWFkcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIGludm9sdmVzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb25zIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 14:34:02 +0000 UTC FinishedAt: 2026-08-14 15:14:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB", "CFG80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MWIFIEX", "MWIFIEX_USB", "CFG80211", "USB" ], "series_id": "4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mwifiex_update_bss_desc_with_ie", "mwifiex_set_sta_ht_cap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3NldF9zdGFfaHRfY2FwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXG5cbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFjNDI1YjkwYjYwMmQyMzNhYzYxNjRjZjQyOWVlYzlmYWJiYjc5MWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAxNToxMTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgJiM0MzsxMzg0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOlxuJiM0MztcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl9odF9jYXApKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciAmIzQzO1xuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XG5AQCAtMTM5Miw2ICYjNDM7MTM5NCw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfb3BlciA9XG4gXHRcdFx0XHQoc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKikoY3VycmVudF9wdHIgJiM0MztcbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xuQEAgLTE0MDAsNiAmIzQzOzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX3ZodF9jYXApKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2VkaXNhYmxlXzExYWMgPSBmYWxzZTtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9jYXAgPVxuIFx0XHRcdFx0KHZvaWQgKikoY3VycmVudF9wdHIgJiM0MztcbkBAIC0xNDA5LDYgJiM0MzsxNDE1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdFx0ICAgICAgYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046XG4mIzQzO1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7XG4gXHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XG5AQCAtMTQxNyw2ICYjNDM7MTQyNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHRcdCAgICAgIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9CU1NfQ09FWF8yMDQwOlxuJiM0MztcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25fYnNzX2NvXzIwNDAgPSBjdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYnNzX2NvXzIwNDBfb2Zmc2V0ID1cbiBcdFx0XHRcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbkBAIC0xNDI3LDYgJiM0MzsxNDM3LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cdTAwM2ViZWFjb25fYnVmKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBXTEFOX0VJRF9PUE1PREVfTk9USUY6XG4mIzQzO1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSA9ICh2b2lkICopY3VycmVudF9wdHI7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZV9vZmZzZXQgPVxuIFx0XHRcdFx0XHQodTE2KSgodTggKilic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlIC1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuaW5kZXggN2QzNjMxZDIxMjIzNi4uODQ0MjIzYzA0ZTJlZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmNcbkBAIC03MjEsNyAmIzQzOzcyMSw3IEBAIG13aWZpZXhfc2V0X3N0YV9odF9jYXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKmllcyxcbiBcbiBcdGh0X2NhcF9pZSA9ICh2b2lkICopY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9IVF9DQVBBQklMSVRZLCBpZXMsXG4gXHRcdFx0XHRcdCAgICAgaWVzX2xlbik7XG4tXHRpZiAoaHRfY2FwX2llKSB7XG4mIzQzO1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICYjNDM7IDEpO1xuIFx0XHRub2RlLVx1MDAzZWlzXzExbl9lbmFibGVkID0gMTtcbiBcdFx0bm9kZS1cdTAwM2VtYXhfYW1zZHUgPSBsZTE2X3RvX2NwdShodF9jYXAtXHUwMDNlY2FwX2luZm8pIFx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYwppbmRleCA5N2MwZWMzYjgyMmU3Li44MDU3Mjk4OWJjODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKQEAgLTEzODQsNiAmIzQzOzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkJCWJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25faHRfY2FwKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKikKIAkJCQkJKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTEzOTIsNiAmIzQzOzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25faHRfb3BlcikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25faHRfb3BlciA9CiAJCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICopKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCXNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTE0MDAsNiAmIzQzOzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6CiYjNDM7CQkJaWYgKGVsZW1lbnRfbGVuICZsdDsgc2l6ZW9mKCpic3NfZW50cnktJmd0O2Jjbl92aHRfY2FwKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Rpc2FibGVfMTFhYyA9IGZhbHNlOwogCQkJYnNzX2VudHJ5LSZndDtiY25fdmh0X2NhcCA9CiAJCQkJKHZvaWQgKikoY3VycmVudF9wdHIgJiM0MzsKQEAgLTE0MDksNiAmIzQzOzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgICBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjoKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX3ZodF9vcGVyKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl92aHRfb3BlciA9CiAJCQkJKHZvaWQgKikoY3VycmVudF9wdHIgJiM0MzsKIAkJCQkJIHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTsKQEAgLTE0MTcsNiAmIzQzOzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgICBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDoKJiM0MzsJCQlpZiAoIWVsZW1lbnRfbGVuKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX2Jzc19jb18yMDQwID0gY3VycmVudF9wdHI7CiAJCQlic3NfZW50cnktJmd0O2Jzc19jb18yMDQwX29mZnNldCA9CiAJCQkJKHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKQEAgLTE0MjcsNiAmIzQzOzE0MzcsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLAogCQkJCSh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0VJRF9PUE1PREVfTk9USUY6CiYjNDM7CQkJaWYgKHRvdGFsX2llX2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtvcGVyX21vZGUpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjsKIAkJCWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlX29mZnNldCA9CiAJCQkJCSh1MTYpKCh1OCAqKWJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jCmluZGV4IDdkMzYzMWQyMTIyMzYuLjg0NDIyM2MwNGUyZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYwpAQCAtNzIxLDcgJiM0Mzs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsCiAKIAlodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLAogCQkJCQkgICAgIGllc19sZW4pOwotCWlmIChodF9jYXBfaWUpIHsKJiM0MzsJaWYgKGh0X2NhcF9pZSAmYW1wOyZhbXA7IGh0X2NhcF9pZS0mZ3Q7bGVuICZndDs9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHsKIAkJaHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICYjNDM7IDEpOwogCQlub2RlLSZndDtpc18xMW5fZW5hYmxlZCA9IDE7CiAJCW5vZGUtJmd0O21heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC0mZ3Q7Y2FwX2luZm8pICZhbXA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgV2lGaSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBJRXMgKEluZm9ybWF0aW9uIEVsZW1lbnRzKSBhcmUgcGFyc2VkLiBUaGV5JiMzOTtyZSB0YXJnZXRpbmcgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZSDigJMgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBoYW5kbGluZyBtYWxmb3JtZWQgb3IgdW5leHBlY3RlZCBJRSBkYXRhLiBJdCYjMzk7cyB0aGUga2luZCBvZiB0aGluZyB0aGF0IGNhbiBsZWFkIHRvIHJlbW90ZSBjb2RlIGV4ZWN1dGlvbiwgc28gaXQmIzM5O3MgZ29vZCB0aGV5JiMzOTtyZSBiZWluZyBwcm9hY3RpdmUuCgpOb3csIG15IG5leHQgdGhvdWdodCBpcyBhYm91dCBob3cgZWFzeSBpdCYjMzk7bGwgYmUgdG8gdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgc29tZSBvYnNjdXJlIGhhcmR3YXJlLiBMZXQmIzM5O3Mgc2VlLi4uIGBtd2lmaWV4YCBpcyB0aGUgTWFydmVsbCBXaUZpLUV4IERyaXZlci4gVGhlIGJpZyBxdWVzdGlvbiBpcywgY2FuIEkgcmVhY2ggdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IG9yIHdpbGwgSSBuZWVkIGEgcGh5c2ljYWwgZGV2aWNlPyBHaXZlbiB0aGF0IGl0JiMzOTtzIHVzdWFsbHkgdGllZCB0byBQQ0llLCBTRElPLCBvciBVU0IgaW50ZXJmYWNlcywgdGhhdCBtZWFucyB0ZXN0aW5nIGdldHMgdHJpY2t5LiBXYWl0IGEgc2Vjb25kLCB0aGUgZmFjdCB0aGF0IGl0IHN1cHBvcnRzIFVTQiBpcyByZWFsbHkgaW50ZXJlc3RpbmcuIElmIGl0JiMzOTtzIGEgVVNCIGRyaXZlciwgSSBzaG91bGQgYmUgYWJsZSB0byBwb3RlbnRpYWxseSBmdXp6IGl0IHVzaW5nIFVTQiBnYWRnZXQgbW9kZSwgb3IgZXZlbiBhIGR1bW15IEhDRC4gVGhhdCBvcGVucyB1cCBhIG11Y2ggc2ltcGxlciB0ZXN0aW5nIHBhdGguIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGludGVyZmFjZXMgaXQgc3VwcG9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1XSUZJRVgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjEyOmNvbmZpZyBNV0lGSUVYX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEzLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgU0Q4Nzg2L1NEODc4Ny9TRDg3OTcvU0Q4ODg3L1NEODg5Ny9TRDg5NzcvU0Q4OTc4L1NEODk4Ny9TRDg5OTdcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjI1OmNvbmZpZyBNV0lGSUVYX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBXaUZpLUV4IERyaXZlciBmb3IgUENJRSA4NzY2Lzg4OTcvODk5N1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE1XSUZJRVhfVVNCIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgZmFjdCB0aGF0IGBNV0lGSUVYX1VTQmAgaXMgc3VwcG9ydGVkIHJlYWxseSBvcGVucyB0aGUgZG9vciBmb3IgZWZmZWN0aXZlIGZ1enppbmcgdGhyb3VnaCBVU0IgZW11bGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIHNwZWNpZmljYWxseSBvZiB0b29scyBsaWtlIGBkdW1teV9oY2RgIG9yIGxldmVyYWdpbmcgc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCYjMzk7cyB0aGUgcm91dGUgSSYjMzk7bGwgd2FudCB0byBleHBsb3JlLgoKTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsIHNpdGVzIGZvciBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgY3JhZnRpbmcgcmVsZXZhbnQgZnV6emluZyBwYXlsb2Fkcy4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mzg9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQxOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTExMTI9bXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xMTgxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxMTgyOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0xNDE9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMTkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE5MjpcdHJldHVybiBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHByaXYtXHUwMDNlYWRhcHRlciwgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE5My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBmdW5jdGlvbiwgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgc3RhdGlvbiAoU1RBKSBIVCBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQsIHByb2JhYmx5IGR1cmluZyBhc3NvY2lhdGlvbiBvciByZS1hc3NvY2lhdGlvbiB3aXRoIGFuIEFQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIE1hcnZlbGwgV2lGaSBkcml2ZXIgc3BlY2lmaWNzLi4uIEkgcmVjYWxsIHRoaXMgYmVpbmcgYSBjcml0aWNhbCBmdW5jdGlvbiwgYXMgaXQgZGlyZWN0bHkgaW1wYWN0cyB0aHJvdWdocHV0IGFuZCBvdmVyYWxsIHBlcmZvcm1hbmNlIGJ5IG5lZ290aWF0aW5nIEhUL1ZIVCBwYXJhbWV0ZXJzLiBMZXQgbWUgbWFrZSBzdXJlIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNhcGFiYWlsaXRlcyBwcm9wZXJseSwgYmVjYXVzZSBpbXByb3BlciBIVCBjYXBhYmlsaXRpZXMgYmVpbmcgc2V0IHdvdWxkIGNhdXNlIGNvbXBhdGliaWxpdHkgaXNzdWVzIGFuZCBkZWNyZWFzZWQgcGVyZm9ybWFuY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkIGJhc2VkIG9uIHdoYXQgdGhlIEFQIGFkdmVydGlzZXMgYW5kIHdoYXQgdGhlIFNUQSBpcyBjYXBhYmxlIG9mLiBJIGFsc28gbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmc7IGFyZSB3ZSBncmFjZWZ1bGx5IGRlZ3JhZGluZyB0byBsZWdhY3kgbW9kZXMgaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtLCBvciBhcmUgd2UgY2F1c2luZyB1bmV4cGVjdGVkIGRpc2Nvbm5lY3RzPyBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVmZmVyIG92ZXJmbG93cyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gdGhlIGRhdGEgbWFuaXB1bGF0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiwgdGhlbiB0aGUgY2FsbCBzaXRlcywgdGhlbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGZpZ3VyaW5nIG91dCBwZXJmb3JtYW5jZSBwcm9ibGVtcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBjZXJ0YWluIEFQcy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gc2VlIGlmIGFueSBidWdzIGhhdmUgYmVlbiBmaXhlZCBpbiByZWNlbnQgZHJpdmVyIHJlbGVhc2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU5MTptd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1OTItXHRcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xMzgtXHRcdFx0XHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjEzOTpcdFx0XHRcdCAqIGluIG13aWZpZXhfc2V0X3N0YV9odF9jYXAoKSByZWFkcyBwYXN0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVx0XHRcdFx0ICogZXZlbnRfYm9keSBhbmQgb3V0IG9mIHRoZSBhZGFwdGVyIHNsYWIgb2JqZWN0LlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmM6MTY5Olx0XHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVx1MDAzZWFzc29jX3JlcV9pZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTcwLVx0XHRcdFx0ICAgICAgIHNpbmZvLVx1MDAzZWFzc29jX3JlcV9pZXNfbGVuLCBub2RlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jOjcxMzptd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jLTcxNC1cdFx0ICAgICAgIGludCBpZXNfbGVuLCBzdHJ1Y3QgbXdpZmlleF9zdGFfbm9kZSAqbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODM4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlNTIERlc2NyaXB0aW9uIGFuZCBIVCBDYXBhYmlsaXR5IFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIHNlZSB0aGF0IGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbmQgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLCBhY2NvcmRpbmcgdG8gbXkgbm90ZXMsIHNlZW1zIHRvIG9yaWdpbmF0ZSBmcm9tIGBtd2lmaWV4X3NldF9nZW5faWVfaGVscGVyYCBpbiBgc3RhX2lvY3RsLmNgLCBhbmQgbGlrZWx5IG90aGVyIHBsYWNlcyB0b28uCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93LCBzbyBpdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgY2FsbCBoaWVyYXJjaHk7IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuIEtub3dpbmcgdGhlIGNhbGwgY29udGV4dCBpcyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTUzNj1pbnQgbXdpZmlleF9nZXRfYnNzX2luZm8oc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTM3LVx0XHRcdCBzdHJ1Y3QgbXdpZmlleF9ic3NfaW5mbyAqKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTUzODppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTM5LVx0XHRcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2NTU9c3RhdGljIGludCBtd2lmaWV4X3NhdmVfaGlkZGVuX3NzaWRfY2hhbm5lbHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2Njc6XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNjY4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTEtXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTY5MjpcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTMtXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2OTk9c3RhdGljIGludCBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MTA6XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xNzExLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzAtXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM6MTczMTpcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzItXHQgKi9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9ODg9aW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtMTQwLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE0MTppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE0Mi1cdFx0XHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMzMj1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0zNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzUxOlx0XHRyZXQgPSBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHByaXYsIGJzcywgYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1Mi1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmMtNDQ2LVx0LyogYmVhY29uX2llIGJ1ZmZlciB3YXMgYWxsb2NhdGVkIGluIGZ1bmN0aW9uXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDQ3Olx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy00NDgtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMyOAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBhbmQgRnV6emluZyB0aGUgTVdJRklFWCBVU0IgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgYG13aWZpZXhgLiBTaW5jZSBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3RhbmRhcmQgbWFjODAyMTEvY2ZnODAyMTEgc3RhY2sgZm9yIG9wZXJhdGlvbnMgbGlrZSBzY2FubmluZyBhbmQgY29ubmVjdGluZywgdGhlIGVudHJ5IHBvaW50cyBzaG91bGQgYmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gSSByZW1lbWJlciBgbXdpZmlleGAgaXMgYSBmdWxsbWFjIGRyaXZlciwgd2hpY2ggbWVhbnMgaXQgcmVnaXN0ZXJzIHdpdGggY2ZnODAyMTEuIFNvLCBjYW4gSSBsZXZlcmFnZSBgbWFjODAyMTFfaHdzaW1gIHRvIGdldCBhdCBpdD8gTm8sIGJlY2F1c2UgYG1hYzgwMjExX2h3c2ltYCBpcyBzcGVjaWZpY2FsbHkgZm9yIG1hYzgwMjExIGRyaXZlcnMuIFJpZ2h0LCBvZiBjb3Vyc2UuCgpBaCwgYnV0IGBtd2lmaWV4YCBpcyBhIFVTQiBkcml2ZXIhIFRoYXQmIzM5O3MgdGhlIGtleS4gSWYgaXQmIzM5O3MgVVNCLCB0aGVuIGl0JiMzOTtzIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uLCBsaWtlIHdpdGggYGR1bW15X2hjZGAuIFN5emthbGxlciYjMzk7cyBnb3QgdGhhdCBVU0IgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gUGVyZmVjdCEgVGhhdCBjb25maXJtcyBpdC4gVGhlIGBtd2lmaWV4YCBVU0IgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4KCk5vdywgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYE1XSUZJRVhgIGFuZCBgTVdJRklFWF9VU0JgIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNV0lGSUVYX1VTQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnPTI1PWNvbmZpZyBNV0lGSUVYX1BDSUVcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTUyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBNV0lGSUVYX1VTQmAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBNV0lGSUVYX1VTQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoaXMgdGhpbmcgcmVsaWFudCBvbj8mIzM0Oy4gSSBuZWVkIHRvIG1hcCBvdXQgaXRzIGRlcGVuZGVuY2llcy4gSXMgaXQgYSBzZWxmLWNvbnRhaW5lZCB1bml0LCBvciBkb2VzIGl0IGxlYW4gaGVhdmlseSBvbiBvdGhlciBjb3JlIGNvbXBvbmVudHMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzPyBJJiMzOTttIHRoaW5raW5nLCBhcmUgd2UgdGFsa2luZyBhYm91dCBqdXN0IHN0YW5kYXJkIFVTQiBkcml2ZXIgZnJhbWV3b3JrIGRlcGVuZGVuY2llcywgb3IgYXJlIHRoZXJlIGN1c3RvbSBob29rcywgb3Igc3BlY2lhbGl6ZWQgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgdG8gY29uc2lkZXI/CgpJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLCB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaW4gYSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciByZXNvdXJjZSBjb25mbGljdHMsIGludGVycnVwdHMsIG9yIG1lbW9yeSByZWdpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgY3Jvc3MtZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSYjMzk7cyBmdW5jdGlvbiBjb21wbGV0ZWx5PwpXaGF0IGhhcHBlbnMgaWYgb25lIG9mIHRoZW0gZmFpbHMgLSBob3cgbXVjaCBvZiB0aGUgd2hvbGUgc3lzdGVtIGRvZXMgaXQgdGFrZSBkb3duPwoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cy4gRG9lcyBpdCBzaGFyZSByZXNvdXJjZXMgd2l0aCBvdGhlciBVU0IgZGV2aWNlcz8gSXMgdGhlcmUgYW55IGludGVyLW1vZHVsZSBjb21tdW5pY2F0aW9uIHRoYXQgSSBuZWVkIHRvIGFuYWx5emU/IEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCBvciBqdXN0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbG9va2luZyBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzIHRoYXQgY2FuIHNob3cgbWUgaXRzIGNvbm5lY3Rpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzc6XHRjb25maWcgTVdJRklFWF9VU0JcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XCYjMzQ7XG4gIDM5Olx0XHRkZXBlbmRzIG9uIE1XSUZJRVggXHUwMDI2XHUwMDI2IFVTQlxuICA0MDpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA0MTpcdFx0aGVscFxuICA0MjpcdFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24gTWFydmVsbFxuICA0MzpcdFx0ICA4Nzk3Lzg5OTcgY2hpcHNldCB3aXRoIFVTQiBpbnRlcmZhY2UuXG4gIDQ0Olx0XG4gIDQ1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXG4gIDQ2Olx0XHQgIG13aWZpZXhfdXNiLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDg1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGVhbGluZyB3aXRoIGBNV0lGSUVYYCBhbmQgYFVTQmAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGVpciByZWxhdGlvbnNoaXAgYW5kIHBvdGVudGlhbCBpc3N1ZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE1XSUZJRVhgLiBVbmRlcnN0YW5kaW5nIHRob3NlIHdpbGwgYmUgY3J1Y2lhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hhdCBpdCByZWxpZXMgb24gYW5kIGlmIGFueXRoaW5nIHRoZXJlIGlzIGdvaW5nIHRvIGJlIHByb2JsZW1hdGljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1XSUZJRVhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgV2lGaS1FeCBEcml2ZXJcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcbiAgIDc6XHRcdCAgODAyLjExbi9hYyBjaGlwc2V0cy5cbiAgIDg6XHRcbiAgIDk6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcbiAgMTA6XHRcdCAgbXdpZmlleC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDMwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgYG13aWZpZXhgIERyaXZlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQmIzM5O3MgZGVhbGluZyB3aXRoIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBoYW5kbGVzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcy4gVGhlIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBoZXJlIGFyZSBjbGVhcmx5IGBDRkc4MDIxMWAsIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYW5kIG9mIGNvdXJzZSwgYFVTQmAgaXRzZWxmLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIFVTQi1iYXNlZCB3aXJlbGVzcyBkcml2ZXIsIHNvIHRoZSBhdHRhY2sgc3VyZmFjZSBpcyBnb2luZyB0byBiZSB0aHJvdWdoIGNyYWZ0ZWQgVVNCIFVSQnMuCgpUaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIElFcyBhcmUgYmVpbmcgcGFyc2VkLiAgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGlzIGRlYWxpbmcgd2l0aCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIElFcywgd2hpbGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGhhbmRsZXMgYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMuICBUaGUgb2J2aW91cyBhdHRhY2sgdmVjdG9yIGlzIGEgZnV6emVyLiAgVGhhdCBmdXp6ZXIgY291bGQgYmUgbWltaWNraW5nIGVpdGhlciBhbiBBY2Nlc3MgUG9pbnQgKEFQKSBvciBhIFN0YXRpb24gKFNUQSkgYW5kIGluamVjdGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMgb3IsIG1vcmUgc3VidGx5LCBjcmFmdGluZyB0aGUgVVNCIHJlc3BvbnNlcyBkaXJlY3RseS4gU2luY2UgYG13aWZpZXhgIGlzIGEgVVNCIGRyaXZlciwgdGhlIGZ1enplciBlbXVsYXRpbmcgdGhlIFVTQiBkZXZpY2UgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZsYXcsIHNvIEkmIzM5O2xsIGFsc28gYmUga2VlcGluZyBhbiBleWUgb24gYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgIGFuZCBgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudGAsIGFzIHRoZXkgbWlnaHQgYmUgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3Npbmcgb3IgcG90ZW50aWFsbHkgcmVsYXRlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFzIGl0IGlzIGEgY29tbW9uIGluZGljYXRvciBvZiBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXNhc3NlbWJseSBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1Mzg9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXHRcdFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaDoxNTQxOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDItXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTExMTI9bXdpZmlleF9yZXRfODAyXzExX3NjYW5fZ2V0X3Rsdl9wdHJzKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYy0xMTgxLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoxMTgyOmludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXHRcdFx0XHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTAyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIExhbmRzY2FwZSBvZiBXaUZpIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgaXQuIEl0JiMzOTtzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoaXMgc2V0dXAgaXMgZGVmaW5pdGVseSBkeW5hbWljLCBjaGFuZ2luZy4gSSYjMzk7bSBub3QgZGVhbGluZyB3aXRoIGEgZml4ZWQgc3RhdGUgaGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRha2Vhd2F5IHJpZ2h0IG5vdy4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluIGFuZCBjb25maXJtIHdoZXJlIHdlIHN0YW5kLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAgZnVuY3Rpb24gYW5kIGl0cyBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBzdGF0ZS4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O213aWZpZXhfc2V0X3N0YV9odF9jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg9MTU5MD12b2lkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaC0xNTkyLVx0XHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmM9OTQ9aW50IG13aWZpZXhfcHJvY2Vzc191YXBfZXZlbnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTM4LVx0XHRcdFx0ICogZXZlbnQgd2FzIGNvcGllZCBpbnRvOyBvdGhlcndpc2UgdGhlIElFIHdhbGtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XHRcdFx0XHQgKiBpbiBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKCkgcmVhZHMgcGFzdFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTE0MC1cdFx0XHRcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTY4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcdFx0bXdpZmlleF9zZXRfc3RhX2h0X2NhcChwcml2LCBzaW5mby1cdTAwM2Vhc3NvY19yZXFfaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTE3MC1cdFx0XHRcdCAgICAgICBzaW5mby1cdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYz03MTI9dm9pZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYy03MTQtXHRcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI5CgkJCQkJCQlvdXRwdXQ6IDE0MQoJCQkJCQkJdGhvdWdodHM6IDQ1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTVdJRklFWCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhIHN0YXRpYyBmaXg7IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciB0byBmdXp6LiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB3aGVuIHBhcnNpbmcgSW5mb3JtYXRpb24gRWxlbWVudHMgd2l0aGluIHRoZSBgbXdpZmlleGAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy4gVGhpcyBpcyBnb29kOyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgSSYjMzk7bGwgbmVlZCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXMgdGhlIGNvcmUuIEkgY2FuIGFsc28gaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIHRoZW0sIGFuZCBpdCB3b24mIzM5O3QgaHVydCB0byBoYXZlIHRoZW0gZXhwbGljaXRseSBzZXQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBNV0lGSUVYX1VTQmAgZG9lc24mIzM5O3QgaGF2ZSBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIHJpZ2h0LCBpdCBkZXBlbmRzIG9uIGJvdGggYE1XSUZJRVhgIGFuZCBgVVNCYCwgYW5kIGBNV0lGSUVYYCBkZXBlbmRzIG9uIGBDRkc4MDIxMWAuIE9rYXksIHNvIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYENGRzgwMjExYCwgYW5kIGBVU0JgIGl0IGlzLiBUaGF0JiMzOTtzIHN1ZmZpY2llbnQgdG8gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudC4KClNvLCB0byBzdW1tYXJpemUgc3VjY2luY3RseTogVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBmaXhlcyBhIGZ1bmN0aW9uYWwgdnVsbmVyYWJpbGl0eSB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCB0aHJvdWdoIGEgVVNCIGRldmljZS4gVGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBhbmQgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgTVdJRklFWGAsIGBNV0lGSUVYX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYC4KCldhaXQgYSBzZWNvbmQsIHdoYXQgYWJvdXQgYE1XSUZJRVhfU0RJT2AgYW5kIGBNV0lGSUVYX1BDSUVgPyBDb3VsZCBzeXprYWxsZXIgaGFuZGxlIGZ1enppbmcgdGhvc2U/IFdoaWxlIHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMsIFVTQiBpcyBkZWZpbml0ZWx5IG11Y2ggYmV0dGVyIHN1cHBvcnRlZCwgZXNwZWNpYWxseSB3aXRoIGBkdW1teV9oY2RgIGFuZCBgcmF3LWdhZGdldGAuIFNvIHN0aWNraW5nIHdpdGggYE1XSUZJRVhfVVNCYCBpcyB0aGUgYmVzdCBiZXQuIEFscmlnaHQsIHRpbWUgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNV0lGSUVYJiMzNDssCiAgICAmIzM0O01XSUZJRVhfVVNCJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O213aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUmIzM0OywKICAgICYjMzQ7bXdpZmlleF9zZXRfc3RhX2h0X2NhcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01XSUZJRVgmIzM0OywKICAgICYjMzQ7TVdJRklFWF9VU0ImIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZSYjMzQ7LAogICAgJiMzNDttd2lmaWV4X3NldF9zdGFfaHRfY2FwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAxNToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cblxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWM0MjViOTBiNjAyZDIzM2FjNjE2NGNmNDI5ZWVjOWZhYmJiNzkxZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDE1OjExOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMKaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jCkBAIC0xMzg0LDYgJiM0MzsxMzg0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJCQlic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfSFRfQ0FQQUJJTElUWToKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX2h0X2NhcCkpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopCiAJCQkJCShjdXJyZW50X3B0ciAmIzQzOwogCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xMzkyLDYgJiM0MzsxMzk0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0hUX09QRVJBVElPTjoKJiM0MzsJCQlpZiAoZWxlbWVudF9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7YmNuX2h0X29wZXIpKQomIzQzOwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX2h0X29wZXIgPQogCQkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciAmIzQzOwogCQkJCQlzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xNDAwLDYgJiM0MzsxNDA0LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX1ZIVF9DQVBBQklMSVRZOgomIzQzOwkJCWlmIChlbGVtZW50X2xlbiAmbHQ7IHNpemVvZigqYnNzX2VudHJ5LSZndDtiY25fdmh0X2NhcCkpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtkaXNhYmxlXzExYWMgPSBmYWxzZTsKIAkJCWJzc19lbnRyeS0mZ3Q7YmNuX3ZodF9jYXAgPQogCQkJCSh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7CkBAIC0xNDA5LDYgJiM0MzsxNDE1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICAgYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046CiYjNDM7CQkJaWYgKGVsZW1lbnRfbGVuICZsdDsgc2l6ZW9mKCpic3NfZW50cnktJmd0O2Jjbl92aHRfb3BlcikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnNzX2VudHJ5LSZndDtiY25fdmh0X29wZXIgPQogCQkJCSh2b2lkICopKGN1cnJlbnRfcHRyICYjNDM7CiAJCQkJCSBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7CkBAIC0xNDE3LDYgJiM0MzsxNDI1LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICAgYnNzX2VudHJ5LSZndDtiZWFjb25fYnVmKTsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRUlEX0JTU19DT0VYXzIwNDA6CiYjNDM7CQkJaWYgKCFlbGVtZW50X2xlbikKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O2Jjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyOwogCQkJYnNzX2VudHJ5LSZndDtic3NfY29fMjA0MF9vZmZzZXQgPQogCQkJCSh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS0mZ3Q7YmVhY29uX2J1Zik7CkBAIC0xNDI3LDYgJiM0MzsxNDM3LDggQEAgaW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktJmd0O2JlYWNvbl9idWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOgomIzQzOwkJCWlmICh0b3RhbF9pZV9sZW4gJmx0OyBzaXplb2YoKmJzc19lbnRyeS0mZ3Q7b3Blcl9tb2RlKSkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlic3NfZW50cnktJmd0O29wZXJfbW9kZSA9ICh2b2lkICopY3VycmVudF9wdHI7CiAJCQlic3NfZW50cnktJmd0O29wZXJfbW9kZV9vZmZzZXQgPQogCQkJCQkodTE2KSgodTggKilic3NfZW50cnktJmd0O29wZXJfbW9kZSAtCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYwppbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMKQEAgLTcyMSw3ICYjNDM7NzIxLDcgQEAgbXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLAogCiAJaHRfY2FwX2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIGllcywKIAkJCQkJICAgICBpZXNfbGVuKTsKLQlpZiAoaHRfY2FwX2llKSB7CiYjNDM7CWlmIChodF9jYXBfaWUgJmFtcDsmYW1wOyBodF9jYXBfaWUtJmd0O2xlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKSB7CiAJCWh0X2NhcCA9ICh2b2lkICopKGh0X2NhcF9pZSAmIzQzOyAxKTsKIAkJbm9kZS0mZ3Q7aXNfMTFuX2VuYWJsZWQgPSAxOwogCQlub2RlLSZndDttYXhfYW1zZHUgPSBsZTE2X3RvX2NwdShodF9jYXAtJmd0O2NhcF9pbmZvKSAmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNgoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiAxMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBtd2lmaWV4IERyaXZlciBQYXRjaCBmb3IgSW5mb3JtYXRpb24gRWxlbWVudCBMZW5ndGggQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYG13aWZpZXhgIGRyaXZlci4gSXQmIzM5O3MgYWRkaW5nIGxlbmd0aCBjaGVja3MgdG8gdmFyaW91cyBJbmZvcm1hdGlvbiBFbGVtZW50cywgb3IgSUVzLCBkdXJpbmcgdGhlIHBhcnNpbmcgb2YgcmVjZWl2ZWQgbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzLCBzcGVjaWZpY2FsbHkgaW4gYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBnb29kIHByYWN0aWNlLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgY2hlY2tpbmcgaWYgdGhlIHJlcG9ydGVkIGxlbmd0aCBvZiBhbiBJRSBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlIHRoZSBkcml2ZXIgaXMgY2FzdGluZyB0aGUgSUUgZGF0YSB0by4gRm9yIGluc3RhbmNlLCBpZiBhbiBIVCBDYXBhYmlsaXR5IElFIGlzIHJlY2VpdmVkLCB0aGUgY29kZSBjaGVja3MgaWYgdGhlIGBlbGVtZW50X2xlbmAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBgaWVlZTgwMjExX2h0X2NhcGAgc3RydWN0dXJlLiBJZiBub3QsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoZSBjb25jZXJuIGlzIHRoYXQgd2l0aG91dCB0aGlzIGNoZWNrLCB0aGUgZHJpdmVyIG1pZ2h0IHRyeSB0byBhY2Nlc3MgZmllbGRzIHdpdGhpbiB0aGUgc3RydWN0dXJlIHRoYXQgbGllICpiZXlvbmQqIHRoZSBhY3R1YWwgZGF0YSBwcm92aWRlZCBpbiB0aGUgSUUuCgpOb3csIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gIElmIHRoZSByZWNlaXZlZCBJRSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgc2l6ZSwgd2hhdCYjMzk7cyBsaWtlbHkgdG8gaGFwcGVuPyBUaGUgY29kZSB3b3VsZCBjYXN0IHRoZSBkYXRhIHBvaW50ZXIgYXMgcmVxdWVzdGVkIGJ1dCBtaWdodCB0cnkgdG8gcmVhZCBmaWVsZHMgKmJleW9uZCogdGhlIGVuZCBvZiB0aGUgcmVjZWl2ZWQgSUUuCgpXaGF0IGtpbmQgb2YgbWVtb3J5IHNhZmV0eSBpc3N1ZSBhcmUgd2UgbG9va2luZyBhdD8gVGhlIHBhdGNoIG5vdGVzIHRoaXMgbWlnaHQgYmUgYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkLiBLQVNBTiBpcyB0aGUgdG9vbCBvZiBjaG9pY2UgdG8gY2F0Y2ggdGhhdCwgYW5kIGl0JiMzOTtzIGRldGVjdGluZyBPT0IgcmVhZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgaXQmIzM5O3Mgbm90IGEgKnVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQqLCB3aGVyZSBLTVNBTiB3b3VsZCBiZSBhcHBsaWNhYmxlLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzb3VyY2UuIFRoZXNlIElFcyBhcmUgY29taW5nIGZyb20gbmV0d29yayBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzOyB0eXBpY2FsbHkgdGhpcyBkYXRhIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBidWZmZXIg4oCTIHRoZSBgaWVzYCBvciBgYmVhY29uX2J1ZmAuIElmIHRoZSByZXBvcnRlZCBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlLCB0aGVuIHRoZSBwcm9ncmFtIGlzIHJlYWRpbmcgcGFzdCBgZWxlbWVudF9sZW5gIGFuZCB3ZSBoYXZlIE9PQiByZWFkaW5nLgoKSWYgd2UmIzM5O3JlIGluIHRoZSAqbWlkZGxlKiBvZiBhIGJ1ZmZlciBmaWxsZWQgd2l0aCBtdWx0aXBsZSBJRXMsIGl0IHdpbGwgcmVhZCBpbnRvIHRoZSBuZXh0IElFJiMzOTtzIGRhdGEuIFRoYXQgaXMgZ29pbmcgdG8gY2F1c2UgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiAqdW5pbml0aWFsaXplZCogcmVhZCB1bmxlc3MgdGhlIGBpZXNgIGJ1ZmZlciBpdHNlbGYgaGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChoaWdobHkgdW5saWtlbHkpLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCk15IG5leHQgdGhvdWdodDogaWYgdGhlIGRhdGEgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgIGFuZCB0aGVuIHRoZSByZWNlaXZlZCBkYXRhIGlzICpzbWFsbGVyKiB0aGFuIHdoYXQgd2FzIGFsbG9jYXRlZCwgdGhlbiB3ZSBjb3VsZCBiZSByZWFkaW5nIGludG8gdGhlIHVuaW5pdGlhbGl6ZWQgcGFydCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gdGhpcyBjYXNlLCBLTVNBTiBjb3VsZCBwb3RlbnRpYWxseSBiZSB1c2VkLgoKSSYjMzk7bSB1c3VhbGx5IGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRhdGEgaW4gYHNrX2J1ZmZgcywgd2hpY2ggZXhwbGljaXRseSBrbm93IHRoZWlyIGRhdGEgbGVuZ3RoLiBJZiB5b3UgcmVhZCBwYXN0IHRoZSBgc2tiLSZndDtsZW5gLCB0aGF0IGlzIGFuIE9PQiByZWFkLCB3aGljaCBLQVNBTiBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCBzaW5jZSBpdCYjMzk7cyBhdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0aW9uLgoKU28sIEkgcmUtZm9jdXMuIFRoZSBwYXRjaCYjMzk7cyBnb2FsIGlzIHRvIHN0b3AgcmVhZGluZyBwYXN0IGBlbGVtZW50X2xlbmAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyBgZWxlbWVudF9sZW5gLCB3aGljaCBjb21lcyBmcm9tIHRoZSBJRSBoZWFkZXIgaXRzZWxmLiBUaGUgY2hlY2sgZW5mb3JjZXMgdGhhdCB0aGUgYGVsZW1lbnRfbGVuYCBtdXN0IGJlIHN1ZmZpY2llbnQgdG8gaG9sZCB0aGUgc3RydWN0dXJlLiAgSWYgYGVsZW1lbnRfbGVuYCBpcyBzbWFsbGVyLCBhbmQgb3RoZXIgSUVzIGZvbGxvdywgdGhlbiB3ZSBtaWdodCBvbmx5IHJlYWQgaW50byB0aGUgbmV4dCBJRSwgd2hpY2ggaXMgd3JvbmcgZGF0YSwgbm90IHVuaW5pdGlhbGl6ZWQuCgpJZiBpdCYjMzk7cyB0aGUgKmxhc3QqIElFIGFuZCB3ZSByZWFkIHBhc3QgYGVsZW1lbnRfbGVuYCwgdGhhdCYjMzk7cyByZWFkaW5nIHBhc3QgdGhlICplbmQgb2YgdGhlIGJ1ZmZlciosIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdGhhdCYjMzk7cyBLQVNBTiB0ZXJyaXRvcnkuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogVGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyBjYXVzZWQgYnkgcGFyc2luZyBpbmNvcnJlY3RseSBzaXplZCBJRXMuIFRoZSBkYXRhIG1heSBjb250YWluIGp1bmsgYnV0IGlzIG1vc3QgbGlrZWx5IG5vdCBhbiAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCogYW5kIEtNU0FOIGlzbiYjMzk7dCBsaWtlbHkgbmVlZGVkLgoKRG91YmxlLWNoZWNraW5nIGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYDogIGhlcmUgaXQmIzM5O3MgY2hlY2tpbmcgYHRvdGFsX2llX2xlbmAsIHdoaWNoIGlzIHRoZSAqcmVtYWluaW5nKiBidWZmZXIgc2l6ZS4gSWYgdGhpcyBgdG90YWxfaWVfbGVuYCBpcyBsZXNzIHRoYW4gd2hhdCYjMzk7cyBuZWVkZWQgZm9yIHRoZSBzdHJ1Y3QsIHRoZW4gaXQgd2lsbCByZXN1bHQgaW4gYW4gT09CLCBhbmQgS0FTQU4gc2hvdWxkIGNhdGNoIGl0LgoKKipUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBmYWxzZS4qKgoKTXkgcmF0aW9uYWxlIGZvciB0aGUgZmluYWwgd3JpdGUtdXAgd2lsbCBiZSB0byBlbXBoYXNpemUgdGhhdCB0aGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgcG90ZW50aWFsIE9PQiByZWFkcy4gSXQgc3RvcHMgdGhlIGNvZGUgZnJvbSBjYXN0aW5nIGEgcG9pbnRlciB0byBhbiBJRSBzdHJ1Y3R1cmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBvciByZW1haW5pbmcgYnVmZmVyIHNpemUuIFJlYWRpbmcgcGFzdCB0aGUgSUUgZGF0YSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGZvciBkZXRlY3RpbmcgdGhlc2UgT09CIGlzc3Vlcy4gTm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMTU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXG5cbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxuXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cblxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXG5cbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTE6NTEuNjAwODk5Nzk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxNDI0ODM5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZVwiLFxuICAgIFwibXdpZmlleF9zZXRfc3RhX2h0X2NhcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXFxuXFxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyByZWFkcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIGludm9sdmVzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb25zIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTE6NTEuNjAwOTA3MDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODUzODU5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDE1OjExOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOlxcbitcXHRcXHRcXHRpZiAoZWxlbWVudF9sZW4gXFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cXHUwMDNlYmNuX2h0X2NhcCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9odF9jYXAgPSAoc3RydWN0IGllZWU4MDIxMV9odF9jYXAgKilcXG4gXFx0XFx0XFx0XFx0XFx0KGN1cnJlbnRfcHRyICtcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9IVF9PUEVSQVRJT046XFxuK1xcdFxcdFxcdGlmIChlbGVtZW50X2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2ViY25faHRfb3BlcikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9odF9vcGVyID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBpZWVlODAyMTFfaHRfb3BlcmF0aW9uICopKGN1cnJlbnRfcHRyICtcXG4gXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlcikpO1xcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHRcXHRcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJlYWNvbl9idWYpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBXTEFOX0VJRF9WSFRfQ0FQQUJJTElUWTpcXG4rXFx0XFx0XFx0aWYgKGVsZW1lbnRfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXFx1MDAzZWJjbl92aHRfY2FwKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdFxcdGJzc19lbnRyeS1cXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XFxuIFxcdFxcdFxcdGJzc19lbnRyeS1cXHUwMDNlYmNuX3ZodF9jYXAgPVxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKShjdXJyZW50X3B0ciArXFxuQEAgLTE0MDksNiArMTQxNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX1ZIVF9PUEVSQVRJT046XFxuK1xcdFxcdFxcdGlmIChlbGVtZW50X2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2ViY25fdmh0X29wZXIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0YnNzX2VudHJ5LVxcdTAwM2ViY25fdmh0X29wZXIgPVxcbiBcXHRcXHRcXHRcXHQodm9pZCAqKShjdXJyZW50X3B0ciArXFxuIFxcdFxcdFxcdFxcdFxcdCBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKSk7XFxuQEAgLTE0MTcsNiArMTQyNSw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX0JTU19DT0VYXzIwNDA6XFxuK1xcdFxcdFxcdGlmICghZWxlbWVudF9sZW4pXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZWJzc19jb18yMDQwX29mZnNldCA9XFxuIFxcdFxcdFxcdFxcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdFxcdCh1MTYpIChjdXJyZW50X3B0ciAtIGJzc19lbnRyeS1cXHUwMDNlYmVhY29uX2J1Zik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIFdMQU5fRUlEX09QTU9ERV9OT1RJRjpcXG4rXFx0XFx0XFx0aWYgKHRvdGFsX2llX2xlbiBcXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVxcdTAwM2VvcGVyX21vZGUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0YnNzX2VudHJ5LVxcdTAwM2VvcGVyX21vZGUgPSAodm9pZCAqKWN1cnJlbnRfcHRyO1xcbiBcXHRcXHRcXHRic3NfZW50cnktXFx1MDAzZW9wZXJfbW9kZV9vZmZzZXQgPVxcbiBcXHRcXHRcXHRcXHRcXHQodTE2KSgodTggKilic3NfZW50cnktXFx1MDAzZW9wZXJfbW9kZSAtXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXFxuaW5kZXggN2QzNjMxZDIxMjIzNi4uODQ0MjIzYzA0ZTJlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xcbkBAIC03MjEsNyArNzIxLDcgQEAgbXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbiBcXG4gXFx0aHRfY2FwX2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0hUX0NBUEFCSUxJVFksIGllcyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBpZXNfbGVuKTtcXG4tXFx0aWYgKGh0X2NhcF9pZSkge1xcbitcXHRpZiAoaHRfY2FwX2llIFxcdTAwMjZcXHUwMDI2IGh0X2NhcF9pZS1cXHUwMDNlbGVuIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcXG4gXFx0XFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XFxuIFxcdFxcdG5vZGUtXFx1MDAzZWlzXzExbl9lbmFibGVkID0gMTtcXG4gXFx0XFx0bm9kZS1cXHUwMDNlbWF4X2Ftc2R1ID0gbGUxNl90b19jcHUoaHRfY2FwLVxcdTAwM2VjYXBfaW5mbykgXFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMTo1Mi4wODcwNjc1OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTUxNzY5MDE1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVdJRklFWFwiLFxuICAgIFwiTVdJRklFWF9VU0JcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gICAgXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIHBhcnNpbmcgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaW4gdGhlIG13aWZpZXggZHJpdmVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVtdWxhdGluZyBhIFVTQiBkZXZpY2UgYW5kIHNlbmRpbmcgbWFsaWNpb3VzIG1hbmFnZW1lbnQgZnJhbWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOlxuK1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9odF9vcGVyID1cbiBcdFx0XHRcdChzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25fdmh0X2NhcCkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfY2FwID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbkBAIC0xNDA5LDYgKzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjpcbitcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfb3BlcikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbiBcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDE3LDYgKzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDpcbitcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2Vic3NfY29fMjA0MF9vZmZzZXQgPVxuIFx0XHRcdFx0KHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHQodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOlxuK1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlX29mZnNldCA9XG4gXHRcdFx0XHRcdCh1MTYpKCh1OCAqKWJzc19lbnRyeS1cdTAwM2VvcGVyX21vZGUgLVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXG5pbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuQEAgLTcyMSw3ICs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG4gXG4gXHRodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLFxuIFx0XHRcdFx0XHQgICAgIGllc19sZW4pO1xuLVx0aWYgKGh0X2NhcF9pZSkge1xuK1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XG4gXHRcdG5vZGUtXHUwMDNlaXNfMTFuX2VuYWJsZWQgPSAxO1xuIFx0XHRub2RlLVx1MDAzZW1heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC1cdTAwM2VjYXBfaW5mbykgXHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMTo1Mi4wODcwNjk0MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzYwNzA5NzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY2AgYW5kIGBkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBhZGRpbmcgYm91bmRzIGNoZWNraW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBJRXMgKEluZm9ybWF0aW9uIEVsZW1lbnRzKSBhcmUgcGFyc2VkLiBUaGV5J3JlIHRhcmdldGluZyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlIOKAkyBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIGhhbmRsaW5nIG1hbGZvcm1lZCBvciB1bmV4cGVjdGVkIElFIGRhdGEuIEl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gbGVhZCB0byByZW1vdGUgY29kZSBleGVjdXRpb24sIHNvIGl0J3MgZ29vZCB0aGV5J3JlIGJlaW5nIHByb2FjdGl2ZS5cblxuTm93LCBteSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgaG93IGVhc3kgaXQnbGwgYmUgdG8gdGVzdCB0aGlzLCBlc3BlY2lhbGx5IGlmIHRoaXMgaXMgc29tZSBvYnNjdXJlIGhhcmR3YXJlLiBMZXQncyBzZWUuLi4gYG13aWZpZXhgIGlzIHRoZSBNYXJ2ZWxsIFdpRmktRXggRHJpdmVyLiBUaGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFjaCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgb3Igd2lsbCBJIG5lZWQgYSBwaHlzaWNhbCBkZXZpY2U/IEdpdmVuIHRoYXQgaXQncyB1c3VhbGx5IHRpZWQgdG8gUENJZSwgU0RJTywgb3IgVVNCIGludGVyZmFjZXMsIHRoYXQgbWVhbnMgdGVzdGluZyBnZXRzIHRyaWNreS4gV2FpdCBhIHNlY29uZCwgdGhlIGZhY3QgdGhhdCBpdCBzdXBwb3J0cyBVU0IgaXMgcmVhbGx5IGludGVyZXN0aW5nLiBJZiBpdCdzIGEgVVNCIGRyaXZlciwgSSBzaG91bGQgYmUgYWJsZSB0byBwb3RlbnRpYWxseSBmdXp6IGl0IHVzaW5nIFVTQiBnYWRnZXQgbW9kZSwgb3IgZXZlbiBhIGR1bW15IEhDRC4gVGhhdCBvcGVucyB1cCBhIG11Y2ggc2ltcGxlciB0ZXN0aW5nIHBhdGguIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGludGVyZmFjZXMgaXQgc3VwcG9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjowMS40NDc3ODIzMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMDUyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNV0lGSUVYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mjpjb25maWcgTVdJRklFWFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZy0xMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZzoxMjpjb25maWcgTVdJRklFWF9TRElPXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFNEODc4Ni9TRDg3ODcvU0Q4Nzk3L1NEODg4Ny9TRDg4OTcvU0Q4OTc3L1NEODk3OC9TRDg5ODcvU0Q4OTk3XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6MjU6Y29uZmlnIE1XSUZJRVhfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBQQ0lFIDg3NjYvODg5Ny84OTk3XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWc6Mzc6Y29uZmlnIE1XSUZJRVhfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXIgZm9yIFVTQjg3NjYvODc5Ny84OTk3XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjowMS43NDc4NDE1OTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDMwMzYxMzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1XSUZJRVhfVVNCIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBmYWN0IHRoYXQgYE1XSUZJRVhfVVNCYCBpcyBzdXBwb3J0ZWQgcmVhbGx5IG9wZW5zIHRoZSBkb29yIGZvciBlZmZlY3RpdmUgZnV6emluZyB0aHJvdWdoIFVTQiBlbXVsYXRpb24uIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgb2YgdG9vbHMgbGlrZSBgZHVtbXlfaGNkYCBvciBsZXZlcmFnaW5nIHN5emthbGxlcidzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gVGhhdCdzIHRoZSByb3V0ZSBJJ2xsIHdhbnQgdG8gZXhwbG9yZS5cblxuTm93LCB0aGUgcGF0Y2ggaW4gcXVlc3Rpb24gdGFyZ2V0cyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsIHNpdGVzIGZvciBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgY3JhZnRpbmcgcmVsZXZhbnQgZnV6emluZyBwYXlsb2Fkcy4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjEwLjc3ODIwNTMxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjcxODM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTM4PWludCBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MTppbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTExMj1td2lmaWV4X3JldF84MDJfMTFfc2Nhbl9nZXRfdGx2X3B0cnMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTE4MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjExODI6aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYz0xNDE9aW50IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xOTEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE5MjpcXHRyZXR1cm4gbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShwcml2LVxcdTAwM2VhZGFwdGVyLCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTE5My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjEwLjg0NDkzMDU4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTkwMTEwNzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGZ1bmN0aW9uLCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSBzdGF0aW9uIChTVEEpIEhUIGNhcGFiaWxpdGllcyBhcmUgYmVpbmcgY29uZmlndXJlZCwgcHJvYmFibHkgZHVyaW5nIGFzc29jaWF0aW9uIG9yIHJlLWFzc29jaWF0aW9uIHdpdGggYW4gQVAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgTWFydmVsbCBXaUZpIGRyaXZlciBzcGVjaWZpY3MuLi4gSSByZWNhbGwgdGhpcyBiZWluZyBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBhcyBpdCBkaXJlY3RseSBpbXBhY3RzIHRocm91Z2hwdXQgYW5kIG92ZXJhbGwgcGVyZm9ybWFuY2UgYnkgbmVnb3RpYXRpbmcgSFQvVkhUIHBhcmFtZXRlcnMuIExldCBtZSBtYWtlIHN1cmUgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBjYXBhYmFpbGl0ZXMgcHJvcGVybHksIGJlY2F1c2UgaW1wcm9wZXIgSFQgY2FwYWJpbGl0aWVzIGJlaW5nIHNldCB3b3VsZCBjYXVzZSBjb21wYXRpYmlsaXR5IGlzc3VlcyBhbmQgZGVjcmVhc2VkIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHBvcHVsYXRlZCBiYXNlZCBvbiB3aGF0IHRoZSBBUCBhZHZlcnRpc2VzIGFuZCB3aGF0IHRoZSBTVEEgaXMgY2FwYWJsZSBvZi4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGVycm9yIGhhbmRsaW5nOyBhcmUgd2UgZ3JhY2VmdWxseSBkZWdyYWRpbmcgdG8gbGVnYWN5IG1vZGVzIGlmIHRoZXJlJ3MgYSBwcm9ibGVtLCBvciBhcmUgd2UgY2F1c2luZyB1bmV4cGVjdGVkIGRpc2Nvbm5lY3RzPyBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG9idmlvdXMgYnVmZmVyIG92ZXJmbG93cyBvciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgaW4gdGhlIGRhdGEgbWFuaXB1bGF0aW9uLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSByZXZpZXdpbmcgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiwgdGhlbiB0aGUgY2FsbCBzaXRlcywgdGhlbiB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGZpZ3VyaW5nIG91dCBwZXJmb3JtYW5jZSBwcm9ibGVtcywgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBjZXJ0YWluIEFQcy4gVGhpcyBpcyBteSBjaGFuY2UgdG8gc2VlIGlmIGFueSBidWdzIGhhdmUgYmVlbiBmaXhlZCBpbiByZWNlbnQgZHJpdmVyIHJlbGVhc2VzLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjIzLjQzNTA0NTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTk5MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU5Mi1cXHRcXHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTEzOC1cXHRcXHRcXHRcXHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XFx0XFx0XFx0XFx0ICogaW4gbXdpZmlleF9zZXRfc3RhX2h0X2NhcCgpIHJlYWRzIHBhc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVxcdFxcdFxcdFxcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcXHRcXHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNzAtXFx0XFx0XFx0XFx0ICAgICAgIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMtNzE0LVxcdFxcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjIzLjY1NzA0OTUxM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNjk0NTM3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCU1MgRGVzY3JpcHRpb24gYW5kIEhUIENhcGFiaWxpdHkgVXBkYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZXkgZml0IGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJIHNlZSB0aGF0IGBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llYCBpcyBjYWxsZWQgYnkgYG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NgLiBUaGF0J3MgYSBrZXkgcG9pbnQuIEFuZCBgbXdpZmlleF9maWxsX25ld19ic3NfZGVzY2AsIGFjY29yZGluZyB0byBteSBub3Rlcywgc2VlbXMgdG8gb3JpZ2luYXRlIGZyb20gYG13aWZpZXhfc2V0X2dlbl9pZV9oZWxwZXJgIGluIGBzdGFfaW9jdGwuY2AsIGFuZCBsaWtlbHkgb3RoZXIgcGxhY2VzIHRvby5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgc28gaXQncyB0aW1lIHRvIGRpZyBkZWVwZXIuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBjYWxsIGhpZXJhcmNoeTsgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGFsbCB0aGUgY2FsbGVycyBvZiBgbXdpZmlleF9maWxsX25ld19ic3NfZGVzY2AgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4gS25vd2luZyB0aGUgY2FsbCBjb250ZXh0IGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzOCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjozMi4wMjY1MDYwMjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzAxOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oPTE1MzY9aW50IG13aWZpZXhfZ2V0X2Jzc19pbmZvKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1MzctXFx0XFx0XFx0IHN0cnVjdCBtd2lmaWV4X2Jzc19pbmZvICopO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTUzODppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTUzOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2NTU9c3RhdGljIGludCBtd2lmaWV4X3NhdmVfaGlkZGVuX3NzaWRfY2hhbm5lbHMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTY2Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2Njc6XFx0cmV0ID0gbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhwcml2LCBic3MsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2NjgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTY5MS1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE2OTI6XFx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE2OTMtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jPTE2OTk9c3RhdGljIGludCBtd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTcwOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MTA6XFx0cmV0ID0gbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhwcml2LCBic3MsIGJzc19kZXNjKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTczMC1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjE3MzE6XFx0ICogbXdpZmlleF9maWxsX25ld19ic3NfZGVzYygpLiBGcmVlIGl0IG5vdy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTE3MzItXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM9ODg9aW50IG13aWZpZXhfcmVxdWVzdF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xNDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jOjE0MTppbnQgbXdpZmlleF9maWxsX25ld19ic3NfZGVzYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zdGFfaW9jdGwuYy0xNDItXFx0XFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jPTMzMj1pbnQgbXdpZmlleF9ic3Nfc3RhcnQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6MzUxOlxcdFxcdHJldCA9IG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MocHJpdiwgYnNzLCBic3NfZGVzYyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTM1Mi1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQ0Ni1cXHQvKiBiZWFjb25faWUgYnVmZmVyIHdhcyBhbGxvY2F0ZWQgaW4gZnVuY3Rpb25cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc3RhX2lvY3RsLmM6NDQ3OlxcdCAqIG13aWZpZXhfZmlsbF9uZXdfYnNzX2Rlc2MoKS4gRnJlZSBpdCBub3cuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3N0YV9pb2N0bC5jLTQ0OC1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTI6MzIuMDkwODE4MDE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MTI4ODE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgdGhlIE1XSUZJRVggVVNCIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBgbXdpZmlleGAuIFNpbmNlIGl0IGludGVyYWN0cyB3aXRoIHRoZSBzdGFuZGFyZCBtYWM4MDIxMS9jZmc4MDIxMSBzdGFjayBmb3Igb3BlcmF0aW9ucyBsaWtlIHNjYW5uaW5nIGFuZCBjb25uZWN0aW5nLCB0aGUgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGBtd2lmaWV4YCBpcyBhIGZ1bGxtYWMgZHJpdmVyLCB3aGljaCBtZWFucyBpdCByZWdpc3RlcnMgd2l0aCBjZmc4MDIxMS4gU28sIGNhbiBJIGxldmVyYWdlIGBtYWM4MDIxMV9od3NpbWAgdG8gZ2V0IGF0IGl0PyBObywgYmVjYXVzZSBgbWFjODAyMTFfaHdzaW1gIGlzIHNwZWNpZmljYWxseSBmb3IgbWFjODAyMTEgZHJpdmVycy4gUmlnaHQsIG9mIGNvdXJzZS5cblxuQWgsIGJ1dCBgbXdpZmlleGAgaXMgYSBVU0IgZHJpdmVyISBUaGF0J3MgdGhlIGtleS4gSWYgaXQncyBVU0IsIHRoZW4gaXQncyBmdXp6YWJsZSB2aWEgVVNCIGVtdWxhdGlvbiwgbGlrZSB3aXRoIGBkdW1teV9oY2RgLiBTeXprYWxsZXIncyBnb3QgdGhhdCBVU0IgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSBVU0IgZGV2aWNlcy4gUGVyZmVjdCEgVGhhdCBjb25maXJtcyBpdC4gVGhlIGBtd2lmaWV4YCBVU0IgZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cblxuTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBNV0lGSUVYYCBhbmQgYE1XSUZJRVhfVVNCYCBhcmUgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzI4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjQxLjUwMzcwMjczN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0NjUyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1XSUZJRVhfVVNCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnPTI1PWNvbmZpZyBNV0lGSUVYX1BDSUVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnOjM3OmNvbmZpZyBNV0lGSUVYX1VTQlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnLTM4LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTI6NDEuNTU5MTg4NTI1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjk1NzA0MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYE1XSUZJRVhfVVNCYCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBNV0lGSUVYX1VTQmAgbW9kdWxlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhpcyB0aGluZyByZWxpYW50IG9uP1wiLiBJIG5lZWQgdG8gbWFwIG91dCBpdHMgZGVwZW5kZW5jaWVzLiBJcyBpdCBhIHNlbGYtY29udGFpbmVkIHVuaXQsIG9yIGRvZXMgaXQgbGVhbiBoZWF2aWx5IG9uIG90aGVyIGNvcmUgY29tcG9uZW50cywgaGFyZHdhcmUgaW50ZXJmYWNlcywgb3Igc3BlY2lmaWMga2VybmVsIG1vZHVsZXM/IEknbSB0aGlua2luZywgYXJlIHdlIHRhbGtpbmcgYWJvdXQganVzdCBzdGFuZGFyZCBVU0IgZHJpdmVyIGZyYW1ld29yayBkZXBlbmRlbmNpZXMsIG9yIGFyZSB0aGVyZSBjdXN0b20gaG9va3MsIG9yIHNwZWNpYWxpemVkIGNvbW11bmljYXRpb24gcHJvdG9jb2xzIHRvIGNvbnNpZGVyP1xuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLCB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaW4gYSBwb3dlciBtYW5hZ2VtZW50IGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciByZXNvdXJjZSBjb25mbGljdHMsIGludGVycnVwdHMsIG9yIG1lbW9yeSByZWdpb25zIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgY3Jvc3MtZGVwZW5kZW5jaWVzIGJldHdlZW4gbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdG8gdW5kZXJzdGFuZCB0aGlzIG1vZHVsZSdzIGZ1bmN0aW9uIGNvbXBsZXRlbHk/XG5XaGF0IGhhcHBlbnMgaWYgb25lIG9mIHRoZW0gZmFpbHMgLSBob3cgbXVjaCBvZiB0aGUgd2hvbGUgc3lzdGVtIGRvZXMgaXQgdGFrZSBkb3duP1xuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBjb25mbGljdHMuIERvZXMgaXQgc2hhcmUgcmVzb3VyY2VzIHdpdGggb3RoZXIgVVNCIGRldmljZXM/IElzIHRoZXJlIGFueSBpbnRlci1tb2R1bGUgY29tbXVuaWNhdGlvbiB0aGF0IEkgbmVlZCB0byBhbmFseXplPyBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCBvciBqdXN0IGdyZXBwaW5nIHRocm91Z2ggdGhlIHNvdXJjZSwgbG9va2luZyBmb3IgaW5jbHVkZXMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgYW55IGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzIHRoYXQgY2FuIHNob3cgbWUgaXRzIGNvbm5lY3Rpb25zLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3MgdGhlIHNjb3BlIG9mIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk1MiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEyOjU0Ljg1NDg5NjkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNyxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzNzpcXHRjb25maWcgTVdJRklFWF9VU0JcXG4gIDM4OlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFdpRmktRXggRHJpdmVyIGZvciBVU0I4NzY2Lzg3OTcvODk5N1xcXCJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gTVdJRklFWCBcXHUwMDI2XFx1MDAyNiBVU0JcXG4gIDQwOlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDQxOlxcdFxcdGhlbHBcXG4gIDQyOlxcdFxcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIE1hcnZlbGxcXG4gIDQzOlxcdFxcdCAgODc5Ny84OTk3IGNoaXBzZXQgd2l0aCBVU0IgaW50ZXJmYWNlLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkXFxuICA0NjpcXHRcXHQgIG13aWZpZXhfdXNiLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMjo1NC44NTQ5NzI3MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyOTY1OTUzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYE1XSUZJRVhgIGFuZCBgVVNCYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZWlyIHJlbGF0aW9uc2hpcCBhbmQgcG90ZW50aWFsIGlzc3Vlcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTVdJRklFWGAuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugd2lsbCBiZSBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGF0IGl0IHJlbGllcyBvbiBhbmQgaWYgYW55dGhpbmcgdGhlcmUgaXMgZ29pbmcgdG8gYmUgcHJvYmxlbWF0aWMuIExldCdzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MDguMTUxNTcxMTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTVdJRklFWFxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgV2lGaS1FeCBEcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBNYXJ2ZWxsXFxuICAgNzpcXHRcXHQgIDgwMi4xMW4vYWMgY2hpcHNldHMuXFxuICAgODpcXHRcXG4gICA5OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWRcXG4gIDEwOlxcdFxcdCAgbXdpZmlleC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MDguMTUxNjQzNTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTYzMzgzMDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbXdpZmlleGAgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQncyBkZWFsaW5nIHdpdGggYm91bmRzIGNoZWNraW5nIHdpdGhpbiB0aGUgYG13aWZpZXhgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGl0IGhhbmRsZXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgaW4gODAyLjExIG1hbmFnZW1lbnQgZnJhbWVzLiBUaGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIGhlcmUgYXJlIGNsZWFybHkgYENGRzgwMjExYCwgYE1XSUZJRVhgLCBgTVdJRklFWF9VU0JgLCBhbmQgb2YgY291cnNlLCBgVVNCYCBpdHNlbGYuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBVU0ItYmFzZWQgd2lyZWxlc3MgZHJpdmVyLCBzbyB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgZ29pbmcgdG8gYmUgdGhyb3VnaCBjcmFmdGVkIFVTQiBVUkJzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGZvY3VzZXMgb24gdHdvIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHdoZXJlIElFcyBhcmUgYmVpbmcgcGFyc2VkLiAgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGlzIGRlYWxpbmcgd2l0aCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlIElFcywgd2hpbGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGhhbmRsZXMgYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMuICBUaGUgb2J2aW91cyBhdHRhY2sgdmVjdG9yIGlzIGEgZnV6emVyLiAgVGhhdCBmdXp6ZXIgY291bGQgYmUgbWltaWNraW5nIGVpdGhlciBhbiBBY2Nlc3MgUG9pbnQgKEFQKSBvciBhIFN0YXRpb24gKFNUQSkgYW5kIGluamVjdGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMgb3IsIG1vcmUgc3VidGx5LCBjcmFmdGluZyB0aGUgVVNCIHJlc3BvbnNlcyBkaXJlY3RseS4gU2luY2UgYG13aWZpZXhgIGlzIGEgVVNCIGRyaXZlciwgdGhlIGZ1enplciBlbXVsYXRpbmcgdGhlIFVTQiBkZXZpY2UgaXMgZGVmaW5pdGVseSBpbnRlcmVzdGluZy5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgZmxhdywgc28gSSdsbCBhbHNvIGJlIGtlZXBpbmcgYW4gZXllIG9uIGBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjYCBhbmQgYG13aWZpZXhfcHJvY2Vzc191YXBfZXZlbnRgLCBhcyB0aGV5IG1pZ2h0IGJlIGluZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzaW5nIG9yIHBvdGVudGlhbGx5IHJlbGF0ZWQuIEknbGwgbmVlZCB0byBjaGVjayBpZiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIGFzIGl0IGlzIGEgY29tbW9uIGluZGljYXRvciBvZiBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBkaXNhc3NlbWJseSBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjIxLjExNTAzMDY2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NTc0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTM4PWludCBtd2lmaWV4X2ZpbGxfbmV3X2Jzc19kZXNjKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oLTE1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2Rlc2MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmg6MTU0MTppbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU0Mi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG13aWZpZXhfYnNzZGVzY3JpcHRvciAqYnNzX2VudHJ5KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmM9MTExMj1td2lmaWV4X3JldF84MDJfMTFfc2Nhbl9nZXRfdGx2X3B0cnMoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMtMTE4MS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jOjExODI6aW50IG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jLTExODMtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19lbnRyeSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6MjEuMzgxNjE3MDQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzc2NjcwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlIG9mIFdpRmkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGl0LiBJdCdzIG5vdCBhIHN0YXRpYyBzaXR1YXRpb24uIFRoaXMgc2V0dXAgaXMgZGVmaW5pdGVseSBkeW5hbWljLCBjaGFuZ2luZy4gSSdtIG5vdCBkZWFsaW5nIHdpdGggYSBmaXhlZCBzdGF0ZSBoZXJlLiBUaGF0J3MgdGhlIGtleSB0YWtlYXdheSByaWdodCBub3cuXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4gYW5kIGNvbmZpcm0gd2hlcmUgd2Ugc3RhbmQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG13aWZpZXhfc2V0X3N0YV9odF9jYXBgIGZ1bmN0aW9uIGFuZCBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgc3RhdGUuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGhhcHBlbmluZyB0aGVyZSB0byBncmFzcCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzozNC4xNTgyOTA5MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTM2NzU3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtd2lmaWV4X3NldF9zdGFfaHRfY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uaD0xNTkwPXZvaWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5oOjE1OTE6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmgtMTU5Mi1cXHRcXHQgICAgICAgaW50IGllc19sZW4sIHN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpub2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYz05ND1pbnQgbXdpZmlleF9wcm9jZXNzX3VhcF9ldmVudChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jLTEzOC1cXHRcXHRcXHRcXHQgKiBldmVudCB3YXMgY29waWVkIGludG87IG90aGVyd2lzZSB0aGUgSUUgd2Fsa1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYzoxMzk6XFx0XFx0XFx0XFx0ICogaW4gbXdpZmlleF9zZXRfc3RhX2h0X2NhcCgpIHJlYWRzIHBhc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdWFwX2V2ZW50LmMtMTQwLVxcdFxcdFxcdFxcdCAqIGV2ZW50X2JvZHkgYW5kIG91dCBvZiB0aGUgYWRhcHRlciBzbGFiIG9iamVjdC5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3VhcF9ldmVudC5jOjE2OTpcXHRcXHRtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHByaXYsIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91YXBfZXZlbnQuYy0xNzAtXFx0XFx0XFx0XFx0ICAgICAgIHNpbmZvLVxcdTAwM2Vhc3NvY19yZXFfaWVzX2xlbiwgbm9kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jPTcxMj12b2lkXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuYzo3MTM6bXdpZmlleF9zZXRfc3RhX2h0X2NhcChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqaWVzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMtNzE0LVxcdFxcdCAgICAgICBpbnQgaWVzX2xlbiwgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjM0LjM2OTY2MzE4MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjgwNDUwNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTVdJRklFWCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXNuJ3QgYSBzdGF0aWMgZml4OyBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgSSdtIGxvb2tpbmcgZm9yIHRvIGZ1enouIFRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBhZGRpbmcgYm91bmRzIGNoZWNraW5nIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyB3aXRoaW4gdGhlIGBtd2lmaWV4YCBkcml2ZXIsIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLiBUaGlzIGlzIGdvb2Q7IGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gSSBrbm93IEknbGwgbmVlZCBgTVdJRklFWGAgYW5kIGBNV0lGSUVYX1VTQmAgYXMgdGhlIGNvcmUuIEkgY2FuIGFsc28gaW5jbHVkZSBgQ0ZHODAyMTFgIGFuZCBgVVNCYCwgc2luY2Ugc3l6a2FsbGVyIHR5cGljYWxseSBlbmFibGVzIHRoZW0sIGFuZCBpdCB3b24ndCBodXJ0IHRvIGhhdmUgdGhlbSBleHBsaWNpdGx5IHNldC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgYE1XSUZJRVhfVVNCYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEFoLCByaWdodCwgaXQgZGVwZW5kcyBvbiBib3RoIGBNV0lGSUVYYCBhbmQgYFVTQmAsIGFuZCBgTVdJRklFWGAgZGVwZW5kcyBvbiBgQ0ZHODAyMTFgLiBPa2F5LCBzbyBgTVdJRklFWGAsIGBNV0lGSUVYX1VTQmAsIGBDRkc4MDIxMWAsIGFuZCBgVVNCYCBpdCBpcy4gVGhhdCdzIHN1ZmZpY2llbnQgdG8gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudC5cblxuU28sIHRvIHN1bW1hcml6ZSBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGZpeGVzIGEgZnVuY3Rpb25hbCB2dWxuZXJhYmlsaXR5IHRoYXQgY291bGQgYmUgdHJpZ2dlcmVkIHRocm91Z2ggYSBVU0IgZGV2aWNlLiBUaGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgYG13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVgIGFuZCBgbXdpZmlleF9zZXRfc3RhX2h0X2NhcGAuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBNV0lGSUVYYCwgYE1XSUZJRVhfVVNCYCwgYENGRzgwMjExYCwgYW5kIGBVU0JgLlxuXG5XYWl0IGEgc2Vjb25kLCB3aGF0IGFib3V0IGBNV0lGSUVYX1NESU9gIGFuZCBgTVdJRklFWF9QQ0lFYD8gQ291bGQgc3l6a2FsbGVyIGhhbmRsZSBmdXp6aW5nIHRob3NlPyBXaGlsZSBzeXprYWxsZXIgaGFzIHNvbWUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCBVU0IgaXMgZGVmaW5pdGVseSBtdWNoIGJldHRlciBzdXBwb3J0ZWQsIGVzcGVjaWFsbHkgd2l0aCBgZHVtbXlfaGNkYCBhbmQgYHJhdy1nYWRnZXRgLiBTbyBzdGlja2luZyB3aXRoIGBNV0lGSUVYX1VTQmAgaXMgdGhlIGJlc3QgYmV0LiBBbHJpZ2h0LCB0aW1lIHRvIHNldCB0aGUgcmVzdWx0cyBhbmQgbW92ZSBmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyOSwiT3V0cHV0VG9rZW5zIjoxNDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTM6NDcuMTc0MTczMTYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk3OTI1OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1XSUZJRVhcIixcbiAgICBcIk1XSUZJRVhfVVNCXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZVwiLFxuICAgIFwibXdpZmlleF9zZXRfc3RhX2h0X2NhcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBwYXJzaW5nIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlIGFuZCBzZW5kaW5nIG1hbGljaW91cyBtYW5hZ2VtZW50IGZyYW1lcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNV0lGSUVYXCIsXG4gICAgXCJNV0lGSUVYX1VTQlwiLFxuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm13aWZpZXhfdXBkYXRlX2Jzc19kZXNjX3dpdGhfaWVcIixcbiAgICBcIm13aWZpZXhfc2V0X3N0YV9odF9jYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gcGFyc2luZyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgZW11bGF0aW5nIGEgVVNCIGRldmljZSBhbmQgc2VuZGluZyBtYWxpY2lvdXMgbWFuYWdlbWVudCBmcmFtZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDE1OjEzOjQ3LjI2Mzk3NTQ2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NjE3NDM0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzo0Ny4yNjQ3MDIzODhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU3NjEwMTAyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbGVuZ3RoIGNoZWNrcyBmb3IgdmFyaW91cyBJbmZvcm1hdGlvbiBFbGVtZW50cyAoSUVzKSBwYXJzZWQgZnJvbSBtYW5hZ2VtZW50IGZyYW1lcyBvciBmaXJtd2FyZSBldmVudHMgaW4gdGhlIG13aWZpZXggZHJpdmVyLiBXaXRob3V0IHRoZXNlIGNoZWNrcywgdGhlIGRyaXZlciBtYXkgY2FzdCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgKGUuZy4sIGBzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcGApIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBsZW5ndGggb3IgdGhlIHJlbWFpbmluZyBidWZmZXIgbGVuZ3RoLlxcblxcbklmIHRoZSBJRSBpcyBmb2xsb3dlZCBieSBvdGhlciBJRXMsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZGphY2VudCBJRXMgKHdoaWNoIGlzIGEgbG9naWMgYnVnLCBidXQgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQpLiBJZiB0aGUgSUUgaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIChPT0IpIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLlxcblxcbk91dC1vZi1ib3VuZHMgcmVhZHMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyBpbmRpY2F0aW9uIHRoYXQgdGhpcyBpbnZvbHZlcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChzdWNoIGFzIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzIG9yIHVuaW5pdGlhbGl6ZWQgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBsZWFrZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93KS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxYzQyNWI5MGI2MDJkMjMzYWM2MTY0Y2Y0MjllZWM5ZmFiYmI3OTFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMTU6MTE6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3NjYW4uY1xuaW5kZXggOTdjMGVjM2I4MjJlNy4uODA1NzI5ODliYzgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmNcbkBAIC0xMzg0LDYgKzEzODQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwKSlcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2ViY25faHRfY2FwID0gKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICopXG4gXHRcdFx0XHRcdChjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xMzkyLDYgKzEzOTQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfSFRfT1BFUkFUSU9OOlxuK1x0XHRcdGlmIChlbGVtZW50X2xlbiBcdTAwM2Mgc2l6ZW9mKCpic3NfZW50cnktXHUwMDNlYmNuX2h0X29wZXIpKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9odF9vcGVyID1cbiBcdFx0XHRcdChzdHJ1Y3QgaWVlZTgwMjExX2h0X29wZXJhdGlvbiAqKShjdXJyZW50X3B0ciArXG4gXHRcdFx0XHRcdHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDAwLDYgKzE0MDQsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHRic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX0NBUEFCSUxJVFk6XG4rXHRcdFx0aWYgKGVsZW1lbnRfbGVuIFx1MDAzYyBzaXplb2YoKmJzc19lbnRyeS1cdTAwM2ViY25fdmh0X2NhcCkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlZGlzYWJsZV8xMWFjID0gZmFsc2U7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfY2FwID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbkBAIC0xNDA5LDYgKzE0MTUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfVkhUX09QRVJBVElPTjpcbitcdFx0XHRpZiAoZWxlbWVudF9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZWJjbl92aHRfb3BlcikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlYmNuX3ZodF9vcGVyID1cbiBcdFx0XHRcdCh2b2lkICopKGN1cnJlbnRfcHRyICtcbiBcdFx0XHRcdFx0IHNpemVvZihzdHJ1Y3QgaWVlZV90eXBlc19oZWFkZXIpKTtcbkBAIC0xNDE3LDYgKzE0MjUsOCBAQCBpbnQgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdFx0XHQgICAgICBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfQlNTX0NPRVhfMjA0MDpcbitcdFx0XHRpZiAoIWVsZW1lbnRfbGVuKVxuK1x0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0YnNzX2VudHJ5LVx1MDAzZWJjbl9ic3NfY29fMjA0MCA9IGN1cnJlbnRfcHRyO1xuIFx0XHRcdGJzc19lbnRyeS1cdTAwM2Vic3NfY29fMjA0MF9vZmZzZXQgPVxuIFx0XHRcdFx0KHUxNikgKGN1cnJlbnRfcHRyIC0gYnNzX2VudHJ5LVx1MDAzZWJlYWNvbl9idWYpO1xuQEAgLTE0MjcsNiArMTQzNyw4IEBAIGludCBtd2lmaWV4X3VwZGF0ZV9ic3NfZGVzY193aXRoX2llKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0XHQodTE2KSAoY3VycmVudF9wdHIgLSBic3NfZW50cnktXHUwMDNlYmVhY29uX2J1Zik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgV0xBTl9FSURfT1BNT0RFX05PVElGOlxuK1x0XHRcdGlmICh0b3RhbF9pZV9sZW4gXHUwMDNjIHNpemVvZigqYnNzX2VudHJ5LVx1MDAzZW9wZXJfbW9kZSkpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlID0gKHZvaWQgKiljdXJyZW50X3B0cjtcbiBcdFx0XHRic3NfZW50cnktXHUwMDNlb3Blcl9tb2RlX29mZnNldCA9XG4gXHRcdFx0XHRcdCh1MTYpKCh1OCAqKWJzc19lbnRyeS1cdTAwM2VvcGVyX21vZGUgLVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvdXRpbC5jXG5pbmRleCA3ZDM2MzFkMjEyMjM2Li44NDQyMjNjMDRlMmVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L3V0aWwuY1xuQEAgLTcyMSw3ICs3MjEsNyBAQCBtd2lmaWV4X3NldF9zdGFfaHRfY2FwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNvbnN0IHU4ICppZXMsXG4gXG4gXHRodF9jYXBfaWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfSFRfQ0FQQUJJTElUWSwgaWVzLFxuIFx0XHRcdFx0XHQgICAgIGllc19sZW4pO1xuLVx0aWYgKGh0X2NhcF9pZSkge1xuK1x0aWYgKGh0X2NhcF9pZSBcdTAwMjZcdTAwMjYgaHRfY2FwX2llLVx1MDAzZWxlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2NhcCkpIHtcbiBcdFx0aHRfY2FwID0gKHZvaWQgKikoaHRfY2FwX2llICsgMSk7XG4gXHRcdG5vZGUtXHUwMDNlaXNfMTFuX2VuYWJsZWQgPSAxO1xuIFx0XHRub2RlLVx1MDAzZW1heF9hbXNkdSA9IGxlMTZfdG9fY3B1KGh0X2NhcC1cdTAwM2VjYXBfaW5mbykgXHUwMDI2XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQxNToxMzo0Ny4yNjQ3MDM4MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NjA5NzU5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIG13aWZpZXggRHJpdmVyIFBhdGNoIGZvciBJbmZvcm1hdGlvbiBFbGVtZW50IExlbmd0aCBDaGVja3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYG13aWZpZXhgIGRyaXZlci4gSXQncyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyB0byB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzLCBvciBJRXMsIGR1cmluZyB0aGUgcGFyc2luZyBvZiByZWNlaXZlZCBtYW5hZ2VtZW50IGZyYW1lcyBvciBmaXJtd2FyZSBldmVudHMsIHNwZWNpZmljYWxseSBpbiBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWAgYW5kIGBtd2lmaWV4X3NldF9zdGFfaHRfY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGdvb2QgcHJhY3RpY2UsIHByZXZlbnRpbmcgcG90ZW50aWFsIGlzc3Vlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIGNoZWNraW5nIGlmIHRoZSByZXBvcnRlZCBsZW5ndGggb2YgYW4gSUUgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyZSB0aGUgZHJpdmVyIGlzIGNhc3RpbmcgdGhlIElFIGRhdGEgdG8uIEZvciBpbnN0YW5jZSwgaWYgYW4gSFQgQ2FwYWJpbGl0eSBJRSBpcyByZWNlaXZlZCwgdGhlIGNvZGUgY2hlY2tzIGlmIHRoZSBgZWxlbWVudF9sZW5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgYGllZWU4MDIxMV9odF9jYXBgIHN0cnVjdHVyZS4gSWYgbm90LCBpdCByZXR1cm5zIGFuIGVycm9yLiBUaGUgY29uY2VybiBpcyB0aGF0IHdpdGhvdXQgdGhpcyBjaGVjaywgdGhlIGRyaXZlciBtaWdodCB0cnkgdG8gYWNjZXNzIGZpZWxkcyB3aXRoaW4gdGhlIHN0cnVjdHVyZSB0aGF0IGxpZSAqYmV5b25kKiB0aGUgYWN0dWFsIGRhdGEgcHJvdmlkZWQgaW4gdGhlIElFLlxuXG5Ob3csIG15IG1pbmQgZ29lcyB0byB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcy4gIElmIHRoZSByZWNlaXZlZCBJRSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUgc2l6ZSwgd2hhdCdzIGxpa2VseSB0byBoYXBwZW4/IFRoZSBjb2RlIHdvdWxkIGNhc3QgdGhlIGRhdGEgcG9pbnRlciBhcyByZXF1ZXN0ZWQgYnV0IG1pZ2h0IHRyeSB0byByZWFkIGZpZWxkcyAqYmV5b25kKiB0aGUgZW5kIG9mIHRoZSByZWNlaXZlZCBJRS5cblxuV2hhdCBraW5kIG9mIG1lbW9yeSBzYWZldHkgaXNzdWUgYXJlIHdlIGxvb2tpbmcgYXQ/IFRoZSBwYXRjaCBub3RlcyB0aGlzIG1pZ2h0IGJlIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZC4gS0FTQU4gaXMgdGhlIHRvb2wgb2YgY2hvaWNlIHRvIGNhdGNoIHRoYXQsIGFuZCBpdCdzIGRldGVjdGluZyBPT0IgcmVhZHMuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgaXQncyBub3QgYSAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCosIHdoZXJlIEtNU0FOIHdvdWxkIGJlIGFwcGxpY2FibGUuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzb3VyY2UuIFRoZXNlIElFcyBhcmUgY29taW5nIGZyb20gbmV0d29yayBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzOyB0eXBpY2FsbHkgdGhpcyBkYXRhIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBidWZmZXIg4oCTIHRoZSBgaWVzYCBvciBgYmVhY29uX2J1ZmAuIElmIHRoZSByZXBvcnRlZCBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0dXJlLCB0aGVuIHRoZSBwcm9ncmFtIGlzIHJlYWRpbmcgcGFzdCBgZWxlbWVudF9sZW5gIGFuZCB3ZSBoYXZlIE9PQiByZWFkaW5nLlxuXG5JZiB3ZSdyZSBpbiB0aGUgKm1pZGRsZSogb2YgYSBidWZmZXIgZmlsbGVkIHdpdGggbXVsdGlwbGUgSUVzLCBpdCB3aWxsIHJlYWQgaW50byB0aGUgbmV4dCBJRSdzIGRhdGEuIFRoYXQgaXMgZ29pbmcgdG8gY2F1c2UgYSBsb2dpYyBlcnJvciwgYnV0IG5vdCBhbiAqdW5pbml0aWFsaXplZCogcmVhZCB1bmxlc3MgdGhlIGBpZXNgIGJ1ZmZlciBpdHNlbGYgaGFzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChoaWdobHkgdW5saWtlbHkpLiBLQVNBTiB3b3VsZCBkZXRlY3QgdGhpcyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuTXkgbmV4dCB0aG91Z2h0OiBpZiB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYW5kIHRoZW4gdGhlIHJlY2VpdmVkIGRhdGEgaXMgKnNtYWxsZXIqIHRoYW4gd2hhdCB3YXMgYWxsb2NhdGVkLCB0aGVuIHdlIGNvdWxkIGJlIHJlYWRpbmcgaW50byB0aGUgdW5pbml0aWFsaXplZCBwYXJ0IG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBJbiB0aGlzIGNhc2UsIEtNU0FOIGNvdWxkIHBvdGVudGlhbGx5IGJlIHVzZWQuXG5cbkknbSB1c3VhbGx5IGRlYWxpbmcgd2l0aCBuZXR3b3JrIGRhdGEgaW4gYHNrX2J1ZmZgcywgd2hpY2ggZXhwbGljaXRseSBrbm93IHRoZWlyIGRhdGEgbGVuZ3RoLiBJZiB5b3UgcmVhZCBwYXN0IHRoZSBgc2tiLVx1MDAzZWxlbmAsIHRoYXQgaXMgYW4gT09CIHJlYWQsIHdoaWNoIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIHNpbmNlIGl0J3MgYXQgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi5cblxuU28sIEkgcmUtZm9jdXMuIFRoZSBwYXRjaCdzIGdvYWwgaXMgdG8gc3RvcCByZWFkaW5nIHBhc3QgYGVsZW1lbnRfbGVuYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGBlbGVtZW50X2xlbmAsIHdoaWNoIGNvbWVzIGZyb20gdGhlIElFIGhlYWRlciBpdHNlbGYuIFRoZSBjaGVjayBlbmZvcmNlcyB0aGF0IHRoZSBgZWxlbWVudF9sZW5gIG11c3QgYmUgc3VmZmljaWVudCB0byBob2xkIHRoZSBzdHJ1Y3R1cmUuICBJZiBgZWxlbWVudF9sZW5gIGlzIHNtYWxsZXIsIGFuZCBvdGhlciBJRXMgZm9sbG93LCB0aGVuIHdlIG1pZ2h0IG9ubHkgcmVhZCBpbnRvIHRoZSBuZXh0IElFLCB3aGljaCBpcyB3cm9uZyBkYXRhLCBub3QgdW5pbml0aWFsaXplZC5cblxuSWYgaXQncyB0aGUgKmxhc3QqIElFIGFuZCB3ZSByZWFkIHBhc3QgYGVsZW1lbnRfbGVuYCwgdGhhdCdzIHJlYWRpbmcgcGFzdCB0aGUgKmVuZCBvZiB0aGUgYnVmZmVyKiwgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB0aGF0J3MgS0FTQU4gdGVycml0b3J5LlxuXG5TbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpczogVGhpcyBwYXRjaCBpcyBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGxvZ2ljIGVycm9ycyBjYXVzZWQgYnkgcGFyc2luZyBpbmNvcnJlY3RseSBzaXplZCBJRXMuIFRoZSBkYXRhIG1heSBjb250YWluIGp1bmsgYnV0IGlzIG1vc3QgbGlrZWx5IG5vdCBhbiAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCogYW5kIEtNU0FOIGlzbid0IGxpa2VseSBuZWVkZWQuXG5cbkRvdWJsZS1jaGVja2luZyBgbXdpZmlleF91cGRhdGVfYnNzX2Rlc2Nfd2l0aF9pZWA6ICBoZXJlIGl0J3MgY2hlY2tpbmcgYHRvdGFsX2llX2xlbmAsIHdoaWNoIGlzIHRoZSAqcmVtYWluaW5nKiBidWZmZXIgc2l6ZS4gSWYgdGhpcyBgdG90YWxfaWVfbGVuYCBpcyBsZXNzIHRoYW4gd2hhdCdzIG5lZWRlZCBmb3IgdGhlIHN0cnVjdCwgdGhlbiBpdCB3aWxsIHJlc3VsdCBpbiBhbiBPT0IsIGFuZCBLQVNBTiBzaG91bGQgY2F0Y2ggaXQuXG5cbioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuKipcblxuTXkgcmF0aW9uYWxlIGZvciB0aGUgZmluYWwgd3JpdGUtdXAgd2lsbCBiZSB0byBlbXBoYXNpemUgdGhhdCB0aGUgcGF0Y2ggZ3VhcmRzIGFnYWluc3QgcG90ZW50aWFsIE9PQiByZWFkcy4gSXQgc3RvcHMgdGhlIGNvZGUgZnJvbSBjYXN0aW5nIGEgcG9pbnRlciB0byBhbiBJRSBzdHJ1Y3R1cmUgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBJRSBvciByZW1haW5pbmcgYnVmZmVyIHNpemUuIFJlYWRpbmcgcGFzdCB0aGUgSUUgZGF0YSB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWZmZXIuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGZvciBkZXRlY3RpbmcgdGhlc2UgT09CIGlzc3Vlcy4gTm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEwNiwiT3V0cHV0VG9rZW5zIjoyMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMTU6MTQ6MjMuMDI1Njg0NjI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGxlbmd0aCBjaGVja3MgZm9yIHZhcmlvdXMgSW5mb3JtYXRpb24gRWxlbWVudHMgKElFcykgcGFyc2VkIGZyb20gbWFuYWdlbWVudCBmcmFtZXMgb3IgZmlybXdhcmUgZXZlbnRzIGluIHRoZSBtd2lmaWV4IGRyaXZlci4gV2l0aG91dCB0aGVzZSBjaGVja3MsIHRoZSBkcml2ZXIgbWF5IGNhc3QgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIChlLmcuLCBgc3RydWN0IGllZWU4MDIxMV9odF9jYXBgKSB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgSUUgbGVuZ3RoIG9yIHRoZSByZW1haW5pbmcgYnVmZmVyIGxlbmd0aC5cXG5cXG5JZiB0aGUgSUUgaXMgZm9sbG93ZWQgYnkgb3RoZXIgSUVzLCByZWFkaW5nIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIHdvdWxkIHJlc3VsdCBpbiByZWFkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYWRqYWNlbnQgSUVzICh3aGljaCBpcyBhIGxvZ2ljIGJ1ZywgYnV0IG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkKS4gSWYgdGhlIElFIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyAoT09CKSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci5cXG5cXG5PdXQtb2YtYm91bmRzIHJlYWRzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gaW5kaWNhdGlvbiB0aGF0IHRoaXMgaW52b2x2ZXMgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3VjaCBhcyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcyBvciB1bmluaXRpYWxpemVkIGhlYXAgYWxsb2NhdGlvbnMgYmVpbmcgbGVha2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdykuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBsZW5ndGggY2hlY2tzIGZvciB2YXJpb3VzIEluZm9ybWF0aW9uIEVsZW1lbnRzIChJRXMpIHBhcnNlZCBmcm9tIG1hbmFnZW1lbnQgZnJhbWVzIG9yIGZpcm13YXJlIGV2ZW50cyBpbiB0aGUgbXdpZmlleCBkcml2ZXIuIFdpdGhvdXQgdGhlc2UgY2hlY2tzLCB0aGUgZHJpdmVyIG1heSBjYXN0IGEgcG9pbnRlciB0byBhIHN0cnVjdHVyZSAoZS5nLiwgYHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwYCkgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIElFIGxlbmd0aCBvciB0aGUgcmVtYWluaW5nIGJ1ZmZlciBsZW5ndGguXFxuXFxuSWYgdGhlIElFIGlzIGZvbGxvd2VkIGJ5IG90aGVyIElFcywgcmVhZGluZyB0aGUgc3RydWN0dXJlIGZpZWxkcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGFkamFjZW50IElFcyAod2hpY2ggaXMgYSBsb2dpYyBidWcsIGJ1dCBub3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCkuIElmIHRoZSBJRSBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHJlYWRpbmcgdGhlIHN0cnVjdHVyZSBmaWVsZHMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgKE9PQikgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuXFxuXFxuT3V0LW9mLWJvdW5kcyByZWFkcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIGluZGljYXRpb24gdGhhdCB0aGlzIGludm9sdmVzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN1Y2ggYXMgdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMgb3IgdW5pbml0aWFsaXplZCBoZWFwIGFsbG9jYXRpb25zIGJlaW5nIGxlYWtlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cpLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[1] Phase: Succeeded StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 15:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 15:14:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2] Phase: Succeeded StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 15:14:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 15:14:34 +0000 UTC FinishedAt: 2026-08-14 15:14:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvm7g5/series-workflowvm7g5-convert-artifact-2894546199/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 15:14:44 +0000 UTC FinishedAt: 2026-08-14 15:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 15:14:44 +0000 UTC FinishedAt: 2026-08-14 15:39:06 +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:*486c0836-c0c4-44da-a8ce-53d2ed62920c,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-workflowvm7g5/series-workflowvm7g5-convert-artifact-2894546199/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": "ef77158a-021d-48c2-a56b-a7e3092832e5", "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-workflowvm7g5/series-workflowvm7g5-build-action-1958347373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 15:14:44 +0000 UTC FinishedAt: 2026-08-14 15:38:45 +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:*486c0836-c0c4-44da-a8ce-53d2ed62920c,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-workflowvm7g5/series-workflowvm7g5-convert-artifact-2894546199/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": "ef77158a-021d-48c2-a56b-a7e3092832e5", "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-workflowvm7g5/series-workflowvm7g5-build-action-1958347373/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 15:39:06 +0000 UTC FinishedAt: 2026-08-14 15:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 15:39:06 +0000 UTC FinishedAt: 2026-08-14 15:39:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 15:39:06 +0000 UTC FinishedAt: 2026-08-14 15:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 15:39:06 +0000 UTC FinishedAt: 2026-08-14 15:39:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvm7g5/series-workflowvm7g5-convert-artifact-790629958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 15:39:16 +0000 UTC FinishedAt: 2026-08-14 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 15:39:16 +0000 UTC FinishedAt: 2026-08-14 15:41:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ef77158a-021d-48c2-a56b-a7e3092832e5,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-workflowvm7g5/series-workflowvm7g5-build-action-1958347373/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-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 15:41:18 +0000 UTC FinishedAt: 2026-08-14 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 15:41:18 +0000 UTC FinishedAt: 2026-08-14 15:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 15:41:18 +0000 UTC FinishedAt: 2026-08-14 16:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 15:41:18 +0000 UTC FinishedAt: 2026-08-14 16:02:15 +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:*486c0836-c0c4-44da-a8ce-53d2ed62920c,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-workflowvm7g5/series-workflowvm7g5-convert-artifact-790629958/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": "23569a7e-e825-4e84-a5d6-2cbc8f335bcb", "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-workflowvm7g5/series-workflowvm7g5-build-action-1653379466/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 15:41:18 +0000 UTC FinishedAt: 2026-08-14 16:02:05 +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:*486c0836-c0c4-44da-a8ce-53d2ed62920c,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-workflowvm7g5/series-workflowvm7g5-convert-artifact-790629958/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": "23569a7e-e825-4e84-a5d6-2cbc8f335bcb", "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-workflowvm7g5/series-workflowvm7g5-build-action-1653379466/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 16:02:15 +0000 UTC FinishedAt: 2026-08-14 16:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 16:02:15 +0000 UTC FinishedAt: 2026-08-14 16:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 16:02:15 +0000 UTC FinishedAt: 2026-08-14 16:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 16:02:15 +0000 UTC FinishedAt: 2026-08-14 16:04: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:*23569a7e-e825-4e84-a5d6-2cbc8f335bcb,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-workflowvm7g5/series-workflowvm7g5-build-action-1653379466/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-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"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:*ef77158a-021d-48c2-a56b-a7e3092832e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23569a7e-e825-4e84-a5d6-2cbc8f335bcb,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-workflowvm7g5/series-workflowvm7g5-build-action-1958347373/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-workflowvm7g5/series-workflowvm7g5-build-action-1653379466/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:04:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"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-workflowvm7g5/series-workflowvm7g5-convert-artifact-3673141003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 16:04:18 +0000 UTC FinishedAt: 2026-08-14 16:04:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 16:04:28 +0000 UTC FinishedAt: 2026-08-14 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvm7g5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mwifiex_update_bss_desc_with_ie","mwifiex_set_sta_ht_cap"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MWIFIEX","MWIFIEX_USB","CFG80211","USB"],"series_id":"4d5ac225-d9cd-4e05-a7c5-56aa8cc1052b","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 16:04:28 +0000 UTC FinishedAt: 2026-08-14 16:05:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ef77158a-021d-48c2-a56b-a7e3092832e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23569a7e-e825-4e84-a5d6-2cbc8f335bcb,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-workflowvm7g5/series-workflowvm7g5-build-action-1958347373/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-workflowvm7g5/series-workflowvm7g5-build-action-1653379466/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-workflowvm7g5/series-workflowvm7g5-convert-artifact-3673141003/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,}