Name: series-workflowhk242 Phase: Succeeded StartedAt: 2026-09-05 04:01:18 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[0] Phase: Succeeded StartedAt: 2026-09-05 04:01:18 +0000 UTC FinishedAt: 2026-09-05 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 04:01:18 +0000 UTC FinishedAt: 2026-09-05 04:47:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS", "NTFS3_64BIT_CLUSTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS", "NTFS3_64BIT_CLUSTER" ], "series_id": "488285d4-d48e-4f21-be6b-43d1c714ec89" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_init_from_boot", "ntfs_fill_super", "ntfs_set_size", "ntfs_llseek" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDssCiAgICAmIzM0O05URlMzXzY0QklUX0NMVVNURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2luaXRfZnJvbV9ib290JiMzNDssCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX3NldF9zaXplJiMzNDssCiAgICAmIzM0O250ZnNfbGxzZWVrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZzL250ZnMzL3N1cGVyLmNgIHRvIGFzc2lnbiBgTUFYX0xGU19GSUxFU0laRWAgaW5zdGVhZCBvZiBgLTFgIHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSB1cGRhdGVzIGEgc2NhbGFyIGxpbWl0IHZhbHVlIHVzZWQgZm9yIGZpbGVzeXN0ZW0gc2l6ZSBib3VuZHMgY2hlY2tzIChlLmcuIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cdTAwM2VtYXhieXRlcyB3YXMgc2V0IHRvIC0xIChpbnRlcnByZXRlZCBhcyBuZWdhdGl2ZSBpbiBsb2ZmX3QgY29udGV4dHMpIHdoZW4gQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIgaXMgZW5hYmxlZCwgc2V0dGluZyBpdCB0byBNQVhfTEZTX0ZJTEVTSVpFIGluc3RlYWQuIFRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50IGxvZ2ljIGFuZCBzdWJzZXF1ZW50IGZpbGUgb3BlcmF0aW9ucyAoc3VjaCBhcyBsbHNlZWsgYW5kIHJlc2l6aW5nKSBvbiBudGZzMyBmaWxlc3lzdGVtcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkMjkyYjVkMzc5M2FhYjgxMWEzMjA5MzMwZDFiZDk5YTkxMzNkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA0OjQ1OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL3N1cGVyLmMgYi9mcy9udGZzMy9zdXBlci5jXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvc3VwZXIuY1xuQEAgLTEyMTAsNyAmIzQzOzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuIFxuICNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuIFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuLVx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAtMTtcbiYjNDM7XHRcdHNiaS1cdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG4gXHRzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuICNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OywKICAgICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7bnRmc19sbHNlZWsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQyOTJiNWQzNzkzYWFiODExYTMyMDkzMzBkMWJkOTlhOTEzM2Q1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzMy9zdXBlci5jIGIvZnMvbnRmczMvc3VwZXIuYwppbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NAotLS0gYS9mcy9udGZzMy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMzL3N1cGVyLmMKQEAgLTEyMTAsNyAmIzQzOzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLAogCiAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIKIAlpZiAoY2x1c3RlcnMgJmd0Oz0gKDF1bGwgJmx0OyZsdDsgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpCi0JCXNiaS0mZ3Q7bWF4Ynl0ZXMgPSAtMTsKJiM0MzsJCXNiaS0mZ3Q7bWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiaS0mZ3Q7bWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYi0mZ3Q7c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAjZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk2CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbiBOVEZTMyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFzIEkgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGZzL250ZnMzL3N1cGVyLmNgLiBUaGUgZGlmZiBpdHNlbGYgaXMgcmVsYXRpdmVseSBzbWFsbCwgYnV0IGFzIGFuIGV4cGVydCBpbiBmaWxlc3lzdGVtcywgSSBrbm93IHNtYWxsIGNoYW5nZXMgY2FuIGhhdmUgYmlnIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgY29yZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBrZXkgbGluZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgc2JpLSZndDttYXhieXRlc2AgaXMgaGFuZGxlZCB3aGVuIDY0LWJpdCBjbHVzdGVyIHN1cHBvcnQgaXMgZW5hYmxlZC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZSBmcm9tIHNldHRpbmcgYHNiaS0mZ3Q7bWF4Ynl0ZXNgIHRvIGAtMWAgdG8gc2V0dGluZyBpdCB0byBgTUFYX0xGU19GSUxFU0laRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBTZXR0aW5nIHRvIGAtMWAgbWlnaHQgaGF2ZSBiZWVuIGEgcXVpY2sgcGxhY2Vob2xkZXIsIG9yIGl0IG1pZ2h0IGhhdmUgYmVlbiBpbnRlbnRpb25hbCwgcGVyaGFwcyBhIHdheSB0byBmbGFnIGFuIG92ZXJmbG93LiBUaGUgdXNlIG9mIGBNQVhfTEZTX0ZJTEVTSVpFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgaW50ZW50IHRvIHN1cHBvcnQgbGFyZ2UgZmlsZSBzaXplcywgd2hpY2ggYWxpZ25zIHdpdGggNjQtYml0IGNsdXN0ZXJzLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LCBJIG5lZWQgdG8gbG9vayBhcm91bmQgdGhpcyBmaWxlIGFuZCB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIGBmcy9udGZzMy9gIGFuZCBhbnkgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIG9mIGBNQVhfTEZTX0ZJTEVTSVpFYCwgYHNiaS0mZ3Q7bWF4Ynl0ZXNgLCBvciB0aGUgYENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSYCBkaXJlY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG1heGJ5dGVzYCBwYXJhbWV0ZXIgaXMgdXNlZCBhbmQgaWYgb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gYWxzbyBuZWVkIGFkanVzdG1lbnQgZm9yIGxhcmdlciBmaWxlcy4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgcG90ZW50aWFsIG92ZXJmbG93cyBhbmQgdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBzbWFsbCBjaGFuZ2UsIGJ1dCBpdCByZXF1aXJlcyBhIGNhcmVmdWwsIHN5c3RlbWljIHZpZXcgb2YgTlRGUzMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFx0fVxuMTIwMzpcdFxuMTIwNDpcdFx0c2JpLVx1MDAzZWJsb2NrX21hc2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4xMjA1Olx0XHRzYmktXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbjEyMDY6XHRcdHNiaS1cdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVx1MDAzZXZvbHVtZS5zaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuMTIwNzpcdFxuMTIwODpcdFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG4xMjA5Olx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuMTIxMDpcdFxuMTIxMTpcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuMTIxMjpcdFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuMTIxMzpcdFx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuMTIxNDpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4xMjE1Olx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbjEyMTY6XHQjZWxzZVxuMTIxNzpcdFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbjEyMTg6XHRcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbjEyMTk6XHRcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG4xMjIwOlx0I2VuZGlmXG4xMjIxOlx0XG4xMjIyOlx0XHQvKlxuMTIyMzpcdFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxuMTIyNDpcdFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcbjEyMjU6XHRcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxuMTIyNjpcdFx0ICovXG4xMjI3Olx0XHRzYmktXHUwMDNlem9uZV9tYXggPSBtaW5fdChDTFNULCAweDIwMDAwMDAwIFx1MDAzZVx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFx1MDAzZVx1MDAzZSAzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IDA7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYmgtXHUwMDNlYl9ibG9ja25yIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTIzMjpcdFx0XHQvKlxuMTIzMzpcdFx0IFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXG4xMjM0Olx0XHQgXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICYjMzk7Y2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXG4xMjM1Olx0XHQgXHQgKiBMZXQgbnRmcyB0byBiZSBtb3VudGVkIGFuZCB1cGRhdGUgYm9vdCBsYXRlci5cbjEyMzY6XHRcdFx0ICovXG4xMjM3Olx0XHRcdCpib290MiA9IGttZW1kdXAoYm9vdCwgc2l6ZW9mKCpib290KSwgR0ZQX05PRlMgfCBfX0dGUF9OT1dBUk4pO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTM19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gIU5URlNfRlMgfHwgbVxuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgTkxTXG4gICA3Olx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBXaW5kb3dzIE9TIG5hdGl2ZSBmaWxlIHN5c3RlbSAoTlRGUykgc3VwcG9ydCB1cCB0byBOVEZTIHZlcnNpb24gMy4xLlxuICAxMDpcdFxuICAxMTpcdFx0ICBZIG9yIE0gZW5hYmxlcyB0aGUgTlRGUzMgZHJpdmVyIHdpdGggZnVsbCBmZWF0dXJlcyBlbmFibGVkIChyZWFkLFxuICAxMjpcdFx0ICB3cml0ZSwgam91cm5hbCByZXBsYXlpbmcsIHNwYXJzZS9jb21wcmVzc2VkIGZpbGVzIHN1cHBvcnQpLlxuICAxMzpcdFx0ICBGaWxlIHN5c3RlbSB0eXBlIHRvIHVzZSBvbiBtb3VudCBpcyBcJiMzNDtudGZzM1wmIzM0Oy4gTW9kdWxlIG5hbWUgKE0gb3B0aW9uKVxuICAxNDpcdFx0ICBpcyBhbHNvIFwmIzM0O250ZnMzXCYjMzQ7LlxuICAxNTpcdFxuICAxNjpcdFx0ICBEb2N1bWVudGF0aW9uOiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmczMucnN0XHUwMDNlXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5URlMzXzY0QklUX0NMVVNURVJcbiAgMTk6XHRcdGJvb2wgXCYjMzQ7NjQgYml0cyBwZXIgTlRGUyBjbHVzdGVyc1wmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GUyBcdTAwMjZcdTAwMjYgNjRCSVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBudGZzLnN5cyB1c2VzIDMyIGJpdHMgcGVyIGNsdXN0ZXJzLlxuICAyMzpcdFx0ICBJZiBhY3RpdmF0ZWQgNjQgYml0cyBwZXIgY2x1c3RlcnMgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgNGsgY2x1c3RlclxuICAyNDpcdFx0ICBmb3IgMTZUJiM0Mzsgdm9sdW1lcy4gV2luZG93cyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vdW50IHN1Y2ggdm9sdW1lcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgSXQgaXMgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTlRGUzNfTFpYX1hQUkVTU1xuICAyOTpcdFx0Ym9vbCBcJiMzNDthY3RpdmF0ZSBzdXBwb3J0IG9mIGV4dGVybmFsIGNvbXByZXNzaW9ucyBsengveHByZXNzXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE5URlMzX0ZTXG4gIDMxOlx0XHRoZWxwXG4gIDMyOlx0XHQgIEluIFdpbmRvd3MgMTAgb25lIGNhbiB1c2UgY29tbWFuZCBcJiMzNDtjb21wYWN0XCYjMzQ7IHRvIGNvbXByZXNzIGFueSBmaWxlcy5cbiAgMzM6XHRcdCAgNCBwb3NzaWJsZSB2YXJpYW50cyBvZiBjb21wcmVzc2lvbiBhcmU6IHhwcmVzczRrLCB4cHJlc3M4aywgeHByZXNzMTZrIGFuZCBsenguXG4gIDM0Olx0XHQgIElmIGFjdGl2YXRlZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHJlYWQgc3VjaCBmaWxlcyBjb3JyZWN0bHkuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIE5URlMzX0ZTXG4gIDQxOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0NDpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZSxcbiAgNDU6XHRcdCAgYW5kIHRoaXMgb3B0aW9uIHNlbGVjdHMgc3VwcG9ydCBmb3IgQUNMcyBzcGVjaWZpY2FsbHkgZm9yIG50ZnNcbiAgNDY6XHRcdCAgZmlsZXN5c3RlbXMuXG4gIDQ3Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ4Olx0XG4gIDQ5Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9udGZzMy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGUgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCwgYCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIEluc2lkZSB0aGF0IGJsb2NrLCB0aGUgY2hhbmdlIG9mIGludGVyZXN0IGlzIGBzYmktJmd0O21heGJ5dGVzID0gLTE7YCBub3cgYmVpbmcgc2V0IHRvIGBzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtgLiBUaGlzIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBmaWxlc3lzdGVtIGhhbmRsZXMgbWF4aW11bSBmaWxlIHNpemVzIHdoZW4gNjQtYml0IGNsdXN0ZXJzIGFyZSBlbmFibGVkLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93OiB3aGF0IGV4YWN0bHkgKmlzKiBgc2JpLSZndDttYXhieXRlc2A/IElzIGl0IGFuIGB1NjRgIHJlcHJlc2VudGluZyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgb3IgYSBgbG9mZl90YCwgdGhlIExpbnV4IGtlcm5lbCYjMzk7cyB0eXBlIGZvciBvZmZfdD8gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGhpZ2hseSBwcm9iYWJsZSBpdCYjMzk7cyB0aGUgbGF0dGVyLiBCdXQgaXQmIzM5O3MgaW1wZXJhdGl2ZSB0byBjb25maXJtIHRoaXMgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBudGZzX3NiX2luZm9gIHRvIHZlcmlmeSB0aGUgdHlwZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGdvdmVybmluZyBzdHJ1Y3R1cmUgZm9yIHRoZSBOVEZTIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24uIFByZWNpc2lvbiBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4Ynl0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvYXR0cmliLmM9MjUyNz1pbnQgYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCB1NjQgdmJvLCB1NjQgYnl0ZXMpXG4tLVxuZnMvbnRmczMvYXR0cmliLmMtMjU4Mi1cdCAqL1xuZnMvbnRmczMvYXR0cmliLmM6MjU4MzpcdGlmIChieXRlcyBcdTAwM2Ugc2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSAtIGFsbG9jX3NpemUpXG5mcy9udGZzMy9hdHRyaWIuYy0yNTg0LVx0XHRyZXR1cm4gLUVGQklHO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz0xNTUwPXN0YXRpYyBsb2ZmX3QgbnRmc19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NTMtXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBudGZzX2koaW5vZGUpO1xuZnMvbnRmczMvZmlsZS5jOjE1NTQ6XHRsb2ZmX3QgbWF4Ynl0ZXMgPSBudGZzX2dldF9tYXhieXRlcyhuaSk7XG5mcy9udGZzMy9maWxlLmMtMTU1NS1cdGxvZmZfdCByZXQ7XG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NTctXHRpZiAod2hlbmNlICE9IFNFRUtfREFUQSBcdTAwMjZcdTAwMjYgd2hlbmNlICE9IFNFRUtfSE9MRSkge1xuZnMvbnRmczMvZmlsZS5jOjE1NTg6XHRcdHJldCA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZShmaWxlLCBvZmZzZXQsIHdoZW5jZSwgbWF4Ynl0ZXMsXG5mcy9udGZzMy9maWxlLmMtMTU1OS1cdFx0XHRcdFx0ICAgICAgIGlfc2l6ZV9yZWFkKGlub2RlKSk7XG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NjgtXHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuZnMvbnRmczMvZmlsZS5jOjE1Njk6XHRcdFx0cmV0ID0gdmZzX3NldHBvcyhmaWxlLCByZXQsIG1heGJ5dGVzKTtcbmZzL250ZnMzL2ZpbGUuYy0xNTcwLVx0fVxuLS1cbmZzL250ZnMzL2lub2RlLmM9ODgzPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTg5MS1cdGlmIChpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSkge1xuZnMvbnRmczMvaW5vZGUuYzo4OTI6XHRcdGlmIChuZXdfc2l6ZSBcdTAwM2Ugc2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSkge1xuZnMvbnRmczMvaW5vZGUuYy04OTMtXHRcdFx0cmV0dXJuIC1FRkJJRztcbmZzL250ZnMzL2lub2RlLmMtODk0LVx0XHR9XG5mcy9udGZzMy9pbm9kZS5jOjg5NTpcdH0gZWxzZSBpZiAobmV3X3NpemUgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlcykge1xuZnMvbnRmczMvaW5vZGUuYy04OTYtXHRcdHJldHVybiAtRUZCSUc7XG4tLVxuZnMvbnRmczMvaW5vZGUuYz05MzM9c3RhdGljIGludCBudGZzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy05NTMtXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1JFUE9SVCkge1xuZnMvbnRmczMvaW5vZGUuYzo5NTQ6XHRcdGlmIChvZmZzZXQgXHUwMDNlIG50ZnNfZ2V0X21heGJ5dGVzKG5pKSkge1xuZnMvbnRmczMvaW5vZGUuYy05NTUtXHRcdFx0LyogY2FsbGVkIGZyb20gZmllbWFwL2JtYXAuICovXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTIxMj1zdHJ1Y3QgbnRmc19zYl9pbmZvIHtcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMwLVxuZnMvbnRmczMvbnRmc19mcy5oOjIzMTpcdHU2NCBtYXhieXRlczsgLy8gTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMyOlx0dTY0IG1heGJ5dGVzX3NwYXJzZTsgLy8gTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS5cbmZzL250ZnMzL250ZnNfZnMuaC0yMzMtXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTExOTQ9c3RhdGljIGlubGluZSBpbnQgaXNfcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC0xMTk4LVxuZnMvbnRmczMvbnRmc19mcy5oOjExOTk6c3RhdGljIGlubGluZSBsb2ZmX3QgbnRmc19nZXRfbWF4Ynl0ZXMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDAte1xuZnMvbnRmczMvbnRmc19mcy5oLTEyMDEtXHRzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmkgPSBuaS1cdTAwM2VtaS5zYmk7XG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMjpcdHJldHVybiBpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSA/IHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgOlxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6XHRcdFx0XHRcdFx0ICAgICBzYmktXHUwMDNlbWF4Ynl0ZXM7XG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC19XG4tLVxuZnMvbnRmczMvc3VwZXIuYz05Njg9c3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSxcbi0tXG5mcy9udGZzMy9zdXBlci5jLTEyMDgtXHQvKiBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTIwOTpcdHNiaS1cdTAwM2VtYXhieXRlcyA9IChjbHVzdGVycyBcdTAwM2NcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XG5mcy9udGZzMy9zdXBlci5jLTEyMTAtXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMjEyLVx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuZnMvbnRmczMvc3VwZXIuYzoxMjEzOlx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuZnMvbnRmczMvc3VwZXIuYzoxMjE0Olx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG5mcy9udGZzMy9zdXBlci5jOjEyMTU6XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbmZzL250ZnMzL3N1cGVyLmMtMTIxNi0jZWxzZVxuZnMvbnRmczMvc3VwZXIuYy0xMjE3LVx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTIxODpcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbmZzL250ZnMzL3N1cGVyLmM6MTIxOTpcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG5mcy9udGZzMy9zdXBlci5jLTEyMjAtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVEZTMyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0OiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBkaXNjcmVwYW5jeSBiZXR3ZWVuIGBzYmktJmd0O21heGJ5dGVzYCwgd2hpY2ggaXMgYSBgdTY0YCwgYW5kIHdoYXQgYG50ZnNfZ2V0X21heGJ5dGVzYCByZXR1cm5zLCB3aGljaCBpcyBhIGBsb2ZmX3RgLiBUaGUgZmFjdCB0aGF0IGBudGZzX2dldF9tYXhieXRlc2AgY2FuIHJldHVybiBgLTFgIGFzIGEgYGxvZmZfdGAgd2hlbiBgc2JpLSZndDttYXhieXRlc2AgaXMgZWZmZWN0aXZlbHkgYCh1NjQpLTFgIGlzIGEgcG90ZW50aWFsIGhlYWRhY2hlLiBUaGF0IHNpZ25lZG5lc3MgZGlmZmVyZW5jZS4uLiB0aGF0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGluIGZ1bmN0aW9ucyBsaWtlIGBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemVgLCBvciB3aGVuIHdlJiMzOTtyZSBkb2luZyBzaXplIGNoZWNrcyBpbiBgbnRmc19zZXRfc2l6ZWAgb3IgYG50ZnNfaW9tYXBfYmVnaW5gLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gZXhwbG9pdD8mIzM0OyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDtZZXMhJiMzNDsuIE5URlMzLCBiZWluZyBhIGZpbGVzeXN0ZW0sIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBpbWFnZXMgbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBtb3VudCBzeXNjYWxscy4gVGhhdCYjMzk7cyBicmVhZCBhbmQgYnV0dGVyIGZvciBTeXprYWxsZXIsIGFuZCB3ZSBjYW4gZWFzaWx5IHRlc3QgdGhpcyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSYjMzk7bSBnb2luZyB0byBuZWVkOiBgQ09ORklHX05URlMzX0ZTYCBhbmQgYENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSYCwgb2YgY291cnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBpcyBkZXBlbmRlbnQgb24gYCFOVEZTX0ZTIHx8IG1gIGFuZCBgTlRGUzNfNjRCSVRfQ0xVU1RFUmAgbmVlZHMgYE5URlMzX0ZTICZhbXA7JmFtcDsgNjRCSVRgLiBHb29kLCBnb29kLgoKRmluYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIE15IGxpc3QgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb246IGBudGZzX2luaXRfZnJvbV9ib290YCwgYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgLCBgbnRmc19pb21hcF9iZWdpbmAsIGFuZCBgbnRmc19maWxsX3N1cGVyYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGRyaWxsIGludG8gdG8gc2VlIHdoZXJlIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgbGl2ZXMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayB3aG8gY2FsbHMgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGFuZCBzZWUgd2hhdCB0aGF0IHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvcmVjb3JkLmM9MTk4PXN0cnVjdCBBVFRSSUIgKm1pX2VudW1fYXR0cihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBtZnRfaW5vZGUgKm1pLFxuLS1cbmZzL250ZnMzL3JlY29yZC5jLTMyMC1cdCAqIHdpdGhpbiB0aGUgdm9sdW1lIChzYmktXHUwMDNldXNlZC5iaXRtYXAubmJpdHMsIHNldCB1cCBpblxuZnMvbnRmczMvcmVjb3JkLmM6MzIxOlx0ICogbnRmc19pbml0X2Zyb21fYm9vdCgpIGJlZm9yZSBhbnkgY2FsbGVyIG9mIG1pX2VudW1fYXR0cigpIHJ1bnMpLlxuZnMvbnRmczMvcmVjb3JkLmMtMzIyLVx0ICogQm91bmRpbmcgZXZjbiBhbHNvIHByZXZlbnRzIGEgbWFsZm9ybWVkIHZhbHVlIGNsb3NlIHRvIFU2NF9NQVhcbi0tXG5mcy9udGZzMy9zdXBlci5jPTk0OT1zdGF0aWMgdTMyIHRydWVfc2VjdG9yc19wZXJfY2xzdChjb25zdCBzdHJ1Y3QgTlRGU19CT09UICpib290KVxuLS1cbmZzL250ZnMzL3N1cGVyLmMtOTU4LS8qXG5mcy9udGZzMy9zdXBlci5jOjk1OTogKiBudGZzX2luaXRfZnJvbV9ib290IC0gSW5pdCBpbnRlcm5hbCBpbmZvIGZyb20gb24tZGlzayBib290IHNlY3Rvci5cbmZzL250ZnMzL3N1cGVyLmMtOTYwLSAqXG4tLVxuZnMvbnRmczMvc3VwZXIuYy05NjctICovXG5mcy9udGZzMy9zdXBlci5jOjk2ODpzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuZnMvbnRmczMvc3VwZXIuYy05NjktXHRcdFx0ICAgICAgIHU2NCBkZXZfc2l6ZSwgc3RydWN0IE5URlNfQk9PVCAqKmJvb3QyKVxuLS1cbmZzL250ZnMzL3N1cGVyLmM9MTI2Nz1zdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMzI5LVx0LyogUGFyc2UgYm9vdC4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTMzMDpcdGVyciA9IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc2IsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpLFxuZnMvbnRmczMvc3VwZXIuYy0xMzMxLVx0XHRcdFx0ICBiZGV2X25yX2J5dGVzKGJkZXYpLCBcdTAwMjZib290Mik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjkKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMzIEluaXRpYWxpemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBudGZzX2luaXRfZnJvbV9ib290YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvbnRmczMvc3VwZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGluaXRpYWxpemluZyB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gVGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGl0c2VsZiwgYG50ZnNfZmlsbF9zdXBlcmAsIGBudGZzX3NldF9zaXplYCwgYW5kIGBudGZzX2xsc2Vla2AuIFRoZXNlIGFyZSB0aGUgcmVsYXRlZCBzeW1ib2xzLCB0aGUgY2FsbCBwYXRocyBmb3IgdGhpcyBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYXQgcGxheSBoZXJlLiBJdCBsb29rcyBsaWtlIGBOVEZTM19GU2AgYW5kIGBOVEZTM182NEJJVF9DTFVTVEVSYCBhcmUgdGhlIGtleSBmbGFncyBpbnZvbHZlZC4gNjQtYml0IGNsdXN0ZXIgdm9sdW1lcywgdGhhdCYjMzk7cyBzaWduaWZpY2FudC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBOVEZTMyB2b2x1bWVzIHdpdGggNjQtYml0IGNsdXN0ZXJzLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlcyBob3cgdGhlIGBzYmktJmd0O21heGJ5dGVzYCBsaW1pdCBpcyBzZXQuIFRoYXQgaGFzIGRpcmVjdCBpbXBsaWNhdGlvbnMgb24gZmlsZSBzaXplIGNoZWNrcyBhbmQgaG93IHRoZSBzeXN0ZW0gc2Vla3Mgd2l0aGluIGZpbGVzIG9uIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0uIFRoaXMgY291bGQgcmV2ZWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGZpbGUgc2l6ZSBsaW1pdHMgb3Igc2VlayBoYW5kbGluZywgd2hpY2ggYXJlIHdlbGwta25vd24gYXJlYXMgZm9yIHBvdGVudGlhbCBleHBsb2l0YXRpb24uCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IHN1bW1hcnkgaXMgY2xlYW46IEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05URlMzX0ZTJiMzNDssICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7XSwgRm9jdXNTeW1ib2xzOiBbJiMzNDtudGZzX2luaXRfZnJvbV9ib290JiMzNDssICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssICYjMzQ7bnRmc19zZXRfc2l6ZSYjMzQ7LCAmIzM0O250ZnNfbGxzZWVrJiMzNDtdLCBhbmQgdGhlIGNvbmNpc2UgcmVhc29uaW5nLCB3aGljaCBJJiMzOTt2ZSBhZGRyZXNzZWQgYWJvdmUuICpXb3J0aEZ1enppbmc6IHRydWUqLiBZdXAsIGFsbCBjaGVja3Mgb3V0LiBUaGlzIGlzIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OywKICAgICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7bnRmc19sbHNlZWsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTM19GUyYjMzQ7LAogICAgJiMzNDtOVEZTM182NEJJVF9DTFVTVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pbml0X2Zyb21fYm9vdCYjMzQ7LAogICAgJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnRmc19zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtudGZzX2xsc2VlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSB3aGVyZSBzYmktXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkMjkyYjVkMzc5M2FhYjgxMWEzMjA5MzMwZDFiZDk5YTkxMzNkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA0OjQ1OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmczMvc3VwZXIuYyBiL2ZzL250ZnMzL3N1cGVyLmMKaW5kZXggZjRhNDJhMGM3M2E0NC4uZDMwOTNmNzJlYTM4MSAxMDA2NDQKLS0tIGEvZnMvbnRmczMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9zdXBlci5jCkBAIC0xMjEwLDcgJiM0MzsxMjEwLDcgQEAgc3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSwKIAogI2lmZGVmIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSCiAJaWYgKGNsdXN0ZXJzICZndDs9ICgxdWxsICZsdDsmbHQ7ICg2NCAtIGNsdXN0ZXJfYml0cykpKQotCQlzYmktJmd0O21heGJ5dGVzID0gLTE7CiYjNDM7CQlzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYmktJmd0O21heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7CiAJc2ItJmd0O3NfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogI2Vsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIFN1cGVyYmxvY2sgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gYGZzL250ZnMzL3N1cGVyLmNgLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvZGUsIHNvIGxldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxMjEwLiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgY29udGV4dCBiZWZvcmUgZGl2aW5nIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE5NTpcdFx0cmVjLVx1MDAzZXVzZWQgPSBjcHVfdG9fbGUzMihhbyAmIzQzOyBBTElHTihzaXplb2YoZW51bSBBVFRSX1RZUEUpLCA4KSk7XG4xMTk2Olx0XHRyZWMtXHUwMDNldG90YWwgPSBjcHVfdG9fbGUzMihzYmktXHUwMDNlcmVjb3JkX3NpemUpO1xuMTE5NzpcdFx0KChzdHJ1Y3QgQVRUUklCICopQWRkMlB0cihyZWMsIGFvKSktXHUwMDNldHlwZSA9IEFUVFJfRU5EO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHNiLCBtaW5fdCh1MzIsIHNiaS1cdTAwM2VjbHVzdGVyX3NpemUsIFBBR0VfU0laRSkpKSB7XG4xMjAwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFx0fVxuMTIwMzpcdFxuMTIwNDpcdFx0c2JpLVx1MDAzZWJsb2NrX21hc2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4xMjA1Olx0XHRzYmktXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbjEyMDY6XHRcdHNiaS1cdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVx1MDAzZXZvbHVtZS5zaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuMTIwNzpcdFxuMTIwODpcdFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG4xMjA5Olx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuMTIxMDpcdFxuMTIxMTpcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuMTIxMjpcdFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuMTIxMzpcdFx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuMTIxNDpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4xMjE1Olx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbjEyMTY6XHQjZWxzZVxuMTIxNzpcdFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbjEyMTg6XHRcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbjEyMTk6XHRcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG4xMjIwOlx0I2VuZGlmXG4xMjIxOlx0XG4xMjIyOlx0XHQvKlxuMTIyMzpcdFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxuMTIyNDpcdFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcbjEyMjU6XHRcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxuMTIyNjpcdFx0ICovXG4xMjI3Olx0XHRzYmktXHUwMDNlem9uZV9tYXggPSBtaW5fdChDTFNULCAweDIwMDAwMDAwIFx1MDAzZVx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFx1MDAzZVx1MDAzZSAzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IDA7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYmgtXHUwMDNlYl9ibG9ja25yIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTIzMjpcdFx0XHQvKlxuMTIzMzpcdFx0IFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXG4xMjM0Olx0XHQgXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICYjMzk7Y2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTlRGUzMgQ29kZWJhc2U6IEZpbmRpbmcgbWF4Ynl0ZXMgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHNiaS0mZ3Q7bWF4Ynl0ZXNgIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgYGZzL250ZnMzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byB0aGUgbWF4aW11bSBzaXplIG9mIHNvbWV0aGluZywgZWl0aGVyIGEgZmlsZSwgYW4gYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gdXNlIGBncmVwYCAob3IgbXkgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSkuIEkmIzM5O2xsIGV4ZWN1dGUgdGhlIGBncmVwYCBzZWFyY2guIEkgd2FudCB0byBzZWUgYSBmdWxsIGxpc3Qgb2YgbG9jYXRpb25zIHdoZXJlIGBzYmktJmd0O21heGJ5dGVzYCBpcyByZWZlcmVuY2VkIHNvIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgTlRGUzMgY29kZS4KCk9uY2UgSSBoYXZlIHRoYXQgbGlzdCwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UuIElzIGl0IGJlaW5nIHJlYWQ/IFdyaXR0ZW4/IEhvdyBpcyBpdCBiZWluZyB1c2VkIGluIGNhbGN1bGF0aW9ucyBvciBjb21wYXJpc29ucz8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW5vZGUsIHRoZSBzdXBlcmJsb2NrLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBjcml0aWNhbC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKndoZXJlKi4gSXMgaXQgYSBsaW1pdCBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIGlzIGl0IGEgZ2xvYmFsIHN5c3RlbS13aWRlIHNldHRpbmc/IElzIGl0IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgb3IgaXMgaXQgZGVyaXZlZD8KClRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYG1heGJ5dGVzYCBpbiB0aGUgZmlsZSBzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uIGFuZCwgaW1wb3J0YW50bHksICp3aHkqIHRoYXQgbGltaXQgZXhpc3RzIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCB0byBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXhieXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2F0dHJpYi5jPTI1Mjc9aW50IGF0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgdTY0IHZibywgdTY0IGJ5dGVzKVxuLS1cbmZzL250ZnMzL2F0dHJpYi5jLTI1ODItXHQgKi9cbmZzL250ZnMzL2F0dHJpYi5jOjI1ODM6XHRpZiAoYnl0ZXMgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgLSBhbGxvY19zaXplKVxuZnMvbnRmczMvYXR0cmliLmMtMjU4NC1cdFx0cmV0dXJuIC1FRkJJRztcbi0tXG5mcy9udGZzMy9maWxlLmM9MTU1MD1zdGF0aWMgbG9mZl90IG50ZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTUzLVx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbmZzL250ZnMzL2ZpbGUuYzoxNTU0Olx0bG9mZl90IG1heGJ5dGVzID0gbnRmc19nZXRfbWF4Ynl0ZXMobmkpO1xuZnMvbnRmczMvZmlsZS5jLTE1NTUtXHRsb2ZmX3QgcmV0O1xuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTU3LVx0aWYgKHdoZW5jZSAhPSBTRUVLX0RBVEEgXHUwMDI2XHUwMDI2IHdoZW5jZSAhPSBTRUVLX0hPTEUpIHtcbmZzL250ZnMzL2ZpbGUuYzoxNTU4Olx0XHRyZXQgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemUoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIG1heGJ5dGVzLFxuZnMvbnRmczMvZmlsZS5jLTE1NTktXHRcdFx0XHRcdCAgICAgICBpX3NpemVfcmVhZChpbm9kZSkpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTY4LVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbmZzL250ZnMzL2ZpbGUuYzoxNTY5Olx0XHRcdHJldCA9IHZmc19zZXRwb3MoZmlsZSwgcmV0LCBtYXhieXRlcyk7XG5mcy9udGZzMy9maWxlLmMtMTU3MC1cdH1cbi0tXG5mcy9udGZzMy9pbm9kZS5jPTg4Mz1pbnQgbnRmc19zZXRfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X3NpemUpXG4tLVxuZnMvbnRmczMvaW5vZGUuYy04OTEtXHRpZiAoaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkpIHtcbmZzL250ZnMzL2lub2RlLmM6ODkyOlx0XHRpZiAobmV3X3NpemUgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UpIHtcbmZzL250ZnMzL2lub2RlLmMtODkzLVx0XHRcdHJldHVybiAtRUZCSUc7XG5mcy9udGZzMy9pbm9kZS5jLTg5NC1cdFx0fVxuZnMvbnRmczMvaW5vZGUuYzo4OTU6XHR9IGVsc2UgaWYgKG5ld19zaXplIFx1MDAzZSBzYmktXHUwMDNlbWF4Ynl0ZXMpIHtcbmZzL250ZnMzL2lub2RlLmMtODk2LVx0XHRyZXR1cm4gLUVGQklHO1xuLS1cbmZzL250ZnMzL2lub2RlLmM9OTMzPXN0YXRpYyBpbnQgbnRmc19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtOTUzLVx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9SRVBPUlQpIHtcbmZzL250ZnMzL2lub2RlLmM6OTU0Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSBudGZzX2dldF9tYXhieXRlcyhuaSkpIHtcbmZzL250ZnMzL2lub2RlLmMtOTU1LVx0XHRcdC8qIGNhbGxlZCBmcm9tIGZpZW1hcC9ibWFwLiAqL1xuLS1cbmZzL250ZnMzL250ZnNfZnMuaD0yMTI9c3RydWN0IG50ZnNfc2JfaW5mbyB7XG4tLVxuZnMvbnRmczMvbnRmc19mcy5oLTIzMC1cbmZzL250ZnMzL250ZnNfZnMuaDoyMzE6XHR1NjQgbWF4Ynl0ZXM7IC8vIE1heGltdW0gc2l6ZSBmb3Igbm9ybWFsIGZpbGVzLlxuZnMvbnRmczMvbnRmc19mcy5oOjIzMjpcdHU2NCBtYXhieXRlc19zcGFyc2U7IC8vIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMzLVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaD0xMTk0PXN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmgtMTE5OC1cbmZzL250ZnMzL250ZnNfZnMuaDoxMTk5OnN0YXRpYyBpbmxpbmUgbG9mZl90IG50ZnNfZ2V0X21heGJ5dGVzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAwLXtcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAxLVx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gbmktXHUwMDNlbWkuc2JpO1xuZnMvbnRmczMvbnRmc19mcy5oOjEyMDI6XHRyZXR1cm4gaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkgPyBzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlIDpcbmZzL250ZnMzL250ZnNfZnMuaDoxMjAzOlx0XHRcdFx0XHRcdCAgICAgc2JpLVx1MDAzZW1heGJ5dGVzO1xuZnMvbnRmczMvbnRmc19mcy5oLTEyMDQtfVxuLS1cbmZzL250ZnMzL3N1cGVyLmM9OTY4PXN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMjA4LVx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG5mcy9udGZzMy9zdXBlci5jOjEyMDk6XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuZnMvbnRmczMvc3VwZXIuYy0xMjEwLVxuLS1cbmZzL250ZnMzL3N1cGVyLmMtMTIxMi1cdGlmIChjbHVzdGVycyBcdTAwM2U9ICgxdWxsIFx1MDAzY1x1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcbmZzL250ZnMzL3N1cGVyLmM6MTIxMzpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbmZzL250ZnMzL3N1cGVyLmM6MTIxNDpcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuZnMvbnRmczMvc3VwZXIuYzoxMjE1Olx0c2ItXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG5mcy9udGZzMy9zdXBlci5jLTEyMTYtI2Vsc2VcbmZzL250ZnMzL3N1cGVyLmMtMTIxNy1cdC8qIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuICovXG5mcy9udGZzMy9zdXBlci5jOjEyMTg6XHRzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gKDF1bGwgXHUwMDNjXHUwMDNjIChjbHVzdGVyX2JpdHMgJiM0MzsgMzIpKSAtIDE7XG5mcy9udGZzMy9zdXBlci5jOjEyMTk6XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcdTAwM2NcdTAwM2MgY2x1c3Rlcl9iaXRzO1xuZnMvbnRmczMvc3VwZXIuYy0xMjIwLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM0CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDc0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUzMgRmlsZSBTaXplIExpbWl0IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9udGZzMy9zdXBlci5jYCB0aGF0IGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBob3cgdGhlIE5URlMzIGZpbGVzeXN0ZW0gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBmaWxlIHNpemUgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldHRpbmcgYHNiaS0mZ3Q7bWF4Ynl0ZXMgPSAtMWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCB3aGljaCBzZWVtcyBpbm5vY2VudCBlbm91Z2ggYXQgZmlyc3QuIEhvd2V2ZXIsIHdoZW4geW91IGNhc3QgdGhhdCBgLTFgICh3aGljaCwgYXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIGlzIGVxdWl2YWxlbnQgdG8gYDB4RkZGRkZGRkZGRkZGRkZGRmApIHRvIGEgc2lnbmVkIGBsb2ZmX3RgLCB5b3UgZW5kIHVwIHdpdGgsIHdlbGwsIGAtMWAuIFRoaXMgdGhlbiBjYXVzZXMgcHJvYmxlbXMgd2hlbiBgbnRmc19nZXRfbWF4Ynl0ZXNgIGlzIGNhbGxlZCBhbmQgY29tcGFyZXMgdGhlIG9mZnNldCB0byBgc2JpLSZndDttYXhieXRlc2AsIG9yIHRoZSBgZ2VuZXJpY19maWxlX2xsc2Vla19zaXplYCwgYHZmc19zZXRwb3NgIGZ1bmN0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgaW50ZWdlciBvdmVyZmxvdy9zaWduZWRuZXNzIGlzc3Vlcywgd2hpY2ggY2FuIGxlYWQgdG8gZmlsZSBzaXplIGxpbWl0cyBiZWluZyBpbmNvcnJlY3RseSBlbmZvcmNlZC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVwbGFjZXMgdGhpcyB3aXRoIGBzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRWAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYExMT05HX01BWGAgb3Igc2ltaWxhciwgZGVwZW5kZW50IG9uIGFyY2hpdGVjdHVyZS4gVGhpcyBlbnN1cmVzIGEgcHJvcGVyIHVwcGVyIGJvdW5kLiBUaGUgYWltIGlzIHRvIHJlc29sdmUgdGhlIG92ZXJmbG93IHByb2JsZW1zLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKKiAgIE5vLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGV4cG9zZWQuCiogICBObywgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoqICAgTm8sIHdlJiMzOTtyZSBub3QgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4KKiAgIE5vLCBpdCYjMzk7cyBub3QgYSBib3VuZHMgY2hlY2sgaXNzdWUuIEl0JiMzOTtzIGFib3V0IHNldHRpbmcgdGhlIHVwcGVyIGJvdW5kIG9mIGEgKnZhbGlkKiBmaWxlIHNpemUuCiogICBObywgSSBjYW4mIzM5O3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSBLTVNBTiB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBmaWxlIHNpemUgbGltaXQgY2FsY3VsYXRpb24sIGludGVnZXIgb3ZlcmZsb3csIGFuZCBzaWduZWRuZXNzIGJ1Zy4gVGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBLQVNBTiwgc3l6a2FsbGVyLCBhbmQgZ2VuZXJhbCBmaWxlc3lzdGVtIHRlc3Rpbmcg4oCTIHNob3VsZCBjYXRjaCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQgaGVyZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgb3VyIEtNU0FOIHJlYXNvbmluZyB0byBkb3VibGUtY2hlY2s6CgoqICAgVGhlIHBhdGNoICpmaXhlcyogdGhlIGNhbGN1bGF0aW9uIG9mIGBzYmktJmd0O21heGJ5dGVzYCBpbiBgbnRmc19pbml0X2Zyb21fYm9vdCgpYCB3aGVuIHVzaW5nIDY0LWJpdCBjbHVzdGVycyBieSBzZXR0aW5nIGl0IHRvIGEgbWVhbmluZ2Z1bCBtYXhpbXVtIGZpbGUgc2l6ZSwgcHJldmVudGluZyBuZWdhdGl2ZSBvciBpbmNvcnJlY3Qgc2l6ZSBsaW1pdHMuCiogICBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKGhlYXAsIHN0YWNrLCBsZWFrcykuIFRoaXMgcGF0Y2ggbWVyZWx5ICpzZXRzKiBhIHNpbmdsZSBzY2FsYXIgZmllbGQgb24gdGhlIHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUgKGBzYmktJmd0O21heGJ5dGVzYCkuIEl0IGRvZXNuJiMzOTt0IGFsbG9jYXRlIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9taXQgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuCiogICBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZzL250ZnMzL3N1cGVyLmNgIHRvIGFzc2lnbiBgTUFYX0xGU19GSUxFU0laRWAgaW5zdGVhZCBvZiBgLTFgIHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSB1cGRhdGVzIGEgc2NhbGFyIGxpbWl0IHZhbHVlIHVzZWQgZm9yIGZpbGVzeXN0ZW0gc2l6ZSBib3VuZHMgY2hlY2tzIChlLmcuIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDU6NTQuNzQzNDkzMzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3NTYyODYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIixcbiAgICBcIk5URlMzXzY0QklUX0NMVVNURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gICAgXCJudGZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm50ZnNfc2V0X3NpemVcIixcbiAgICBcIm50ZnNfbGxzZWVrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSB3aGVyZSBzYmktXFx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NTo1NC43NDM1MTA5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjY3MTkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZDI5MmI1ZDM3OTNhYWI4MTFhMzIwOTMzMGQxYmQ5OWE5MTMzZDU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvc3VwZXIuYyBiL2ZzL250ZnMzL3N1cGVyLmNcXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMzL3N1cGVyLmNcXG4rKysgYi9mcy9udGZzMy9zdXBlci5jXFxuQEAgLTEyMTAsNyArMTIxMCw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXFxuIFxcbiAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJcXG4gXFx0aWYgKGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxcbi1cXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gLTE7XFxuK1xcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbiBcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuIFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gI2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDU6NTYuMTcwOTg0MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMjc5MDcwMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCIsXG4gICAgXCJOVEZTM182NEJJVF9DTFVTVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pbml0X2Zyb21fYm9vdFwiLFxuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX3NldF9zaXplXCIsXG4gICAgXCJudGZzX2xsc2Vla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQyOTJiNWQzNzkzYWFiODExYTMyMDkzMzBkMWJkOTlhOTEzM2Q1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9zdXBlci5jIGIvZnMvbnRmczMvc3VwZXIuY1xuaW5kZXggZjRhNDJhMGM3M2E0NC4uZDMwOTNmNzJlYTM4MSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL3N1cGVyLmNcbisrKyBiL2ZzL250ZnMzL3N1cGVyLmNcbkBAIC0xMjEwLDcgKzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuIFxuICNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuIFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuLVx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAtMTtcbitcdFx0c2JpLVx1MDAzZW1heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG4gI2Vsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ1OjU2LjE3MDk4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNzgyMTg1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZnMvbnRmczMvc3VwZXIuY2AuIFRoZSBkaWZmIGl0c2VsZiBpcyByZWxhdGl2ZWx5IHNtYWxsLCBidXQgYXMgYW4gZXhwZXJ0IGluIGZpbGVzeXN0ZW1zLCBJIGtub3cgc21hbGwgY2hhbmdlcyBjYW4gaGF2ZSBiaWcgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGVzZSBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVGhlIGtleSBsaW5lIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGlzIGhhbmRsZWQgd2hlbiA2NC1iaXQgY2x1c3RlciBzdXBwb3J0IGlzIGVuYWJsZWQuXG5cblNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgY2hhbmdlIGZyb20gc2V0dGluZyBgc2JpLVx1MDAzZW1heGJ5dGVzYCB0byBgLTFgIHRvIHNldHRpbmcgaXQgdG8gYE1BWF9MRlNfRklMRVNJWkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB3YXMgY2hhbmdlZC4gU2V0dGluZyB0byBgLTFgIG1pZ2h0IGhhdmUgYmVlbiBhIHF1aWNrIHBsYWNlaG9sZGVyLCBvciBpdCBtaWdodCBoYXZlIGJlZW4gaW50ZW50aW9uYWwsIHBlcmhhcHMgYSB3YXkgdG8gZmxhZyBhbiBvdmVyZmxvdy4gVGhlIHVzZSBvZiBgTUFYX0xGU19GSUxFU0laRWAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGludGVudCB0byBzdXBwb3J0IGxhcmdlIGZpbGUgc2l6ZXMsIHdoaWNoIGFsaWducyB3aXRoIDY0LWJpdCBjbHVzdGVycy5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LCBJIG5lZWQgdG8gbG9vayBhcm91bmQgdGhpcyBmaWxlIGFuZCB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIGBmcy9udGZzMy9gIGFuZCBhbnkgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYE1BWF9MRlNfRklMRVNJWkVgLCBgc2JpLVx1MDAzZW1heGJ5dGVzYCwgb3IgdGhlIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAgZGlyZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtYXhieXRlc2AgcGFyYW1ldGVyIGlzIHVzZWQgYW5kIGlmIG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIGFsc28gbmVlZCBhZGp1c3RtZW50IGZvciBsYXJnZXIgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIHNtYWxsIGNoYW5nZSwgYnV0IGl0IHJlcXVpcmVzIGEgY2FyZWZ1bCwgc3lzdGVtaWMgdmlldyBvZiBOVEZTMy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NiwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjAyLjM0OTIwNjY4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjEyMDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIwMjpcXHRcXHR9XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHNiaS1cXHUwMDNlYmxvY2tfbWFzayA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XFxuMTIwNTpcXHRcXHRzYmktXFx1MDAzZWJsb2Nrc19wZXJfY2x1c3RlciA9IHNiaS1cXHUwMDNlY2x1c3Rlcl9zaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbjEyMDY6XFx0XFx0c2JpLVxcdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVxcdTAwM2V2b2x1bWUuc2l6ZSBcXHUwMDNlXFx1MDAzZSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXFxuMTIwOTpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gKGNsdXN0ZXJzIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xcbjEyMTA6XFx0XFxuMTIxMTpcXHQjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJcXG4xMjEyOlxcdFxcdGlmIChjbHVzdGVycyBcXHUwMDNlPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcXG4xMjEzOlxcdFxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTQ6XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTU6XFx0XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTY6XFx0I2Vsc2VcXG4xMjE3OlxcdFxcdC8qIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuICovXFxuMTIxODpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9ICgxdWxsIFxcdTAwM2NcXHUwMDNjIChjbHVzdGVyX2JpdHMgKyAzMikpIC0gMTtcXG4xMjE5OlxcdFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcXHUwMDNjXFx1MDAzYyBjbHVzdGVyX2JpdHM7XFxuMTIyMDpcXHQjZW5kaWZcXG4xMjIxOlxcdFxcbjEyMjI6XFx0XFx0LypcXG4xMjIzOlxcdFxcdCAqIENvbXB1dGUgdGhlIE1GVCB6b25lIGF0IHR3byBzdGVwcy5cXG4xMjI0OlxcdFxcdCAqIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgYXJlIGFibGUgdG8gYWxsb2NhdGUgMS84IG9mXFxuMTIyNTpcXHRcXHQgKiB0b3RhbCBjbHVzdGVycyBmb3IgTUZUIGJ1dCBub3QgbW9yZSB0aGVuIDUxMiBNQi5cXG4xMjI2OlxcdFxcdCAqL1xcbjEyMjc6XFx0XFx0c2JpLVxcdTAwM2V6b25lX21heCA9IG1pbl90KENMU1QsIDB4MjAwMDAwMDAgXFx1MDAzZVxcdTAwM2UgY2x1c3Rlcl9iaXRzLCBjbHVzdGVycyBcXHUwMDNlXFx1MDAzZSAzKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0ZXJyID0gMDtcXG4xMjMwOlxcdFxcbjEyMzE6XFx0XFx0aWYgKGJoLVxcdTAwM2ViX2Jsb2NrbnIgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4xMjMyOlxcdFxcdFxcdC8qXFxuMTIzMzpcXHRcXHQgXFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXFxuMTIzNDpcXHRcXHQgXFx0ICogRG8gbm90IHVwZGF0ZSBwcmltYXJ5IGJvb3QgaGVyZSAnY2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXFxuMTIzNTpcXHRcXHQgXFx0ICogTGV0IG50ZnMgdG8gYmUgbW91bnRlZCBhbmQgdXBkYXRlIGJvb3QgbGF0ZXIuXFxuMTIzNjpcXHRcXHRcXHQgKi9cXG4xMjM3OlxcdFxcdFxcdCpib290MiA9IGttZW1kdXAoYm9vdCwgc2l6ZW9mKCpib290KSwgR0ZQX05PRlMgfCBfX0dGUF9OT1dBUk4pO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjAyLjM0OTMwNDIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTM19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFdpbmRvd3MgT1MgbmF0aXZlIGZpbGUgc3lzdGVtIChOVEZTKSBzdXBwb3J0IHVwIHRvIE5URlMgdmVyc2lvbiAzLjEuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgWSBvciBNIGVuYWJsZXMgdGhlIE5URlMzIGRyaXZlciB3aXRoIGZ1bGwgZmVhdHVyZXMgZW5hYmxlZCAocmVhZCxcXG4gIDEyOlxcdFxcdCAgd3JpdGUsIGpvdXJuYWwgcmVwbGF5aW5nLCBzcGFyc2UvY29tcHJlc3NlZCBmaWxlcyBzdXBwb3J0KS5cXG4gIDEzOlxcdFxcdCAgRmlsZSBzeXN0ZW0gdHlwZSB0byB1c2Ugb24gbW91bnQgaXMgXFxcIm50ZnMzXFxcIi4gTW9kdWxlIG5hbWUgKE0gb3B0aW9uKVxcbiAgMTQ6XFx0XFx0ICBpcyBhbHNvIFxcXCJudGZzM1xcXCIuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbjogXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzMy5yc3RcXHUwMDNlXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBOVEZTM182NEJJVF9DTFVTVEVSXFxuICAxOTpcXHRcXHRib29sIFxcXCI2NCBiaXRzIHBlciBOVEZTIGNsdXN0ZXJzXFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTM19GUyBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIG50ZnMuc3lzIHVzZXMgMzIgYml0cyBwZXIgY2x1c3RlcnMuXFxuICAyMzpcXHRcXHQgIElmIGFjdGl2YXRlZCA2NCBiaXRzIHBlciBjbHVzdGVycyB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZSA0ayBjbHVzdGVyXFxuICAyNDpcXHRcXHQgIGZvciAxNlQrIHZvbHVtZXMuIFdpbmRvd3Mgd2lsbCBub3QgYmUgYWJsZSB0byBtb3VudCBzdWNoIHZvbHVtZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgSXQgaXMgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE5URlMzX0xaWF9YUFJFU1NcXG4gIDI5OlxcdFxcdGJvb2wgXFxcImFjdGl2YXRlIHN1cHBvcnQgb2YgZXh0ZXJuYWwgY29tcHJlc3Npb25zIGx6eC94cHJlc3NcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEluIFdpbmRvd3MgMTAgb25lIGNhbiB1c2UgY29tbWFuZCBcXFwiY29tcGFjdFxcXCIgdG8gY29tcHJlc3MgYW55IGZpbGVzLlxcbiAgMzM6XFx0XFx0ICA0IHBvc3NpYmxlIHZhcmlhbnRzIG9mIGNvbXByZXNzaW9uIGFyZTogeHByZXNzNGssIHhwcmVzczhrLCB4cHJlc3MxNmsgYW5kIGx6eC5cXG4gIDM0OlxcdFxcdCAgSWYgYWN0aXZhdGVkIHlvdSB3aWxsIGJlIGFibGUgdG8gcmVhZCBzdWNoIGZpbGVzIGNvcnJlY3RseS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXFxuICAzOTpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xcbiAgNDE6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQ0OlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUsXFxuICA0NTpcXHRcXHQgIGFuZCB0aGlzIG9wdGlvbiBzZWxlY3RzIHN1cHBvcnQgZm9yIEFDTHMgc3BlY2lmaWNhbGx5IGZvciBudGZzXFxuICA0NjpcXHRcXHQgIGZpbGVzeXN0ZW1zLlxcbiAgNDc6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MDIuMzQ5MzQ0MTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MjMwODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9udGZzMy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGZvY3VzaW5nIG9uIHRoZSBgbnRmc19pbml0X2Zyb21fYm9vdGAgZnVuY3Rpb24uIEFscmlnaHQsIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGEgY29uZGl0aW9uYWwsIGAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBJbnNpZGUgdGhhdCBibG9jaywgdGhlIGNoYW5nZSBvZiBpbnRlcmVzdCBpcyBgc2JpLVx1MDAzZW1heGJ5dGVzID0gLTE7YCBub3cgYmVpbmcgc2V0IHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO2AuIFRoaXMgaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyBtYXhpbXVtIGZpbGUgc2l6ZXMgd2hlbiA2NC1iaXQgY2x1c3RlcnMgYXJlIGVuYWJsZWQuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdzogd2hhdCBleGFjdGx5ICppcyogYHNiaS1cdTAwM2VtYXhieXRlc2A/IElzIGl0IGFuIGB1NjRgIHJlcHJlc2VudGluZyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgb3IgYSBgbG9mZl90YCwgdGhlIExpbnV4IGtlcm5lbCdzIHR5cGUgZm9yIG9mZl90PyBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgcHJvYmFibGUgaXQncyB0aGUgbGF0dGVyLiBCdXQgaXQncyBpbXBlcmF0aXZlIHRvIGNvbmZpcm0gdGhpcyBmb3IgYWJzb2x1dGUgY2VydGFpbnR5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG50ZnNfc2JfaW5mb2AgdG8gdmVyaWZ5IHRoZSB0eXBlLiBUaGlzIGlzIGxpa2VseSB0aGUgZ292ZXJuaW5nIHN0cnVjdHVyZSBmb3IgdGhlIE5URlMgc3VwZXJibG9jayBpbmZvcm1hdGlvbi4gUHJlY2lzaW9uIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjA1Ljc0MTY1NDIzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzIzNDUwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF4Ynl0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2F0dHJpYi5jPTI1Mjc9aW50IGF0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgdTY0IHZibywgdTY0IGJ5dGVzKVxcbi0tXFxuZnMvbnRmczMvYXR0cmliLmMtMjU4Mi1cXHQgKi9cXG5mcy9udGZzMy9hdHRyaWIuYzoyNTgzOlxcdGlmIChieXRlcyBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlIC0gYWxsb2Nfc2l6ZSlcXG5mcy9udGZzMy9hdHRyaWIuYy0yNTg0LVxcdFxcdHJldHVybiAtRUZCSUc7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTU1MD1zdGF0aWMgbG9mZl90IG50ZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTE1NTMtXFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcXG5mcy9udGZzMy9maWxlLmM6MTU1NDpcXHRsb2ZmX3QgbWF4Ynl0ZXMgPSBudGZzX2dldF9tYXhieXRlcyhuaSk7XFxuZnMvbnRmczMvZmlsZS5jLTE1NTUtXFx0bG9mZl90IHJldDtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTU3LVxcdGlmICh3aGVuY2UgIT0gU0VFS19EQVRBIFxcdTAwMjZcXHUwMDI2IHdoZW5jZSAhPSBTRUVLX0hPTEUpIHtcXG5mcy9udGZzMy9maWxlLmM6MTU1ODpcXHRcXHRyZXQgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemUoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIG1heGJ5dGVzLFxcbmZzL250ZnMzL2ZpbGUuYy0xNTU5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBpX3NpemVfcmVhZChpbm9kZSkpO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTE1NjgtXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbmZzL250ZnMzL2ZpbGUuYzoxNTY5OlxcdFxcdFxcdHJldCA9IHZmc19zZXRwb3MoZmlsZSwgcmV0LCBtYXhieXRlcyk7XFxuZnMvbnRmczMvZmlsZS5jLTE1NzAtXFx0fVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz04ODM9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy04OTEtXFx0aWYgKGlzX3NwYXJzZWQobmkpIHx8IGlzX2NvbXByZXNzZWQobmkpKSB7XFxuZnMvbnRmczMvaW5vZGUuYzo4OTI6XFx0XFx0aWYgKG5ld19zaXplIFxcdTAwM2Ugc2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTg5My1cXHRcXHRcXHRyZXR1cm4gLUVGQklHO1xcbmZzL250ZnMzL2lub2RlLmMtODk0LVxcdFxcdH1cXG5mcy9udGZzMy9pbm9kZS5jOjg5NTpcXHR9IGVsc2UgaWYgKG5ld19zaXplIFxcdTAwM2Ugc2JpLVxcdTAwM2VtYXhieXRlcykge1xcbmZzL250ZnMzL2lub2RlLmMtODk2LVxcdFxcdHJldHVybiAtRUZCSUc7XFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jPTkzMz1zdGF0aWMgaW50IG50ZnNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTUzLVxcdGlmIChmbGFncyBcXHUwMDI2IElPTUFQX1JFUE9SVCkge1xcbmZzL250ZnMzL2lub2RlLmM6OTU0OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSBudGZzX2dldF9tYXhieXRlcyhuaSkpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTk1NS1cXHRcXHRcXHQvKiBjYWxsZWQgZnJvbSBmaWVtYXAvYm1hcC4gKi9cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0yMTI9c3RydWN0IG50ZnNfc2JfaW5mbyB7XFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMwLVxcbmZzL250ZnMzL250ZnNfZnMuaDoyMzE6XFx0dTY0IG1heGJ5dGVzOyAvLyBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy5cXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMyOlxcdHU2NCBtYXhieXRlc19zcGFyc2U7IC8vIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuXFxuZnMvbnRmczMvbnRmc19mcy5oLTIzMy1cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0xMTk0PXN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaC0xMTk4LVxcbmZzL250ZnMzL250ZnNfZnMuaDoxMTk5OnN0YXRpYyBpbmxpbmUgbG9mZl90IG50ZnNfZ2V0X21heGJ5dGVzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwMC17XFxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDEtXFx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gbmktXFx1MDAzZW1pLnNiaTtcXG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMjpcXHRyZXR1cm4gaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkgPyBzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA6XFxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzYmktXFx1MDAzZW1heGJ5dGVzO1xcbmZzL250ZnMzL250ZnNfZnMuaC0xMjA0LX1cXG4tLVxcbmZzL250ZnMzL3N1cGVyLmM9OTY4PXN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTEyMDgtXFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXFxuZnMvbnRmczMvc3VwZXIuYzoxMjA5OlxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXFx1MDAzY1xcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XFxuZnMvbnRmczMvc3VwZXIuYy0xMjEwLVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMjEyLVxcdGlmIChjbHVzdGVycyBcXHUwMDNlPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcXG5mcy9udGZzMy9zdXBlci5jOjEyMTM6XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE0OlxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTtcXG5mcy9udGZzMy9zdXBlci5jOjEyMTU6XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbmZzL250ZnMzL3N1cGVyLmMtMTIxNi0jZWxzZVxcbmZzL250ZnMzL3N1cGVyLmMtMTIxNy1cXHQvKiBNYXhpbXVtIHNpemUgZm9yIHNwYXJzZSBmaWxlLiAqL1xcbmZzL250ZnMzL3N1cGVyLmM6MTIxODpcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9ICgxdWxsIFxcdTAwM2NcXHUwMDNjIChjbHVzdGVyX2JpdHMgKyAzMikpIC0gMTtcXG5mcy9udGZzMy9zdXBlci5jOjEyMTk6XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cztcXG5mcy9udGZzMy9zdXBlci5jLTEyMjAtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjA2LjExNDAwNDExOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjI4MTc0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTlRGUzMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dDogSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZGlzY3JlcGFuY3kgYmV0d2VlbiBgc2JpLVx1MDAzZW1heGJ5dGVzYCwgd2hpY2ggaXMgYSBgdTY0YCwgYW5kIHdoYXQgYG50ZnNfZ2V0X21heGJ5dGVzYCByZXR1cm5zLCB3aGljaCBpcyBhIGBsb2ZmX3RgLiBUaGUgZmFjdCB0aGF0IGBudGZzX2dldF9tYXhieXRlc2AgY2FuIHJldHVybiBgLTFgIGFzIGEgYGxvZmZfdGAgd2hlbiBgc2JpLVx1MDAzZW1heGJ5dGVzYCBpcyBlZmZlY3RpdmVseSBgKHU2NCktMWAgaXMgYSBwb3RlbnRpYWwgaGVhZGFjaGUuIFRoYXQgc2lnbmVkbmVzcyBkaWZmZXJlbmNlLi4uIHRoYXQgY291bGQgbGVhZCB0byB0cm91YmxlIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaW4gZnVuY3Rpb25zIGxpa2UgYGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZWAsIG9yIHdoZW4gd2UncmUgZG9pbmcgc2l6ZSBjaGVja3MgaW4gYG50ZnNfc2V0X3NpemVgIG9yIGBudGZzX2lvbWFwX2JlZ2luYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgXCJJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gZXhwbG9pdD9cIiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgXCJZZXMhXCIuIE5URlMzLCBiZWluZyBhIGZpbGVzeXN0ZW0sIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBpbWFnZXMgbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBtb3VudCBzeXNjYWxscy4gVGhhdCdzIGJyZWFkIGFuZCBidXR0ZXIgZm9yIFN5emthbGxlciwgYW5kIHdlIGNhbiBlYXNpbHkgdGVzdCB0aGlzIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSdtIGdvaW5nIHRvIG5lZWQ6IGBDT05GSUdfTlRGUzNfRlNgIGFuZCBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLCBvZiBjb3Vyc2UuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBpcyBkZXBlbmRlbnQgb24gYCFOVEZTX0ZTIHx8IG1gIGFuZCBgTlRGUzNfNjRCSVRfQ0xVU1RFUmAgbmVlZHMgYE5URlMzX0ZTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIEdvb2QsIGdvb2QuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBNeSBsaXN0IGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uOiBgbnRmc19pbml0X2Zyb21fYm9vdGAsIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCwgYG50ZnNfaW9tYXBfYmVnaW5gLCBhbmQgYG50ZnNfZmlsbF9zdXBlcmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBkcmlsbCBpbnRvIHRvIHNlZSB3aGVyZSB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGxpdmVzLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayB3aG8gY2FsbHMgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGFuZCBzZWUgd2hhdCB0aGF0IHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjEyLjEzNjgyNDcyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3MTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9yZWNvcmQuYz0xOTg9c3RydWN0IEFUVFJJQiAqbWlfZW51bV9hdHRyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG1mdF9pbm9kZSAqbWksXFxuLS1cXG5mcy9udGZzMy9yZWNvcmQuYy0zMjAtXFx0ICogd2l0aGluIHRoZSB2b2x1bWUgKHNiaS1cXHUwMDNldXNlZC5iaXRtYXAubmJpdHMsIHNldCB1cCBpblxcbmZzL250ZnMzL3JlY29yZC5jOjMyMTpcXHQgKiBudGZzX2luaXRfZnJvbV9ib290KCkgYmVmb3JlIGFueSBjYWxsZXIgb2YgbWlfZW51bV9hdHRyKCkgcnVucykuXFxuZnMvbnRmczMvcmVjb3JkLmMtMzIyLVxcdCAqIEJvdW5kaW5nIGV2Y24gYWxzbyBwcmV2ZW50cyBhIG1hbGZvcm1lZCB2YWx1ZSBjbG9zZSB0byBVNjRfTUFYXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTk0OT1zdGF0aWMgdTMyIHRydWVfc2VjdG9yc19wZXJfY2xzdChjb25zdCBzdHJ1Y3QgTlRGU19CT09UICpib290KVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy05NTgtLypcXG5mcy9udGZzMy9zdXBlci5jOjk1OTogKiBudGZzX2luaXRfZnJvbV9ib290IC0gSW5pdCBpbnRlcm5hbCBpbmZvIGZyb20gb24tZGlzayBib290IHNlY3Rvci5cXG5mcy9udGZzMy9zdXBlci5jLTk2MC0gKlxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy05NjctICovXFxuZnMvbnRmczMvc3VwZXIuYzo5Njg6c3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSxcXG5mcy9udGZzMy9zdXBlci5jLTk2OS1cXHRcXHRcXHQgICAgICAgdTY0IGRldl9zaXplLCBzdHJ1Y3QgTlRGU19CT09UICoqYm9vdDIpXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTEyNjc9c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMzI5LVxcdC8qIFBhcnNlIGJvb3QuICovXFxuZnMvbnRmczMvc3VwZXIuYzoxMzMwOlxcdGVyciA9IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc2IsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpLFxcbmZzL250ZnMzL3N1cGVyLmMtMTMzMS1cXHRcXHRcXHRcXHQgIGJkZXZfbnJfYnl0ZXMoYmRldiksIFxcdTAwMjZib290Mik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjEyLjIxOTgwMDI4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU0ODU3MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMzIEluaXRpYWxpemF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgbnRmc19pbml0X2Zyb21fYm9vdGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL250ZnMzL3N1cGVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBpbml0aWFsaXppbmcgdGhlIE5URlMzIGZpbGVzeXN0ZW0uIFRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBudGZzX2luaXRfZnJvbV9ib290YCBpdHNlbGYsIGBudGZzX2ZpbGxfc3VwZXJgLCBgbnRmc19zZXRfc2l6ZWAsIGFuZCBgbnRmc19sbHNlZWtgLiBUaGVzZSBhcmUgdGhlIHJlbGF0ZWQgc3ltYm9scywgdGhlIGNhbGwgcGF0aHMgZm9yIHRoaXMgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBhbmQgYE5URlMzXzY0QklUX0NMVVNURVJgIGFyZSB0aGUga2V5IGZsYWdzIGludm9sdmVkLiA2NC1iaXQgY2x1c3RlciB2b2x1bWVzLCB0aGF0J3Mgc2lnbmlmaWNhbnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBOVEZTMyB2b2x1bWVzIHdpdGggNjQtYml0IGNsdXN0ZXJzLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlcyBob3cgdGhlIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGxpbWl0IGlzIHNldC4gVGhhdCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBmaWxlIHNpemUgY2hlY2tzIGFuZCBob3cgdGhlIHN5c3RlbSBzZWVrcyB3aXRoaW4gZmlsZXMgb24gdGhlIG1vdW50ZWQgZmlsZXN5c3RlbS4gVGhpcyBjb3VsZCByZXZlYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZmlsZSBzaXplIGxpbWl0cyBvciBzZWVrIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbC1rbm93biBhcmVhcyBmb3IgcG90ZW50aWFsIGV4cGxvaXRhdGlvbi5cblxuRmluYWxseSwgbGV0J3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IHN1bW1hcnkgaXMgY2xlYW46IEVuYWJsZUNvbmZpZ3M6IFtcIk5URlMzX0ZTXCIsIFwiTlRGUzNfNjRCSVRfQ0xVU1RFUlwiXSwgRm9jdXNTeW1ib2xzOiBbXCJudGZzX2luaXRfZnJvbV9ib290XCIsIFwibnRmc19maWxsX3N1cGVyXCIsIFwibnRmc19zZXRfc2l6ZVwiLCBcIm50ZnNfbGxzZWVrXCJdLCBhbmQgdGhlIGNvbmNpc2UgcmVhc29uaW5nLCB3aGljaCBJJ3ZlIGFkZHJlc3NlZCBhYm92ZS4gKldvcnRoRnV6emluZzogdHJ1ZSouIFl1cCwgYWxsIGNoZWNrcyBvdXQuIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjE2LjM3NDY1OTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCIsXG4gICAgXCJOVEZTM182NEJJVF9DTFVTVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pbml0X2Zyb21fYm9vdFwiLFxuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX3NldF9zaXplXCIsXG4gICAgXCJudGZzX2xsc2Vla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIixcbiAgICBcIk5URlMzXzY0QklUX0NMVVNURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gICAgXCJudGZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm50ZnNfc2V0X3NpemVcIixcbiAgICBcIm50ZnNfbGxzZWVrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVxcdTAwM2VtYXhieXRlcyB3YXMgc2V0IHRvIC0xIChpbnRlcnByZXRlZCBhcyBuZWdhdGl2ZSBpbiBsb2ZmX3QgY29udGV4dHMpIHdoZW4gQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIgaXMgZW5hYmxlZCwgc2V0dGluZyBpdCB0byBNQVhfTEZTX0ZJTEVTSVpFIGluc3RlYWQuIFRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50IGxvZ2ljIGFuZCBzdWJzZXF1ZW50IGZpbGUgb3BlcmF0aW9ucyAoc3VjaCBhcyBsbHNlZWsgYW5kIHJlc2l6aW5nKSBvbiBudGZzMyBmaWxlc3lzdGVtcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MTYuNDUwMDU3Njg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0OTcwOTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjE2LjQ1MDUxMzUyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDQ5MjQ4ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDI5MmI1ZDM3OTNhYWI4MTFhMzIwOTMzMGQxYmQ5OWE5MTMzZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDo0NTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL3N1cGVyLmMgYi9mcy9udGZzMy9zdXBlci5jXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvc3VwZXIuY1xuKysrIGIvZnMvbnRmczMvc3VwZXIuY1xuQEAgLTEyMTAsNyArMTIxMCw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXG4gXG4gI2lmZGVmIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSXG4gXHRpZiAoY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpXG4tXHRcdHNiaS1cdTAwM2VtYXhieXRlcyA9IC0xO1xuK1x0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4gXHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiAjZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MTYuNDUwNTE0NDM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODgyNzgxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTMyBTdXBlcmJsb2NrIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBgZnMvbnRmczMvc3VwZXIuY2AuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29kZSwgc28gbGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTIxMC4gVGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGNvbnRleHQgYmVmb3JlIGRpdmluZyBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyMC4zMzg3OTYyMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXHRyZWMtXFx1MDAzZXVzZWQgPSBjcHVfdG9fbGUzMihhbyArIEFMSUdOKHNpemVvZihlbnVtIEFUVFJfVFlQRSksIDgpKTtcXG4xMTk2OlxcdFxcdHJlYy1cXHUwMDNldG90YWwgPSBjcHVfdG9fbGUzMihzYmktXFx1MDAzZXJlY29yZF9zaXplKTtcXG4xMTk3OlxcdFxcdCgoc3RydWN0IEFUVFJJQiAqKUFkZDJQdHIocmVjLCBhbykpLVxcdTAwM2V0eXBlID0gQVRUUl9FTkQ7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgbWluX3QodTMyLCBzYmktXFx1MDAzZWNsdXN0ZXJfc2l6ZSwgUEFHRV9TSVpFKSkpIHtcXG4xMjAwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTIwMTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjAyOlxcdFxcdH1cXG4xMjAzOlxcdFxcbjEyMDQ6XFx0XFx0c2JpLVxcdTAwM2VibG9ja19tYXNrID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0gMTtcXG4xMjA1OlxcdFxcdHNiaS1cXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVxcdTAwM2VjbHVzdGVyX3NpemUgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuMTIwNjpcXHRcXHRzYmktXFx1MDAzZXZvbHVtZS5ibG9ja3MgPSBzYmktXFx1MDAzZXZvbHVtZS5zaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHQvKiBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy4gKi9cXG4xMjA5OlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXFx1MDAzY1xcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XFxuMTIxMDpcXHRcXG4xMjExOlxcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxcbjEyMTI6XFx0XFx0aWYgKGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxcbjEyMTM6XFx0XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNDpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNTpcXHRcXHRzYi1cXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNjpcXHQjZWxzZVxcbjEyMTc6XFx0XFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cXG4xMjE4OlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKGNsdXN0ZXJfYml0cyArIDMyKSkgLSAxO1xcbjEyMTk6XFx0XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cztcXG4xMjIwOlxcdCNlbmRpZlxcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHQvKlxcbjEyMjM6XFx0XFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxcbjEyMjQ6XFx0XFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcXG4xMjI1OlxcdFxcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxcbjEyMjY6XFx0XFx0ICovXFxuMTIyNzpcXHRcXHRzYmktXFx1MDAzZXpvbmVfbWF4ID0gbWluX3QoQ0xTVCwgMHgyMDAwMDAwMCBcXHUwMDNlXFx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFxcdTAwM2VcXHUwMDNlIDMpO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRlcnIgPSAwO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfYmxvY2tuciBcXHUwMDI2XFx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xcbjEyMzI6XFx0XFx0XFx0LypcXG4xMjMzOlxcdFxcdCBcXHQgKiBBbHRlcm5hdGl2ZSBib290IGlzIG9rIGJ1dCBwcmltYXJ5IGlzIG5vdCBvay5cXG4xMjM0OlxcdFxcdCBcXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICdjYXVzZSBpdCBtYXkgYmUgZmFrZWQgYm9vdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MjAuMzM4OTQzMTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjg3OTg4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVEZTMyBDb2RlYmFzZTogRmluZGluZyBtYXhieXRlcyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgYGZzL250ZnMzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIGtleS4gVGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIHRoZSBtYXhpbXVtIHNpemUgb2Ygc29tZXRoaW5nLCBlaXRoZXIgYSBmaWxlLCBhbiBhbGxvY2F0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIE5URlMzIGZpbGUgc3lzdGVtLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVzZSBgZ3JlcGAgKG9yIG15IElERSdzIHNlYXJjaCBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSkuIEknbGwgZXhlY3V0ZSB0aGUgYGdyZXBgIHNlYXJjaC4gSSB3YW50IHRvIHNlZSBhIGZ1bGwgbGlzdCBvZiBsb2NhdGlvbnMgd2hlcmUgYHNiaS1cdTAwM2VtYXhieXRlc2AgaXMgcmVmZXJlbmNlZCBzbyBJIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgTlRGUzMgY29kZS5cblxuT25jZSBJIGhhdmUgdGhhdCBsaXN0LCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBlYWNoIHVzYWdlLiBJcyBpdCBiZWluZyByZWFkPyBXcml0dGVuPyBIb3cgaXMgaXQgYmVpbmcgdXNlZCBpbiBjYWxjdWxhdGlvbnMgb3IgY29tcGFyaXNvbnM/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGlub2RlLCB0aGUgc3VwZXJibG9jaywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgY3JpdGljYWwuIEknbSBsb29raW5nIGZvciB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKndoZXJlKi4gSXMgaXQgYSBsaW1pdCBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIGlzIGl0IGEgZ2xvYmFsIHN5c3RlbS13aWRlIHNldHRpbmc/IElzIGl0IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgb3IgaXMgaXQgZGVyaXZlZD9cblxuVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgbWF4Ynl0ZXNgIGluIHRoZSBmaWxlIHN5c3RlbSdzIG9wZXJhdGlvbiBhbmQsIGltcG9ydGFudGx5LCAqd2h5KiB0aGF0IGxpbWl0IGV4aXN0cyBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGxlYWQgdG8gYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MjIuODY3NzQ1MjE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhieXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9hdHRyaWIuYz0yNTI3PWludCBhdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHU2NCB2Ym8sIHU2NCBieXRlcylcXG4tLVxcbmZzL250ZnMzL2F0dHJpYi5jLTI1ODItXFx0ICovXFxuZnMvbnRmczMvYXR0cmliLmM6MjU4MzpcXHRpZiAoYnl0ZXMgXFx1MDAzZSBzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSAtIGFsbG9jX3NpemUpXFxuZnMvbnRmczMvYXR0cmliLmMtMjU4NC1cXHRcXHRyZXR1cm4gLUVGQklHO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTE1NTA9c3RhdGljIGxvZmZfdCBudGZzX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTUzLVxcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IG50ZnNfaShpbm9kZSk7XFxuZnMvbnRmczMvZmlsZS5jOjE1NTQ6XFx0bG9mZl90IG1heGJ5dGVzID0gbnRmc19nZXRfbWF4Ynl0ZXMobmkpO1xcbmZzL250ZnMzL2ZpbGUuYy0xNTU1LVxcdGxvZmZfdCByZXQ7XFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMTU1Ny1cXHRpZiAod2hlbmNlICE9IFNFRUtfREFUQSBcXHUwMDI2XFx1MDAyNiB3aGVuY2UgIT0gU0VFS19IT0xFKSB7XFxuZnMvbnRmczMvZmlsZS5jOjE1NTg6XFx0XFx0cmV0ID0gZ2VuZXJpY19maWxlX2xsc2Vla19zaXplKGZpbGUsIG9mZnNldCwgd2hlbmNlLCBtYXhieXRlcyxcXG5mcy9udGZzMy9maWxlLmMtMTU1OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaV9zaXplX3JlYWQoaW5vZGUpKTtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTY4LVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG5mcy9udGZzMy9maWxlLmM6MTU2OTpcXHRcXHRcXHRyZXQgPSB2ZnNfc2V0cG9zKGZpbGUsIHJldCwgbWF4Ynl0ZXMpO1xcbmZzL250ZnMzL2ZpbGUuYy0xNTcwLVxcdH1cXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9ODgzPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtODkxLVxcdGlmIChpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSkge1xcbmZzL250ZnMzL2lub2RlLmM6ODkyOlxcdFxcdGlmIChuZXdfc2l6ZSBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlKSB7XFxuZnMvbnRmczMvaW5vZGUuYy04OTMtXFx0XFx0XFx0cmV0dXJuIC1FRkJJRztcXG5mcy9udGZzMy9pbm9kZS5jLTg5NC1cXHRcXHR9XFxuZnMvbnRmczMvaW5vZGUuYzo4OTU6XFx0fSBlbHNlIGlmIChuZXdfc2l6ZSBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTg5Ni1cXHRcXHRyZXR1cm4gLUVGQklHO1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz05MzM9c3RhdGljIGludCBudGZzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTk1My1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT01BUF9SRVBPUlQpIHtcXG5mcy9udGZzMy9pbm9kZS5jOjk1NDpcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgbnRmc19nZXRfbWF4Ynl0ZXMobmkpKSB7XFxuZnMvbnRmczMvaW5vZGUuYy05NTUtXFx0XFx0XFx0LyogY2FsbGVkIGZyb20gZmllbWFwL2JtYXAuICovXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9MjEyPXN0cnVjdCBudGZzX3NiX2luZm8ge1xcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTIzMC1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMxOlxcdHU2NCBtYXhieXRlczsgLy8gTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuXFxuZnMvbnRmczMvbnRmc19mcy5oOjIzMjpcXHR1NjQgbWF4Ynl0ZXNfc3BhcnNlOyAvLyBNYXhpbXVtIHNpemUgZm9yIHNwYXJzZSBmaWxlLlxcbmZzL250ZnMzL250ZnNfZnMuaC0yMzMtXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9MTE5ND1zdGF0aWMgaW5saW5lIGludCBpc19yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMTE5OC1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MTE5OTpzdGF0aWMgaW5saW5lIGxvZmZfdCBudGZzX2dldF9tYXhieXRlcyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDAte1xcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAxLVxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVxcdTAwM2VtaS5zYmk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDI6XFx0cmV0dXJuIGlzX3NwYXJzZWQobmkpIHx8IGlzX2NvbXByZXNzZWQobmkpID8gc2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgOlxcbmZzL250ZnMzL250ZnNfZnMuaDoxMjAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2JpLVxcdTAwM2VtYXhieXRlcztcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC19XFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTk2OD1zdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMjA4LVxcdC8qIE1heGltdW0gc2l6ZSBmb3Igbm9ybWFsIGZpbGVzLiAqL1xcbmZzL250ZnMzL3N1cGVyLmM6MTIwOTpcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gKGNsdXN0ZXJzIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xcbmZzL250ZnMzL3N1cGVyLmMtMTIxMC1cXG4tLVxcbmZzL250ZnMzL3N1cGVyLmMtMTIxMi1cXHRpZiAoY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpXFxuZnMvbnRmczMvc3VwZXIuYzoxMjEzOlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbmZzL250ZnMzL3N1cGVyLmM6MTIxNDpcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE1OlxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG5mcy9udGZzMy9zdXBlci5jLTEyMTYtI2Vsc2VcXG5mcy9udGZzMy9zdXBlci5jLTEyMTctXFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cXG5mcy9udGZzMy9zdXBlci5jOjEyMTg6XFx0c2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoY2x1c3Rlcl9iaXRzICsgMzIpKSAtIDE7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE5OlxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcXHUwMDNjXFx1MDAzYyBjbHVzdGVyX2JpdHM7XFxuZnMvbnRmczMvc3VwZXIuYy0xMjIwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyMi45MTcyMjYxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4MjUxODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUzMgRmlsZSBTaXplIExpbWl0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9udGZzMy9zdXBlci5jYCB0aGF0IGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBob3cgdGhlIE5URlMzIGZpbGVzeXN0ZW0gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBmaWxlIHNpemUgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldHRpbmcgYHNiaS1cdTAwM2VtYXhieXRlcyA9IC0xYCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW1zIGlubm9jZW50IGVub3VnaCBhdCBmaXJzdC4gSG93ZXZlciwgd2hlbiB5b3UgY2FzdCB0aGF0IGAtMWAgKHdoaWNoLCBhcyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgaXMgZXF1aXZhbGVudCB0byBgMHhGRkZGRkZGRkZGRkZGRkZGYCkgdG8gYSBzaWduZWQgYGxvZmZfdGAsIHlvdSBlbmQgdXAgd2l0aCwgd2VsbCwgYC0xYC4gVGhpcyB0aGVuIGNhdXNlcyBwcm9ibGVtcyB3aGVuIGBudGZzX2dldF9tYXhieXRlc2AgaXMgY2FsbGVkIGFuZCBjb21wYXJlcyB0aGUgb2Zmc2V0IHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgLCBvciB0aGUgYGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZWAsIGB2ZnNfc2V0cG9zYCBmdW5jdGlvbnMuIFdlJ3JlIHRhbGtpbmcgaW50ZWdlciBvdmVyZmxvdy9zaWduZWRuZXNzIGlzc3Vlcywgd2hpY2ggY2FuIGxlYWQgdG8gZmlsZSBzaXplIGxpbWl0cyBiZWluZyBpbmNvcnJlY3RseSBlbmZvcmNlZC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYHNiaS1cdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkVgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBMTE9OR19NQVhgIG9yIHNpbWlsYXIsIGRlcGVuZGVudCBvbiBhcmNoaXRlY3R1cmUuIFRoaXMgZW5zdXJlcyBhIHByb3BlciB1cHBlciBib3VuZC4gVGhlIGFpbSBpcyB0byByZXNvbHZlIHRoZSBvdmVyZmxvdyBwcm9ibGVtcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG4qICAgTm8sIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLlxuKiAgIE5vLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiogICBObywgd2UncmUgbm90IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG4qICAgTm8sIGl0J3Mgbm90IGEgYm91bmRzIGNoZWNrIGlzc3VlLiBJdCdzIGFib3V0IHNldHRpbmcgdGhlIHVwcGVyIGJvdW5kIG9mIGEgKnZhbGlkKiBmaWxlIHNpemUuXG4qICAgTm8sIEkgY2FuJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSBLTVNBTiB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGZpbGUgc2l6ZSBsaW1pdCBjYWxjdWxhdGlvbiwgaW50ZWdlciBvdmVyZmxvdywgYW5kIHNpZ25lZG5lc3MgYnVnLiBUaGUgdXN1YWwgc3VzcGVjdHMg4oCTIEtBU0FOLCBzeXprYWxsZXIsIGFuZCBnZW5lcmFsIGZpbGVzeXN0ZW0gdGVzdGluZyDigJMgc2hvdWxkIGNhdGNoIGFueSBvdGhlciByZWxhdGVkIGlzc3Vlcy4gTm8gS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZCBoZXJlLlxuXG5MZXQncyBzdW1tYXJpemUgb3VyIEtNU0FOIHJlYXNvbmluZyB0byBkb3VibGUtY2hlY2s6XG5cbiogICBUaGUgcGF0Y2ggKmZpeGVzKiB0aGUgY2FsY3VsYXRpb24gb2YgYHNiaS1cdTAwM2VtYXhieXRlc2AgaW4gYG50ZnNfaW5pdF9mcm9tX2Jvb3QoKWAgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMgYnkgc2V0dGluZyBpdCB0byBhIG1lYW5pbmdmdWwgbWF4aW11bSBmaWxlIHNpemUsIHByZXZlbnRpbmcgbmVnYXRpdmUgb3IgaW5jb3JyZWN0IHNpemUgbGltaXRzLlxuKiAgIEtNU0FOIGlzIGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoaGVhcCwgc3RhY2ssIGxlYWtzKS4gVGhpcyBwYXRjaCBtZXJlbHkgKnNldHMqIGEgc2luZ2xlIHNjYWxhciBmaWVsZCBvbiB0aGUgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSAoYHNiaS1cdTAwM2VtYXhieXRlc2ApLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9taXQgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuXG4qICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM0LCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyOS40OTk3NDcxNTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9udGZzMy9zdXBlci5jYCB0byBhc3NpZ24gYE1BWF9MRlNfRklMRVNJWkVgIGluc3RlYWQgb2YgYC0xYCB0byBgc2JpLVxcdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyBhIHNjYWxhciBsaW1pdCB2YWx1ZSB1c2VkIGZvciBmaWxlc3lzdGVtIHNpemUgYm91bmRzIGNoZWNrcyAoZS5nLiBgbnRmc19zZXRfc2l6ZWAsIGBudGZzX2xsc2Vla2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHBhZGRpbmcgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9udGZzMy9zdXBlci5jYCB0byBhc3NpZ24gYE1BWF9MRlNfRklMRVNJWkVgIGluc3RlYWQgb2YgYC0xYCB0byBgc2JpLVxcdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyBhIHNjYWxhciBsaW1pdCB2YWx1ZSB1c2VkIGZvciBmaWxlc3lzdGVtIHNpemUgYm91bmRzIGNoZWNrcyAoZS5nLiBgbnRmc19zZXRfc2l6ZWAsIGBudGZzX2xsc2Vla2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHBhZGRpbmcgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhk242[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 04:01:18 +0000 UTC FinishedAt: 2026-09-05 04:46:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS", "NTFS3_64BIT_CLUSTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS3_FS", "NTFS3_64BIT_CLUSTER" ], "series_id": "488285d4-d48e-4f21-be6b-43d1c714ec89" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_init_from_boot", "ntfs_fill_super", "ntfs_set_size", "ntfs_llseek" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlMzX0ZTJiMzNDssCiAgICAmIzM0O05URlMzXzY0QklUX0NMVVNURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2luaXRfZnJvbV9ib290JiMzNDssCiAgICAmIzM0O250ZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudGZzX3NldF9zaXplJiMzNDssCiAgICAmIzM0O250ZnNfbGxzZWVrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZzL250ZnMzL3N1cGVyLmNgIHRvIGFzc2lnbiBgTUFYX0xGU19GSUxFU0laRWAgaW5zdGVhZCBvZiBgLTFgIHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSB1cGRhdGVzIGEgc2NhbGFyIGxpbWl0IHZhbHVlIHVzZWQgZm9yIGZpbGVzeXN0ZW0gc2l6ZSBib3VuZHMgY2hlY2tzIChlLmcuIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cdTAwM2VtYXhieXRlcyB3YXMgc2V0IHRvIC0xIChpbnRlcnByZXRlZCBhcyBuZWdhdGl2ZSBpbiBsb2ZmX3QgY29udGV4dHMpIHdoZW4gQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIgaXMgZW5hYmxlZCwgc2V0dGluZyBpdCB0byBNQVhfTEZTX0ZJTEVTSVpFIGluc3RlYWQuIFRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50IGxvZ2ljIGFuZCBzdWJzZXF1ZW50IGZpbGUgb3BlcmF0aW9ucyAoc3VjaCBhcyBsbHNlZWsgYW5kIHJlc2l6aW5nKSBvbiBudGZzMyBmaWxlc3lzdGVtcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBkMjkyYjVkMzc5M2FhYjgxMWEzMjA5MzMwZDFiZDk5YTkxMzNkNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA0OjQ1OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL3N1cGVyLmMgYi9mcy9udGZzMy9zdXBlci5jXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmczMvc3VwZXIuY1xuQEAgLTEyMTAsNyAmIzQzOzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuIFxuICNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuIFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuLVx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAtMTtcbiYjNDM7XHRcdHNiaS1cdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG4gXHRzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuICNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OywKICAgICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7bnRmc19sbHNlZWsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMGQyOTJiNWQzNzkzYWFiODExYTMyMDkzMzBkMWJkOTlhOTEzM2Q1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzMy9zdXBlci5jIGIvZnMvbnRmczMvc3VwZXIuYwppbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NAotLS0gYS9mcy9udGZzMy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL250ZnMzL3N1cGVyLmMKQEAgLTEyMTAsNyAmIzQzOzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLAogCiAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIKIAlpZiAoY2x1c3RlcnMgJmd0Oz0gKDF1bGwgJmx0OyZsdDsgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpCi0JCXNiaS0mZ3Q7bWF4Ynl0ZXMgPSAtMTsKJiM0MzsJCXNiaS0mZ3Q7bWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiaS0mZ3Q7bWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYi0mZ3Q7c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAjZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk2CgkJCQkJCQlvdXRwdXQ6IDcyCgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbiBOVEZTMyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFzIEkgbG9vayBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gYGZzL250ZnMzL3N1cGVyLmNgLiBUaGUgZGlmZiBpdHNlbGYgaXMgcmVsYXRpdmVseSBzbWFsbCwgYnV0IGFzIGFuIGV4cGVydCBpbiBmaWxlc3lzdGVtcywgSSBrbm93IHNtYWxsIGNoYW5nZXMgY2FuIGhhdmUgYmlnIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgdGhlc2UgY29yZSBkYXRhIHN0cnVjdHVyZXMuIFRoZSBrZXkgbGluZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBgc2JpLSZndDttYXhieXRlc2AgaXMgaGFuZGxlZCB3aGVuIDY0LWJpdCBjbHVzdGVyIHN1cHBvcnQgaXMgZW5hYmxlZC4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGNoYW5nZSBmcm9tIHNldHRpbmcgYHNiaS0mZ3Q7bWF4Ynl0ZXNgIHRvIGAtMWAgdG8gc2V0dGluZyBpdCB0byBgTUFYX0xGU19GSUxFU0laRWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBTZXR0aW5nIHRvIGAtMWAgbWlnaHQgaGF2ZSBiZWVuIGEgcXVpY2sgcGxhY2Vob2xkZXIsIG9yIGl0IG1pZ2h0IGhhdmUgYmVlbiBpbnRlbnRpb25hbCwgcGVyaGFwcyBhIHdheSB0byBmbGFnIGFuIG92ZXJmbG93LiBUaGUgdXNlIG9mIGBNQVhfTEZTX0ZJTEVTSVpFYCBzdHJvbmdseSBzdWdnZXN0cyB0aGUgaW50ZW50IHRvIHN1cHBvcnQgbGFyZ2UgZmlsZSBzaXplcywgd2hpY2ggYWxpZ25zIHdpdGggNjQtYml0IGNsdXN0ZXJzLgoKVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LCBJIG5lZWQgdG8gbG9vayBhcm91bmQgdGhpcyBmaWxlIGFuZCB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIGBmcy9udGZzMy9gIGFuZCBhbnkgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIGFuZCBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBhbnkgb3RoZXIgaW5zdGFuY2VzIG9mIGBNQVhfTEZTX0ZJTEVTSVpFYCwgYHNiaS0mZ3Q7bWF4Ynl0ZXNgLCBvciB0aGUgYENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSYCBkaXJlY3RpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG1heGJ5dGVzYCBwYXJhbWV0ZXIgaXMgdXNlZCBhbmQgaWYgb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gYWxzbyBuZWVkIGFkanVzdG1lbnQgZm9yIGxhcmdlciBmaWxlcy4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgY29ycmVjdGx5IGhhbmRsZXMgcG90ZW50aWFsIG92ZXJmbG93cyBhbmQgdGhhdCB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYSBzbWFsbCBjaGFuZ2UsIGJ1dCBpdCByZXF1aXJlcyBhIGNhcmVmdWwsIHN5c3RlbWljIHZpZXcgb2YgTlRGUzMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzMy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFx0fVxuMTIwMzpcdFxuMTIwNDpcdFx0c2JpLVx1MDAzZWJsb2NrX21hc2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4xMjA1Olx0XHRzYmktXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbjEyMDY6XHRcdHNiaS1cdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVx1MDAzZXZvbHVtZS5zaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuMTIwNzpcdFxuMTIwODpcdFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG4xMjA5Olx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuMTIxMDpcdFxuMTIxMTpcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuMTIxMjpcdFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuMTIxMzpcdFx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuMTIxNDpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4xMjE1Olx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbjEyMTY6XHQjZWxzZVxuMTIxNzpcdFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbjEyMTg6XHRcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbjEyMTk6XHRcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG4xMjIwOlx0I2VuZGlmXG4xMjIxOlx0XG4xMjIyOlx0XHQvKlxuMTIyMzpcdFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxuMTIyNDpcdFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcbjEyMjU6XHRcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxuMTIyNjpcdFx0ICovXG4xMjI3Olx0XHRzYmktXHUwMDNlem9uZV9tYXggPSBtaW5fdChDTFNULCAweDIwMDAwMDAwIFx1MDAzZVx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFx1MDAzZVx1MDAzZSAzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IDA7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYmgtXHUwMDNlYl9ibG9ja25yIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTIzMjpcdFx0XHQvKlxuMTIzMzpcdFx0IFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXG4xMjM0Olx0XHQgXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICYjMzk7Y2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXG4xMjM1Olx0XHQgXHQgKiBMZXQgbnRmcyB0byBiZSBtb3VudGVkIGFuZCB1cGRhdGUgYm9vdCBsYXRlci5cbjEyMzY6XHRcdFx0ICovXG4xMjM3Olx0XHRcdCpib290MiA9IGttZW1kdXAoYm9vdCwgc2l6ZW9mKCpib290KSwgR0ZQX05PRlMgfCBfX0dGUF9OT1dBUk4pO1xuMTIzODpcdFx0fVxuMTIzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTM19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBSZWFkLVdyaXRlIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gIU5URlNfRlMgfHwgbVxuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgTkxTXG4gICA3Olx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBXaW5kb3dzIE9TIG5hdGl2ZSBmaWxlIHN5c3RlbSAoTlRGUykgc3VwcG9ydCB1cCB0byBOVEZTIHZlcnNpb24gMy4xLlxuICAxMDpcdFxuICAxMTpcdFx0ICBZIG9yIE0gZW5hYmxlcyB0aGUgTlRGUzMgZHJpdmVyIHdpdGggZnVsbCBmZWF0dXJlcyBlbmFibGVkIChyZWFkLFxuICAxMjpcdFx0ICB3cml0ZSwgam91cm5hbCByZXBsYXlpbmcsIHNwYXJzZS9jb21wcmVzc2VkIGZpbGVzIHN1cHBvcnQpLlxuICAxMzpcdFx0ICBGaWxlIHN5c3RlbSB0eXBlIHRvIHVzZSBvbiBtb3VudCBpcyBcJiMzNDtudGZzM1wmIzM0Oy4gTW9kdWxlIG5hbWUgKE0gb3B0aW9uKVxuICAxNDpcdFx0ICBpcyBhbHNvIFwmIzM0O250ZnMzXCYjMzQ7LlxuICAxNTpcdFxuICAxNjpcdFx0ICBEb2N1bWVudGF0aW9uOiBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmczMucnN0XHUwMDNlXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIE5URlMzXzY0QklUX0NMVVNURVJcbiAgMTk6XHRcdGJvb2wgXCYjMzQ7NjQgYml0cyBwZXIgTlRGUyBjbHVzdGVyc1wmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBOVEZTM19GUyBcdTAwMjZcdTAwMjYgNjRCSVRcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBudGZzLnN5cyB1c2VzIDMyIGJpdHMgcGVyIGNsdXN0ZXJzLlxuICAyMzpcdFx0ICBJZiBhY3RpdmF0ZWQgNjQgYml0cyBwZXIgY2x1c3RlcnMgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgNGsgY2x1c3RlclxuICAyNDpcdFx0ICBmb3IgMTZUJiM0Mzsgdm9sdW1lcy4gV2luZG93cyB3aWxsIG5vdCBiZSBhYmxlIHRvIG1vdW50IHN1Y2ggdm9sdW1lcy5cbiAgMjU6XHRcbiAgMjY6XHRcdCAgSXQgaXMgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cbiAgMjc6XHRcbiAgMjg6XHRjb25maWcgTlRGUzNfTFpYX1hQUkVTU1xuICAyOTpcdFx0Ym9vbCBcJiMzNDthY3RpdmF0ZSBzdXBwb3J0IG9mIGV4dGVybmFsIGNvbXByZXNzaW9ucyBsengveHByZXNzXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE5URlMzX0ZTXG4gIDMxOlx0XHRoZWxwXG4gIDMyOlx0XHQgIEluIFdpbmRvd3MgMTAgb25lIGNhbiB1c2UgY29tbWFuZCBcJiMzNDtjb21wYWN0XCYjMzQ7IHRvIGNvbXByZXNzIGFueSBmaWxlcy5cbiAgMzM6XHRcdCAgNCBwb3NzaWJsZSB2YXJpYW50cyBvZiBjb21wcmVzc2lvbiBhcmU6IHhwcmVzczRrLCB4cHJlc3M4aywgeHByZXNzMTZrIGFuZCBsenguXG4gIDM0Olx0XHQgIElmIGFjdGl2YXRlZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHJlYWQgc3VjaCBmaWxlcyBjb3JyZWN0bHkuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5URlMzX0ZTX1BPU0lYX0FDTFxuICAzOTpcdFx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIE5URlMzX0ZTXG4gIDQxOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0NDpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZSxcbiAgNDU6XHRcdCAgYW5kIHRoaXMgb3B0aW9uIHNlbGVjdHMgc3VwcG9ydCBmb3IgQUNMcyBzcGVjaWZpY2FsbHkgZm9yIG50ZnNcbiAgNDY6XHRcdCAgZmlsZXN5c3RlbXMuXG4gIDQ3Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ4Olx0XG4gIDQ5Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA3NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9udGZzMy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBmb2N1c2luZyBvbiB0aGUgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjb25kaXRpb25hbCwgYCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIEluc2lkZSB0aGF0IGJsb2NrLCB0aGUgY2hhbmdlIG9mIGludGVyZXN0IGlzIGBzYmktJmd0O21heGJ5dGVzID0gLTE7YCBub3cgYmVpbmcgc2V0IHRvIGBzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtgLiBUaGlzIGlzIGxpa2VseSBkZWFsaW5nIHdpdGggYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBmaWxlc3lzdGVtIGhhbmRsZXMgbWF4aW11bSBmaWxlIHNpemVzIHdoZW4gNjQtYml0IGNsdXN0ZXJzIGFyZSBlbmFibGVkLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93OiB3aGF0IGV4YWN0bHkgKmlzKiBgc2JpLSZndDttYXhieXRlc2A/IElzIGl0IGFuIGB1NjRgIHJlcHJlc2VudGluZyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgb3IgYSBgbG9mZl90YCwgdGhlIExpbnV4IGtlcm5lbCYjMzk7cyB0eXBlIGZvciBvZmZfdD8gR2l2ZW4gdGhlIGNvbnRleHQsIGl0JiMzOTtzIGhpZ2hseSBwcm9iYWJsZSBpdCYjMzk7cyB0aGUgbGF0dGVyLiBCdXQgaXQmIzM5O3MgaW1wZXJhdGl2ZSB0byBjb25maXJtIHRoaXMgZm9yIGFic29sdXRlIGNlcnRhaW50eS4gVGltZSB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBudGZzX3NiX2luZm9gIHRvIHZlcmlmeSB0aGUgdHlwZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGdvdmVybmluZyBzdHJ1Y3R1cmUgZm9yIHRoZSBOVEZTIHN1cGVyYmxvY2sgaW5mb3JtYXRpb24uIFByZWNpc2lvbiBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWF4Ynl0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvYXR0cmliLmM9MjUyNz1pbnQgYXR0cl9pbnNlcnRfcmFuZ2Uoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCB1NjQgdmJvLCB1NjQgYnl0ZXMpXG4tLVxuZnMvbnRmczMvYXR0cmliLmMtMjU4Mi1cdCAqL1xuZnMvbnRmczMvYXR0cmliLmM6MjU4MzpcdGlmIChieXRlcyBcdTAwM2Ugc2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSAtIGFsbG9jX3NpemUpXG5mcy9udGZzMy9hdHRyaWIuYy0yNTg0LVx0XHRyZXR1cm4gLUVGQklHO1xuLS1cbmZzL250ZnMzL2ZpbGUuYz0xNTUwPXN0YXRpYyBsb2ZmX3QgbnRmc19sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NTMtXHRzdHJ1Y3QgbnRmc19pbm9kZSAqbmkgPSBudGZzX2koaW5vZGUpO1xuZnMvbnRmczMvZmlsZS5jOjE1NTQ6XHRsb2ZmX3QgbWF4Ynl0ZXMgPSBudGZzX2dldF9tYXhieXRlcyhuaSk7XG5mcy9udGZzMy9maWxlLmMtMTU1NS1cdGxvZmZfdCByZXQ7XG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NTctXHRpZiAod2hlbmNlICE9IFNFRUtfREFUQSBcdTAwMjZcdTAwMjYgd2hlbmNlICE9IFNFRUtfSE9MRSkge1xuZnMvbnRmczMvZmlsZS5jOjE1NTg6XHRcdHJldCA9IGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZShmaWxlLCBvZmZzZXQsIHdoZW5jZSwgbWF4Ynl0ZXMsXG5mcy9udGZzMy9maWxlLmMtMTU1OS1cdFx0XHRcdFx0ICAgICAgIGlfc2l6ZV9yZWFkKGlub2RlKSk7XG4tLVxuZnMvbnRmczMvZmlsZS5jLTE1NjgtXHRcdGlmIChyZXQgXHUwMDNlPSAwKVxuZnMvbnRmczMvZmlsZS5jOjE1Njk6XHRcdFx0cmV0ID0gdmZzX3NldHBvcyhmaWxlLCByZXQsIG1heGJ5dGVzKTtcbmZzL250ZnMzL2ZpbGUuYy0xNTcwLVx0fVxuLS1cbmZzL250ZnMzL2lub2RlLmM9ODgzPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcbi0tXG5mcy9udGZzMy9pbm9kZS5jLTg5MS1cdGlmIChpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSkge1xuZnMvbnRmczMvaW5vZGUuYzo4OTI6XHRcdGlmIChuZXdfc2l6ZSBcdTAwM2Ugc2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSkge1xuZnMvbnRmczMvaW5vZGUuYy04OTMtXHRcdFx0cmV0dXJuIC1FRkJJRztcbmZzL250ZnMzL2lub2RlLmMtODk0LVx0XHR9XG5mcy9udGZzMy9pbm9kZS5jOjg5NTpcdH0gZWxzZSBpZiAobmV3X3NpemUgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlcykge1xuZnMvbnRmczMvaW5vZGUuYy04OTYtXHRcdHJldHVybiAtRUZCSUc7XG4tLVxuZnMvbnRmczMvaW5vZGUuYz05MzM9c3RhdGljIGludCBudGZzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXG4tLVxuZnMvbnRmczMvaW5vZGUuYy05NTMtXHRpZiAoZmxhZ3MgXHUwMDI2IElPTUFQX1JFUE9SVCkge1xuZnMvbnRmczMvaW5vZGUuYzo5NTQ6XHRcdGlmIChvZmZzZXQgXHUwMDNlIG50ZnNfZ2V0X21heGJ5dGVzKG5pKSkge1xuZnMvbnRmczMvaW5vZGUuYy05NTUtXHRcdFx0LyogY2FsbGVkIGZyb20gZmllbWFwL2JtYXAuICovXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTIxMj1zdHJ1Y3QgbnRmc19zYl9pbmZvIHtcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMwLVxuZnMvbnRmczMvbnRmc19mcy5oOjIzMTpcdHU2NCBtYXhieXRlczsgLy8gTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMyOlx0dTY0IG1heGJ5dGVzX3NwYXJzZTsgLy8gTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS5cbmZzL250ZnMzL250ZnNfZnMuaC0yMzMtXG4tLVxuZnMvbnRmczMvbnRmc19mcy5oPTExOTQ9c3RhdGljIGlubGluZSBpbnQgaXNfcmVzaWRlbnQoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaC0xMTk4LVxuZnMvbnRmczMvbnRmc19mcy5oOjExOTk6c3RhdGljIGlubGluZSBsb2ZmX3QgbnRmc19nZXRfbWF4Ynl0ZXMoc3RydWN0IG50ZnNfaW5vZGUgKm5pKVxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDAte1xuZnMvbnRmczMvbnRmc19mcy5oLTEyMDEtXHRzdHJ1Y3QgbnRmc19zYl9pbmZvICpzYmkgPSBuaS1cdTAwM2VtaS5zYmk7XG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMjpcdHJldHVybiBpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSA/IHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgOlxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6XHRcdFx0XHRcdFx0ICAgICBzYmktXHUwMDNlbWF4Ynl0ZXM7XG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC19XG4tLVxuZnMvbnRmczMvc3VwZXIuYz05Njg9c3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSxcbi0tXG5mcy9udGZzMy9zdXBlci5jLTEyMDgtXHQvKiBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTIwOTpcdHNiaS1cdTAwM2VtYXhieXRlcyA9IChjbHVzdGVycyBcdTAwM2NcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XG5mcy9udGZzMy9zdXBlci5jLTEyMTAtXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMjEyLVx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuZnMvbnRmczMvc3VwZXIuYzoxMjEzOlx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuZnMvbnRmczMvc3VwZXIuYzoxMjE0Olx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG5mcy9udGZzMy9zdXBlci5jOjEyMTU6XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbmZzL250ZnMzL3N1cGVyLmMtMTIxNi0jZWxzZVxuZnMvbnRmczMvc3VwZXIuYy0xMjE3LVx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTIxODpcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbmZzL250ZnMzL3N1cGVyLmM6MTIxOTpcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG5mcy9udGZzMy9zdXBlci5jLTEyMjAtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBOVEZTMyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nIGFib3V0OiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBkaXNjcmVwYW5jeSBiZXR3ZWVuIGBzYmktJmd0O21heGJ5dGVzYCwgd2hpY2ggaXMgYSBgdTY0YCwgYW5kIHdoYXQgYG50ZnNfZ2V0X21heGJ5dGVzYCByZXR1cm5zLCB3aGljaCBpcyBhIGBsb2ZmX3RgLiBUaGUgZmFjdCB0aGF0IGBudGZzX2dldF9tYXhieXRlc2AgY2FuIHJldHVybiBgLTFgIGFzIGEgYGxvZmZfdGAgd2hlbiBgc2JpLSZndDttYXhieXRlc2AgaXMgZWZmZWN0aXZlbHkgYCh1NjQpLTFgIGlzIGEgcG90ZW50aWFsIGhlYWRhY2hlLiBUaGF0IHNpZ25lZG5lc3MgZGlmZmVyZW5jZS4uLiB0aGF0IGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGluIGZ1bmN0aW9ucyBsaWtlIGBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemVgLCBvciB3aGVuIHdlJiMzOTtyZSBkb2luZyBzaXplIGNoZWNrcyBpbiBgbnRmc19zZXRfc2l6ZWAgb3IgYG50ZnNfaW9tYXBfYmVnaW5gLgoKVGhlIGtleSBxdWVzdGlvbiBpcywgJiMzNDtJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gZXhwbG9pdD8mIzM0OyBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgJiMzNDtZZXMhJiMzNDsuIE5URlMzLCBiZWluZyBhIGZpbGVzeXN0ZW0sIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBpbWFnZXMgbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBtb3VudCBzeXNjYWxscy4gVGhhdCYjMzk7cyBicmVhZCBhbmQgYnV0dGVyIGZvciBTeXprYWxsZXIsIGFuZCB3ZSBjYW4gZWFzaWx5IHRlc3QgdGhpcyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSYjMzk7bSBnb2luZyB0byBuZWVkOiBgQ09ORklHX05URlMzX0ZTYCBhbmQgYENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSYCwgb2YgY291cnNlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBpcyBkZXBlbmRlbnQgb24gYCFOVEZTX0ZTIHx8IG1gIGFuZCBgTlRGUzNfNjRCSVRfQ0xVU1RFUmAgbmVlZHMgYE5URlMzX0ZTICZhbXA7JmFtcDsgNjRCSVRgLiBHb29kLCBnb29kLgoKRmluYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpbiB0aGlzIGFyZWEuIE15IGxpc3QgZm9yIGZ1cnRoZXIgZXhhbWluYXRpb246IGBudGZzX2luaXRfZnJvbV9ib290YCwgYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgLCBgbnRmc19pb21hcF9iZWdpbmAsIGFuZCBgbnRmc19maWxsX3N1cGVyYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSB3YW50IHRvIGRyaWxsIGludG8gdG8gc2VlIHdoZXJlIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgbGl2ZXMuIEkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayB3aG8gY2FsbHMgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGFuZCBzZWUgd2hhdCB0aGF0IHRlbGxzIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzMy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmczMvcmVjb3JkLmM9MTk4PXN0cnVjdCBBVFRSSUIgKm1pX2VudW1fYXR0cihzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBtZnRfaW5vZGUgKm1pLFxuLS1cbmZzL250ZnMzL3JlY29yZC5jLTMyMC1cdCAqIHdpdGhpbiB0aGUgdm9sdW1lIChzYmktXHUwMDNldXNlZC5iaXRtYXAubmJpdHMsIHNldCB1cCBpblxuZnMvbnRmczMvcmVjb3JkLmM6MzIxOlx0ICogbnRmc19pbml0X2Zyb21fYm9vdCgpIGJlZm9yZSBhbnkgY2FsbGVyIG9mIG1pX2VudW1fYXR0cigpIHJ1bnMpLlxuZnMvbnRmczMvcmVjb3JkLmMtMzIyLVx0ICogQm91bmRpbmcgZXZjbiBhbHNvIHByZXZlbnRzIGEgbWFsZm9ybWVkIHZhbHVlIGNsb3NlIHRvIFU2NF9NQVhcbi0tXG5mcy9udGZzMy9zdXBlci5jPTk0OT1zdGF0aWMgdTMyIHRydWVfc2VjdG9yc19wZXJfY2xzdChjb25zdCBzdHJ1Y3QgTlRGU19CT09UICpib290KVxuLS1cbmZzL250ZnMzL3N1cGVyLmMtOTU4LS8qXG5mcy9udGZzMy9zdXBlci5jOjk1OTogKiBudGZzX2luaXRfZnJvbV9ib290IC0gSW5pdCBpbnRlcm5hbCBpbmZvIGZyb20gb24tZGlzayBib290IHNlY3Rvci5cbmZzL250ZnMzL3N1cGVyLmMtOTYwLSAqXG4tLVxuZnMvbnRmczMvc3VwZXIuYy05NjctICovXG5mcy9udGZzMy9zdXBlci5jOjk2ODpzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuZnMvbnRmczMvc3VwZXIuYy05NjktXHRcdFx0ICAgICAgIHU2NCBkZXZfc2l6ZSwgc3RydWN0IE5URlNfQk9PVCAqKmJvb3QyKVxuLS1cbmZzL250ZnMzL3N1cGVyLmM9MTI2Nz1zdGF0aWMgaW50IG50ZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMzI5LVx0LyogUGFyc2UgYm9vdC4gKi9cbmZzL250ZnMzL3N1cGVyLmM6MTMzMDpcdGVyciA9IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc2IsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpLFxuZnMvbnRmczMvc3VwZXIuYy0xMzMxLVx0XHRcdFx0ICBiZGV2X25yX2J5dGVzKGJkZXYpLCBcdTAwMjZib290Mik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjkKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMzIEluaXRpYWxpemF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgY2hhbmdlcyByZWxhdGVkIHRvIGBudGZzX2luaXRfZnJvbV9ib290YCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgZnMvbnRmczMvc3VwZXIuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIGluaXRpYWxpemluZyB0aGUgTlRGUzMgZmlsZXN5c3RlbS4gVGhlIGtleSBlbnRyeSBwb2ludHMgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBhcmUgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGl0c2VsZiwgYG50ZnNfZmlsbF9zdXBlcmAsIGBudGZzX3NldF9zaXplYCwgYW5kIGBudGZzX2xsc2Vla2AuIFRoZXNlIGFyZSB0aGUgcmVsYXRlZCBzeW1ib2xzLCB0aGUgY2FsbCBwYXRocyBmb3IgdGhpcyBmdW5jdGlvbi4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYXQgcGxheSBoZXJlLiBJdCBsb29rcyBsaWtlIGBOVEZTM19GU2AgYW5kIGBOVEZTM182NEJJVF9DTFVTVEVSYCBhcmUgdGhlIGtleSBmbGFncyBpbnZvbHZlZC4gNjQtYml0IGNsdXN0ZXIgdm9sdW1lcywgdGhhdCYjMzk7cyBzaWduaWZpY2FudC4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBOVEZTMyB2b2x1bWVzIHdpdGggNjQtYml0IGNsdXN0ZXJzLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlcyBob3cgdGhlIGBzYmktJmd0O21heGJ5dGVzYCBsaW1pdCBpcyBzZXQuIFRoYXQgaGFzIGRpcmVjdCBpbXBsaWNhdGlvbnMgb24gZmlsZSBzaXplIGNoZWNrcyBhbmQgaG93IHRoZSBzeXN0ZW0gc2Vla3Mgd2l0aGluIGZpbGVzIG9uIHRoZSBtb3VudGVkIGZpbGVzeXN0ZW0uIFRoaXMgY291bGQgcmV2ZWFsIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGZpbGUgc2l6ZSBsaW1pdHMgb3Igc2VlayBoYW5kbGluZywgd2hpY2ggYXJlIHdlbGwta25vd24gYXJlYXMgZm9yIHBvdGVudGlhbCBleHBsb2l0YXRpb24uCgpGaW5hbGx5LCBsZXQmIzM5O3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IHN1bW1hcnkgaXMgY2xlYW46IEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05URlMzX0ZTJiMzNDssICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7XSwgRm9jdXNTeW1ib2xzOiBbJiMzNDtudGZzX2luaXRfZnJvbV9ib290JiMzNDssICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssICYjMzQ7bnRmc19zZXRfc2l6ZSYjMzQ7LCAmIzM0O250ZnNfbGxzZWVrJiMzNDtdLCBhbmQgdGhlIGNvbmNpc2UgcmVhc29uaW5nLCB3aGljaCBJJiMzOTt2ZSBhZGRyZXNzZWQgYWJvdmUuICpXb3J0aEZ1enppbmc6IHRydWUqLiBZdXAsIGFsbCBjaGVja3Mgb3V0LiBUaGlzIGlzIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGUzNfRlMmIzM0OywKICAgICYjMzQ7TlRGUzNfNjRCSVRfQ0xVU1RFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaW5pdF9mcm9tX2Jvb3QmIzM0OywKICAgICYjMzQ7bnRmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O250ZnNfc2V0X3NpemUmIzM0OywKICAgICYjMzQ7bnRmc19sbHNlZWsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTM19GUyYjMzQ7LAogICAgJiMzNDtOVEZTM182NEJJVF9DTFVTVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19pbml0X2Zyb21fYm9vdCYjMzQ7LAogICAgJiMzNDtudGZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnRmc19zZXRfc2l6ZSYjMzQ7LAogICAgJiMzNDtudGZzX2xsc2VlayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSB3aGVyZSBzYmktXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBkMjkyYjVkMzc5M2FhYjgxMWEzMjA5MzMwZDFiZDk5YTkxMzNkNTkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA0OjQ1OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbnRmczMvc3VwZXIuYyBiL2ZzL250ZnMzL3N1cGVyLmMKaW5kZXggZjRhNDJhMGM3M2E0NC4uZDMwOTNmNzJlYTM4MSAxMDA2NDQKLS0tIGEvZnMvbnRmczMvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzMy9zdXBlci5jCkBAIC0xMjEwLDcgJiM0MzsxMjEwLDcgQEAgc3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSwKIAogI2lmZGVmIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSCiAJaWYgKGNsdXN0ZXJzICZndDs9ICgxdWxsICZsdDsmbHQ7ICg2NCAtIGNsdXN0ZXJfYml0cykpKQotCQlzYmktJmd0O21heGJ5dGVzID0gLTE7CiYjNDM7CQlzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYmktJmd0O21heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7CiAJc2ItJmd0O3NfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogI2Vsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMzIFN1cGVyYmxvY2sgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gYGZzL250ZnMzL3N1cGVyLmNgLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvZGUsIHNvIGxldCYjMzk7cyB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxMjEwLiBUaGlzIGlzIHRoZSBiZXN0IHdheSB0byBnZXQgY29udGV4dCBiZWZvcmUgZGl2aW5nIGRlZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmczMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE5NTpcdFx0cmVjLVx1MDAzZXVzZWQgPSBjcHVfdG9fbGUzMihhbyAmIzQzOyBBTElHTihzaXplb2YoZW51bSBBVFRSX1RZUEUpLCA4KSk7XG4xMTk2Olx0XHRyZWMtXHUwMDNldG90YWwgPSBjcHVfdG9fbGUzMihzYmktXHUwMDNlcmVjb3JkX3NpemUpO1xuMTE5NzpcdFx0KChzdHJ1Y3QgQVRUUklCICopQWRkMlB0cihyZWMsIGFvKSktXHUwMDNldHlwZSA9IEFUVFJfRU5EO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKCFzYl9zZXRfYmxvY2tzaXplKHNiLCBtaW5fdCh1MzIsIHNiaS1cdTAwM2VjbHVzdGVyX3NpemUsIFBBR0VfU0laRSkpKSB7XG4xMjAwOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFx0fVxuMTIwMzpcdFxuMTIwNDpcdFx0c2JpLVx1MDAzZWJsb2NrX21hc2sgPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XG4xMjA1Olx0XHRzYmktXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVx1MDAzZWNsdXN0ZXJfc2l6ZSBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbjEyMDY6XHRcdHNiaS1cdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVx1MDAzZXZvbHVtZS5zaXplIFx1MDAzZVx1MDAzZSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xuMTIwNzpcdFxuMTIwODpcdFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG4xMjA5Olx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuMTIxMDpcdFxuMTIxMTpcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuMTIxMjpcdFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuMTIxMzpcdFx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuMTIxNDpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4xMjE1Olx0XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbjEyMTY6XHQjZWxzZVxuMTIxNzpcdFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cbjEyMTg6XHRcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcdTAwM2NcdTAwM2MgKGNsdXN0ZXJfYml0cyAmIzQzOyAzMikpIC0gMTtcbjEyMTk6XHRcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFx1MDAzY1x1MDAzYyBjbHVzdGVyX2JpdHM7XG4xMjIwOlx0I2VuZGlmXG4xMjIxOlx0XG4xMjIyOlx0XHQvKlxuMTIyMzpcdFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxuMTIyNDpcdFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcbjEyMjU6XHRcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxuMTIyNjpcdFx0ICovXG4xMjI3Olx0XHRzYmktXHUwMDNlem9uZV9tYXggPSBtaW5fdChDTFNULCAweDIwMDAwMDAwIFx1MDAzZVx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFx1MDAzZVx1MDAzZSAzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IDA7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYmgtXHUwMDNlYl9ibG9ja25yIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuMTIzMjpcdFx0XHQvKlxuMTIzMzpcdFx0IFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXG4xMjM0Olx0XHQgXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICYjMzk7Y2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA0OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTlRGUzMgQ29kZWJhc2U6IEZpbmRpbmcgbWF4Ynl0ZXMgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYHNiaS0mZ3Q7bWF4Ynl0ZXNgIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgYGZzL250ZnMzL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byB0aGUgbWF4aW11bSBzaXplIG9mIHNvbWV0aGluZywgZWl0aGVyIGEgZmlsZSwgYW4gYWxsb2NhdGlvbiwgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBOVEZTMyBmaWxlIHN5c3RlbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gdXNlIGBncmVwYCAob3IgbXkgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSkuIEkmIzM5O2xsIGV4ZWN1dGUgdGhlIGBncmVwYCBzZWFyY2guIEkgd2FudCB0byBzZWUgYSBmdWxsIGxpc3Qgb2YgbG9jYXRpb25zIHdoZXJlIGBzYmktJmd0O21heGJ5dGVzYCBpcyByZWZlcmVuY2VkIHNvIEkgY2FuIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgTlRGUzMgY29kZS4KCk9uY2UgSSBoYXZlIHRoYXQgbGlzdCwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2UuIElzIGl0IGJlaW5nIHJlYWQ/IFdyaXR0ZW4/IEhvdyBpcyBpdCBiZWluZyB1c2VkIGluIGNhbGN1bGF0aW9ucyBvciBjb21wYXJpc29ucz8gSXMgaXQgcmVsYXRlZCB0byB0aGUgaW5vZGUsIHRoZSBzdXBlcmJsb2NrLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbnRleHQgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBiZSBjcml0aWNhbC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKndoZXJlKi4gSXMgaXQgYSBsaW1pdCBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIGlzIGl0IGEgZ2xvYmFsIHN5c3RlbS13aWRlIHNldHRpbmc/IElzIGl0IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgb3IgaXMgaXQgZGVyaXZlZD8KClRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYG1heGJ5dGVzYCBpbiB0aGUgZmlsZSBzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uIGFuZCwgaW1wb3J0YW50bHksICp3aHkqIHRoYXQgbGltaXQgZXhpc3RzIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyBpbnZlc3RpZ2F0aW9uIHdpbGwgbGVhZCB0byBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXhieXRlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMzL2F0dHJpYi5jPTI1Mjc9aW50IGF0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgdTY0IHZibywgdTY0IGJ5dGVzKVxuLS1cbmZzL250ZnMzL2F0dHJpYi5jLTI1ODItXHQgKi9cbmZzL250ZnMzL2F0dHJpYi5jOjI1ODM6XHRpZiAoYnl0ZXMgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgLSBhbGxvY19zaXplKVxuZnMvbnRmczMvYXR0cmliLmMtMjU4NC1cdFx0cmV0dXJuIC1FRkJJRztcbi0tXG5mcy9udGZzMy9maWxlLmM9MTU1MD1zdGF0aWMgbG9mZl90IG50ZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTUzLVx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcbmZzL250ZnMzL2ZpbGUuYzoxNTU0Olx0bG9mZl90IG1heGJ5dGVzID0gbnRmc19nZXRfbWF4Ynl0ZXMobmkpO1xuZnMvbnRmczMvZmlsZS5jLTE1NTUtXHRsb2ZmX3QgcmV0O1xuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTU3LVx0aWYgKHdoZW5jZSAhPSBTRUVLX0RBVEEgXHUwMDI2XHUwMDI2IHdoZW5jZSAhPSBTRUVLX0hPTEUpIHtcbmZzL250ZnMzL2ZpbGUuYzoxNTU4Olx0XHRyZXQgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemUoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIG1heGJ5dGVzLFxuZnMvbnRmczMvZmlsZS5jLTE1NTktXHRcdFx0XHRcdCAgICAgICBpX3NpemVfcmVhZChpbm9kZSkpO1xuLS1cbmZzL250ZnMzL2ZpbGUuYy0xNTY4LVx0XHRpZiAocmV0IFx1MDAzZT0gMClcbmZzL250ZnMzL2ZpbGUuYzoxNTY5Olx0XHRcdHJldCA9IHZmc19zZXRwb3MoZmlsZSwgcmV0LCBtYXhieXRlcyk7XG5mcy9udGZzMy9maWxlLmMtMTU3MC1cdH1cbi0tXG5mcy9udGZzMy9pbm9kZS5jPTg4Mz1pbnQgbnRmc19zZXRfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgbmV3X3NpemUpXG4tLVxuZnMvbnRmczMvaW5vZGUuYy04OTEtXHRpZiAoaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkpIHtcbmZzL250ZnMzL2lub2RlLmM6ODkyOlx0XHRpZiAobmV3X3NpemUgXHUwMDNlIHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UpIHtcbmZzL250ZnMzL2lub2RlLmMtODkzLVx0XHRcdHJldHVybiAtRUZCSUc7XG5mcy9udGZzMy9pbm9kZS5jLTg5NC1cdFx0fVxuZnMvbnRmczMvaW5vZGUuYzo4OTU6XHR9IGVsc2UgaWYgKG5ld19zaXplIFx1MDAzZSBzYmktXHUwMDNlbWF4Ynl0ZXMpIHtcbmZzL250ZnMzL2lub2RlLmMtODk2LVx0XHRyZXR1cm4gLUVGQklHO1xuLS1cbmZzL250ZnMzL2lub2RlLmM9OTMzPXN0YXRpYyBpbnQgbnRmc19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuZ3RoLFxuLS1cbmZzL250ZnMzL2lub2RlLmMtOTUzLVx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9SRVBPUlQpIHtcbmZzL250ZnMzL2lub2RlLmM6OTU0Olx0XHRpZiAob2Zmc2V0IFx1MDAzZSBudGZzX2dldF9tYXhieXRlcyhuaSkpIHtcbmZzL250ZnMzL2lub2RlLmMtOTU1LVx0XHRcdC8qIGNhbGxlZCBmcm9tIGZpZW1hcC9ibWFwLiAqL1xuLS1cbmZzL250ZnMzL250ZnNfZnMuaD0yMTI9c3RydWN0IG50ZnNfc2JfaW5mbyB7XG4tLVxuZnMvbnRmczMvbnRmc19mcy5oLTIzMC1cbmZzL250ZnMzL250ZnNfZnMuaDoyMzE6XHR1NjQgbWF4Ynl0ZXM7IC8vIE1heGltdW0gc2l6ZSBmb3Igbm9ybWFsIGZpbGVzLlxuZnMvbnRmczMvbnRmc19mcy5oOjIzMjpcdHU2NCBtYXhieXRlc19zcGFyc2U7IC8vIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMzLVxuLS1cbmZzL250ZnMzL250ZnNfZnMuaD0xMTk0PXN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzMy9udGZzX2ZzLmgtMTE5OC1cbmZzL250ZnMzL250ZnNfZnMuaDoxMTk5OnN0YXRpYyBpbmxpbmUgbG9mZl90IG50ZnNfZ2V0X21heGJ5dGVzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAwLXtcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAxLVx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gbmktXHUwMDNlbWkuc2JpO1xuZnMvbnRmczMvbnRmc19mcy5oOjEyMDI6XHRyZXR1cm4gaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkgPyBzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlIDpcbmZzL250ZnMzL250ZnNfZnMuaDoxMjAzOlx0XHRcdFx0XHRcdCAgICAgc2JpLVx1MDAzZW1heGJ5dGVzO1xuZnMvbnRmczMvbnRmc19mcy5oLTEyMDQtfVxuLS1cbmZzL250ZnMzL3N1cGVyLmM9OTY4PXN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXG4tLVxuZnMvbnRmczMvc3VwZXIuYy0xMjA4LVx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXG5mcy9udGZzMy9zdXBlci5jOjEyMDk6XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXHUwMDNjXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xuZnMvbnRmczMvc3VwZXIuYy0xMjEwLVxuLS1cbmZzL250ZnMzL3N1cGVyLmMtMTIxMi1cdGlmIChjbHVzdGVycyBcdTAwM2U9ICgxdWxsIFx1MDAzY1x1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcbmZzL250ZnMzL3N1cGVyLmM6MTIxMzpcdFx0c2JpLVx1MDAzZW1heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbmZzL250ZnMzL3N1cGVyLmM6MTIxNDpcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuZnMvbnRmczMvc3VwZXIuYzoxMjE1Olx0c2ItXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG5mcy9udGZzMy9zdXBlci5jLTEyMTYtI2Vsc2VcbmZzL250ZnMzL3N1cGVyLmMtMTIxNy1cdC8qIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuICovXG5mcy9udGZzMy9zdXBlci5jOjEyMTg6XHRzYmktXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gKDF1bGwgXHUwMDNjXHUwMDNjIChjbHVzdGVyX2JpdHMgJiM0MzsgMzIpKSAtIDE7XG5mcy9udGZzMy9zdXBlci5jOjEyMTk6XHRzYi1cdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcdTAwM2NcdTAwM2MgY2x1c3Rlcl9iaXRzO1xuZnMvbnRmczMvc3VwZXIuYy0xMjIwLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM0CgkJCQkJCQlvdXRwdXQ6IDIyMAoJCQkJCQkJdGhvdWdodHM6IDc0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUzMgRmlsZSBTaXplIExpbWl0IEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9udGZzMy9zdXBlci5jYCB0aGF0IGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBob3cgdGhlIE5URlMzIGZpbGVzeXN0ZW0gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBmaWxlIHNpemUgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldHRpbmcgYHNiaS0mZ3Q7bWF4Ynl0ZXMgPSAtMWAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCB3aGljaCBzZWVtcyBpbm5vY2VudCBlbm91Z2ggYXQgZmlyc3QuIEhvd2V2ZXIsIHdoZW4geW91IGNhc3QgdGhhdCBgLTFgICh3aGljaCwgYXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIsIGlzIGVxdWl2YWxlbnQgdG8gYDB4RkZGRkZGRkZGRkZGRkZGRmApIHRvIGEgc2lnbmVkIGBsb2ZmX3RgLCB5b3UgZW5kIHVwIHdpdGgsIHdlbGwsIGAtMWAuIFRoaXMgdGhlbiBjYXVzZXMgcHJvYmxlbXMgd2hlbiBgbnRmc19nZXRfbWF4Ynl0ZXNgIGlzIGNhbGxlZCBhbmQgY29tcGFyZXMgdGhlIG9mZnNldCB0byBgc2JpLSZndDttYXhieXRlc2AsIG9yIHRoZSBgZ2VuZXJpY19maWxlX2xsc2Vla19zaXplYCwgYHZmc19zZXRwb3NgIGZ1bmN0aW9ucy4gV2UmIzM5O3JlIHRhbGtpbmcgaW50ZWdlciBvdmVyZmxvdy9zaWduZWRuZXNzIGlzc3Vlcywgd2hpY2ggY2FuIGxlYWQgdG8gZmlsZSBzaXplIGxpbWl0cyBiZWluZyBpbmNvcnJlY3RseSBlbmZvcmNlZC4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggcmVwbGFjZXMgdGhpcyB3aXRoIGBzYmktJmd0O21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRWAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYExMT05HX01BWGAgb3Igc2ltaWxhciwgZGVwZW5kZW50IG9uIGFyY2hpdGVjdHVyZS4gVGhpcyBlbnN1cmVzIGEgcHJvcGVyIHVwcGVyIGJvdW5kLiBUaGUgYWltIGlzIHRvIHJlc29sdmUgdGhlIG92ZXJmbG93IHByb2JsZW1zLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLgoKKiAgIE5vLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGV4cG9zZWQuCiogICBObywgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoqICAgTm8sIHdlJiMzOTtyZSBub3QgYWxsb2NhdGluZyBvciBpbml0aWFsaXppbmcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4KKiAgIE5vLCBpdCYjMzk7cyBub3QgYSBib3VuZHMgY2hlY2sgaXNzdWUuIEl0JiMzOTtzIGFib3V0IHNldHRpbmcgdGhlIHVwcGVyIGJvdW5kIG9mIGEgKnZhbGlkKiBmaWxlIHNpemUuCiogICBObywgSSBjYW4mIzM5O3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSBLTVNBTiB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBmaWxlIHNpemUgbGltaXQgY2FsY3VsYXRpb24sIGludGVnZXIgb3ZlcmZsb3csIGFuZCBzaWduZWRuZXNzIGJ1Zy4gVGhlIHVzdWFsIHN1c3BlY3RzIOKAkyBLQVNBTiwgc3l6a2FsbGVyLCBhbmQgZ2VuZXJhbCBmaWxlc3lzdGVtIHRlc3Rpbmcg4oCTIHNob3VsZCBjYXRjaCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQgaGVyZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgb3VyIEtNU0FOIHJlYXNvbmluZyB0byBkb3VibGUtY2hlY2s6CgoqICAgVGhlIHBhdGNoICpmaXhlcyogdGhlIGNhbGN1bGF0aW9uIG9mIGBzYmktJmd0O21heGJ5dGVzYCBpbiBgbnRmc19pbml0X2Zyb21fYm9vdCgpYCB3aGVuIHVzaW5nIDY0LWJpdCBjbHVzdGVycyBieSBzZXR0aW5nIGl0IHRvIGEgbWVhbmluZ2Z1bCBtYXhpbXVtIGZpbGUgc2l6ZSwgcHJldmVudGluZyBuZWdhdGl2ZSBvciBpbmNvcnJlY3Qgc2l6ZSBsaW1pdHMuCiogICBLTVNBTiBpcyBjb25jZXJuZWQgd2l0aCBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKGhlYXAsIHN0YWNrLCBsZWFrcykuIFRoaXMgcGF0Y2ggbWVyZWx5ICpzZXRzKiBhIHNpbmdsZSBzY2FsYXIgZmllbGQgb24gdGhlIHN1cGVyYmxvY2sgaW5mbyBzdHJ1Y3R1cmUgKGBzYmktJmd0O21heGJ5dGVzYCkuIEl0IGRvZXNuJiMzOTt0IGFsbG9jYXRlIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9taXQgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuCiogICBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRpbWUgdG8gY2FsbCB0aGF0IGBzZXQtcmVzdWx0c2AgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDQ6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZzL250ZnMzL3N1cGVyLmNgIHRvIGFzc2lnbiBgTUFYX0xGU19GSUxFU0laRWAgaW5zdGVhZCBvZiBgLTFgIHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cblxuVGhpcyBjaGFuZ2Ugb25seSB1cGRhdGVzIGEgc2NhbGFyIGxpbWl0IHZhbHVlIHVzZWQgZm9yIGZpbGVzeXN0ZW0gc2l6ZSBib3VuZHMgY2hlY2tzIChlLmcuIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgcHJlc2VudHMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxuXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDU6NTQuNzQzNDkzMzYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ3NTYyODYzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIixcbiAgICBcIk5URlMzXzY0QklUX0NMVVNURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gICAgXCJudGZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm50ZnNfc2V0X3NpemVcIixcbiAgICBcIm50ZnNfbGxzZWVrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSB3aGVyZSBzYmktXFx1MDAzZW1heGJ5dGVzIHdhcyBzZXQgdG8gLTEgKGludGVycHJldGVkIGFzIG5lZ2F0aXZlIGluIGxvZmZfdCBjb250ZXh0cykgd2hlbiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUiBpcyBlbmFibGVkLCBzZXR0aW5nIGl0IHRvIE1BWF9MRlNfRklMRVNJWkUgaW5zdGVhZC4gVGhpcyBhZmZlY3RzIGZpbGVzeXN0ZW0gbW91bnQgbG9naWMgYW5kIHN1YnNlcXVlbnQgZmlsZSBvcGVyYXRpb25zIChzdWNoIGFzIGxsc2VlayBhbmQgcmVzaXppbmcpIG9uIG50ZnMzIGZpbGVzeXN0ZW1zLCB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NTo1NC43NDM1MTA5OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjY3MTkxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwZDI5MmI1ZDM3OTNhYWI4MTFhMzIwOTMzMGQxYmQ5OWE5MTMzZDU5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvbnRmczMvc3VwZXIuYyBiL2ZzL250ZnMzL3N1cGVyLmNcXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMzL3N1cGVyLmNcXG4rKysgYi9mcy9udGZzMy9zdXBlci5jXFxuQEAgLTEyMTAsNyArMTIxMCw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXFxuIFxcbiAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJcXG4gXFx0aWYgKGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxcbi1cXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gLTE7XFxuK1xcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbiBcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuIFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gI2Vsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDU6NTYuMTcwOTg0MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwMjc5MDcwMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCIsXG4gICAgXCJOVEZTM182NEJJVF9DTFVTVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pbml0X2Zyb21fYm9vdFwiLFxuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX3NldF9zaXplXCIsXG4gICAgXCJudGZzX2xsc2Vla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGQyOTJiNWQzNzkzYWFiODExYTMyMDkzMzBkMWJkOTlhOTEzM2Q1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDQ6NDU6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9udGZzMy9zdXBlci5jIGIvZnMvbnRmczMvc3VwZXIuY1xuaW5kZXggZjRhNDJhMGM3M2E0NC4uZDMwOTNmNzJlYTM4MSAxMDA2NDRcbi0tLSBhL2ZzL250ZnMzL3N1cGVyLmNcbisrKyBiL2ZzL250ZnMzL3N1cGVyLmNcbkBAIC0xMjEwLDcgKzEyMTAsNyBAQCBzdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxuIFxuICNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxuIFx0aWYgKGNsdXN0ZXJzIFx1MDAzZT0gKDF1bGwgXHUwMDNjXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxuLVx0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSAtMTtcbitcdFx0c2JpLVx1MDAzZW1heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiaS1cdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XG4gI2Vsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ1OjU2LjE3MDk4NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxNzgyMTg1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZnMvbnRmczMvc3VwZXIuY2AuIFRoZSBkaWZmIGl0c2VsZiBpcyByZWxhdGl2ZWx5IHNtYWxsLCBidXQgYXMgYW4gZXhwZXJ0IGluIGZpbGVzeXN0ZW1zLCBJIGtub3cgc21hbGwgY2hhbmdlcyBjYW4gaGF2ZSBiaWcgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGVzZSBjb3JlIGRhdGEgc3RydWN0dXJlcy4gVGhlIGtleSBsaW5lIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGlzIGhhbmRsZWQgd2hlbiA2NC1iaXQgY2x1c3RlciBzdXBwb3J0IGlzIGVuYWJsZWQuXG5cblNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGUgY2hhbmdlIGZyb20gc2V0dGluZyBgc2JpLVx1MDAzZW1heGJ5dGVzYCB0byBgLTFgIHRvIHNldHRpbmcgaXQgdG8gYE1BWF9MRlNfRklMRVNJWkVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB3YXMgY2hhbmdlZC4gU2V0dGluZyB0byBgLTFgIG1pZ2h0IGhhdmUgYmVlbiBhIHF1aWNrIHBsYWNlaG9sZGVyLCBvciBpdCBtaWdodCBoYXZlIGJlZW4gaW50ZW50aW9uYWwsIHBlcmhhcHMgYSB3YXkgdG8gZmxhZyBhbiBvdmVyZmxvdy4gVGhlIHVzZSBvZiBgTUFYX0xGU19GSUxFU0laRWAgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIGludGVudCB0byBzdXBwb3J0IGxhcmdlIGZpbGUgc2l6ZXMsIHdoaWNoIGFsaWducyB3aXRoIDY0LWJpdCBjbHVzdGVycy5cblxuVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LCBJIG5lZWQgdG8gbG9vayBhcm91bmQgdGhpcyBmaWxlIGFuZCB0aGUgZmlsZXN5c3RlbS4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb2RlIGluIGBmcy9udGZzMy9gIGFuZCBhbnkgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMuIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgYW5kIGBncmVwcGVyYCB0byBzZWFyY2ggZm9yIGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYE1BWF9MRlNfRklMRVNJWkVgLCBgc2JpLVx1MDAzZW1heGJ5dGVzYCwgb3IgdGhlIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAgZGlyZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBtYXhieXRlc2AgcGFyYW1ldGVyIGlzIHVzZWQgYW5kIGlmIG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIGFsc28gbmVlZCBhZGp1c3RtZW50IGZvciBsYXJnZXIgZmlsZXMuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvcnJlY3RseSBoYW5kbGVzIHBvdGVudGlhbCBvdmVyZmxvd3MgYW5kIHRoYXQgdGhpcyBjaGFuZ2UgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhIHNtYWxsIGNoYW5nZSwgYnV0IGl0IHJlcXVpcmVzIGEgY2FyZWZ1bCwgc3lzdGVtaWMgdmlldyBvZiBOVEZTMy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NiwiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjAyLjM0OTIwNjY4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIwMDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjEyMDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIwMjpcXHRcXHR9XFxuMTIwMzpcXHRcXG4xMjA0OlxcdFxcdHNiaS1cXHUwMDNlYmxvY2tfbWFzayA9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtIDE7XFxuMTIwNTpcXHRcXHRzYmktXFx1MDAzZWJsb2Nrc19wZXJfY2x1c3RlciA9IHNiaS1cXHUwMDNlY2x1c3Rlcl9zaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbjEyMDY6XFx0XFx0c2JpLVxcdTAwM2V2b2x1bWUuYmxvY2tzID0gc2JpLVxcdTAwM2V2b2x1bWUuc2l6ZSBcXHUwMDNlXFx1MDAzZSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXFxuMTIwOTpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gKGNsdXN0ZXJzIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xcbjEyMTA6XFx0XFxuMTIxMTpcXHQjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJcXG4xMjEyOlxcdFxcdGlmIChjbHVzdGVycyBcXHUwMDNlPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcXG4xMjEzOlxcdFxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTQ6XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTU6XFx0XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbjEyMTY6XFx0I2Vsc2VcXG4xMjE3OlxcdFxcdC8qIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuICovXFxuMTIxODpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9ICgxdWxsIFxcdTAwM2NcXHUwMDNjIChjbHVzdGVyX2JpdHMgKyAzMikpIC0gMTtcXG4xMjE5OlxcdFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcXHUwMDNjXFx1MDAzYyBjbHVzdGVyX2JpdHM7XFxuMTIyMDpcXHQjZW5kaWZcXG4xMjIxOlxcdFxcbjEyMjI6XFx0XFx0LypcXG4xMjIzOlxcdFxcdCAqIENvbXB1dGUgdGhlIE1GVCB6b25lIGF0IHR3byBzdGVwcy5cXG4xMjI0OlxcdFxcdCAqIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgYXJlIGFibGUgdG8gYWxsb2NhdGUgMS84IG9mXFxuMTIyNTpcXHRcXHQgKiB0b3RhbCBjbHVzdGVycyBmb3IgTUZUIGJ1dCBub3QgbW9yZSB0aGVuIDUxMiBNQi5cXG4xMjI2OlxcdFxcdCAqL1xcbjEyMjc6XFx0XFx0c2JpLVxcdTAwM2V6b25lX21heCA9IG1pbl90KENMU1QsIDB4MjAwMDAwMDAgXFx1MDAzZVxcdTAwM2UgY2x1c3Rlcl9iaXRzLCBjbHVzdGVycyBcXHUwMDNlXFx1MDAzZSAzKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0ZXJyID0gMDtcXG4xMjMwOlxcdFxcbjEyMzE6XFx0XFx0aWYgKGJoLVxcdTAwM2ViX2Jsb2NrbnIgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4xMjMyOlxcdFxcdFxcdC8qXFxuMTIzMzpcXHRcXHQgXFx0ICogQWx0ZXJuYXRpdmUgYm9vdCBpcyBvayBidXQgcHJpbWFyeSBpcyBub3Qgb2suXFxuMTIzNDpcXHRcXHQgXFx0ICogRG8gbm90IHVwZGF0ZSBwcmltYXJ5IGJvb3QgaGVyZSAnY2F1c2UgaXQgbWF5IGJlIGZha2VkIGJvb3QuXFxuMTIzNTpcXHRcXHQgXFx0ICogTGV0IG50ZnMgdG8gYmUgbW91bnRlZCBhbmQgdXBkYXRlIGJvb3QgbGF0ZXIuXFxuMTIzNjpcXHRcXHRcXHQgKi9cXG4xMjM3OlxcdFxcdFxcdCpib290MiA9IGttZW1kdXAoYm9vdCwgc2l6ZW9mKCpib290KSwgR0ZQX05PRlMgfCBfX0dGUF9OT1dBUk4pO1xcbjEyMzg6XFx0XFx0fVxcbjEyMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjAyLjM0OTMwNDIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBOVEZTM19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgUmVhZC1Xcml0ZSBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiAhTlRGU19GUyB8fCBtXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFdpbmRvd3MgT1MgbmF0aXZlIGZpbGUgc3lzdGVtIChOVEZTKSBzdXBwb3J0IHVwIHRvIE5URlMgdmVyc2lvbiAzLjEuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgWSBvciBNIGVuYWJsZXMgdGhlIE5URlMzIGRyaXZlciB3aXRoIGZ1bGwgZmVhdHVyZXMgZW5hYmxlZCAocmVhZCxcXG4gIDEyOlxcdFxcdCAgd3JpdGUsIGpvdXJuYWwgcmVwbGF5aW5nLCBzcGFyc2UvY29tcHJlc3NlZCBmaWxlcyBzdXBwb3J0KS5cXG4gIDEzOlxcdFxcdCAgRmlsZSBzeXN0ZW0gdHlwZSB0byB1c2Ugb24gbW91bnQgaXMgXFxcIm50ZnMzXFxcIi4gTW9kdWxlIG5hbWUgKE0gb3B0aW9uKVxcbiAgMTQ6XFx0XFx0ICBpcyBhbHNvIFxcXCJudGZzM1xcXCIuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbjogXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzMy5yc3RcXHUwMDNlXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBOVEZTM182NEJJVF9DTFVTVEVSXFxuICAxOTpcXHRcXHRib29sIFxcXCI2NCBiaXRzIHBlciBOVEZTIGNsdXN0ZXJzXFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTM19GUyBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIG50ZnMuc3lzIHVzZXMgMzIgYml0cyBwZXIgY2x1c3RlcnMuXFxuICAyMzpcXHRcXHQgIElmIGFjdGl2YXRlZCA2NCBiaXRzIHBlciBjbHVzdGVycyB5b3Ugd2lsbCBiZSBhYmxlIHRvIHVzZSA0ayBjbHVzdGVyXFxuICAyNDpcXHRcXHQgIGZvciAxNlQrIHZvbHVtZXMuIFdpbmRvd3Mgd2lsbCBub3QgYmUgYWJsZSB0byBtb3VudCBzdWNoIHZvbHVtZXMuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgSXQgaXMgcmVjb21tZW5kZWQgdG8gc2F5IE4gaGVyZS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE5URlMzX0xaWF9YUFJFU1NcXG4gIDI5OlxcdFxcdGJvb2wgXFxcImFjdGl2YXRlIHN1cHBvcnQgb2YgZXh0ZXJuYWwgY29tcHJlc3Npb25zIGx6eC94cHJlc3NcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE5URlMzX0ZTXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEluIFdpbmRvd3MgMTAgb25lIGNhbiB1c2UgY29tbWFuZCBcXFwiY29tcGFjdFxcXCIgdG8gY29tcHJlc3MgYW55IGZpbGVzLlxcbiAgMzM6XFx0XFx0ICA0IHBvc3NpYmxlIHZhcmlhbnRzIG9mIGNvbXByZXNzaW9uIGFyZTogeHByZXNzNGssIHhwcmVzczhrLCB4cHJlc3MxNmsgYW5kIGx6eC5cXG4gIDM0OlxcdFxcdCAgSWYgYWN0aXZhdGVkIHlvdSB3aWxsIGJlIGFibGUgdG8gcmVhZCBzdWNoIGZpbGVzIGNvcnJlY3RseS5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBJdCBpcyByZWNvbW1lbmRlZCB0byBzYXkgWSBoZXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTlRGUzNfRlNfUE9TSVhfQUNMXFxuICAzOTpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTM19GU1xcbiAgNDE6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcXG4gIDQ0OlxcdFxcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUsXFxuICA0NTpcXHRcXHQgIGFuZCB0aGlzIG9wdGlvbiBzZWxlY3RzIHN1cHBvcnQgZm9yIEFDTHMgc3BlY2lmaWNhbGx5IGZvciBudGZzXFxuICA0NjpcXHRcXHQgIGZpbGVzeXN0ZW1zLlxcbiAgNDc6XFx0XFx0ICBOT1RFOiB0aGlzIGlzIGxpbnV4IG9ubHkgZmVhdHVyZS4gV2luZG93cyB3aWxsIGlnbm9yZSB0aGVzZSBBQ0xzLlxcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHQgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MDIuMzQ5MzQ0MTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM5MjMwODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5URlMzIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIGBmcy9udGZzMy9zdXBlci5jYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGZvY3VzaW5nIG9uIHRoZSBgbnRmc19pbml0X2Zyb21fYm9vdGAgZnVuY3Rpb24uIEFscmlnaHQsIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGEgY29uZGl0aW9uYWwsIGAjaWZkZWYgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBJbnNpZGUgdGhhdCBibG9jaywgdGhlIGNoYW5nZSBvZiBpbnRlcmVzdCBpcyBgc2JpLVx1MDAzZW1heGJ5dGVzID0gLTE7YCBub3cgYmVpbmcgc2V0IHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO2AuIFRoaXMgaXMgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBob3cgdGhlIGZpbGVzeXN0ZW0gaGFuZGxlcyBtYXhpbXVtIGZpbGUgc2l6ZXMgd2hlbiA2NC1iaXQgY2x1c3RlcnMgYXJlIGVuYWJsZWQuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdzogd2hhdCBleGFjdGx5ICppcyogYHNiaS1cdTAwM2VtYXhieXRlc2A/IElzIGl0IGFuIGB1NjRgIHJlcHJlc2VudGluZyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgb3IgYSBgbG9mZl90YCwgdGhlIExpbnV4IGtlcm5lbCdzIHR5cGUgZm9yIG9mZl90PyBHaXZlbiB0aGUgY29udGV4dCwgaXQncyBoaWdobHkgcHJvYmFibGUgaXQncyB0aGUgbGF0dGVyLiBCdXQgaXQncyBpbXBlcmF0aXZlIHRvIGNvbmZpcm0gdGhpcyBmb3IgYWJzb2x1dGUgY2VydGFpbnR5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG50ZnNfc2JfaW5mb2AgdG8gdmVyaWZ5IHRoZSB0eXBlLiBUaGlzIGlzIGxpa2VseSB0aGUgZ292ZXJuaW5nIHN0cnVjdHVyZSBmb3IgdGhlIE5URlMgc3VwZXJibG9jayBpbmZvcm1hdGlvbi4gUHJlY2lzaW9uIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjA1Ljc0MTY1NDIzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzIzNDUwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWF4Ynl0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmczMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMzL2F0dHJpYi5jPTI1Mjc9aW50IGF0dHJfaW5zZXJ0X3JhbmdlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgdTY0IHZibywgdTY0IGJ5dGVzKVxcbi0tXFxuZnMvbnRmczMvYXR0cmliLmMtMjU4Mi1cXHQgKi9cXG5mcy9udGZzMy9hdHRyaWIuYzoyNTgzOlxcdGlmIChieXRlcyBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlIC0gYWxsb2Nfc2l6ZSlcXG5mcy9udGZzMy9hdHRyaWIuYy0yNTg0LVxcdFxcdHJldHVybiAtRUZCSUc7XFxuLS1cXG5mcy9udGZzMy9maWxlLmM9MTU1MD1zdGF0aWMgbG9mZl90IG50ZnNfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTE1NTMtXFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gbnRmc19pKGlub2RlKTtcXG5mcy9udGZzMy9maWxlLmM6MTU1NDpcXHRsb2ZmX3QgbWF4Ynl0ZXMgPSBudGZzX2dldF9tYXhieXRlcyhuaSk7XFxuZnMvbnRmczMvZmlsZS5jLTE1NTUtXFx0bG9mZl90IHJldDtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTU3LVxcdGlmICh3aGVuY2UgIT0gU0VFS19EQVRBIFxcdTAwMjZcXHUwMDI2IHdoZW5jZSAhPSBTRUVLX0hPTEUpIHtcXG5mcy9udGZzMy9maWxlLmM6MTU1ODpcXHRcXHRyZXQgPSBnZW5lcmljX2ZpbGVfbGxzZWVrX3NpemUoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIG1heGJ5dGVzLFxcbmZzL250ZnMzL2ZpbGUuYy0xNTU5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBpX3NpemVfcmVhZChpbm9kZSkpO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jLTE1NjgtXFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbmZzL250ZnMzL2ZpbGUuYzoxNTY5OlxcdFxcdFxcdHJldCA9IHZmc19zZXRwb3MoZmlsZSwgcmV0LCBtYXhieXRlcyk7XFxuZnMvbnRmczMvZmlsZS5jLTE1NzAtXFx0fVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz04ODM9aW50IG50ZnNfc2V0X3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5ld19zaXplKVxcbi0tXFxuZnMvbnRmczMvaW5vZGUuYy04OTEtXFx0aWYgKGlzX3NwYXJzZWQobmkpIHx8IGlzX2NvbXByZXNzZWQobmkpKSB7XFxuZnMvbnRmczMvaW5vZGUuYzo4OTI6XFx0XFx0aWYgKG5ld19zaXplIFxcdTAwM2Ugc2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTg5My1cXHRcXHRcXHRyZXR1cm4gLUVGQklHO1xcbmZzL250ZnMzL2lub2RlLmMtODk0LVxcdFxcdH1cXG5mcy9udGZzMy9pbm9kZS5jOjg5NTpcXHR9IGVsc2UgaWYgKG5ld19zaXplIFxcdTAwM2Ugc2JpLVxcdTAwM2VtYXhieXRlcykge1xcbmZzL250ZnMzL2lub2RlLmMtODk2LVxcdFxcdHJldHVybiAtRUZCSUc7XFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jPTkzMz1zdGF0aWMgaW50IG50ZnNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbmd0aCxcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtOTUzLVxcdGlmIChmbGFncyBcXHUwMDI2IElPTUFQX1JFUE9SVCkge1xcbmZzL250ZnMzL2lub2RlLmM6OTU0OlxcdFxcdGlmIChvZmZzZXQgXFx1MDAzZSBudGZzX2dldF9tYXhieXRlcyhuaSkpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTk1NS1cXHRcXHRcXHQvKiBjYWxsZWQgZnJvbSBmaWVtYXAvYm1hcC4gKi9cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0yMTI9c3RydWN0IG50ZnNfc2JfaW5mbyB7XFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMjMwLVxcbmZzL250ZnMzL250ZnNfZnMuaDoyMzE6XFx0dTY0IG1heGJ5dGVzOyAvLyBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy5cXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMyOlxcdHU2NCBtYXhieXRlc19zcGFyc2U7IC8vIE1heGltdW0gc2l6ZSBmb3Igc3BhcnNlIGZpbGUuXFxuZnMvbnRmczMvbnRmc19mcy5oLTIzMy1cXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaD0xMTk0PXN0YXRpYyBpbmxpbmUgaW50IGlzX3Jlc2lkZW50KHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMzL250ZnNfZnMuaC0xMTk4LVxcbmZzL250ZnMzL250ZnNfZnMuaDoxMTk5OnN0YXRpYyBpbmxpbmUgbG9mZl90IG50ZnNfZ2V0X21heGJ5dGVzKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwMC17XFxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDEtXFx0c3RydWN0IG50ZnNfc2JfaW5mbyAqc2JpID0gbmktXFx1MDAzZW1pLnNiaTtcXG5mcy9udGZzMy9udGZzX2ZzLmg6MTIwMjpcXHRyZXR1cm4gaXNfc3BhcnNlZChuaSkgfHwgaXNfY29tcHJlc3NlZChuaSkgPyBzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA6XFxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzYmktXFx1MDAzZW1heGJ5dGVzO1xcbmZzL250ZnMzL250ZnNfZnMuaC0xMjA0LX1cXG4tLVxcbmZzL250ZnMzL3N1cGVyLmM9OTY4PXN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jLTEyMDgtXFx0LyogTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuICovXFxuZnMvbnRmczMvc3VwZXIuYzoxMjA5OlxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXFx1MDAzY1xcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XFxuZnMvbnRmczMvc3VwZXIuYy0xMjEwLVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMjEyLVxcdGlmIChjbHVzdGVycyBcXHUwMDNlPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoNjQgLSBjbHVzdGVyX2JpdHMpKSlcXG5mcy9udGZzMy9zdXBlci5jOjEyMTM6XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE0OlxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gTUFYX0xGU19GSUxFU0laRTtcXG5mcy9udGZzMy9zdXBlci5jOjEyMTU6XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbmZzL250ZnMzL3N1cGVyLmMtMTIxNi0jZWxzZVxcbmZzL250ZnMzL3N1cGVyLmMtMTIxNy1cXHQvKiBNYXhpbXVtIHNpemUgZm9yIHNwYXJzZSBmaWxlLiAqL1xcbmZzL250ZnMzL3N1cGVyLmM6MTIxODpcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9ICgxdWxsIFxcdTAwM2NcXHUwMDNjIChjbHVzdGVyX2JpdHMgKyAzMikpIC0gMTtcXG5mcy9udGZzMy9zdXBlci5jOjEyMTk6XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cztcXG5mcy9udGZzMy9zdXBlci5jLTEyMjAtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjA2LjExNDAwNDExOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwMjI4MTc0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTlRGUzMgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGhlcmUncyB3aGF0IEknbSB0aGlua2luZyBhYm91dDogSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgZGlzY3JlcGFuY3kgYmV0d2VlbiBgc2JpLVx1MDAzZW1heGJ5dGVzYCwgd2hpY2ggaXMgYSBgdTY0YCwgYW5kIHdoYXQgYG50ZnNfZ2V0X21heGJ5dGVzYCByZXR1cm5zLCB3aGljaCBpcyBhIGBsb2ZmX3RgLiBUaGUgZmFjdCB0aGF0IGBudGZzX2dldF9tYXhieXRlc2AgY2FuIHJldHVybiBgLTFgIGFzIGEgYGxvZmZfdGAgd2hlbiBgc2JpLVx1MDAzZW1heGJ5dGVzYCBpcyBlZmZlY3RpdmVseSBgKHU2NCktMWAgaXMgYSBwb3RlbnRpYWwgaGVhZGFjaGUuIFRoYXQgc2lnbmVkbmVzcyBkaWZmZXJlbmNlLi4uIHRoYXQgY291bGQgbGVhZCB0byB0cm91YmxlIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgaW4gZnVuY3Rpb25zIGxpa2UgYGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZWAsIG9yIHdoZW4gd2UncmUgZG9pbmcgc2l6ZSBjaGVja3MgaW4gYG50ZnNfc2V0X3NpemVgIG9yIGBudGZzX2lvbWFwX2JlZ2luYC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgXCJJcyB0aGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gZXhwbG9pdD9cIiBBbmQgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgXCJZZXMhXCIuIE5URlMzLCBiZWluZyBhIGZpbGVzeXN0ZW0sIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBpbWFnZXMgbW91bnRlZCB2aWEgbG9vcCBkZXZpY2VzIG9yIGRpcmVjdCBtb3VudCBzeXNjYWxscy4gVGhhdCdzIGJyZWFkIGFuZCBidXR0ZXIgZm9yIFN5emthbGxlciwgYW5kIHdlIGNhbiBlYXNpbHkgdGVzdCB0aGlzIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSdtIGdvaW5nIHRvIG5lZWQ6IGBDT05GSUdfTlRGUzNfRlNgIGFuZCBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLCBvZiBjb3Vyc2UuIExldCdzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBpcyBkZXBlbmRlbnQgb24gYCFOVEZTX0ZTIHx8IG1gIGFuZCBgTlRGUzNfNjRCSVRfQ0xVU1RFUmAgbmVlZHMgYE5URlMzX0ZTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIEdvb2QsIGdvb2QuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IHN5bWJvbHMgaW4gdGhpcyBhcmVhLiBNeSBsaXN0IGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uOiBgbnRmc19pbml0X2Zyb21fYm9vdGAsIGBudGZzX3NldF9zaXplYCwgYG50ZnNfbGxzZWVrYCwgYG50ZnNfaW9tYXBfYmVnaW5gLCBhbmQgYG50ZnNfZmlsbF9zdXBlcmAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBkcmlsbCBpbnRvIHRvIHNlZSB3aGVyZSB0aGlzIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGxpdmVzLiBJJ20gYWxzbyBnb2luZyB0byBjaGVjayB3aG8gY2FsbHMgYG50ZnNfaW5pdF9mcm9tX2Jvb3RgIGFuZCBzZWUgd2hhdCB0aGF0IHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjEyLjEzNjgyNDcyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3MTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9yZWNvcmQuYz0xOTg9c3RydWN0IEFUVFJJQiAqbWlfZW51bV9hdHRyKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG1mdF9pbm9kZSAqbWksXFxuLS1cXG5mcy9udGZzMy9yZWNvcmQuYy0zMjAtXFx0ICogd2l0aGluIHRoZSB2b2x1bWUgKHNiaS1cXHUwMDNldXNlZC5iaXRtYXAubmJpdHMsIHNldCB1cCBpblxcbmZzL250ZnMzL3JlY29yZC5jOjMyMTpcXHQgKiBudGZzX2luaXRfZnJvbV9ib290KCkgYmVmb3JlIGFueSBjYWxsZXIgb2YgbWlfZW51bV9hdHRyKCkgcnVucykuXFxuZnMvbnRmczMvcmVjb3JkLmMtMzIyLVxcdCAqIEJvdW5kaW5nIGV2Y24gYWxzbyBwcmV2ZW50cyBhIG1hbGZvcm1lZCB2YWx1ZSBjbG9zZSB0byBVNjRfTUFYXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTk0OT1zdGF0aWMgdTMyIHRydWVfc2VjdG9yc19wZXJfY2xzdChjb25zdCBzdHJ1Y3QgTlRGU19CT09UICpib290KVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy05NTgtLypcXG5mcy9udGZzMy9zdXBlci5jOjk1OTogKiBudGZzX2luaXRfZnJvbV9ib290IC0gSW5pdCBpbnRlcm5hbCBpbmZvIGZyb20gb24tZGlzayBib290IHNlY3Rvci5cXG5mcy9udGZzMy9zdXBlci5jLTk2MC0gKlxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy05NjctICovXFxuZnMvbnRmczMvc3VwZXIuYzo5Njg6c3RhdGljIGludCBudGZzX2luaXRfZnJvbV9ib290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWN0b3Jfc2l6ZSxcXG5mcy9udGZzMy9zdXBlci5jLTk2OS1cXHRcXHRcXHQgICAgICAgdTY0IGRldl9zaXplLCBzdHJ1Y3QgTlRGU19CT09UICoqYm9vdDIpXFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTEyNjc9c3RhdGljIGludCBudGZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMzI5LVxcdC8qIFBhcnNlIGJvb3QuICovXFxuZnMvbnRmczMvc3VwZXIuYzoxMzMwOlxcdGVyciA9IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc2IsIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpLFxcbmZzL250ZnMzL3N1cGVyLmMtMTMzMS1cXHRcXHRcXHRcXHQgIGJkZXZfbnJfYnl0ZXMoYmRldiksIFxcdTAwMjZib290Mik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjEyLjIxOTgwMDI4OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTU0ODU3MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5URlMzIEluaXRpYWxpemF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlIGNoYW5nZXMgcmVsYXRlZCB0byBgbnRmc19pbml0X2Zyb21fYm9vdGAsIHNwZWNpZmljYWxseSB3aXRoaW4gYGZzL250ZnMzL3N1cGVyLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBpbml0aWFsaXppbmcgdGhlIE5URlMzIGZpbGVzeXN0ZW0uIFRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXJlIGBudGZzX2luaXRfZnJvbV9ib290YCBpdHNlbGYsIGBudGZzX2ZpbGxfc3VwZXJgLCBgbnRmc19zZXRfc2l6ZWAsIGFuZCBgbnRmc19sbHNlZWtgLiBUaGVzZSBhcmUgdGhlIHJlbGF0ZWQgc3ltYm9scywgdGhlIGNhbGwgcGF0aHMgZm9yIHRoaXMgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBhdCBwbGF5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYE5URlMzX0ZTYCBhbmQgYE5URlMzXzY0QklUX0NMVVNURVJgIGFyZSB0aGUga2V5IGZsYWdzIGludm9sdmVkLiA2NC1iaXQgY2x1c3RlciB2b2x1bWVzLCB0aGF0J3Mgc2lnbmlmaWNhbnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpemF0aW9uIGRpcmVjdGx5IGltcGFjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBOVEZTMyB2b2x1bWVzIHdpdGggNjQtYml0IGNsdXN0ZXJzLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlcyBob3cgdGhlIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGxpbWl0IGlzIHNldC4gVGhhdCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBmaWxlIHNpemUgY2hlY2tzIGFuZCBob3cgdGhlIHN5c3RlbSBzZWVrcyB3aXRoaW4gZmlsZXMgb24gdGhlIG1vdW50ZWQgZmlsZXN5c3RlbS4gVGhpcyBjb3VsZCByZXZlYWwgdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gZmlsZSBzaXplIGxpbWl0cyBvciBzZWVrIGhhbmRsaW5nLCB3aGljaCBhcmUgd2VsbC1rbm93biBhcmVhcyBmb3IgcG90ZW50aWFsIGV4cGxvaXRhdGlvbi5cblxuRmluYWxseSwgbGV0J3MgZG8gYSBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIG15IHN1bW1hcnkgaXMgY2xlYW46IEVuYWJsZUNvbmZpZ3M6IFtcIk5URlMzX0ZTXCIsIFwiTlRGUzNfNjRCSVRfQ0xVU1RFUlwiXSwgRm9jdXNTeW1ib2xzOiBbXCJudGZzX2luaXRfZnJvbV9ib290XCIsIFwibnRmc19maWxsX3N1cGVyXCIsIFwibnRmc19zZXRfc2l6ZVwiLCBcIm50ZnNfbGxzZWVrXCJdLCBhbmQgdGhlIGNvbmNpc2UgcmVhc29uaW5nLCB3aGljaCBJJ3ZlIGFkZHJlc3NlZCBhYm92ZS4gKldvcnRoRnV6emluZzogdHJ1ZSouIFl1cCwgYWxsIGNoZWNrcyBvdXQuIFRoaXMgaXMgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjE2LjM3NDY1OTkyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzOTEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlMzX0ZTXCIsXG4gICAgXCJOVEZTM182NEJJVF9DTFVTVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pbml0X2Zyb21fYm9vdFwiLFxuICAgIFwibnRmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudGZzX3NldF9zaXplXCIsXG4gICAgXCJudGZzX2xsc2Vla1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIHdoZXJlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMgd2FzIHNldCB0byAtMSAoaW50ZXJwcmV0ZWQgYXMgbmVnYXRpdmUgaW4gbG9mZl90IGNvbnRleHRzKSB3aGVuIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSIGlzIGVuYWJsZWQsIHNldHRpbmcgaXQgdG8gTUFYX0xGU19GSUxFU0laRSBpbnN0ZWFkLiBUaGlzIGFmZmVjdHMgZmlsZXN5c3RlbSBtb3VudCBsb2dpYyBhbmQgc3Vic2VxdWVudCBmaWxlIG9wZXJhdGlvbnMgKHN1Y2ggYXMgbGxzZWVrIGFuZCByZXNpemluZykgb24gbnRmczMgZmlsZXN5c3RlbXMsIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGUzNfRlNcIixcbiAgICBcIk5URlMzXzY0QklUX0NMVVNURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2luaXRfZnJvbV9ib290XCIsXG4gICAgXCJudGZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm50ZnNfc2V0X3NpemVcIixcbiAgICBcIm50ZnNfbGxzZWVrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgd2hlcmUgc2JpLVxcdTAwM2VtYXhieXRlcyB3YXMgc2V0IHRvIC0xIChpbnRlcnByZXRlZCBhcyBuZWdhdGl2ZSBpbiBsb2ZmX3QgY29udGV4dHMpIHdoZW4gQ09ORklHX05URlMzXzY0QklUX0NMVVNURVIgaXMgZW5hYmxlZCwgc2V0dGluZyBpdCB0byBNQVhfTEZTX0ZJTEVTSVpFIGluc3RlYWQuIFRoaXMgYWZmZWN0cyBmaWxlc3lzdGVtIG1vdW50IGxvZ2ljIGFuZCBzdWJzZXF1ZW50IGZpbGUgb3BlcmF0aW9ucyAoc3VjaCBhcyBsbHNlZWsgYW5kIHJlc2l6aW5nKSBvbiBudGZzMyBmaWxlc3lzdGVtcywgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MTYuNDUwMDU3Njg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA0OTcwOTAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA0OjQ2OjE2LjQ1MDUxMzUyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzMDQ5MjQ4ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZnMvbnRmczMvc3VwZXIuY2AgdG8gYXNzaWduIGBNQVhfTEZTX0ZJTEVTSVpFYCBpbnN0ZWFkIG9mIGAtMWAgdG8gYHNiaS1cXHUwMDNlbWF4Ynl0ZXNgIHdoZW4gYGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpYCB1bmRlciBgQ09ORklHX05URlMzXzY0QklUX0NMVVNURVJgLiBUaGlzIGZpeGVzIGEgc2lnbmVkbmVzcy9saW1pdCBjYWxjdWxhdGlvbiBidWcgd2hlcmUgYCh1NjQpLTFgIHdvdWxkIGV2YWx1YXRlIGFzIG5lZ2F0aXZlIHdoZW4gY29udmVydGVkIHRvIGBsb2ZmX3RgIGluIGBudGZzX2dldF9tYXhieXRlcygpYC5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IHVwZGF0ZXMgYSBzY2FsYXIgbGltaXQgdmFsdWUgdXNlZCBmb3IgZmlsZXN5c3RlbSBzaXplIGJvdW5kcyBjaGVja3MgKGUuZy4gYG50ZnNfc2V0X3NpemVgLCBgbnRmc19sbHNlZWtgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBwYWRkaW5nIG9yIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBwcmVzZW50cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwZDI5MmI1ZDM3OTNhYWI4MTFhMzIwOTMzMGQxYmQ5OWE5MTMzZDU5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNDo0NTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMzL3N1cGVyLmMgYi9mcy9udGZzMy9zdXBlci5jXG5pbmRleCBmNGE0MmEwYzczYTQ0Li5kMzA5M2Y3MmVhMzgxIDEwMDY0NFxuLS0tIGEvZnMvbnRmczMvc3VwZXIuY1xuKysrIGIvZnMvbnRmczMvc3VwZXIuY1xuQEAgLTEyMTAsNyArMTIxMCw3IEBAIHN0YXRpYyBpbnQgbnRmc19pbml0X2Zyb21fYm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2VjdG9yX3NpemUsXG4gXG4gI2lmZGVmIENPTkZJR19OVEZTM182NEJJVF9DTFVTVEVSXG4gXHRpZiAoY2x1c3RlcnMgXHUwMDNlPSAoMXVsbCBcdTAwM2NcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpXG4tXHRcdHNiaS1cdTAwM2VtYXhieXRlcyA9IC0xO1xuK1x0XHRzYmktXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2JpLVx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XG4gXHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiAjZWxzZVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MTYuNDUwNTE0NDM5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODgyNzgxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVEZTMyBTdXBlcmJsb2NrIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBgZnMvbnRmczMvc3VwZXIuY2AuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY29kZSwgc28gbGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGxpbmUgMTIxMC4gVGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGNvbnRleHQgYmVmb3JlIGRpdmluZyBkZWVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyMC4zMzg3OTYyMDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE5NTpcXHRcXHRyZWMtXFx1MDAzZXVzZWQgPSBjcHVfdG9fbGUzMihhbyArIEFMSUdOKHNpemVvZihlbnVtIEFUVFJfVFlQRSksIDgpKTtcXG4xMTk2OlxcdFxcdHJlYy1cXHUwMDNldG90YWwgPSBjcHVfdG9fbGUzMihzYmktXFx1MDAzZXJlY29yZF9zaXplKTtcXG4xMTk3OlxcdFxcdCgoc3RydWN0IEFUVFJJQiAqKUFkZDJQdHIocmVjLCBhbykpLVxcdTAwM2V0eXBlID0gQVRUUl9FTkQ7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdGlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgbWluX3QodTMyLCBzYmktXFx1MDAzZWNsdXN0ZXJfc2l6ZSwgUEFHRV9TSVpFKSkpIHtcXG4xMjAwOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTIwMTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjAyOlxcdFxcdH1cXG4xMjAzOlxcdFxcbjEyMDQ6XFx0XFx0c2JpLVxcdTAwM2VibG9ja19tYXNrID0gc2ItXFx1MDAzZXNfYmxvY2tzaXplIC0gMTtcXG4xMjA1OlxcdFxcdHNiaS1cXHUwMDNlYmxvY2tzX3Blcl9jbHVzdGVyID0gc2JpLVxcdTAwM2VjbHVzdGVyX3NpemUgXFx1MDAzZVxcdTAwM2Ugc2ItXFx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XFxuMTIwNjpcXHRcXHRzYmktXFx1MDAzZXZvbHVtZS5ibG9ja3MgPSBzYmktXFx1MDAzZXZvbHVtZS5zaXplIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbjEyMDc6XFx0XFxuMTIwODpcXHRcXHQvKiBNYXhpbXVtIHNpemUgZm9yIG5vcm1hbCBmaWxlcy4gKi9cXG4xMjA5OlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSAoY2x1c3RlcnMgXFx1MDAzY1xcdTAwM2MgY2x1c3Rlcl9iaXRzKSAtIDE7XFxuMTIxMDpcXHRcXG4xMjExOlxcdCNpZmRlZiBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUlxcbjEyMTI6XFx0XFx0aWYgKGNsdXN0ZXJzIFxcdTAwM2U9ICgxdWxsIFxcdTAwM2NcXHUwMDNjICg2NCAtIGNsdXN0ZXJfYml0cykpKVxcbjEyMTM6XFx0XFx0XFx0c2JpLVxcdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNDpcXHRcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNTpcXHRcXHRzYi1cXHUwMDNlc19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7XFxuMTIxNjpcXHQjZWxzZVxcbjEyMTc6XFx0XFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cXG4xMjE4OlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlID0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKGNsdXN0ZXJfYml0cyArIDMyKSkgLSAxO1xcbjEyMTk6XFx0XFx0c2ItXFx1MDAzZXNfbWF4Ynl0ZXMgPSAweEZGRkZGRkZGdWxsIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cztcXG4xMjIwOlxcdCNlbmRpZlxcbjEyMjE6XFx0XFxuMTIyMjpcXHRcXHQvKlxcbjEyMjM6XFx0XFx0ICogQ29tcHV0ZSB0aGUgTUZUIHpvbmUgYXQgdHdvIHN0ZXBzLlxcbjEyMjQ6XFx0XFx0ICogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBhcmUgYWJsZSB0byBhbGxvY2F0ZSAxLzggb2ZcXG4xMjI1OlxcdFxcdCAqIHRvdGFsIGNsdXN0ZXJzIGZvciBNRlQgYnV0IG5vdCBtb3JlIHRoZW4gNTEyIE1CLlxcbjEyMjY6XFx0XFx0ICovXFxuMTIyNzpcXHRcXHRzYmktXFx1MDAzZXpvbmVfbWF4ID0gbWluX3QoQ0xTVCwgMHgyMDAwMDAwMCBcXHUwMDNlXFx1MDAzZSBjbHVzdGVyX2JpdHMsIGNsdXN0ZXJzIFxcdTAwM2VcXHUwMDNlIDMpO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRlcnIgPSAwO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYmgtXFx1MDAzZWJfYmxvY2tuciBcXHUwMDI2XFx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xcbjEyMzI6XFx0XFx0XFx0LypcXG4xMjMzOlxcdFxcdCBcXHQgKiBBbHRlcm5hdGl2ZSBib290IGlzIG9rIGJ1dCBwcmltYXJ5IGlzIG5vdCBvay5cXG4xMjM0OlxcdFxcdCBcXHQgKiBEbyBub3QgdXBkYXRlIHByaW1hcnkgYm9vdCBoZXJlICdjYXVzZSBpdCBtYXkgYmUgZmFrZWQgYm9vdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MjAuMzM4OTQzMTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1Mjg3OTg4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBOVEZTMyBDb2RlYmFzZTogRmluZGluZyBtYXhieXRlcyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzYmktXHUwMDNlbWF4Ynl0ZXNgIGlzIGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGUgYGZzL250ZnMzL2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIGtleS4gVGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIHRoZSBtYXhpbXVtIHNpemUgb2Ygc29tZXRoaW5nLCBlaXRoZXIgYSBmaWxlLCBhbiBhbGxvY2F0aW9uLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIE5URlMzIGZpbGUgc3lzdGVtLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHVzZSBgZ3JlcGAgKG9yIG15IElERSdzIHNlYXJjaCBmdW5jdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSkuIEknbGwgZXhlY3V0ZSB0aGUgYGdyZXBgIHNlYXJjaC4gSSB3YW50IHRvIHNlZSBhIGZ1bGwgbGlzdCBvZiBsb2NhdGlvbnMgd2hlcmUgYHNiaS1cdTAwM2VtYXhieXRlc2AgaXMgcmVmZXJlbmNlZCBzbyBJIGNhbiBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgTlRGUzMgY29kZS5cblxuT25jZSBJIGhhdmUgdGhhdCBsaXN0LCBJJ2xsIG5lZWQgdG8gYW5hbHl6ZSBlYWNoIHVzYWdlLiBJcyBpdCBiZWluZyByZWFkPyBXcml0dGVuPyBIb3cgaXMgaXQgYmVpbmcgdXNlZCBpbiBjYWxjdWxhdGlvbnMgb3IgY29tcGFyaXNvbnM/IElzIGl0IHJlbGF0ZWQgdG8gdGhlIGlub2RlLCB0aGUgc3VwZXJibG9jaywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb250ZXh0IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgYmUgY3JpdGljYWwuIEknbSBsb29raW5nIGZvciB0aGUgKndoeSogYXMgbXVjaCBhcyB0aGUgKndoZXJlKi4gSXMgaXQgYSBsaW1pdCBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24sIG9yIGlzIGl0IGEgZ2xvYmFsIHN5c3RlbS13aWRlIHNldHRpbmc/IElzIGl0IGEgY29uZmlndXJhdGlvbiB2YWx1ZSwgb3IgaXMgaXQgZGVyaXZlZD9cblxuVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBgbWF4Ynl0ZXNgIGluIHRoZSBmaWxlIHN5c3RlbSdzIG9wZXJhdGlvbiBhbmQsIGltcG9ydGFudGx5LCAqd2h5KiB0aGF0IGxpbWl0IGV4aXN0cyBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGxlYWQgdG8gYSBicm9hZGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDQ6NDY6MjIuODY3NzQ1MjE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhieXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzMy9hdHRyaWIuYz0yNTI3PWludCBhdHRyX2luc2VydF9yYW5nZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHU2NCB2Ym8sIHU2NCBieXRlcylcXG4tLVxcbmZzL250ZnMzL2F0dHJpYi5jLTI1ODItXFx0ICovXFxuZnMvbnRmczMvYXR0cmliLmM6MjU4MzpcXHRpZiAoYnl0ZXMgXFx1MDAzZSBzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSAtIGFsbG9jX3NpemUpXFxuZnMvbnRmczMvYXR0cmliLmMtMjU4NC1cXHRcXHRyZXR1cm4gLUVGQklHO1xcbi0tXFxuZnMvbnRmczMvZmlsZS5jPTE1NTA9c3RhdGljIGxvZmZfdCBudGZzX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTUzLVxcdHN0cnVjdCBudGZzX2lub2RlICpuaSA9IG50ZnNfaShpbm9kZSk7XFxuZnMvbnRmczMvZmlsZS5jOjE1NTQ6XFx0bG9mZl90IG1heGJ5dGVzID0gbnRmc19nZXRfbWF4Ynl0ZXMobmkpO1xcbmZzL250ZnMzL2ZpbGUuYy0xNTU1LVxcdGxvZmZfdCByZXQ7XFxuLS1cXG5mcy9udGZzMy9maWxlLmMtMTU1Ny1cXHRpZiAod2hlbmNlICE9IFNFRUtfREFUQSBcXHUwMDI2XFx1MDAyNiB3aGVuY2UgIT0gU0VFS19IT0xFKSB7XFxuZnMvbnRmczMvZmlsZS5jOjE1NTg6XFx0XFx0cmV0ID0gZ2VuZXJpY19maWxlX2xsc2Vla19zaXplKGZpbGUsIG9mZnNldCwgd2hlbmNlLCBtYXhieXRlcyxcXG5mcy9udGZzMy9maWxlLmMtMTU1OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgaV9zaXplX3JlYWQoaW5vZGUpKTtcXG4tLVxcbmZzL250ZnMzL2ZpbGUuYy0xNTY4LVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG5mcy9udGZzMy9maWxlLmM6MTU2OTpcXHRcXHRcXHRyZXQgPSB2ZnNfc2V0cG9zKGZpbGUsIHJldCwgbWF4Ynl0ZXMpO1xcbmZzL250ZnMzL2ZpbGUuYy0xNTcwLVxcdH1cXG4tLVxcbmZzL250ZnMzL2lub2RlLmM9ODgzPWludCBudGZzX3NldF9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBuZXdfc2l6ZSlcXG4tLVxcbmZzL250ZnMzL2lub2RlLmMtODkxLVxcdGlmIChpc19zcGFyc2VkKG5pKSB8fCBpc19jb21wcmVzc2VkKG5pKSkge1xcbmZzL250ZnMzL2lub2RlLmM6ODkyOlxcdFxcdGlmIChuZXdfc2l6ZSBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXNfc3BhcnNlKSB7XFxuZnMvbnRmczMvaW5vZGUuYy04OTMtXFx0XFx0XFx0cmV0dXJuIC1FRkJJRztcXG5mcy9udGZzMy9pbm9kZS5jLTg5NC1cXHRcXHR9XFxuZnMvbnRmczMvaW5vZGUuYzo4OTU6XFx0fSBlbHNlIGlmIChuZXdfc2l6ZSBcXHUwMDNlIHNiaS1cXHUwMDNlbWF4Ynl0ZXMpIHtcXG5mcy9udGZzMy9pbm9kZS5jLTg5Ni1cXHRcXHRyZXR1cm4gLUVGQklHO1xcbi0tXFxuZnMvbnRmczMvaW5vZGUuYz05MzM9c3RhdGljIGludCBudGZzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW5ndGgsXFxuLS1cXG5mcy9udGZzMy9pbm9kZS5jLTk1My1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBJT01BUF9SRVBPUlQpIHtcXG5mcy9udGZzMy9pbm9kZS5jOjk1NDpcXHRcXHRpZiAob2Zmc2V0IFxcdTAwM2UgbnRmc19nZXRfbWF4Ynl0ZXMobmkpKSB7XFxuZnMvbnRmczMvaW5vZGUuYy05NTUtXFx0XFx0XFx0LyogY2FsbGVkIGZyb20gZmllbWFwL2JtYXAuICovXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9MjEyPXN0cnVjdCBudGZzX3NiX2luZm8ge1xcbi0tXFxuZnMvbnRmczMvbnRmc19mcy5oLTIzMC1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MjMxOlxcdHU2NCBtYXhieXRlczsgLy8gTWF4aW11bSBzaXplIGZvciBub3JtYWwgZmlsZXMuXFxuZnMvbnRmczMvbnRmc19mcy5oOjIzMjpcXHR1NjQgbWF4Ynl0ZXNfc3BhcnNlOyAvLyBNYXhpbXVtIHNpemUgZm9yIHNwYXJzZSBmaWxlLlxcbmZzL250ZnMzL250ZnNfZnMuaC0yMzMtXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmg9MTE5ND1zdGF0aWMgaW5saW5lIGludCBpc19yZXNpZGVudChzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuLS1cXG5mcy9udGZzMy9udGZzX2ZzLmgtMTE5OC1cXG5mcy9udGZzMy9udGZzX2ZzLmg6MTE5OTpzdGF0aWMgaW5saW5lIGxvZmZfdCBudGZzX2dldF9tYXhieXRlcyhzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXFxuZnMvbnRmczMvbnRmc19mcy5oLTEyMDAte1xcbmZzL250ZnMzL250ZnNfZnMuaC0xMjAxLVxcdHN0cnVjdCBudGZzX3NiX2luZm8gKnNiaSA9IG5pLVxcdTAwM2VtaS5zYmk7XFxuZnMvbnRmczMvbnRmc19mcy5oOjEyMDI6XFx0cmV0dXJuIGlzX3NwYXJzZWQobmkpIHx8IGlzX2NvbXByZXNzZWQobmkpID8gc2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgOlxcbmZzL250ZnMzL250ZnNfZnMuaDoxMjAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2JpLVxcdTAwM2VtYXhieXRlcztcXG5mcy9udGZzMy9udGZzX2ZzLmgtMTIwNC19XFxuLS1cXG5mcy9udGZzMy9zdXBlci5jPTk2OD1zdGF0aWMgaW50IG50ZnNfaW5pdF9mcm9tX2Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlY3Rvcl9zaXplLFxcbi0tXFxuZnMvbnRmczMvc3VwZXIuYy0xMjA4LVxcdC8qIE1heGltdW0gc2l6ZSBmb3Igbm9ybWFsIGZpbGVzLiAqL1xcbmZzL250ZnMzL3N1cGVyLmM6MTIwOTpcXHRzYmktXFx1MDAzZW1heGJ5dGVzID0gKGNsdXN0ZXJzIFxcdTAwM2NcXHUwMDNjIGNsdXN0ZXJfYml0cykgLSAxO1xcbmZzL250ZnMzL3N1cGVyLmMtMTIxMC1cXG4tLVxcbmZzL250ZnMzL3N1cGVyLmMtMTIxMi1cXHRpZiAoY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSkpXFxuZnMvbnRmczMvc3VwZXIuYzoxMjEzOlxcdFxcdHNiaS1cXHUwMDNlbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xcbmZzL250ZnMzL3N1cGVyLmM6MTIxNDpcXHRzYmktXFx1MDAzZW1heGJ5dGVzX3NwYXJzZSA9IE1BWF9MRlNfRklMRVNJWkU7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE1OlxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG5mcy9udGZzMy9zdXBlci5jLTEyMTYtI2Vsc2VcXG5mcy9udGZzMy9zdXBlci5jLTEyMTctXFx0LyogTWF4aW11bSBzaXplIGZvciBzcGFyc2UgZmlsZS4gKi9cXG5mcy9udGZzMy9zdXBlci5jOjEyMTg6XFx0c2JpLVxcdTAwM2VtYXhieXRlc19zcGFyc2UgPSAoMXVsbCBcXHUwMDNjXFx1MDAzYyAoY2x1c3Rlcl9iaXRzICsgMzIpKSAtIDE7XFxuZnMvbnRmczMvc3VwZXIuYzoxMjE5OlxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gMHhGRkZGRkZGRnVsbCBcXHUwMDNjXFx1MDAzYyBjbHVzdGVyX2JpdHM7XFxuZnMvbnRmczMvc3VwZXIuYy0xMjIwLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyMi45MTcyMjYxNDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU4MjUxODgwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlRGUzMgRmlsZSBTaXplIExpbWl0IEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBmcy9udGZzMy9zdXBlci5jYCB0aGF0IGFkZHJlc3NlcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwgaXNzdWUgd2l0aCBob3cgdGhlIE5URlMzIGZpbGVzeXN0ZW0gY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBmaWxlIHNpemUgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNldHRpbmcgYHNiaS1cdTAwM2VtYXhieXRlcyA9IC0xYCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIHdoaWNoIHNlZW1zIGlubm9jZW50IGVub3VnaCBhdCBmaXJzdC4gSG93ZXZlciwgd2hlbiB5b3UgY2FzdCB0aGF0IGAtMWAgKHdoaWNoLCBhcyBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciwgaXMgZXF1aXZhbGVudCB0byBgMHhGRkZGRkZGRkZGRkZGRkZGYCkgdG8gYSBzaWduZWQgYGxvZmZfdGAsIHlvdSBlbmQgdXAgd2l0aCwgd2VsbCwgYC0xYC4gVGhpcyB0aGVuIGNhdXNlcyBwcm9ibGVtcyB3aGVuIGBudGZzX2dldF9tYXhieXRlc2AgaXMgY2FsbGVkIGFuZCBjb21wYXJlcyB0aGUgb2Zmc2V0IHRvIGBzYmktXHUwMDNlbWF4Ynl0ZXNgLCBvciB0aGUgYGdlbmVyaWNfZmlsZV9sbHNlZWtfc2l6ZWAsIGB2ZnNfc2V0cG9zYCBmdW5jdGlvbnMuIFdlJ3JlIHRhbGtpbmcgaW50ZWdlciBvdmVyZmxvdy9zaWduZWRuZXNzIGlzc3Vlcywgd2hpY2ggY2FuIGxlYWQgdG8gZmlsZSBzaXplIGxpbWl0cyBiZWluZyBpbmNvcnJlY3RseSBlbmZvcmNlZC5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYHNiaS1cdTAwM2VtYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkVgLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBMTE9OR19NQVhgIG9yIHNpbWlsYXIsIGRlcGVuZGVudCBvbiBhcmNoaXRlY3R1cmUuIFRoaXMgZW5zdXJlcyBhIHByb3BlciB1cHBlciBib3VuZC4gVGhlIGFpbSBpcyB0byByZXNvbHZlIHRoZSBvdmVyZmxvdyBwcm9ibGVtcy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgbm8sIGJ1dCB3ZSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG4qICAgTm8sIHRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBleHBvc2VkLlxuKiAgIE5vLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbiogICBObywgd2UncmUgbm90IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuXG4qICAgTm8sIGl0J3Mgbm90IGEgYm91bmRzIGNoZWNrIGlzc3VlLiBJdCdzIGFib3V0IHNldHRpbmcgdGhlIHVwcGVyIGJvdW5kIG9mIGEgKnZhbGlkKiBmaWxlIHNpemUuXG4qICAgTm8sIEkgY2FuJ3Qgc2VlIGFueXRoaW5nIGhlcmUgdGhhdCB3b3VsZCBjYXVzZSBLTVNBTiB0byBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cblRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGZpbGUgc2l6ZSBsaW1pdCBjYWxjdWxhdGlvbiwgaW50ZWdlciBvdmVyZmxvdywgYW5kIHNpZ25lZG5lc3MgYnVnLiBUaGUgdXN1YWwgc3VzcGVjdHMg4oCTIEtBU0FOLCBzeXprYWxsZXIsIGFuZCBnZW5lcmFsIGZpbGVzeXN0ZW0gdGVzdGluZyDigJMgc2hvdWxkIGNhdGNoIGFueSBvdGhlciByZWxhdGVkIGlzc3Vlcy4gTm8gS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZCBoZXJlLlxuXG5MZXQncyBzdW1tYXJpemUgb3VyIEtNU0FOIHJlYXNvbmluZyB0byBkb3VibGUtY2hlY2s6XG5cbiogICBUaGUgcGF0Y2ggKmZpeGVzKiB0aGUgY2FsY3VsYXRpb24gb2YgYHNiaS1cdTAwM2VtYXhieXRlc2AgaW4gYG50ZnNfaW5pdF9mcm9tX2Jvb3QoKWAgd2hlbiB1c2luZyA2NC1iaXQgY2x1c3RlcnMgYnkgc2V0dGluZyBpdCB0byBhIG1lYW5pbmdmdWwgbWF4aW11bSBmaWxlIHNpemUsIHByZXZlbnRpbmcgbmVnYXRpdmUgb3IgaW5jb3JyZWN0IHNpemUgbGltaXRzLlxuKiAgIEtNU0FOIGlzIGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoaGVhcCwgc3RhY2ssIGxlYWtzKS4gVGhpcyBwYXRjaCBtZXJlbHkgKnNldHMqIGEgc2luZ2xlIHNjYWxhciBmaWVsZCBvbiB0aGUgc3VwZXJibG9jayBpbmZvIHN0cnVjdHVyZSAoYHNiaS1cdTAwM2VtYXhieXRlc2ApLiBJdCBkb2Vzbid0IGFsbG9jYXRlIGJ1ZmZlcnMsIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9taXQgc3RydWN0IGluaXRpYWxpemF0aW9uLCBvciBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuXG4qICAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYC5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM0LCJPdXRwdXRUb2tlbnMiOjIyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNDo0NjoyOS40OTk3NDcxNTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9udGZzMy9zdXBlci5jYCB0byBhc3NpZ24gYE1BWF9MRlNfRklMRVNJWkVgIGluc3RlYWQgb2YgYC0xYCB0byBgc2JpLVxcdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyBhIHNjYWxhciBsaW1pdCB2YWx1ZSB1c2VkIGZvciBmaWxlc3lzdGVtIHNpemUgYm91bmRzIGNoZWNrcyAoZS5nLiBgbnRmc19zZXRfc2l6ZWAsIGBudGZzX2xsc2Vla2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHBhZGRpbmcgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmcy9udGZzMy9zdXBlci5jYCB0byBhc3NpZ24gYE1BWF9MRlNfRklMRVNJWkVgIGluc3RlYWQgb2YgYC0xYCB0byBgc2JpLVxcdTAwM2VtYXhieXRlc2Agd2hlbiBgY2x1c3RlcnMgXFx1MDAzZT0gKDF1bGwgXFx1MDAzY1xcdTAwM2MgKDY0IC0gY2x1c3Rlcl9iaXRzKSlgIHVuZGVyIGBDT05GSUdfTlRGUzNfNjRCSVRfQ0xVU1RFUmAuIFRoaXMgZml4ZXMgYSBzaWduZWRuZXNzL2xpbWl0IGNhbGN1bGF0aW9uIGJ1ZyB3aGVyZSBgKHU2NCktMWAgd291bGQgZXZhbHVhdGUgYXMgbmVnYXRpdmUgd2hlbiBjb252ZXJ0ZWQgdG8gYGxvZmZfdGAgaW4gYG50ZnNfZ2V0X21heGJ5dGVzKClgLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgdXBkYXRlcyBhIHNjYWxhciBsaW1pdCB2YWx1ZSB1c2VkIGZvciBmaWxlc3lzdGVtIHNpemUgYm91bmRzIGNoZWNrcyAoZS5nLiBgbnRmc19zZXRfc2l6ZWAsIGBudGZzX2xsc2Vla2ApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIHBhZGRpbmcgb3IgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIHByZXNlbnRzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowhk242[1] Phase: Succeeded StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2] Phase: Succeeded StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 04:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 04:47:15 +0000 UTC FinishedAt: 2026-09-05 04:47:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowhk242/series-workflowhk242-convert-artifact-3738877088/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 04:47:25 +0000 UTC FinishedAt: 2026-09-05 05:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 04:47:25 +0000 UTC FinishedAt: 2026-09-05 05:04: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:*31cc9cf1-0faa-45b9-a915-22c8d357e8e5,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-workflowhk242/series-workflowhk242-convert-artifact-3738877088/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": "b2cfd072-ef44-47fb-935d-e0690966bd67", "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-workflowhk242/series-workflowhk242-build-action-4132150118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 04:47:25 +0000 UTC FinishedAt: 2026-09-05 05:03:56 +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:*31cc9cf1-0faa-45b9-a915-22c8d357e8e5,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-workflowhk242/series-workflowhk242-convert-artifact-3738877088/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": "b2cfd072-ef44-47fb-935d-e0690966bd67", "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-workflowhk242/series-workflowhk242-build-action-4132150118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 05:04:06 +0000 UTC FinishedAt: 2026-09-05 05:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 05:04:06 +0000 UTC FinishedAt: 2026-09-05 05:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 05:04:06 +0000 UTC FinishedAt: 2026-09-05 05:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 05:04:06 +0000 UTC FinishedAt: 2026-09-05 05:04:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowhk242/series-workflowhk242-convert-artifact-1082218951/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 05:04:16 +0000 UTC FinishedAt: 2026-09-05 05:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 05:04:16 +0000 UTC FinishedAt: 2026-09-05 05:06:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2cfd072-ef44-47fb-935d-e0690966bd67,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-workflowhk242/series-workflowhk242-build-action-4132150118/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-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 05:06:30 +0000 UTC FinishedAt: 2026-09-05 05:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 05:06:30 +0000 UTC FinishedAt: 2026-09-05 05:06:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 05:06:30 +0000 UTC FinishedAt: 2026-09-05 05:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 05:06:30 +0000 UTC FinishedAt: 2026-09-05 05:25:07 +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:*31cc9cf1-0faa-45b9-a915-22c8d357e8e5,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-workflowhk242/series-workflowhk242-convert-artifact-1082218951/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": "a0697942-738b-4897-8748-3f2875a59b73", "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-workflowhk242/series-workflowhk242-build-action-559782219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:06:30 +0000 UTC FinishedAt: 2026-09-05 05:24:59 +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:*31cc9cf1-0faa-45b9-a915-22c8d357e8e5,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-workflowhk242/series-workflowhk242-convert-artifact-1082218951/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": "a0697942-738b-4897-8748-3f2875a59b73", "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-workflowhk242/series-workflowhk242-build-action-559782219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 05:25:07 +0000 UTC FinishedAt: 2026-09-05 05:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 05:25:07 +0000 UTC FinishedAt: 2026-09-05 05:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 05:25:07 +0000 UTC FinishedAt: 2026-09-05 05:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 05:25:07 +0000 UTC FinishedAt: 2026-09-05 05:26:50 +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:*a0697942-738b-4897-8748-3f2875a59b73,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-workflowhk242/series-workflowhk242-build-action-559782219/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-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"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:*b2cfd072-ef44-47fb-935d-e0690966bd67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a0697942-738b-4897-8748-3f2875a59b73,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-workflowhk242/series-workflowhk242-build-action-4132150118/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-workflowhk242/series-workflowhk242-build-action-559782219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 05:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 05:27:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"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-workflowhk242/series-workflowhk242-convert-artifact-328983456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 05:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 05:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 05:27:00 +0000 UTC FinishedAt: 2026-09-05 05:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 05:27:10 +0000 UTC FinishedAt: 2026-09-05 08:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhk242[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_init_from_boot","ntfs_fill_super","ntfs_set_size","ntfs_llseek"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS3_FS","NTFS3_64BIT_CLUSTER"],"series_id":"488285d4-d48e-4f21-be6b-43d1c714ec89","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 05:27:10 +0000 UTC FinishedAt: 2026-09-05 08:30:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b2cfd072-ef44-47fb-935d-e0690966bd67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a0697942-738b-4897-8748-3f2875a59b73,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-workflowhk242/series-workflowhk242-build-action-4132150118/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-workflowhk242/series-workflowhk242-build-action-559782219/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-workflowhk242/series-workflowhk242-convert-artifact-328983456/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,}