Name: series-workflowt4j8r Phase: Succeeded StartedAt: 2026-07-02 12:34:18 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[0] Phase: Succeeded StartedAt: 2026-07-02 12:34:18 +0000 UTC FinishedAt: 2026-07-02 12:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 12:34:18 +0000 UTC FinishedAt: 2026-07-02 12:48:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb09d0e64ecaa0aa0f7d1133a1696ed74dead295", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb09d0e64ecaa0aa0f7d1133a1696ed74dead295", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "5ec2b482-f8d8-4e2a-861a-68e4faaf5533" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_in_icmp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBNVFUgY2FsY3VsYXRpb24gZm9yIHR1bm5lbGVkIElDTVAgcGFja2V0cyBpbiBJUFZTIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgVURQL0dSRSB0dW5uZWwgaGVhZGVyIGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIElQVlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuaW5kZXggZDQwYjQwNGMxYmY2NDYuLjkwNmYyYzM2MTY3NjM4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTE3NjcsNiAmIzQzOzE3NjcsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuIFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGludCB1bGVuID0gMDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcbkBAIC0xODMxLDcgJiM0MzsxODMyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHQgICAvKiBFcnJvciBmb3Igb3VyIHR1bm5lbCBtdXN0IGFycml2ZSBhdCBMT0NBTF9JTiAqL1xuIFx0XHQgICAoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSkge1xuIFx0XHRfX3U4IGlwcm90bztcbi1cdFx0aW50IHVsZW47XG4gXG4gXHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbiBcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG5AQCAtMTkzNiw4ICYjNDM7MTkzNiw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0XHRcdGlmIChkZXN0X2RzdClcbiBcdFx0XHRcdFx0bXR1ID0gZHN0X210dShkZXN0X2RzdC1cdTAwM2Vkc3RfY2FjaGUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAobXR1IFx1MDAzZSA2OCAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcbi1cdFx0XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbiYjNDM7XHRcdFx0aWYgKG10dSBcdTAwM2UgNjggJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbilcbiYjNDM7XHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbjtcbiBcdFx0XHRpbmZvID0gaHRvbmwobXR1KTtcbiBcdFx0fVxuIFx0XHQvKiBTdHJpcCBvdXRlciBJUCwgSUNNUCBhbmQgSVBJUC9VRFAvR1JFLCBnbyB0byBJUCBoZWFkZXIgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVRVIGNhbGN1bGF0aW9uIGZvciB0dW5uZWxlZCBJQ01QIHBhY2tldHMgaW4gSVBWUyBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIFVEUC9HUkUgdHVubmVsIGhlYWRlciBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBJUFZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IGQ0MGI0MDRjMWJmNjQ2Li45MDZmMmMzNjE2NzYzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCkBAIC0xNzY3LDYgJiM0MzsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCWJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyOwogCWNoYXIgKm91dGVyX3Byb3RvID0gJiMzNDtJUElQJiMzNDs7CiYjNDM7CWludCB1bGVuID0gMDsKIAogCSpyZWxhdGVkID0gMTsKIApAQCAtMTgzMSw3ICYjNDM7MTgzMiw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkJICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi8KIAkJICAgKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpIHsKIAkJX191OCBpcHJvdG87Ci0JCWludCB1bGVuOwogCiAJCS8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi8KIAkJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSkpCkBAIC0xOTM2LDggJiM0MzsxOTM2LDggQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCQkJCWlmIChkZXN0X2RzdCkKIAkJCQkJbXR1ID0gZHN0X210dShkZXN0X2RzdC0mZ3Q7ZHN0X2NhY2hlKTsKIAkJCX0KLQkJCWlmIChtdHUgJmd0OyA2OCAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkKLQkJCQltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiYjNDM7CQkJaWYgKG10dSAmZ3Q7IDY4ICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHVsZW4pCiYjNDM7CQkJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB1bGVuOwogCQkJaW5mbyA9IGh0b25sKG10dSk7CiAJCX0KIAkJLyogU3RyaXAgb3V0ZXIgSVAsIElDTVAgYW5kIElQSVAvVURQL0dSRSwgZ28gdG8gSVAgaGVhZGVyIG9mCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXBfdnNfaW5faWNtcGAuICBJdCBsb29rcyBsaWtlIGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgTVRVIGNhbGN1bGF0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBiZSBjYXV0aW91cyBhYm91dCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIG1vZGlmeSB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHN1YnRyYWN0ZWQgYHNpemVvZihzdHJ1Y3QgaXBoZHIpYCBmcm9tIHRoZSBNVFUgaWYgaXQgd2FzIGxhcmdlIGVub3VnaC4gTm93LCBpdCYjMzk7cyBzdWJ0cmFjdGluZyBgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbmAsIHdoZXJlIGB1bGVuYCBpcyBtb3ZlZCBhbmQgaW5pdGlhbGl6ZWQgdG8gemVybyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLiAgVGhpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgZml4aW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBlcnJvciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSUNNUCBwYXlsb2FkIGxlbmd0aCwgYXMgdWxlbiBzZWVtcyByZWxhdGVkIHRvIHRoZSBzaXplLgoKVGhlIGNoYW5nZSBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgaXNzdWUgaXMgc3VidGxlLiBUaGlzIGlzIHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciwgd29yc2UsIGhhcmQtdG8tZGlhZ25vc2UgY29ubmVjdGlvbiBwcm9ibGVtcyB1bmRlciBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBhIHNlZW1pbmdseSBtaW5vciBpbnRlZ2VyIG92ZXJmbG93LiBJJiMzOTttIG5vdGluZyB0aGF0LgoKTXkgZmlyc3QgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gTVRVLXJlbGF0ZWQgaXNzdWVzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIGNhbXBhaWducywgYW5kIElQVlMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGxvYWQgYmFsYW5jaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHJlZ3Jlc3Npb25zLiBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyB0aGUgc3Vycm91bmRpbmcgYGlwX3ZzX2luX2ljbXBgIGZ1bmN0aW9uIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciByZWxhdGVkIGNhbGN1bGF0aW9ucy4gQW5kLCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIGN1cnJlbnQgSVBWUyBjb25maWd1cmF0aW9uLCBvciBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IE1UVSBpcyBwcm9wZXJseSBzZXQuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfY29yZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xND1pcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICYjNDM7PSBpcF92c19uZmN0Lm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNjppcF92cy1vYmpzIDo9XHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cdCAgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXHRcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cdCAgIFx0XHQgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgSVAgVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBmb2N1cyBoZXJlIGlzIGBDT05GSUdfSVBfVlNgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUCBWaXJ0dWFsIFNlcnZlciBmdW5jdGlvbmFsaXR5IGluIHRoZSBMaW51eCBrZXJuZWwuIE15IG5leHQgc3RlcCwgYmFzZWQgb24gdGhhdCwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IElDTVAgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgSVBWUyBjb3JlLiBJIGtub3cgdGhhdCBmaWxlIGFuZCBmdW5jdGlvbiBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIHNvIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGludGVyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaW5jb21pbmcgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYW5kIHJvdXRlZCB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIElDTVAmIzM5O3MgYmVoYXZpb3IgaW4gcmVsYXRpb24gdG8gSVBWUyBhcmUgYWx3YXlzIGEgY29uY2VybiwgYW5kIHRoaXMgYGlwX3ZzX2luX2ljbXBgIGZ1bmN0aW9uIGlzIG9mdGVuIHRoZSBrZXkgdG8gcmVzb2x2aW5nIHN1Y2ggaXNzdWVzLiBJIHdpbGwgZ28gdGhyb3VnaCB0aGUgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIHRoYXQgaXQgYWxpZ25zIHdpdGggZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE3NTY6aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNzU3LVx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xOTc4LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTc5OnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4MC1cdFx0XHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwODY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTM1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTM2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzctXHRcdFx0XHRcdFx0ICAgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTQ1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTQ2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNDctXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI3NC0gKiAgICAgIGJ1dCBJQ01QIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAgY2Fubm90IG5vdCBiZSBlYXNpbHkgbWFya2VkIGFuZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc1OiAqICAgICAgc2VudCB0byBpcF92c19pbl9pY21wLiBTbywgY2F0Y2ggdGhlbSBhdCB0aGUgTkZfSU5FVF9GT1JXQVJEIGNoYWluXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzctICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMjc5PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMwMTpcdFx0cmV0dXJuIGlwX3ZzX2luX2ljbXBfdjYoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rLCBcdTAwMjZpcGhkcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDItI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzA0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzA1Olx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUNNUCBIYW5kbGluZyBpbiBJUFZTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2ZvcndhcmRfaWNtcGAuIFRoYXQmIzM5O3MgZ29vZCDigJMgaXQgbWVhbnMgdGhlIGNvcmUgSUNNUCBwcm9jZXNzaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhY3RpdmUuIEkmIzM5O20gYXNzdW1pbmcgdGhlIGBJUF9WU2AgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHNwZWNpZmljIElDTVAgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBuZXRmaWx0ZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBsb2NhdGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGJ1cmllZCBpbiBvbmUgb2YgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGFyZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCDigJMgdGhlIG9idmlvdXMgZ2VuZXJhbCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBmaWxlIOKAkyBvciwgc2luY2UgSSYjMzk7bSB2YWd1ZWx5IHJlbWVtYmVyaW5nIHNvbWV0aGluZyBhYm91dCBjb25uZWN0aW9uIHRyYWNraW5nIG9yIGxvYWQgYmFsYW5jaW5nLCBwZXJoYXBzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gc29tZXRpbWVzLiBIb3BlZnVsbHkgdGhlIG9wdGlvbnMgYXJlIHdlbGwtZG9jdW1lbnRlZCB3aXRoaW4gdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKklQVlMgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlPyYjMzQ7IFRoZW4gSSByZWNhbGwgYGlwX3ZzX2luX2ljbXBgLCBhbmQgSSBoYXZlIHRvIGNsYXJpZnk6IHdhaXQsIHRoYXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBJUHY0IElDTVAgdHJhZmZpYywgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0JiMzOTtzIHJlbGV2YW50LgoKTXkgdHJhaW4gb2YgdGhvdWdodCBnb2VzIHN0cmFpZ2h0IHRvIG5lZWRpbmcgdG8gbG9vayBkZWVwZXIsIHNwZWNpZmljYWxseSBJIG5lZWQgdG8gZ28gdG8gYGlwX3ZzX2NvcmUuY2AgYW5kIGRpZyBhcm91bmQgZm9yIHRoaXMgYGlwX3ZzX2luX2ljbXBgIHNldHRpbmcgdG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgaW5mb3JtYXRpb24gYW5kIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHQgKlx0SGFuZGxlIElDTVAgbWVzc2FnZXMgaW4gdGhlIG91dHNpZGUtdG8taW5zaWRlIGRpcmVjdGlvbiAoaW5jb21pbmcpLlxuMTc1MTpcdCAqXHRGaW5kIGFueSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBjaGVjayBhZ2FpbnN0IGV4aXN0aW5nIGNvbm5lY3Rpb25zLFxuMTc1MjpcdCAqXHRmb3J3YXJkIHRvIHRoZSByaWdodCBkZXN0aW5hdGlvbiBob3N0IGlmIHJlbGV2YW50LlxuMTc1MzpcdCAqXHRDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC5cbjE3NTQ6XHQgKi9cbjE3NTU6XHRzdGF0aWMgaW50XG4xNzU2Olx0aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuMTc1NzpcdFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXG4xNzU4Olx0e1xuMTc1OTpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4xNzYwOlx0XHRzdHJ1Y3QgaWNtcGhkclx0X2ljbXBoLCAqaWM7XG4xNzYxOlx0XHRzdHJ1Y3QgaXBoZHJcdF9jaXBoLCAqY2loO1x0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXG4xNzYyOlx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcbjE3NjM6XHRcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbjE3NjQ6XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4xNzY1Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4xNzY2Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4xNzY3Olx0XHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4xNzY4Olx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuMTc2OTpcdFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuMTc3MDpcdFx0aW50IHVsZW4gPSAwO1xuMTc3MTpcdFxuMTc3MjpcdFx0KnJlbGF0ZWQgPSAxO1xuMTc3MzpcdFxuMTc3NDpcdFx0LyogcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMgKi9cbjE3NzU6XHRcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbjE3NzY6XHRcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbjE3Nzc6XHRcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuMTc3ODpcdFx0fVxuMTc3OTpcdFxuMTc4MDpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4xNzgxOlx0XHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbjE3ODI6XHRcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbjE3ODM6XHRcdGlmIChpYyA9PSBOVUxMKVxuMTc4NDpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjE3ODU6XHRcbjE3ODY6XHRcdElQX1ZTX0RCRygxMiwgXCYjMzQ7SW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwmIzM0OyxcbjE3ODc6XHRcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4xNzg4Olx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuMTc4OTpcdFxuMTc5MDpcdFx0LypcbjE3OTE6XHRcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG4xNzkyOlx0XHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxuMTc5MzpcdFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcbjE3OTQ6XHRcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcbjE3OTU6XHRcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQmIzM5O3MgbGlmZS5cbjE3OTY6XHRcdCAqL1xuMTc5NzpcdFx0aWYgKChpYy1cdTAwM2V0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKSBcdTAwMjZcdTAwMjZcbjE3OTg6XHRcdCAgICAoaWMtXHUwMDNldHlwZSAhPSBJQ01QX1NPVVJDRV9RVUVOQ0gpIFx1MDAyNlx1MDAyNlxuMTc5OTpcdFx0ICAgIChpYy1cdTAwM2V0eXBlICE9IElDTVBfVElNRV9FWENFRURFRCkpIHtcbjE4MDA6XHRcdFx0KnJlbGF0ZWQgPSAwO1xuMTgwMTpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgwMjpcdFx0fVxuMTgwMzpcdFxuMTgwNDpcdFx0LyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi9cbjE4MDU6XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKF9pY21waCk7XG4xODA2Olx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbjE4MDc6XHRcdGlmIChjaWggPT0gTlVMTClcbjE4MDg6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4xODA5Olx0XHRyYWRkciA9ICh1bmlvbiBuZl9pbmV0X2FkZHIgKilcdTAwMjZjaWgtXHUwMDNlZGFkZHI7XG4xODEwOlx0XG4xODExOlx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIGVycm9ycyBmb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCBwYWNrZXRzICovXG4xODEyOlx0XHR0dW5uZWwgPSBmYWxzZTtcbjE4MTM6XHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4xODE0Olx0XHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xuMTgxNTpcdFxuMTgxNjpcdFx0XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpKSlcbjE4MTc6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgxODpcdFx0XHQvKiBFcnJvciBmb3Igb3VyIElQSVAgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cbjE4MTk6XHRcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbjE4MjA6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgyMTpcdFx0XHRkZXN0ID0gaXBfdnNfZmluZF90dW5uZWwoaXB2cywgQUZfSU5FVCwgcmFkZHIsIDApO1xuMTgyMjpcdFx0XHQvKiBPbmx5IGZvciBrbm93biB0dW5uZWwgKi9cbjE4MjM6XHRcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4xODI0Olx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE4MjU6XHRcdFx0b2Zmc2V0ICYjNDM7PSBjaWgtXHUwMDNlaWhsICogNDtcbjE4MjY6XHRcdFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4xODI3Olx0XHRcdGlmIChjaWggPT0gTlVMTClcbjE4Mjg6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbjE4Mjk6XHRcdFx0dHVubmVsID0gdHJ1ZTtcbjE4MzA6XHRcdH0gZWxzZSBpZiAoKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xuMTgzMTpcdFx0XHQgICAgY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcdTAwMjZcdTAwMjZcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cbjE4MzI6XHRcdFx0ICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cbjE4MzM6XHRcdFx0ICAgKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpIHtcbjE4MzQ6XHRcdFx0X191OCBpcHJvdG87XG4xODM1Olx0XG4xODM2Olx0XHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbjE4Mzc6XHRcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG4xODM4Olx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE4Mzk6XHRcdFx0b2Zmc2V0MiA9IG9mZnNldCAmIzQzOyBjaWgtXHUwMDNlaWhsICogNDtcbjE4NDA6XHRcdFx0aWYgKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuMTg0MTpcdFx0XHRcdHVsZW4gPSBpcHZzX3VkcF9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXG4xODQyOlx0XHRcdFx0XHRcdCAgICAgIHJhZGRyLCBcdTAwMjZpcHJvdG8pO1xuMTg0MzpcdFx0XHRcdG91dGVyX3Byb3RvID0gXCYjMzQ7VURQXCYjMzQ7O1xuMTg0NDpcdFx0XHR9IGVsc2Uge1xuMTg0NTpcdFx0XHRcdHVsZW4gPSBpcHZzX2dyZV9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXG4xODQ2Olx0XHRcdFx0XHRcdCAgICAgIHJhZGRyLCBcdTAwMjZpcHJvdG8pO1xuMTg0NzpcdFx0XHRcdG91dGVyX3Byb3RvID0gXCYjMzQ7R1JFXCYjMzQ7O1xuMTg0ODpcdFx0XHR9XG4xODQ5Olx0XHRcdGlmICh1bGVuIFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgZnVuY3Rpb25hbCwgYW5kIHRoZSBjb25maWcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlIGlzIGBJUF9WU2AuIE15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIHNvIEkgd2FudCB0byBleHBsb3JlIGl0IGluIGRlcHRoLgoKRmlyc3QsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSG1tLCBub3BlLCBpdCYjMzk7cyBqdXN0IGBpcF92c19pbl9pY21wYC4gQWxyaWdodCwgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGl0c2VsZi4gQWgsIHRoaXMgaXMgZml4aW5nIHRoZSBNVFUgY2FsY3VsYXRpb24gZm9yIElDTVAgcGFja2V0cyB0aGF0IGFyZSB0dW5uZWxlZCB0aHJvdWdoIElQVlMuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHVsZW5gIHZhcmlhYmxlIHRvIGFkanVzdCB0aGUgTVRVIGNhbGN1bGF0aW9uIGFuZCBhZGRyZXNzIGFuIE1UVSBjYWxjdWxhdGlvbiBpc3N1ZSB0aGF0IG9jY3VycyB3aXRoIFVEUCBvciBHUkUgZW5jYXBzdWxhdGVkIHBhY2tldHMuIFRoaXMgdHlwZSBvZiBmaXggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gdGhvcm91Z2ggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIGFuZCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gQW5kIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBpcF92c19pbl9pY21wYCBpcyBjYWxsZWQgYnkgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gQm90aCBvZiB0aGVzZSBhcmUgbmV0ZmlsdGVyIGhvb2tzLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHQuIFRoaXMgbWFrZXMgYGlwX3ZzX2luX2ljbXBgIGEgc29saWQgY2hvaWNlIGZvciBmb2N1c2VkIGFuYWx5c2lzLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIGBJUF9WU2AgaXMgdGhlIG9ubHkgY29uZmlnIGhlcmUuIERvZXMgdGhpcyBpbnZvbHZlIGFueSBJUFZTIFVEUCBvciBHUkUgdHVubmVsaW5nPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgaXB2c191ZHBfZGVjYXBgIGFuZCBgaXB2c19ncmVfZGVjYXBgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGFuYWx5c2lzLiBHb29kLCBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdnNfdWRwX2RlY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE2NDQ9aXBfdnNfdHJ5X3RvX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY3OTpzdGF0aWMgaW50IGlwdnNfdWRwX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVx0XHRcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTg0MTpcdFx0XHR1bGVuID0gaXB2c191ZHBfZGVjYXAoaXB2cywgc2tiLCBvZmZzZXQyLCBBRl9JTkVULFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVx0XHRcdFx0XHQgICAgICByYWRkciwgXHUwMDI2aXByb3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgVURQL0dSRSBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBzeXN0ZW0gdGhhdCBhcmUgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIFVEUCBvciBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSB0dW5uZWxpbmcuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21lIG51YW5jZSBvciBhIHNwZWNpYWxpemVkIHNldHRpbmcgdGhhdCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IgaW4gYSB0dW5uZWxpbmcgc2NlbmFyaW8uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbiBhbmQgbWF5YmUgc29tZSBsZXNzIG9idmlvdXMgc291cmNlc+KAlHBlcmhhcHMgc29tZSBmb3J1bSBkaXNjdXNzaW9ucyBvciBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnPigJR0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IElQVlMtc3BlY2lmaWMgdHVuaW5nIHJlcXVpcmVkIHdoZW4gdGhlc2UgcHJvdG9jb2xzIGFyZSBpbnZvbHZlZC4gSXTigJlzIGFib3V0IGJlaW5nIHRob3JvdWdoIGFuZCBtYWtpbmcgc3VyZSB0aGUgc29sdXRpb24gaXMgb3B0aW1hbCwgbm90IGp1c3QgZnVuY3Rpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUFZTIFR1bm5lbGluZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBJUFZTIGhhbmRsZXMgdHVubmVsaW5nIHByb3RvY29scy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHR1bm5lbGluZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGVudGlyZSBmaWxlIGZvciBhbnkgbWVudGlvbnMgb2YgYFRVTk5FTGAsIGBHUkVgLCBvciBgVURQYCBrZXl3b3Jkcy4gVGhpcyB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucywgbW9kdWxlIGRlcGVuZGVuY2llcywgb3IgZmVhdHVyZSBmbGFncyB0aWVkIHRvIHRoZXNlIHR1bm5lbGluZyB0ZWNobm9sb2dpZXMgd2l0aGluIHRoZSBJUFZTIGNvbnRleHQuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5LCBidXQgZWZmZWN0aXZlLCB3YXkgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBiZWZvcmUgYW55IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFVOTkVMfEdSRXxVRFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcdElQX1ZTX1BST1RPX1RDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg2Olx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODctXHRoZWxwXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4ODpcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04OS1cdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVRFAgTG9hZCBCYWxhbmNpbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYElQX1ZTX1BST1RPX1VEUGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBmb3IgVURQIGxvYWQgYmFsYW5jaW5nLCBnb3QgaXQuJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IGBpcHZzX3VkcF9kZWNhcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gYGlwX3ZzX2NvcmUuY2AuIEFuZCB0aGF0IGZpbGUgZ2V0cyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaWYgYElQX1ZTYCBpcyBlbmFibGVkLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCAqZG8qIEkgZXZlbiBuZWVkIGBJUF9WU19QUk9UT19VRFBgIGZvciB0aGUgdHVubmVsaW5nIGl0c2VsZiwgb3IgaXMgaXQganVzdCBmb3IgdGhlIGxvYWQgYmFsYW5jaW5nIGFzcGVjdD8gSXQmIzM5O3MgZWFzeSB0byBnZXQgY29uZnVzZWQgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KCkkgdGhpbmsgdG8gYmUgY29tcGxldGVseSBzYWZlLCBJJiMzOTtsbCBqdXN0IGdvIGFoZWFkIGFuZCBpbmNsdWRlIGJvdGggYElQX1ZTYCBhbmQgYElQX1ZTX1BST1RPX1VEUGAuIEJ1dCB3YWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2s6IEkmIzM5O20gcHJldHR5IHN1cmUgYGlwdnNfdWRwX2RlY2FwYCBpc24mIzM5O3QgY29uZGl0aW9uYWwgb24gYENPTkZJR19JUF9WU19QUk9UT19VRFBgLCBhbmQgc2luY2UgaXQmIzM5O3MgZGVmaW5lZCBpbiBgaXBfdnNfY29yZS5jYCwgYW5kIHRoYXQmIzM5O3MgZW5hYmxlZCB3aXRoIGBJUF9WU2AsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdnNfdWRwX2RlY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE2NDQ9aXBfdnNfdHJ5X3RvX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY3OTpzdGF0aWMgaW50IGlwdnNfdWRwX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVx0XHRcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTg0MTpcdFx0XHR1bGVuID0gaXB2c191ZHBfZGVjYXAoaXB2cywgc2tiLCBvZmZzZXQyLCBBRl9JTkVULFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVx0XHRcdFx0XHQgICAgICByYWRkciwgXHUwMDI2aXByb3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBpcF92c19jb3JlLmNgIGFuZCBgaXB2c191ZHBfZGVjYXBgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgaXB2c191ZHBfZGVjYXBgIGluIGBpcF92c19jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBkb2luZywgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGguJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFAgZGVjYXBzdWxhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBwZWVsaW5nIG9mZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXJzIGZvciBVRFAgdHJhZmZpYyBkZXN0aW5lZCBmb3IgVmlydHVhbCBTZXJ2ZXJzLiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IGlzIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCBwYXNzZWQgb250byB0aGUgUmVhbCBTZXJ2ZXIuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgcmVsYXRlcyB0byBjb25uZWN0aW9uIHRyYWNraW5nIG9yIGxvYWQgYmFsYW5jaW5nIGRlY2lzaW9ucyBhdCB0aGlzIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBtYWxmb3JtZWQgcGFja2V0cyBvciB1bmV4cGVjdGVkIFVEUCBoZWFkZXIgY29uZmlndXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIHNob3VsZCBhbHNvIGJlIGtlcHQgaW4gbWluZCwgYXMgaW1wcm9wZXIgaGFuZGxpbmcgb2YgZW5jYXBzdWxhdGVkIHRyYWZmaWMgY2FuIHNvbWV0aW1lcyBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XG4xNjcxOlx0XHRcdCp2ZXJkaWN0ID0gTkZfQUNDRVBUO1xuMTY3MjpcdFx0XHRyZXR1cm4gMDtcbjE2NzM6XHRcdH1cbjE2NzQ6XHRcbjE2NzU6XHRcdHJldHVybiAxO1xuMTY3NjpcdH1cbjE2Nzc6XHRcbjE2Nzg6XHQvKiBDaGVjayB0aGUgVURQIHR1bm5lbCBhbmQgcmV0dXJuIGl0cyBoZWFkZXIgbGVuZ3RoICovXG4xNjc5Olx0c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE2ODA6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsIF9fdTE2IGFmLFxuMTY4MTpcdFx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwgX191OCAqcHJvdG8pXG4xNjgyOlx0e1xuMTY4MzpcdFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVkcGg7XG4xNjg0Olx0XHRzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDtcbjE2ODU6XHRcbjE2ODY6XHRcdHVkcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbjE2ODc6XHRcdGlmICghdWRwaClcbjE2ODg6XHRcdFx0Z290byB1bms7XG4xNjg5Olx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGBpcF92c19pbl9pY21wYCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gU2luY2UgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBnYXRlZCBieSBhbnkgYCNpZmRlZmAgc3RhdGVtZW50cywgSSBjYW4gYXNzdW1lIHRoYXQgYElQX1ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBoZXJlLCBhcyBpdCBlbmFibGVzIElQVlMgZnVuY3Rpb25hbGl0eSBvdmVyYWxsLiBJIHNob3VsZCBzdGlsbCB2ZXJpZnkgdGhhdC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaWYgYElQX1ZTX0lQVjZgIGlzIHJlbGV2YW50LCBidXQgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gbmFtZSwgYGlwX3ZzX2luX2ljbXBgLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIHRoZSBJUHY0IHZlcnNpb24uIE5vdywgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgaXBfdnNfaW5faWNtcGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgZml4IHJlbGF0ZWQgdG8gTVRVIGNhbGN1bGF0aW9ucyBpbiB0dW5uZWxlZCBJQ01QIHBhY2tldHMsIGFuZCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIGhlYWRlciBsZW5ndGggb2YgdGhlIHR1bm5lbGluZyBwcm90b2NvbHMuCgpPa2F5LCBsZXQgbWUgZ28gb3ZlciB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBmb3IgSUNNUCBwYWNrZXRzIHR1bm5lbGVkIG92ZXIgdmFyaW91cyBwcm90b2NvbHMgKGxpa2VseSBHUkUgb3IgVURQIGVuY2Fwc3VsYXRlZCkuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB1bGVuO2AsIGFuZCB0aGlzIGNoYW5nZSB3aWxsIGFmZmVjdCB0aGUgY29yZSBJUFZTIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhhdCBgSVBfVlNgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gV2hpbGUgSVBWUyBjb3ZlcnMgdGhlIGNvcmUgZnVuY3Rpb25zLCBjb3VsZCBpdCBuZWVkIHNvbWV0aGluZyBzcGVjaWZpYyBmb3IsIHNheSwgVURQIG9yIEdSRSB0dW5uZWxpbmc/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYElQX1ZTX1BST1RPX1VEUGAgb3IgYElQX1ZTX1BST1RPX0dSRWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBHUkUsIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gdHVubmVsaW5nIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1BST1RPX0dSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipRdWljayBJUFZTIEJ1ZyBDaGVjayoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gKm5vKi4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgYW55dGhpbmcgYmV5b25kIGBJUF9WU2AgZm9yIHRoaXMgc3BlY2lmaWMgaXNzdWUuJiMzNDsgU28gdGhlIGNyaXRpY2FsIGZhY3RvciBoZXJlIGlzIHNpbXBseSBgSVBfVlNgLiBJJiMzOTt2ZSBhbHJlYWR5IG1hZGUgdGhlIGRlY2lzaW9uLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGxldCYjMzk7cyBkbyBhIGZhc3QgdmVyaWZpY2F0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGlwX3ZzX2luX2ljbXBfdjZgIG1vZHVsZS4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0IGV4aGliaXRzIHRoZSBzYW1lIGJlaGF2aW9yIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJdCYjMzk7cyBhYm91dCBhIHF1aWNrIGNyb3NzLWNoZWNrIHRvIHNvbGlkaWZ5IG15IGN1cnJlbnQgYXNzdW1wdGlvbiBhbmQgYXZvaWQgYW55IG92ZXJzaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaW5faWNtcF92NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzgtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5Nzk6c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xOTgwLVx0XHRcdCAgICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzUtXHRcdFx0aW50IHJlbGF0ZWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMzY6XHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNy1cdFx0XHRcdFx0XHQgICAgICAgaG9va251bSwgXHUwMDI2aXBoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIyNzk9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAxOlx0XHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBJUHY2IElDTVB2NiBJbnB1dCBGaWx0ZXJpbmcgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgSUNNUHY2IGlucHV0IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcmVsYXRlZCBmaWx0ZXJpbmcuIEkmIzM5O20gZ29pbmcgdG8gZ3JhYiB0aGUgc291cmNlIGNvZGUgZm9yIGBpcF92c19pbl9pY21wX3Y2YC4gVGhlIGtleSB0aGluZyBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaXMgdGhlIHByZXNlbmNlIG9mIGB1bGVuYC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggSVB2NCBhbmQgSVB2NiwgdGhlIGB1bGVuYCBmaWVsZCBvciBzaW1pbGFyIGNvbnN0cnVjdCwgaXMgYSBjcml0aWNhbCBwaWVjZSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSUNNUCBoYW5kbGluZy4gSXQmIzM5O3Mgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIGZpbHRlcmluZyBsb2dpYy4gQ2hlY2tpbmcgdGhhdCBxdWlja2x5IHdpbGwgZ2l2ZSBtZSBhIHZhbHVhYmxlIGRhdGEgcG9pbnQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBiZSBtYWRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSB0byBjb25maXJtIGlmIGl0IGhhcyB0aGlzIGF0dHJpYnV0ZSBvciBlcXVpdmFsZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTc5Olx0c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTk4MDpcdFx0XHRcdCAgICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuMTk4MTpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbjE5ODI6XHR7XG4xOTgzOlx0XHRzdHJ1Y3QgaWNtcDZoZHJcdF9pY21waCwgKmljO1xuMTk4NDpcdFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGggPSB7LmZsYWdzID0gMCwgLmZyYWdvZmZzID0gMH07LypDb250YWluZWQgSVAgKi9cbjE5ODU6XHRcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbjE5ODY6XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4xOTg3Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4xOTg4Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2ZXJkaWN0O1xuMTk4OTpcdFx0Ym9vbCBuZXdfY3AgPSBmYWxzZTtcbjE5OTA6XHRcbjE5OTE6XHRcdCpyZWxhdGVkID0gMTtcbjE5OTI6XHRcbjE5OTM6XHRcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuMTk5NDpcdFx0aWYgKGljID09IE5VTEwpXG4xOTk1Olx0XHRcdHJldHVybiBORl9EUk9QO1xuMTk5NjpcdFxuMTk5NzpcdFx0LypcbjE5OTg6XHRcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG4xOTk5Olx0XHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxuMjAwMDpcdFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcbjIwMDE6XHRcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcbjIwMDI6XHRcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQmIzM5O3MgbGlmZS5cbjIwMDM6XHRcdCAqL1xuMjAwNDpcdFx0aWYgKGljLVx1MDAzZWljbXA2X3R5cGUgXHUwMDI2IElDTVBWNl9JTkZPTVNHX01BU0spIHtcbjIwMDU6XHRcdFx0KnJlbGF0ZWQgPSAwO1xuMjAwNjpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjAwNzpcdFx0fVxuMjAwODpcdFx0LyogRnJhZ21lbnQgaGVhZGVyIHRoYXQgaXMgYmVmb3JlIElDTVAgaGVhZGVyIHRlbGxzIHVzIHRoYXQ6XG4yMDA5Olx0XHQgKiBpdCYjMzk7cyBub3QgYW4gZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGV5IGNhbiYjMzk7dCBiZSBmcmFnbWVudGVkLlxuMjAxMDpcdFx0ICovXG4yMDExOlx0XHRpZiAoaXBoLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZfRkhfRl9GUkFHKVxuMjAxMjpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjIwMTM6XHRcbjIwMTQ6XHRcdElQX1ZTX0RCRyg4LCBcJiMzNDtJbmNvbWluZyBJQ01QdjYgKCVkLCVkKSAlcEk2Yy1cdTAwM2UlcEk2Y1xcblwmIzM0OyxcbjIwMTU6XHRcdFx0ICBpYy1cdTAwM2VpY21wNl90eXBlLCBudG9ocyhpY21wdjZfaWQoaWMpKSxcbjIwMTY6XHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4yMDE3Olx0XG4yMDE4Olx0XHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuICYjNDM7IHNpemVvZihfaWNtcGgpO1xuMjAxOTpcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVUNiwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuMjAyMDpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjAyMTpcdFxuMjAyMjpcdFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTtcbjIwMjM6XHRcdGlmICghcGQpXG4yMDI0Olx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4yMDI1Olx0XHRwcCA9IHBkLVx1MDAzZXBwO1xuMjAyNjpcdFxuMjAyNzpcdFx0LyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovXG4yMDI4Olx0XHRpZiAoY2lwaC5mcmFnb2ZmcylcbjIwMjk6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjIwMzA6XHRcbjIwMzE6XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBvZmZzZXQsXG4yMDMyOlx0XHRcdCAgICAgIFwmIzM0O0NoZWNraW5nIGluY29taW5nIElDTVB2NiBmb3JcJiMzNDspO1xuMjAzMzpcdFxuMjAzNDpcdFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlclxuMjAzNTpcdFx0ICogaWYgbm90IGZyb20gbG9jYWxob3N0XG4yMDM2Olx0XHQgKi9cbjIwMzc6XHRcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5faW5fZ2V0LCBpcF92c19jb25uX2luX2dldF9wcm90byxcbjIwMzg6XHRcdFx0XHQgICAgIGlwdnMsIEFGX0lORVQ2LCBza2IsIFx1MDAyNmNpcGgpO1xuMjAzOTpcdFxuMjA0MDpcdFx0aWYgKCFjcCkge1xuMjA0MTpcdFx0XHRpbnQgdjtcbjIwNDI6XHRcbjIwNDM6XHRcdFx0aWYgKCFzeXNjdGxfc2NoZWR1bGVfaWNtcChpcHZzKSlcbjIwNDQ6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjA0NTpcdFxuMjA0NjpcdFx0XHRpZiAoIWlwX3ZzX3RyeV90b19zY2hlZHVsZShpcHZzLCBBRl9JTkVUNiwgc2tiLCBwZCwgXHUwMDI2diwgXHUwMDI2Y3AsIFx1MDAyNmNpcGgpKVxuMjA0NzpcdFx0XHRcdHJldHVybiB2O1xuMjA0ODpcdFxuMjA0OTpcdFx0XHRuZXdfY3AgPSB0cnVlO1xuMjA1MDpcdFx0fVxuMjA1MTpcdFxuMjA1MjpcdFx0LyogVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIGp1c3QgbGV0IGl0IGdvICovXG4yMDUzOlx0XHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFx1MDAyNlx1MDAyNlxuMjA1NDpcdFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbjIwNTU6XHRcdFx0dmVyZGljdCA9IE5GX0FDQ0VQVDtcbjIwNTY6XHRcdFx0Z290byBvdXQ7XG4yMDU3Olx0XHR9XG4yMDU4Olx0XG4yMDU5Olx0XHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbjIwNjA6XHRcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuMjA2MTpcdFxuMjA2MjpcdFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cbjIwNjM6XHRcdG9mZnNldCA9IGNpcGgubGVuO1xuMjA2NDpcdFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgucHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC5wcm90b2NvbCB8fFxuMjA2NTpcdFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxuMjA2NjpcdFx0XHRvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuMjA2NzpcdFxuMjA2ODpcdFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbjIwNjk6XHRcbjIwNzA6XHRvdXQ6XG4yMDcxOlx0XHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuMjA3MjpcdFx0XHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbjIwNzM6XHRcdGVsc2VcbjIwNzQ6XHRcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuMjA3NTpcdFxuMjA3NjpcdFx0cmV0dXJuIHZlcmRpY3Q7XG4yMDc3Olx0fVxuMjA3ODpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiA4NQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBJQ01QdjYgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgaXBfdnNfaW5faWNtcF92NmAgaXNuJiMzOTt0IGludm9sdmVkIGF0IGFsbC4gVGhlIHR1bm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBNVFUgY2FsY3VsYXRpb25zIGZvciBlbmNhcHN1bGF0ZWQgSUNNUCBwYWNrZXRzLCBpc24mIzM5O3QgcHJlc2VudCBpbiB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiBvZiBJQ01QIHByb2Nlc3Npbmcgd2l0aGluIElQVlMuIFRoZXJlZm9yZSwgdGhlIGZpeCBpcyBleGNsdXNpdmVseSBmb3IgSVB2NCB0cmFmZmljLiBUaGUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUgaXMgYElQX1ZTYCwgb2YgY291cnNlLiBNeSBmb2N1cyBpcyBuYXJyb3dlZCBkb3duIHRvIGBpcF92c19pbl9pY21wYCwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBjcnVjaWFsIE1UVSBjYWxjdWxhdGlvbiBpc3N1ZSB3aXRoaW4gSVBWUy4gSXQmIzM5O3MgYWJvdXQgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBvdmVyaGVhZCBpbnRyb2R1Y2VkIGJ5IFVEUCBvciBHUkUgdHVubmVscyB3aGVuIGhhbmRsaW5nIElDTVAgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgcGFydCBvZiB0aGUgcmVhY2hhYmxlIGxvZ2ljIHdpdGhpbiBJUFZTLCBzbyB0aGF0JiMzOTtzIHdoeSBpdCYjMzk7cyBiZWVuIGlkZW50aWZpZWQgYXMgaW1wb3J0YW50LiBSaWdodCwgSSB0aGluayB0aGlzIGxvb2tzIGdvb2QuIEkmIzM5O2xsIGdldCB0aGlzIHNldC1yZXN1bHQgbG9nZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjQ0LjMxNDAzMDU4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjg4OTIzMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDQuMzE0MDM2NDM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI1NzE3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTI6NDY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCBkNDBiNDA0YzFiZjY0Ni4uOTA2ZjJjMzYxNjc2MzggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtMTc2Nyw2ICsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuIFxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRpbnQgdWxlbiA9IDA7XFxuIFxcbiBcXHQqcmVsYXRlZCA9IDE7XFxuIFxcbkBAIC0xODMxLDcgKzE4MzIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdCAgIC8qIEVycm9yIGZvciBvdXIgdHVubmVsIG11c3QgYXJyaXZlIGF0IExPQ0FMX0lOICovXFxuIFxcdFxcdCAgIChza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpIHtcXG4gXFx0XFx0X191OCBpcHJvdG87XFxuLVxcdFxcdGludCB1bGVuO1xcbiBcXG4gXFx0XFx0LyogTm9uLWZpcnN0IGZyYWdtZW50IGhhcyBubyBVRFAvR1JFIGhlYWRlciAqL1xcbiBcXHRcXHRpZiAodW5saWtlbHkoY2loLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpKVxcbkBAIC0xOTM2LDggKzE5MzYsOCBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdFxcdFxcdGlmIChkZXN0X2RzdClcXG4gXFx0XFx0XFx0XFx0XFx0bXR1ID0gZHN0X210dShkZXN0X2RzdC1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAobXR1IFxcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcXG4tXFx0XFx0XFx0XFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbitcXHRcXHRcXHRpZiAobXR1IFxcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW4pXFxuK1xcdFxcdFxcdFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW47XFxuIFxcdFxcdFxcdGluZm8gPSBodG9ubChtdHUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIFN0cmlwIG91dGVyIElQLCBJQ01QIGFuZCBJUElQL1VEUC9HUkUsIGdvIHRvIElQIGhlYWRlciBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo0NC42MjczNjM2MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzc1NTgxNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBkNDBiNDA0YzFiZjY0Ni4uOTA2ZjJjMzYxNjc2MzggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtMTc2Nyw2ICsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0Ym9vbCB0dW5uZWwsIG5ld19jcCA9IGZhbHNlO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjtcbiBcdGNoYXIgKm91dGVyX3Byb3RvID0gXCJJUElQXCI7XG4rXHRpbnQgdWxlbiA9IDA7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG4gXG5AQCAtMTgzMSw3ICsxODMyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHQgICAvKiBFcnJvciBmb3Igb3VyIHR1bm5lbCBtdXN0IGFycml2ZSBhdCBMT0NBTF9JTiAqL1xuIFx0XHQgICAoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSkge1xuIFx0XHRfX3U4IGlwcm90bztcbi1cdFx0aW50IHVsZW47XG4gXG4gXHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbiBcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG5AQCAtMTkzNiw4ICsxOTM2LDggQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHRcdFx0aWYgKGRlc3RfZHN0KVxuIFx0XHRcdFx0XHRtdHUgPSBkc3RfbXR1KGRlc3RfZHN0LVx1MDAzZWRzdF9jYWNoZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChtdHUgXHUwMDNlIDY4ICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4tXHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4rXHRcdFx0aWYgKG10dSBcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW4pXG4rXHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB1bGVuO1xuIFx0XHRcdGluZm8gPSBodG9ubChtdHUpO1xuIFx0XHR9XG4gXHRcdC8qIFN0cmlwIG91dGVyIElQLCBJQ01QIGFuZCBJUElQL1VEUC9HUkUsIGdvIHRvIElQIGhlYWRlciBvZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDQuNjI3MzY0ODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTk0MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgSUNNUCBNVFUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXBfdnNfaW5faWNtcGAuICBJdCBsb29rcyBsaWtlIGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgTVRVIGNhbGN1bGF0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBiZSBjYXV0aW91cyBhYm91dCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIG1vZGlmeSB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHN1YnRyYWN0ZWQgYHNpemVvZihzdHJ1Y3QgaXBoZHIpYCBmcm9tIHRoZSBNVFUgaWYgaXQgd2FzIGxhcmdlIGVub3VnaC4gTm93LCBpdCdzIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW5gLCB3aGVyZSBgdWxlbmAgaXMgbW92ZWQgYW5kIGluaXRpYWxpemVkIHRvIHplcm8gYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgaW5kaWNhdGVzIGl0J3MgZml4aW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBlcnJvciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSUNNUCBwYXlsb2FkIGxlbmd0aCwgYXMgdWxlbiBzZWVtcyByZWxhdGVkIHRvIHRoZSBzaXplLlxuXG5UaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBpc3N1ZSBpcyBzdWJ0bGUuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24gaXNzdWVzIG9yLCB3b3JzZSwgaGFyZC10by1kaWFnbm9zZSBjb25uZWN0aW9uIHByb2JsZW1zIHVuZGVyIHNwZWNpZmljIG5ldHdvcmsgY29uZGl0aW9ucy4gSXQncyBlYXN5IHRvIG1pc3MgYSBzZWVtaW5nbHkgbWlub3IgaW50ZWdlciBvdmVyZmxvdy4gSSdtIG5vdGluZyB0aGF0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIHRvIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBNVFUtcmVsYXRlZCBpc3N1ZXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgY2FtcGFpZ25zLCBhbmQgSVBWUyBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgbG9hZCBiYWxhbmNpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHN1cnJvdW5kaW5nIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiBhbmQgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmVsYXRlZCBjYWxjdWxhdGlvbnMuIEFuZCwgbGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBjdXJyZW50IElQVlMgY29uZmlndXJhdGlvbiwgb3IgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCBNVFUgaXMgcHJvcGVybHkgc2V0LiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDkuOTAzMzA4MjE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODQ2NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2NvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE0PWlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgKz0gaXBfdnNfbmZjdC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNjppcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xNy1cXHRcXHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXFx0ICAgXFx0XFx0ICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo0OS45NTkxNTk3NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY0ODE4Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBJUCBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgaGVyZSBpcyBgQ09ORklHX0lQX1ZTYC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUCBWaXJ0dWFsIFNlcnZlciBmdW5jdGlvbmFsaXR5IGluIHRoZSBMaW51eCBrZXJuZWwuIE15IG5leHQgc3RlcCwgYmFzZWQgb24gdGhhdCwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IElDTVAgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgSVBWUyBjb3JlLiBJIGtub3cgdGhhdCBmaWxlIGFuZCBmdW5jdGlvbiBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIHNvIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiB0aGUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbmNvbWluZyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgcm91dGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggSUNNUCdzIGJlaGF2aW9yIGluIHJlbGF0aW9uIHRvIElQVlMgYXJlIGFsd2F5cyBhIGNvbmNlcm4sIGFuZCB0aGlzIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiBpcyBvZnRlbiB0aGUga2V5IHRvIHJlc29sdmluZyBzdWNoIGlzc3Vlcy4gSSB3aWxsIGdvIHRocm91Z2ggdGhlIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjUzLjEyMzk4MDM5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU2NTc1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaW5faWNtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNzU2OmlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3NTctXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzgtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTc5OnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODAtXFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwODY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTM2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNDUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTQ2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzQtICogICAgICBidXQgSUNNUCBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wIGNhbm5vdCBub3QgYmUgZWFzaWx5IG1hcmtlZCBhbmRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzU6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMjc5PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMwMTpcXHRcXHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDItI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzA1OlxcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXFx1MDAyNnIsIHN0YXRlLVxcdTAwM2Vob29rKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo1My4zMDk2NDI3NjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxMTQ4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSUNNUCBIYW5kbGluZyBpbiBJUFZTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24sIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQncyBiZWluZyB1c2VkIGJ5IGJvdGggYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gVGhhdCdzIGdvb2Qg4oCTIGl0IG1lYW5zIHRoZSBjb3JlIElDTVAgcHJvY2Vzc2luZyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYWN0aXZlLiBJJ20gYXNzdW1pbmcgdGhlIGBJUF9WU2AgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHNwZWNpZmljIElDTVAgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjU2LjcwMDc5MzY4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ5MTIxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo1Ni43NTcyOTgyODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc4OTI3OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBuZXRmaWx0ZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBsb2NhdGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3MgYnVyaWVkIGluIG9uZSBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgYXJlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGUgb2J2aW91cyBnZW5lcmFsIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGZpbGUg4oCTIG9yLCBzaW5jZSBJJ20gdmFndWVseSByZW1lbWJlcmluZyBzb21ldGhpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBvciBsb2FkIGJhbGFuY2luZywgcGVyaGFwcyBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHR3byBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCdzIGEgYml0IG9mIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBzb21ldGltZXMuIEhvcGVmdWxseSB0aGUgb3B0aW9ucyBhcmUgd2VsbC1kb2N1bWVudGVkIHdpdGhpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjA1LjgzNjIyOTc2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjI5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjA1LjkxNTE1ODgxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5ODczMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSVBWUyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlP1wiIFRoZW4gSSByZWNhbGwgYGlwX3ZzX2luX2ljbXBgLCBhbmQgSSBoYXZlIHRvIGNsYXJpZnk6IHdhaXQsIHRoYXQncyBzcGVjaWZpY2FsbHkgZm9yIElQdjQgSUNNUCB0cmFmZmljLCBpc24ndCBpdD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0J3MgcmVsZXZhbnQuXG5cbk15IHRyYWluIG9mIHRob3VnaHQgZ29lcyBzdHJhaWdodCB0byBuZWVkaW5nIHRvIGxvb2sgZGVlcGVyLCBzcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGdvIHRvIGBpcF92c19jb3JlLmNgIGFuZCBkaWcgYXJvdW5kIGZvciB0aGlzIGBpcF92c19pbl9pY21wYCBzZXR0aW5nIHRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRoYXQncyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBhbmQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjEwLjI1NTAzMzgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHQgKlxcdEhhbmRsZSBJQ01QIG1lc3NhZ2VzIGluIHRoZSBvdXRzaWRlLXRvLWluc2lkZSBkaXJlY3Rpb24gKGluY29taW5nKS5cXG4xNzUxOlxcdCAqXFx0RmluZCBhbnkgdGhhdCBtaWdodCBiZSByZWxldmFudCwgY2hlY2sgYWdhaW5zdCBleGlzdGluZyBjb25uZWN0aW9ucyxcXG4xNzUyOlxcdCAqXFx0Zm9yd2FyZCB0byB0aGUgcmlnaHQgZGVzdGluYXRpb24gaG9zdCBpZiByZWxldmFudC5cXG4xNzUzOlxcdCAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuMTc1NDpcXHQgKi9cXG4xNzU1OlxcdHN0YXRpYyBpbnRcXG4xNzU2OlxcdGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4xNzU3OlxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxcbjE3NTg6XFx0e1xcbjE3NTk6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuMTc2MDpcXHRcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbjE3NjE6XFx0XFx0c3RydWN0IGlwaGRyXFx0X2NpcGgsICpjaWg7XFx0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXFxuMTc2MjpcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcXG4xNzYzOlxcdFxcdHN0cnVjdCBpcF92c19jb25uICpjcDtcXG4xNzY0OlxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuMTc2NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XFxuMTc2NjpcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XFxuMTc2NzpcXHRcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuMTc2ODpcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xcbjE3Njk6XFx0XFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcXFwiSVBJUFxcXCI7XFxuMTc3MDpcXHRcXHRpbnQgdWxlbiA9IDA7XFxuMTc3MTpcXHRcXG4xNzcyOlxcdFxcdCpyZWxhdGVkID0gMTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0LyogcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMgKi9cXG4xNzc1OlxcdFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4xNzc2OlxcdFxcdFxcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXFxuMTc3NzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbjE3Nzg6XFx0XFx0fVxcbjE3Nzk6XFx0XFxuMTc4MDpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4xNzgxOlxcdFxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4xNzgyOlxcdFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuMTc4MzpcXHRcXHRpZiAoaWMgPT0gTlVMTClcXG4xNzg0OlxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbjE3ODU6XFx0XFxuMTc4NjpcXHRcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4xNzg3OlxcdFxcdFxcdCAgaWMtXFx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcXG4xNzg4OlxcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0LypcXG4xNzkxOlxcdFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuMTc5MjpcXHRcXHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxcbjE3OTM6XFx0XFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcXG4xNzk0OlxcdFxcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcXG4xNzk1OlxcdFxcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQncyBsaWZlLlxcbjE3OTY6XFx0XFx0ICovXFxuMTc5NzpcXHRcXHRpZiAoKGljLVxcdTAwM2V0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKSBcXHUwMDI2XFx1MDAyNlxcbjE3OTg6XFx0XFx0ICAgIChpYy1cXHUwMDNldHlwZSAhPSBJQ01QX1NPVVJDRV9RVUVOQ0gpIFxcdTAwMjZcXHUwMDI2XFxuMTc5OTpcXHRcXHQgICAgKGljLVxcdTAwM2V0eXBlICE9IElDTVBfVElNRV9FWENFRURFRCkpIHtcXG4xODAwOlxcdFxcdFxcdCpyZWxhdGVkID0gMDtcXG4xODAxOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTgwMjpcXHRcXHR9XFxuMTgwMzpcXHRcXG4xODA0OlxcdFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuMTgwNTpcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuMTgwNjpcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuMTgwNzpcXHRcXHRpZiAoY2loID09IE5VTEwpXFxuMTgwODpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4xODA5OlxcdFxcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVxcdTAwMjZjaWgtXFx1MDAzZWRhZGRyO1xcbjE4MTA6XFx0XFxuMTgxMTpcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIGVycm9ycyBmb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCBwYWNrZXRzICovXFxuMTgxMjpcXHRcXHR0dW5uZWwgPSBmYWxzZTtcXG4xODEzOlxcdFxcdGlmIChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbjE4MTQ6XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7XFxuMTgxNTpcXHRcXG4xODE2OlxcdFxcdFxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXFxuMTgxNzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE4MTg6XFx0XFx0XFx0LyogRXJyb3IgZm9yIG91ciBJUElQIG11c3QgYXJyaXZlIGF0IExPQ0FMX0lOICovXFxuMTgxOTpcXHRcXHRcXHRpZiAoIShza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpXFxuMTgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE4MjE6XFx0XFx0XFx0ZGVzdCA9IGlwX3ZzX2ZpbmRfdHVubmVsKGlwdnMsIEFGX0lORVQsIHJhZGRyLCAwKTtcXG4xODIyOlxcdFxcdFxcdC8qIE9ubHkgZm9yIGtub3duIHR1bm5lbCAqL1xcbjE4MjM6XFx0XFx0XFx0aWYgKCFkZXN0IHx8IGRlc3QtXFx1MDAzZXR1bl90eXBlICE9IElQX1ZTX0NPTk5fRl9UVU5ORUxfVFlQRV9JUElQKVxcbjE4MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xODI1OlxcdFxcdFxcdG9mZnNldCArPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuMTgyNjpcXHRcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuMTgyNzpcXHRcXHRcXHRpZiAoY2loID09IE5VTEwpXFxuMTgyODpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4xODI5OlxcdFxcdFxcdHR1bm5lbCA9IHRydWU7XFxuMTgzMDpcXHRcXHR9IGVsc2UgaWYgKChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xcbjE4MzE6XFx0XFx0XFx0ICAgIGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19HUkUpIFxcdTAwMjZcXHUwMDI2XFx0LyogQ2FuIGJlIEdSRSBlbmNhcCAqL1xcbjE4MzI6XFx0XFx0XFx0ICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cXG4xODMzOlxcdFxcdFxcdCAgIChza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpIHtcXG4xODM0OlxcdFxcdFxcdF9fdTggaXByb3RvO1xcbjE4MzU6XFx0XFxuMTgzNjpcXHRcXHRcXHQvKiBOb24tZmlyc3QgZnJhZ21lbnQgaGFzIG5vIFVEUC9HUkUgaGVhZGVyICovXFxuMTgzNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoY2loLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpKVxcbjE4Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xODM5OlxcdFxcdFxcdG9mZnNldDIgPSBvZmZzZXQgKyBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuMTg0MDpcXHRcXHRcXHRpZiAoY2loLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbjE4NDE6XFx0XFx0XFx0XFx0dWxlbiA9IGlwdnNfdWRwX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG4xODQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG4xODQzOlxcdFxcdFxcdFxcdG91dGVyX3Byb3RvID0gXFxcIlVEUFxcXCI7XFxuMTg0NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NDU6XFx0XFx0XFx0XFx0dWxlbiA9IGlwdnNfZ3JlX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG4xODQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG4xODQ3OlxcdFxcdFxcdFxcdG91dGVyX3Byb3RvID0gXFxcIkdSRVxcXCI7XFxuMTg0ODpcXHRcXHRcXHR9XFxuMTg0OTpcXHRcXHRcXHRpZiAodWxlbiBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTAuMjU1MTkzMzU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjYxMDQ1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCB0aGUgY29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZSBpcyBgSVBfVlNgLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGRlZmluaXRlbHkgYGlwX3ZzX2luX2ljbXBgLCBzbyBJIHdhbnQgdG8gZXhwbG9yZSBpdCBpbiBkZXB0aC5cblxuRmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBIbW0sIG5vcGUsIGl0J3MganVzdCBgaXBfdnNfaW5faWNtcGAuIEFscmlnaHQsIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpdHNlbGYuIEFoLCB0aGlzIGlzIGZpeGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMgdGhhdCBhcmUgdHVubmVsZWQgdGhyb3VnaCBJUFZTLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGB1bGVuYCB2YXJpYWJsZSB0byBhZGp1c3QgdGhlIE1UVSBjYWxjdWxhdGlvbiBhbmQgYWRkcmVzcyBhbiBNVFUgY2FsY3VsYXRpb24gaXNzdWUgdGhhdCBvY2N1cnMgd2l0aCBVRFAgb3IgR1JFIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLiBUaGlzIHR5cGUgb2YgZml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIGFuZCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gQW5kIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBpcF92c19pbl9pY21wYCBpcyBjYWxsZWQgYnkgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gQm90aCBvZiB0aGVzZSBhcmUgbmV0ZmlsdGVyIGhvb2tzLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHQuIFRoaXMgbWFrZXMgYGlwX3ZzX2luX2ljbXBgIGEgc29saWQgY2hvaWNlIGZvciBmb2N1c2VkIGFuYWx5c2lzLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgYElQX1ZTYCBpcyB0aGUgb25seSBjb25maWcgaGVyZS4gRG9lcyB0aGlzIGludm9sdmUgYW55IElQVlMgVURQIG9yIEdSRSB0dW5uZWxpbmc/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBpcHZzX3VkcF9kZWNhcGAgYW5kIGBpcHZzX2dyZV9kZWNhcGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgYW5hbHlzaXMuIEdvb2QsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBtb3JlIGRldGFpbGVkIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTguNTIxMjk5OTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA0OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3VkcF9kZWNhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTY0ND1pcF92c190cnlfdG9fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTY3OC0vKiBDaGVjayB0aGUgVURQIHR1bm5lbCBhbmQgcmV0dXJuIGl0cyBoZWFkZXIgbGVuZ3RoICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjc5OnN0YXRpYyBpbnQgaXB2c191ZHBfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3NTY9aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQwLVxcdFxcdGlmIChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxODQxOlxcdFxcdFxcdHVsZW4gPSBpcHZzX3VkcF9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTguNTc4MzU1MDgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzQ1MTQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgVURQL0dSRSBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgc3lzdGVtIHRoYXQgYXJlIHBhcnRpY3VsYXJseSByZWxldmFudCB0byBVRFAgb3IgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgdHVubmVsaW5nLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21lIG51YW5jZSBvciBhIHNwZWNpYWxpemVkIHNldHRpbmcgdGhhdCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IgaW4gYSB0dW5uZWxpbmcgc2NlbmFyaW8uIEknbSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdGFuZGFyZCBkb2N1bWVudGF0aW9uIGFuZCBtYXliZSBzb21lIGxlc3Mgb2J2aW91cyBzb3VyY2Vz4oCUcGVyaGFwcyBzb21lIGZvcnVtIGRpc2N1c3Npb25zIG9yIGV4cGVyaW1lbnRhbCBjb25maWd1cmF0aW9uc+KAlHRvIHNlZSBpZiB0aGVyZSdzIGFueSBJUFZTLXNwZWNpZmljIHR1bmluZyByZXF1aXJlZCB3aGVuIHRoZXNlIHByb3RvY29scyBhcmUgaW52b2x2ZWQuIEl04oCZcyBhYm91dCBiZWluZyB0aG9yb3VnaCBhbmQgbWFraW5nIHN1cmUgdGhlIHNvbHV0aW9uIGlzIG9wdGltYWwsIG5vdCBqdXN0IGZ1bmN0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyMS40MTI4NzEzMTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTI1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyMS40NjgwMDE4NTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3Nzk2MjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSVBWUyBUdW5uZWxpbmcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBJUFZTIGhhbmRsZXMgdHVubmVsaW5nIHByb3RvY29scy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgaXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdHVubmVsaW5nLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzY2FuIHRoZSBlbnRpcmUgZmlsZSBmb3IgYW55IG1lbnRpb25zIG9mIGBUVU5ORUxgLCBgR1JFYCwgb3IgYFVEUGAga2V5d29yZHMuIFRoaXMgd2lsbCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG1vZHVsZSBkZXBlbmRlbmNpZXMsIG9yIGZlYXR1cmUgZmxhZ3MgdGllZCB0byB0aGVzZSB0dW5uZWxpbmcgdGVjaG5vbG9naWVzIHdpdGhpbiB0aGUgSVBWUyBjb250ZXh0LiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5LCBidXQgZWZmZWN0aXZlLCB3YXkgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBiZWZvcmUgYW55IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjI0LjY0NTk2NjgyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NTU0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFVOTkVMfEdSRXxVRFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzk9Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcXHRJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NjpcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ny1cXHRoZWxwXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODg6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFVEUCB0cmFuc3BvcnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04OS1cXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXFx0SVBfVlNfUEVfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVxcdHRyaXN0YXRlIFxcXCJTSVAgcGVyc2lzdGVuY2UgZW5naW5lXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MjQuNzAyNDI5NTc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDA0NzU2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVURQIExvYWQgQmFsYW5jaW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBgSVBfVlNfUFJPVE9fVURQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aGF0J3MgZm9yIFVEUCBsb2FkIGJhbGFuY2luZywgZ290IGl0LlwiIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBgaXB2c191ZHBfZGVjYXBgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgdGhhdCBmaWxlIGdldHMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGlmIGBJUF9WU2AgaXMgZW5hYmxlZC4gU28sIHRoZSBxdWVzdGlvbiBpcywgKmRvKiBJIGV2ZW4gbmVlZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgdGhlIHR1bm5lbGluZyBpdHNlbGYsIG9yIGlzIGl0IGp1c3QgZm9yIHRoZSBsb2FkIGJhbGFuY2luZyBhc3BlY3Q/IEl0J3MgZWFzeSB0byBnZXQgY29uZnVzZWQgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuSSB0aGluayB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIEknbGwganVzdCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19QUk9UT19VRFBgLiBCdXQgd2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrOiBJJ20gcHJldHR5IHN1cmUgYGlwdnNfdWRwX2RlY2FwYCBpc24ndCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAsIGFuZCBzaW5jZSBpdCdzIGRlZmluZWQgaW4gYGlwX3ZzX2NvcmUuY2AsIGFuZCB0aGF0J3MgZW5hYmxlZCB3aXRoIGBJUF9WU2AsIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyOC45MDI5MjE2ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTg3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdnNfdWRwX2RlY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNjQ0PWlwX3ZzX3RyeV90b19zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE2Nzk6c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2ODAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBfX3UxNiBhZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Nj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXFx0XFx0aWYgKGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE4NDE6XFx0XFx0XFx0dWxlbiA9IGlwdnNfdWRwX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDItXFx0XFx0XFx0XFx0XFx0ICAgICAgcmFkZHIsIFxcdTAwMjZpcHJvdG8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyOC45NjAxMTQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NzU2NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfY29yZS5jYCBhbmQgYGlwdnNfdWRwX2RlY2FwYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgaXB2c191ZHBfZGVjYXBgIGluIGBpcF92c19jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGF0IGl0J3MgZG9pbmcsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGguXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFAgZGVjYXBzdWxhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgd2hlcmUgd2UncmUgcGVlbGluZyBvZmYgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVycyBmb3IgVURQIHRyYWZmaWMgZGVzdGluZWQgZm9yIFZpcnR1YWwgU2VydmVycy4gV2UnbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IGlzIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCBwYXNzZWQgb250byB0aGUgUmVhbCBTZXJ2ZXIuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgbG9hZCBiYWxhbmNpbmcgZGVjaXNpb25zIGF0IHRoaXMgcG9pbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gbWFsZm9ybWVkIHBhY2tldHMgb3IgdW5leHBlY3RlZCBVRFAgaGVhZGVyIGNvbmZpZ3VyYXRpb25zLiBBbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBzaG91bGQgYWxzbyBiZSBrZXB0IGluIG1pbmQsIGFzIGltcHJvcGVyIGhhbmRsaW5nIG9mIGVuY2Fwc3VsYXRlZCB0cmFmZmljIGNhbiBzb21ldGltZXMgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MzIuNTU3NjgyNTY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRcXHQqdmVyZGljdCA9IE5GX0FDQ0VQVDtcXG4xNjcyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE2NzM6XFx0XFx0fVxcbjE2NzQ6XFx0XFxuMTY3NTpcXHRcXHRyZXR1cm4gMTtcXG4xNjc2OlxcdH1cXG4xNjc3OlxcdFxcbjE2Nzg6XFx0LyogQ2hlY2sgdGhlIFVEUCB0dW5uZWwgYW5kIHJldHVybiBpdHMgaGVhZGVyIGxlbmd0aCAqL1xcbjE2Nzk6XFx0c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjgwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXFxuMTY4MTpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsIF9fdTggKnByb3RvKVxcbjE2ODI6XFx0e1xcbjE2ODM6XFx0XFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVkcGg7XFxuMTY4NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDtcXG4xNjg1OlxcdFxcbjE2ODY6XFx0XFx0dWRwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF91ZHBoKSwgXFx1MDAyNl91ZHBoKTtcXG4xNjg3OlxcdFxcdGlmICghdWRwaClcXG4xNjg4OlxcdFxcdFxcdGdvdG8gdW5rO1xcbjE2ODk6XFx0XFx0b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MzIuNTU3ODIyODg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNTY0NTc4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBpcF92c19pbl9pY21wYCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gU2luY2UgaXQgZG9lc24ndCBzZWVtIHRvIGJlIGdhdGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCBJIGNhbiBhc3N1bWUgdGhhdCBgSVBfVlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUsIGFzIGl0IGVuYWJsZXMgSVBWUyBmdW5jdGlvbmFsaXR5IG92ZXJhbGwuIEkgc2hvdWxkIHN0aWxsIHZlcmlmeSB0aGF0LlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gaWYgYElQX1ZTX0lQVjZgIGlzIHJlbGV2YW50LCBidXQgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gbmFtZSwgYGlwX3ZzX2luX2ljbXBgLCBpdCdzIGNsZWFyIHRoaXMgaXMgdGhlIElQdjQgdmVyc2lvbi4gTm93LCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBpcF92c19pbl9pY21wYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmaXggcmVsYXRlZCB0byBNVFUgY2FsY3VsYXRpb25zIGluIHR1bm5lbGVkIElDTVAgcGFja2V0cywgYW5kIGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgaGVhZGVyIGxlbmd0aCBvZiB0aGUgdHVubmVsaW5nIHByb3RvY29scy5cblxuT2theSwgbGV0IG1lIGdvIG92ZXIgdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBmb3IgSUNNUCBwYWNrZXRzIHR1bm5lbGVkIG92ZXIgdmFyaW91cyBwcm90b2NvbHMgKGxpa2VseSBHUkUgb3IgVURQIGVuY2Fwc3VsYXRlZCkuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW47YCwgYW5kIHRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IHRoZSBjb3JlIElQVlMgbG9naWMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgSVBfVlNgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gV2hpbGUgSVBWUyBjb3ZlcnMgdGhlIGNvcmUgZnVuY3Rpb25zLCBjb3VsZCBpdCBuZWVkIHNvbWV0aGluZyBzcGVjaWZpYyBmb3IsIHNheSwgVURQIG9yIEdSRSB0dW5uZWxpbmc/IEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBgSVBfVlNfUFJPVE9fVURQYCBvciBgSVBfVlNfUFJPVE9fR1JFYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gR1JFLCBhcyB0aGF0J3MgYSBjb21tb24gdHVubmVsaW5nIHByb3RvY29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjQwLjcxNDI4MzMxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2ODQ4NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX0dSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NDAuNzcxOTc1NDg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzU4OTM5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlF1aWNrIElQVlMgQnVnIENoZWNrKipcblxuQWxyaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gKm5vKi4gSSdtIHRoaW5raW5nLCBcIk5vLCB3ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGJleW9uZCBgSVBfVlNgIGZvciB0aGlzIHNwZWNpZmljIGlzc3VlLlwiIFNvIHRoZSBjcml0aWNhbCBmYWN0b3IgaGVyZSBpcyBzaW1wbHkgYElQX1ZTYC4gSSd2ZSBhbHJlYWR5IG1hZGUgdGhlIGRlY2lzaW9uLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQncyBnb29kIHByYWN0aWNlLCBsZXQncyBkbyBhIGZhc3QgdmVyaWZpY2F0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgaXBfdnNfaW5faWNtcF92NmAgbW9kdWxlLiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQgZXhoaWJpdHMgdGhlIHNhbWUgYmVoYXZpb3Igb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0J3MgYWJvdXQgYSBxdWljayBjcm9zcy1jaGVjayB0byBzb2xpZGlmeSBteSBjdXJyZW50IGFzc3VtcHRpb24gYW5kIGF2b2lkIGFueSBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NDUuMzA3ODc3OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ1NDU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19pbl9pY21wX3Y2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk3OC0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5Nzk6c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4MC1cXHRcXHRcXHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNS1cXHRcXHRcXHRpbnQgcmVsYXRlZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMzY6XFx0XFx0XFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KGlwdnMsIHNrYiwgXFx1MDAyNnJlbGF0ZWQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjI3OT1pcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMDE6XFx0XFx0cmV0dXJuIGlwX3ZzX2luX2ljbXBfdjYoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2ssIFxcdTAwMjZpcGhkcik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Nzo0NS40MTAzNDA5ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMzcwMDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBJQ01QdjYgSW5wdXQgRmlsdGVyaW5nIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJ3JlIGhhbmRsaW5nIElDTVB2NiBpbnB1dCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZmlsdGVyaW5nLiBJJ20gZ29pbmcgdG8gZ3JhYiB0aGUgc291cmNlIGNvZGUgZm9yIGBpcF92c19pbl9pY21wX3Y2YC4gVGhlIGtleSB0aGluZyBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBpcyB0aGUgcHJlc2VuY2Ugb2YgYHVsZW5gLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBJUHY0IGFuZCBJUHY2LCB0aGUgYHVsZW5gIGZpZWxkIG9yIHNpbWlsYXIgY29uc3RydWN0LCBpcyBhIGNyaXRpY2FsIHBpZWNlIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIElDTVAgaGFuZGxpbmcuIEl0J3Mgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIGZpbHRlcmluZyBsb2dpYy4gQ2hlY2tpbmcgdGhhdCBxdWlja2x5IHdpbGwgZ2l2ZSBtZSBhIHZhbHVhYmxlIGRhdGEgcG9pbnQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBiZSBtYWRlLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgaXQgaGFzIHRoaXMgYXR0cmlidXRlIG9yIGVxdWl2YWxlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NTAuNTI0MDQzOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5Nzk6XFx0c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE5ODA6XFx0XFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuMTk4MTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuMTk4MjpcXHR7XFxuMTk4MzpcXHRcXHRzdHJ1Y3QgaWNtcDZoZHJcXHRfaWNtcGgsICppYztcXG4xOTg0OlxcdFxcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoID0gey5mbGFncyA9IDAsIC5mcmFnb2ZmcyA9IDB9Oy8qQ29udGFpbmVkIElQICovXFxuMTk4NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XFxuMTk4NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbjE5ODc6XFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xcbjE5ODg6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgdmVyZGljdDtcXG4xOTg5OlxcdFxcdGJvb2wgbmV3X2NwID0gZmFsc2U7XFxuMTk5MDpcXHRcXG4xOTkxOlxcdFxcdCpyZWxhdGVkID0gMTtcXG4xOTkyOlxcdFxcbjE5OTM6XFx0XFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4xOTk0OlxcdFxcdGlmIChpYyA9PSBOVUxMKVxcbjE5OTU6XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTk5NjpcXHRcXG4xOTk3OlxcdFxcdC8qXFxuMTk5ODpcXHRcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbjE5OTk6XFx0XFx0ICogVGhlc2UgY2hlY2tzIGFyZSBzdXBwb3NlZCB0byBiZSBpbiBhbiBvcmRlciB0aGF0IG1lYW5zIGVhc3lcXG4yMDAwOlxcdFxcdCAqIHRoaW5ncyBhcmUgY2hlY2tlZCBmaXJzdCB0byBzcGVlZCB1cCBwcm9jZXNzaW5nLi4uLiBob3dldmVyXFxuMjAwMTpcXHRcXHQgKiB0aGlzIG1lYW5zIHRoYXQgc29tZSBwYWNrZXRzIHdpbGwgbWFuYWdlIHRvIGdldCBhIGxvbmcgd2F5XFxuMjAwMjpcXHRcXHQgKiBkb3duIHRoaXMgc3RhY2sgYW5kIHRoZW4gYmUgcmVqZWN0ZWQsIGJ1dCB0aGF0J3MgbGlmZS5cXG4yMDAzOlxcdFxcdCAqL1xcbjIwMDQ6XFx0XFx0aWYgKGljLVxcdTAwM2VpY21wNl90eXBlIFxcdTAwMjYgSUNNUFY2X0lORk9NU0dfTUFTSykge1xcbjIwMDU6XFx0XFx0XFx0KnJlbGF0ZWQgPSAwO1xcbjIwMDY6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDA3OlxcdFxcdH1cXG4yMDA4OlxcdFxcdC8qIEZyYWdtZW50IGhlYWRlciB0aGF0IGlzIGJlZm9yZSBJQ01QIGhlYWRlciB0ZWxscyB1cyB0aGF0OlxcbjIwMDk6XFx0XFx0ICogaXQncyBub3QgYW4gZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGV5IGNhbid0IGJlIGZyYWdtZW50ZWQuXFxuMjAxMDpcXHRcXHQgKi9cXG4yMDExOlxcdFxcdGlmIChpcGgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2X0ZIX0ZfRlJBRylcXG4yMDEyOlxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRJUF9WU19EQkcoOCwgXFxcIkluY29taW5nIElDTVB2NiAoJWQsJWQpICVwSTZjLVxcdTAwM2UlcEk2Y1xcXFxuXFxcIixcXG4yMDE1OlxcdFxcdFxcdCAgaWMtXFx1MDAzZWljbXA2X3R5cGUsIG50b2hzKGljbXB2Nl9pZChpYykpLFxcbjIwMTY6XFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbjIwMTc6XFx0XFxuMjAxODpcXHRcXHRvZmZzZXQgPSBpcGgtXFx1MDAzZWxlbiArIHNpemVvZihfaWNtcGgpO1xcbjIwMTk6XFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVUNiwgc2tiLCBvZmZzZXQsIHRydWUsIFxcdTAwMjZjaXBoKSlcXG4yMDIwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgY2lwaC5wcm90b2NvbCk7XFxuMjAyMzpcXHRcXHRpZiAoIXBkKVxcbjIwMjQ6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDI1OlxcdFxcdHBwID0gcGQtXFx1MDAzZXBwO1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRcXHQvKiBDYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgZW1iZWRkZWQgcHJvdG9jb2wgKi9cXG4yMDI4OlxcdFxcdGlmIChjaXBoLmZyYWdvZmZzKVxcbjIwMjk6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDMwOlxcdFxcbjIwMzE6XFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG4yMDMyOlxcdFxcdFxcdCAgICAgIFxcXCJDaGVja2luZyBpbmNvbWluZyBJQ01QdjYgZm9yXFxcIik7XFxuMjAzMzpcXHRcXG4yMDM0OlxcdFxcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXJcXG4yMDM1OlxcdFxcdCAqIGlmIG5vdCBmcm9tIGxvY2FsaG9zdFxcbjIwMzY6XFx0XFx0ICovXFxuMjAzNzpcXHRcXHRjcCA9IElORElSRUNUX0NBTExfMShwcC1cXHUwMDNlY29ubl9pbl9nZXQsIGlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvLFxcbjIwMzg6XFx0XFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdGlmICghY3ApIHtcXG4yMDQxOlxcdFxcdFxcdGludCB2O1xcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRcXHRpZiAoIXN5c2N0bF9zY2hlZHVsZV9pY21wKGlwdnMpKVxcbjIwNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0XFx0aWYgKCFpcF92c190cnlfdG9fc2NoZWR1bGUoaXB2cywgQUZfSU5FVDYsIHNrYiwgcGQsIFxcdTAwMjZ2LCBcXHUwMDI2Y3AsIFxcdTAwMjZjaXBoKSlcXG4yMDQ3OlxcdFxcdFxcdFxcdHJldHVybiB2O1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRcXHRuZXdfY3AgPSB0cnVlO1xcbjIwNTA6XFx0XFx0fVxcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHQvKiBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUganVzdCBsZXQgaXQgZ28gKi9cXG4yMDUzOlxcdFxcdGlmICgoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCkgXFx1MDAyNlxcdTAwMjZcXG4yMDU0OlxcdFxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuMjA1NTpcXHRcXHRcXHR2ZXJkaWN0ID0gTkZfQUNDRVBUO1xcbjIwNTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA1NzpcXHRcXHR9XFxuMjA1ODpcXHRcXG4yMDU5OlxcdFxcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xcbjIwNjA6XFx0XFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XFxuMjA2MTpcXHRcXG4yMDYyOlxcdFxcdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXFxuMjA2MzpcXHRcXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4yMDY0OlxcdFxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4yMDY1OlxcdFxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcXG4yMDY2OlxcdFxcdFxcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cXG4yMDY3OlxcdFxcbjIwNjg6XFx0XFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcXHUwMDI2Y2lwaCk7XFxuMjA2OTpcXHRcXG4yMDcwOlxcdG91dDpcXG4yMDcxOlxcdFxcdGlmIChsaWtlbHkoIW5ld19jcCkpXFxuMjA3MjpcXHRcXHRcXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4yMDczOlxcdFxcdGVsc2VcXG4yMDc0OlxcdFxcdFxcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4yMDc1OlxcdFxcbjIwNzY6XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuMjA3NzpcXHR9XFxuMjA3ODpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NTAuNTI0MjU1ODdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNjM0MTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBJQ01QdjYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGlwX3ZzX2luX2ljbXBfdjZgIGlzbid0IGludm9sdmVkIGF0IGFsbC4gVGhlIHR1bm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBNVFUgY2FsY3VsYXRpb25zIGZvciBlbmNhcHN1bGF0ZWQgSUNNUCBwYWNrZXRzLCBpc24ndCBwcmVzZW50IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mIElDTVAgcHJvY2Vzc2luZyB3aXRoaW4gSVBWUy4gVGhlcmVmb3JlLCB0aGUgZml4IGlzIGV4Y2x1c2l2ZWx5IGZvciBJUHY0IHRyYWZmaWMuIFRoZSBjb25maWd1cmF0aW9uIHRoYXQncyByZWxldmFudCBoZXJlIGlzIGBJUF9WU2AsIG9mIGNvdXJzZS4gTXkgZm9jdXMgaXMgbmFycm93ZWQgZG93biB0byBgaXBfdnNfaW5faWNtcGAsIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgdGhhdCdzIHdoYXQncyBiZWVuIGNoYW5nZWQuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNydWNpYWwgTVRVIGNhbGN1bGF0aW9uIGlzc3VlIHdpdGhpbiBJUFZTLiBJdCdzIGFib3V0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgb3ZlcmhlYWQgaW50cm9kdWNlZCBieSBVRFAgb3IgR1JFIHR1bm5lbHMgd2hlbiBoYW5kbGluZyBJQ01QIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIHBhcnQgb2YgdGhlIHJlYWNoYWJsZSBsb2dpYyB3aXRoaW4gSVBWUywgc28gdGhhdCdzIHdoeSBpdCdzIGJlZW4gaWRlbnRpZmllZCBhcyBpbXBvcnRhbnQuIFJpZ2h0LCBJIHRoaW5rIHRoaXMgbG9va3MgZ29vZC4gSSdsbCBnZXQgdGhpcyBzZXQtcmVzdWx0IGxvZ2dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjEsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Nzo1NC41MzA2MDAzODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzNDA5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2luX2ljbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNVFUgY2FsY3VsYXRpb24gZm9yIHR1bm5lbGVkIElDTVAgcGFja2V0cyBpbiBJUFZTIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgVURQL0dSRSB0dW5uZWwgaGVhZGVyIGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIElQVlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt4j8r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 12:34:18 +0000 UTC FinishedAt: 2026-07-02 12:47:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb09d0e64ecaa0aa0f7d1133a1696ed74dead295", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "bb09d0e64ecaa0aa0f7d1133a1696ed74dead295", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "5ec2b482-f8d8-4e2a-861a-68e4faaf5533" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_in_icmp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfaW5faWNtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBNVFUgY2FsY3VsYXRpb24gZm9yIHR1bm5lbGVkIElDTVAgcGFja2V0cyBpbiBJUFZTIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgVURQL0dSRSB0dW5uZWwgaGVhZGVyIGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIElQVlMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuaW5kZXggZDQwYjQwNGMxYmY2NDYuLjkwNmYyYzM2MTY3NjM4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xuQEAgLTE3NjcsNiAmIzQzOzE3NjcsNyBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXG4gXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4gXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuIFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuJiM0MztcdGludCB1bGVuID0gMDtcbiBcbiBcdCpyZWxhdGVkID0gMTtcbiBcbkBAIC0xODMxLDcgJiM0MzsxODMyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHQgICAvKiBFcnJvciBmb3Igb3VyIHR1bm5lbCBtdXN0IGFycml2ZSBhdCBMT0NBTF9JTiAqL1xuIFx0XHQgICAoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSkge1xuIFx0XHRfX3U4IGlwcm90bztcbi1cdFx0aW50IHVsZW47XG4gXG4gXHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbiBcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG5AQCAtMTkzNiw4ICYjNDM7MTkzNiw4IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbiBcdFx0XHRcdGlmIChkZXN0X2RzdClcbiBcdFx0XHRcdFx0bXR1ID0gZHN0X210dShkZXN0X2RzdC1cdTAwM2Vkc3RfY2FjaGUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAobXR1IFx1MDAzZSA2OCAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcbi1cdFx0XHRcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbiYjNDM7XHRcdFx0aWYgKG10dSBcdTAwM2UgNjggJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbilcbiYjNDM7XHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbjtcbiBcdFx0XHRpbmZvID0gaHRvbmwobXR1KTtcbiBcdFx0fVxuIFx0XHQvKiBTdHJpcCBvdXRlciBJUCwgSUNNUCBhbmQgSVBJUC9VRFAvR1JFLCBnbyB0byBJUCBoZWFkZXIgb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgTVRVIGNhbGN1bGF0aW9uIGZvciB0dW5uZWxlZCBJQ01QIHBhY2tldHMgaW4gSVBWUyBieSBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIFVEUC9HUkUgdHVubmVsIGhlYWRlciBsZW5ndGguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBJUFZTIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IGQ0MGI0MDRjMWJmNjQ2Li45MDZmMmMzNjE2NzYzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCkBAIC0xNzY3LDYgJiM0MzsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCWJvb2wgdHVubmVsLCBuZXdfY3AgPSBmYWxzZTsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyOwogCWNoYXIgKm91dGVyX3Byb3RvID0gJiMzNDtJUElQJiMzNDs7CiYjNDM7CWludCB1bGVuID0gMDsKIAogCSpyZWxhdGVkID0gMTsKIApAQCAtMTgzMSw3ICYjNDM7MTgzMiw2IEBAIGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCwKIAkJICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi8KIAkJICAgKHNrYl9ydGFibGUoc2tiKS0mZ3Q7cnRfZmxhZ3MgJmFtcDsgUlRDRl9MT0NBTCkpIHsKIAkJX191OCBpcHJvdG87Ci0JCWludCB1bGVuOwogCiAJCS8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi8KIAkJaWYgKHVubGlrZWx5KGNpaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfT0ZGU0VUKSkpCkBAIC0xOTM2LDggJiM0MzsxOTM2LDggQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLAogCQkJCWlmIChkZXN0X2RzdCkKIAkJCQkJbXR1ID0gZHN0X210dShkZXN0X2RzdC0mZ3Q7ZHN0X2NhY2hlKTsKIAkJCX0KLQkJCWlmIChtdHUgJmd0OyA2OCAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKSkKLQkJCQltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CiYjNDM7CQkJaWYgKG10dSAmZ3Q7IDY4ICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHVsZW4pCiYjNDM7CQkJCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB1bGVuOwogCQkJaW5mbyA9IGh0b25sKG10dSk7CiAJCX0KIAkJLyogU3RyaXAgb3V0ZXIgSVAsIElDTVAgYW5kIElQSVAvVURQL0dSRSwgZ28gdG8gSVAgaGVhZGVyIG9mCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXBfdnNfaW5faWNtcGAuICBJdCBsb29rcyBsaWtlIGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgTVRVIGNhbGN1bGF0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBiZSBjYXV0aW91cyBhYm91dCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIG1vZGlmeSB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHN1YnRyYWN0ZWQgYHNpemVvZihzdHJ1Y3QgaXBoZHIpYCBmcm9tIHRoZSBNVFUgaWYgaXQgd2FzIGxhcmdlIGVub3VnaC4gTm93LCBpdCYjMzk7cyBzdWJ0cmFjdGluZyBgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWxlbmAsIHdoZXJlIGB1bGVuYCBpcyBtb3ZlZCBhbmQgaW5pdGlhbGl6ZWQgdG8gemVybyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLiAgVGhpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgZml4aW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBlcnJvciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSUNNUCBwYXlsb2FkIGxlbmd0aCwgYXMgdWxlbiBzZWVtcyByZWxhdGVkIHRvIHRoZSBzaXplLgoKVGhlIGNoYW5nZSBpdHNlbGYgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyB0aGUgaXNzdWUgaXMgc3VidGxlLiBUaGlzIGlzIHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uIGlzc3VlcyBvciwgd29yc2UsIGhhcmQtdG8tZGlhZ25vc2UgY29ubmVjdGlvbiBwcm9ibGVtcyB1bmRlciBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbnMuIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBhIHNlZW1pbmdseSBtaW5vciBpbnRlZ2VyIG92ZXJmbG93LiBJJiMzOTttIG5vdGluZyB0aGF0LgoKTXkgZmlyc3QgdGhvdWdodCBpcywgdGhpcyBuZWVkcyB0byBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gTVRVLXJlbGF0ZWQgaXNzdWVzIGFyZSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nIGNhbXBhaWducywgYW5kIElQVlMgaXMgYSBjcml0aWNhbCBjb21wb25lbnQgZm9yIGxvYWQgYmFsYW5jaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIHJlZ3Jlc3Npb25zLiBJIHNob3VsZCBzdGFydCBieSBjaGVja2luZyB0aGUgc3Vycm91bmRpbmcgYGlwX3ZzX2luX2ljbXBgIGZ1bmN0aW9uIGFuZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNgIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciByZWxhdGVkIGNhbGN1bGF0aW9ucy4gQW5kLCBsZXQgbWUgc2VlIGlmIEkgY2FuIGZpbmQgdGhlIGN1cnJlbnQgSVBWUyBjb25maWd1cmF0aW9uLCBvciBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IE1UVSBpcyBwcm9wZXJseSBzZXQuIFRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfY29yZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZT0xND1pcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICYjNDM7PSBpcF92c19uZmN0Lm9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xNS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNjppcF92cy1vYmpzIDo9XHRpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm9cdCAgIFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUtMTctXHRcdGlwX3ZzX3htaXQubyBpcF92c19hcHAubyBpcF92c19zeW5jLm9cdCAgIFx0XHQgICBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipBbmFseXppbmcgSVAgVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBmb2N1cyBoZXJlIGlzIGBDT05GSUdfSVBfVlNgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUCBWaXJ0dWFsIFNlcnZlciBmdW5jdGlvbmFsaXR5IGluIHRoZSBMaW51eCBrZXJuZWwuIE15IG5leHQgc3RlcCwgYmFzZWQgb24gdGhhdCwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IElDTVAgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgSVBWUyBjb3JlLiBJIGtub3cgdGhhdCBmaWxlIGFuZCBmdW5jdGlvbiBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIHNvIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGludGVyYWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaW5jb21pbmcgSUNNUCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgYW5kIHJvdXRlZCB3aXRoaW4gdGhlIElQVlMgZnJhbWV3b3JrLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIElDTVAmIzM5O3MgYmVoYXZpb3IgaW4gcmVsYXRpb24gdG8gSVBWUyBhcmUgYWx3YXlzIGEgY29uY2VybiwgYW5kIHRoaXMgYGlwX3ZzX2luX2ljbXBgIGZ1bmN0aW9uIGlzIG9mdGVuIHRoZSBrZXkgdG8gcmVzb2x2aW5nIHN1Y2ggaXNzdWVzLiBJIHdpbGwgZ28gdGhyb3VnaCB0aGUgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIHRoYXQgaXQgYWxpZ25zIHdpdGggZXhwZWN0ZWQgZnVuY3Rpb25hbGl0eSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgY3VycmVudCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX2luX2ljbXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1NT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE3NTY6aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNzU3LVx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xOTc4LSNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTc5OnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4MC1cdFx0XHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwODY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTM1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTM2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzctXHRcdFx0XHRcdFx0ICAgICAgIGhvb2tudW0sIFx1MDAyNmlwaCk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTQ1LVx0XHRcdGludCByZWxhdGVkO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTQ2Olx0XHRcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFx1MDAyNnJlbGF0ZWQsXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNDctXHRcdFx0XHRcdFx0ICAgIGhvb2tudW0pO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI3NC0gKiAgICAgIGJ1dCBJQ01QIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAgY2Fubm90IG5vdCBiZSBlYXNpbHkgbWFya2VkIGFuZFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjc1OiAqICAgICAgc2VudCB0byBpcF92c19pbl9pY21wLiBTbywgY2F0Y2ggdGhlbSBhdCB0aGUgTkZfSU5FVF9GT1JXQVJEIGNoYWluXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzctICovXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMjc5PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMwMTpcdFx0cmV0dXJuIGlwX3ZzX2luX2ljbXBfdjYoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rLCBcdTAwMjZpcGhkcik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDItI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzA0LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzA1Olx0cmV0dXJuIGlwX3ZzX2luX2ljbXAoaXB2cywgc2tiLCBcdTAwMjZyLCBzdGF0ZS1cdTAwM2Vob29rKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwNi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSUNNUCBIYW5kbGluZyBpbiBJUFZTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBieSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2ZvcndhcmRfaWNtcGAuIFRoYXQmIzM5O3MgZ29vZCDigJMgaXQgbWVhbnMgdGhlIGNvcmUgSUNNUCBwcm9jZXNzaW5nIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhY3RpdmUuIEkmIzM5O20gYXNzdW1pbmcgdGhlIGBJUF9WU2AgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHNwZWNpZmljIElDTVAgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBuZXRmaWx0ZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBsb2NhdGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0JiMzOTtzIGJ1cmllZCBpbiBvbmUgb2YgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGFyZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCDigJMgdGhlIG9idmlvdXMgZ2VuZXJhbCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBmaWxlIOKAkyBvciwgc2luY2UgSSYjMzk7bSB2YWd1ZWx5IHJlbWVtYmVyaW5nIHNvbWV0aGluZyBhYm91dCBjb25uZWN0aW9uIHRyYWNraW5nIG9yIGxvYWQgYmFsYW5jaW5nLCBwZXJoYXBzIGBuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdHdvIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCYjMzk7cyBhIGJpdCBvZiBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb24gc29tZXRpbWVzLiBIb3BlZnVsbHkgdGhlIG9wdGlvbnMgYXJlIHdlbGwtZG9jdW1lbnRlZCB3aXRoaW4gdGhvc2UgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKklQVlMgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlPyYjMzQ7IFRoZW4gSSByZWNhbGwgYGlwX3ZzX2luX2ljbXBgLCBhbmQgSSBoYXZlIHRvIGNsYXJpZnk6IHdhaXQsIHRoYXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBJUHY0IElDTVAgdHJhZmZpYywgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0JiMzOTtzIHJlbGV2YW50LgoKTXkgdHJhaW4gb2YgdGhvdWdodCBnb2VzIHN0cmFpZ2h0IHRvIG5lZWRpbmcgdG8gbG9vayBkZWVwZXIsIHNwZWNpZmljYWxseSBJIG5lZWQgdG8gZ28gdG8gYGlwX3ZzX2NvcmUuY2AgYW5kIGRpZyBhcm91bmQgZm9yIHRoaXMgYGlwX3ZzX2luX2ljbXBgIHNldHRpbmcgdG8gZ2FpbiBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZy4gVGhhdCYjMzk7cyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBtb3N0IGNvbXByZWhlbnNpdmUgaW5mb3JtYXRpb24gYW5kIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NTA6XHQgKlx0SGFuZGxlIElDTVAgbWVzc2FnZXMgaW4gdGhlIG91dHNpZGUtdG8taW5zaWRlIGRpcmVjdGlvbiAoaW5jb21pbmcpLlxuMTc1MTpcdCAqXHRGaW5kIGFueSB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LCBjaGVjayBhZ2FpbnN0IGV4aXN0aW5nIGNvbm5lY3Rpb25zLFxuMTc1MjpcdCAqXHRmb3J3YXJkIHRvIHRoZSByaWdodCBkZXN0aW5hdGlvbiBob3N0IGlmIHJlbGV2YW50LlxuMTc1MzpcdCAqXHRDdXJyZW50bHkgaGFuZGxlcyBlcnJvciB0eXBlcyAtIHVucmVhY2hhYmxlLCBxdWVuY2gsIHR0bCBleGNlZWRlZC5cbjE3NTQ6XHQgKi9cbjE3NTU6XHRzdGF0aWMgaW50XG4xNzU2Olx0aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuMTc1NzpcdFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXG4xNzU4Olx0e1xuMTc1OTpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4xNzYwOlx0XHRzdHJ1Y3QgaWNtcGhkclx0X2ljbXBoLCAqaWM7XG4xNzYxOlx0XHRzdHJ1Y3QgaXBoZHJcdF9jaXBoLCAqY2loO1x0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXG4xNzYyOlx0XHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcbjE3NjM6XHRcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbjE3NjQ6XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4xNzY1Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4xNzY2Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XG4xNzY3Olx0XHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XG4xNzY4Olx0XHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xuMTc2OTpcdFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcJiMzNDtJUElQXCYjMzQ7O1xuMTc3MDpcdFx0aW50IHVsZW4gPSAwO1xuMTc3MTpcdFxuMTc3MjpcdFx0KnJlbGF0ZWQgPSAxO1xuMTc3MzpcdFxuMTc3NDpcdFx0LyogcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMgKi9cbjE3NzU6XHRcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcbjE3NzY6XHRcdFx0aWYgKGlwX3ZzX2dhdGhlcl9mcmFncyhpcHZzLCBza2IsIGlwX3ZzX2RlZnJhZ191c2VyKGhvb2tudW0pKSlcbjE3Nzc6XHRcdFx0XHRyZXR1cm4gTkZfU1RPTEVOO1xuMTc3ODpcdFx0fVxuMTc3OTpcdFxuMTc4MDpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4xNzgxOlx0XHRvZmZzZXQgPSBpaGwgPSBpcGgtXHUwMDNlaWhsICogNDtcbjE3ODI6XHRcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXHUwMDI2X2ljbXBoKTtcbjE3ODM6XHRcdGlmIChpYyA9PSBOVUxMKVxuMTc4NDpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjE3ODU6XHRcbjE3ODY6XHRcdElQX1ZTX0RCRygxMiwgXCYjMzQ7SW5jb21pbmcgSUNNUCAoJWQsJWQpICVwSTQtXHUwMDNlJXBJNFxcblwmIzM0OyxcbjE3ODc6XHRcdFx0ICBpYy1cdTAwM2V0eXBlLCBudG9ocyhpY21wX2lkKGljKSksXG4xNzg4Olx0XHRcdCAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLCBcdTAwMjZpcGgtXHUwMDNlZGFkZHIpO1xuMTc4OTpcdFxuMTc5MDpcdFx0LypcbjE3OTE6XHRcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG4xNzkyOlx0XHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxuMTc5MzpcdFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcbjE3OTQ6XHRcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcbjE3OTU6XHRcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQmIzM5O3MgbGlmZS5cbjE3OTY6XHRcdCAqL1xuMTc5NzpcdFx0aWYgKChpYy1cdTAwM2V0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKSBcdTAwMjZcdTAwMjZcbjE3OTg6XHRcdCAgICAoaWMtXHUwMDNldHlwZSAhPSBJQ01QX1NPVVJDRV9RVUVOQ0gpIFx1MDAyNlx1MDAyNlxuMTc5OTpcdFx0ICAgIChpYy1cdTAwM2V0eXBlICE9IElDTVBfVElNRV9FWENFRURFRCkpIHtcbjE4MDA6XHRcdFx0KnJlbGF0ZWQgPSAwO1xuMTgwMTpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgwMjpcdFx0fVxuMTgwMzpcdFxuMTgwNDpcdFx0LyogTm93IGZpbmQgdGhlIGNvbnRhaW5lZCBJUCBoZWFkZXIgKi9cbjE4MDU6XHRcdG9mZnNldCAmIzQzOz0gc2l6ZW9mKF9pY21waCk7XG4xODA2Olx0XHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFx1MDAyNl9jaXBoKTtcbjE4MDc6XHRcdGlmIChjaWggPT0gTlVMTClcbjE4MDg6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDsgLyogVGhlIHBhY2tldCBsb29rcyB3cm9uZywgaWdub3JlICovXG4xODA5Olx0XHRyYWRkciA9ICh1bmlvbiBuZl9pbmV0X2FkZHIgKilcdTAwMjZjaWgtXHUwMDNlZGFkZHI7XG4xODEwOlx0XG4xODExOlx0XHQvKiBTcGVjaWFsIGNhc2UgZm9yIGVycm9ycyBmb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCBwYWNrZXRzICovXG4xODEyOlx0XHR0dW5uZWwgPSBmYWxzZTtcbjE4MTM6XHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19JUElQKSB7XG4xODE0Olx0XHRcdHN0cnVjdCBpcF92c19kZXN0ICpkZXN0O1xuMTgxNTpcdFxuMTgxNjpcdFx0XHRpZiAodW5saWtlbHkoY2loLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9PRkZTRVQpKSlcbjE4MTc6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgxODpcdFx0XHQvKiBFcnJvciBmb3Igb3VyIElQSVAgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cbjE4MTk6XHRcdFx0aWYgKCEoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSlcbjE4MjA6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMTgyMTpcdFx0XHRkZXN0ID0gaXBfdnNfZmluZF90dW5uZWwoaXB2cywgQUZfSU5FVCwgcmFkZHIsIDApO1xuMTgyMjpcdFx0XHQvKiBPbmx5IGZvciBrbm93biB0dW5uZWwgKi9cbjE4MjM6XHRcdFx0aWYgKCFkZXN0IHx8IGRlc3QtXHUwMDNldHVuX3R5cGUgIT0gSVBfVlNfQ09OTl9GX1RVTk5FTF9UWVBFX0lQSVApXG4xODI0Olx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE4MjU6XHRcdFx0b2Zmc2V0ICYjNDM7PSBjaWgtXHUwMDNlaWhsICogNDtcbjE4MjY6XHRcdFx0Y2loID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2NpcGgpLCBcdTAwMjZfY2lwaCk7XG4xODI3Olx0XHRcdGlmIChjaWggPT0gTlVMTClcbjE4Mjg6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cbjE4Mjk6XHRcdFx0dHVubmVsID0gdHJ1ZTtcbjE4MzA6XHRcdH0gZWxzZSBpZiAoKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xuMTgzMTpcdFx0XHQgICAgY2loLVx1MDAzZXByb3RvY29sID09IElQUFJPVE9fR1JFKSBcdTAwMjZcdTAwMjZcdC8qIENhbiBiZSBHUkUgZW5jYXAgKi9cbjE4MzI6XHRcdFx0ICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cbjE4MzM6XHRcdFx0ICAgKHNrYl9ydGFibGUoc2tiKS1cdTAwM2VydF9mbGFncyBcdTAwMjYgUlRDRl9MT0NBTCkpIHtcbjE4MzQ6XHRcdFx0X191OCBpcHJvdG87XG4xODM1Olx0XG4xODM2Olx0XHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbjE4Mzc6XHRcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG4xODM4Olx0XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjE4Mzk6XHRcdFx0b2Zmc2V0MiA9IG9mZnNldCAmIzQzOyBjaWgtXHUwMDNlaWhsICogNDtcbjE4NDA6XHRcdFx0aWYgKGNpaC1cdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xuMTg0MTpcdFx0XHRcdHVsZW4gPSBpcHZzX3VkcF9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXG4xODQyOlx0XHRcdFx0XHRcdCAgICAgIHJhZGRyLCBcdTAwMjZpcHJvdG8pO1xuMTg0MzpcdFx0XHRcdG91dGVyX3Byb3RvID0gXCYjMzQ7VURQXCYjMzQ7O1xuMTg0NDpcdFx0XHR9IGVsc2Uge1xuMTg0NTpcdFx0XHRcdHVsZW4gPSBpcHZzX2dyZV9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXG4xODQ2Olx0XHRcdFx0XHRcdCAgICAgIHJhZGRyLCBcdTAwMjZpcHJvdG8pO1xuMTg0NzpcdFx0XHRcdG91dGVyX3Byb3RvID0gXCYjMzQ7R1JFXCYjMzQ7O1xuMTg0ODpcdFx0XHR9XG4xODQ5Olx0XHRcdGlmICh1bGVuIFx1MDAzZSAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA3NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgbW9kaWZpZXMgdGhlIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbi4gVGhlIGNvZGUgc2VlbXMgZnVuY3Rpb25hbCwgYW5kIHRoZSBjb25maWcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlIGlzIGBJUF9WU2AuIE15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIHNvIEkgd2FudCB0byBleHBsb3JlIGl0IGluIGRlcHRoLgoKRmlyc3QsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSG1tLCBub3BlLCBpdCYjMzk7cyBqdXN0IGBpcF92c19pbl9pY21wYC4gQWxyaWdodCwgbGV0IG1lIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlIGl0c2VsZi4gQWgsIHRoaXMgaXMgZml4aW5nIHRoZSBNVFUgY2FsY3VsYXRpb24gZm9yIElDTVAgcGFja2V0cyB0aGF0IGFyZSB0dW5uZWxlZCB0aHJvdWdoIElQVlMuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGEgYHVsZW5gIHZhcmlhYmxlIHRvIGFkanVzdCB0aGUgTVRVIGNhbGN1bGF0aW9uIGFuZCBhZGRyZXNzIGFuIE1UVSBjYWxjdWxhdGlvbiBpc3N1ZSB0aGF0IG9jY3VycyB3aXRoIFVEUCBvciBHUkUgZW5jYXBzdWxhdGVkIHBhY2tldHMuIFRoaXMgdHlwZSBvZiBmaXggaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gdGhvcm91Z2ggZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIGFuZCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gQW5kIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBpcF92c19pbl9pY21wYCBpcyBjYWxsZWQgYnkgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gQm90aCBvZiB0aGVzZSBhcmUgbmV0ZmlsdGVyIGhvb2tzLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHQuIFRoaXMgbWFrZXMgYGlwX3ZzX2luX2ljbXBgIGEgc29saWQgY2hvaWNlIGZvciBmb2N1c2VkIGFuYWx5c2lzLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIGBJUF9WU2AgaXMgdGhlIG9ubHkgY29uZmlnIGhlcmUuIERvZXMgdGhpcyBpbnZvbHZlIGFueSBJUFZTIFVEUCBvciBHUkUgdHVubmVsaW5nPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBhcyBgaXB2c191ZHBfZGVjYXBgIGFuZCBgaXB2c19ncmVfZGVjYXBgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGFuYWx5c2lzLiBHb29kLCBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdnNfdWRwX2RlY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE2NDQ9aXBfdnNfdHJ5X3RvX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY3OTpzdGF0aWMgaW50IGlwdnNfdWRwX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVx0XHRcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTg0MTpcdFx0XHR1bGVuID0gaXB2c191ZHBfZGVjYXAoaXB2cywgc2tiLCBvZmZzZXQyLCBBRl9JTkVULFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVx0XHRcdFx0XHQgICAgICByYWRkciwgXHUwMDI2aXByb3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0IHVuZGVyc3RhbmRpbmc6CgoqKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgVURQL0dSRSBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhlcmUgYXJlIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBzeXN0ZW0gdGhhdCBhcmUgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIFVEUCBvciBHUkUgKEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uKSB0dW5uZWxpbmcuIEkga25vdyB0aGUgYmFzaWNzLCBidXQgSSBuZWVkIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21lIG51YW5jZSBvciBhIHNwZWNpYWxpemVkIHNldHRpbmcgdGhhdCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IgaW4gYSB0dW5uZWxpbmcgc2NlbmFyaW8uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcXVpY2tseSBzY2FubmluZyB0aGUgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbiBhbmQgbWF5YmUgc29tZSBsZXNzIG9idmlvdXMgc291cmNlc+KAlHBlcmhhcHMgc29tZSBmb3J1bSBkaXNjdXNzaW9ucyBvciBleHBlcmltZW50YWwgY29uZmlndXJhdGlvbnPigJR0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IElQVlMtc3BlY2lmaWMgdHVuaW5nIHJlcXVpcmVkIHdoZW4gdGhlc2UgcHJvdG9jb2xzIGFyZSBpbnZvbHZlZC4gSXTigJlzIGFib3V0IGJlaW5nIHRob3JvdWdoIGFuZCBtYWtpbmcgc3VyZSB0aGUgc29sdXRpb24gaXMgb3B0aW1hbCwgbm90IGp1c3QgZnVuY3Rpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJiMzOTtJUFZTIFNIIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXHRpbnQgXCYjMzQ7SVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJiMzOTtJUFZTIE1IIHNjaGVkdWxlciYjMzk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVx0aW50IFwmIzM0O0lQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBJUFZTIFR1bm5lbGluZyBPcHRpb25zKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBJUFZTIGhhbmRsZXMgdHVubmVsaW5nIHByb3RvY29scy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHR1bm5lbGluZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGVudGlyZSBmaWxlIGZvciBhbnkgbWVudGlvbnMgb2YgYFRVTk5FTGAsIGBHUkVgLCBvciBgVURQYCBrZXl3b3Jkcy4gVGhpcyB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IGFueSByZWxldmFudCBjb25maWd1cmF0aW9ucywgbW9kdWxlIGRlcGVuZGVuY2llcywgb3IgZmVhdHVyZSBmbGFncyB0aWVkIHRvIHRoZXNlIHR1bm5lbGluZyB0ZWNobm9sb2dpZXMgd2l0aGluIHRoZSBJUFZTIGNvbnRleHQuIEl0JiMzOTtzIGEgcXVpY2sgYW5kIGRpcnR5LCBidXQgZWZmZWN0aXZlLCB3YXkgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBiZWZvcmUgYW55IGRlZXBlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFVOTkVMfEdSRXxVRFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz03OT1jb25maWdcdElQX1ZTX1BST1RPX1RDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTg0LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODU6Y29uZmlnXHRJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg2Olx0Ym9vbCBcJiMzNDtVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctODctXHRoZWxwXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4ODpcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBsb2FkIGJhbGFuY2luZyBVRFAgdHJhbnNwb3J0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04OS1cdCAgcHJvdG9jb2wuIFNheSBZIGlmIHVuc3VyZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXHRJUF9WU19QRV9TSVBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0Ni1cdHRyaXN0YXRlIFwmIzM0O1NJUCBwZXJzaXN0ZW5jZSBlbmdpbmVcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcdGRlcGVuZHMgb24gSVBfVlNfUFJPVE9fVURQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDgtXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUyMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVRFAgTG9hZCBCYWxhbmNpbmcgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYElQX1ZTX1BST1RPX1VEUGAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBmb3IgVURQIGxvYWQgYmFsYW5jaW5nLCBnb3QgaXQuJiMzNDsgQnV0IHRoZW4gSSByZW1lbWJlciB0aGF0IGBpcHZzX3VkcF9kZWNhcGAgaXMgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gYGlwX3ZzX2NvcmUuY2AuIEFuZCB0aGF0IGZpbGUgZ2V0cyBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaWYgYElQX1ZTYCBpcyBlbmFibGVkLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCAqZG8qIEkgZXZlbiBuZWVkIGBJUF9WU19QUk9UT19VRFBgIGZvciB0aGUgdHVubmVsaW5nIGl0c2VsZiwgb3IgaXMgaXQganVzdCBmb3IgdGhlIGxvYWQgYmFsYW5jaW5nIGFzcGVjdD8gSXQmIzM5O3MgZWFzeSB0byBnZXQgY29uZnVzZWQgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KCkkgdGhpbmsgdG8gYmUgY29tcGxldGVseSBzYWZlLCBJJiMzOTtsbCBqdXN0IGdvIGFoZWFkIGFuZCBpbmNsdWRlIGJvdGggYElQX1ZTYCBhbmQgYElQX1ZTX1BST1RPX1VEUGAuIEJ1dCB3YWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2s6IEkmIzM5O20gcHJldHR5IHN1cmUgYGlwdnNfdWRwX2RlY2FwYCBpc24mIzM5O3QgY29uZGl0aW9uYWwgb24gYENPTkZJR19JUF9WU19QUk9UT19VRFBgLCBhbmQgc2luY2UgaXQmIzM5O3MgZGVmaW5lZCBpbiBgaXBfdnNfY29yZS5jYCwgYW5kIHRoYXQmIzM5O3MgZW5hYmxlZCB3aXRoIGBJUF9WU2AsIGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDEyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdnNfdWRwX2RlY2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE2NDQ9aXBfdnNfdHJ5X3RvX3NjaGVkdWxlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTY3OTpzdGF0aWMgaW50IGlwdnNfdWRwX2RlY2FwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVx0XHRcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXHRcdGlmIChjaWgtXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MTg0MTpcdFx0XHR1bGVuID0gaXB2c191ZHBfZGVjYXAoaXB2cywgc2tiLCBvZmZzZXQyLCBBRl9JTkVULFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVx0XHRcdFx0XHQgICAgICByYWRkciwgXHUwMDI2aXByb3RvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMTUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBpcF92c19jb3JlLmNgIGFuZCBgaXB2c191ZHBfZGVjYXBgKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgaXB2c191ZHBfZGVjYXBgIGluIGBpcF92c19jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hhdCBpdCYjMzk7cyBkb2luZywgYW5kIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGguJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFAgZGVjYXBzdWxhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGlzIHdoZXJlIHdlJiMzOTtyZSBwZWVsaW5nIG9mZiB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXJzIGZvciBVRFAgdHJhZmZpYyBkZXN0aW5lZCBmb3IgVmlydHVhbCBTZXJ2ZXJzLiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IGlzIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCBwYXNzZWQgb250byB0aGUgUmVhbCBTZXJ2ZXIuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgcmVsYXRlcyB0byBjb25uZWN0aW9uIHRyYWNraW5nIG9yIGxvYWQgYmFsYW5jaW5nIGRlY2lzaW9ucyBhdCB0aGlzIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgZXJyb3IgaGFuZGxpbmcgcmVsYXRlZCB0byBtYWxmb3JtZWQgcGFja2V0cyBvciB1bmV4cGVjdGVkIFVEUCBoZWFkZXIgY29uZmlndXJhdGlvbnMuIEFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIHNob3VsZCBhbHNvIGJlIGtlcHQgaW4gbWluZCwgYXMgaW1wcm9wZXIgaGFuZGxpbmcgb2YgZW5jYXBzdWxhdGVkIHRyYWZmaWMgY2FuIHNvbWV0aW1lcyBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjcwOlx0XG4xNjcxOlx0XHRcdCp2ZXJkaWN0ID0gTkZfQUNDRVBUO1xuMTY3MjpcdFx0XHRyZXR1cm4gMDtcbjE2NzM6XHRcdH1cbjE2NzQ6XHRcbjE2NzU6XHRcdHJldHVybiAxO1xuMTY3NjpcdH1cbjE2Nzc6XHRcbjE2Nzg6XHQvKiBDaGVjayB0aGUgVURQIHR1bm5lbCBhbmQgcmV0dXJuIGl0cyBoZWFkZXIgbGVuZ3RoICovXG4xNjc5Olx0c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjE2ODA6XHRcdFx0XHQgIHVuc2lnbmVkIGludCBvZmZzZXQsIF9fdTE2IGFmLFxuMTY4MTpcdFx0XHRcdCAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwgX191OCAqcHJvdG8pXG4xNjgyOlx0e1xuMTY4MzpcdFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVkcGg7XG4xNjg0Olx0XHRzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDtcbjE2ODU6XHRcbjE2ODY6XHRcdHVkcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfdWRwaCksIFx1MDAyNl91ZHBoKTtcbjE2ODc6XHRcdGlmICghdWRwaClcbjE2ODg6XHRcdFx0Z290byB1bms7XG4xNjg5Olx0XHRvZmZzZXQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGBpcF92c19pbl9pY21wYCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gU2luY2UgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBnYXRlZCBieSBhbnkgYCNpZmRlZmAgc3RhdGVtZW50cywgSSBjYW4gYXNzdW1lIHRoYXQgYElQX1ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbiBoZXJlLCBhcyBpdCBlbmFibGVzIElQVlMgZnVuY3Rpb25hbGl0eSBvdmVyYWxsLiBJIHNob3VsZCBzdGlsbCB2ZXJpZnkgdGhhdC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaWYgYElQX1ZTX0lQVjZgIGlzIHJlbGV2YW50LCBidXQgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gbmFtZSwgYGlwX3ZzX2luX2ljbXBgLCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIHRoZSBJUHY0IHZlcnNpb24uIE5vdywgdGhlIG1haW4gY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgaXBfdnNfaW5faWNtcGAsIGFuZCBpdCBsb29rcyBsaWtlIGEgZml4IHJlbGF0ZWQgdG8gTVRVIGNhbGN1bGF0aW9ucyBpbiB0dW5uZWxlZCBJQ01QIHBhY2tldHMsIGFuZCBjb3JyZWN0bHkgYWNjb3VudGluZyBmb3IgdGhlIGhlYWRlciBsZW5ndGggb2YgdGhlIHR1bm5lbGluZyBwcm90b2NvbHMuCgpPa2F5LCBsZXQgbWUgZ28gb3ZlciB0aGUgZGV0YWlscy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBmb3IgSUNNUCBwYWNrZXRzIHR1bm5lbGVkIG92ZXIgdmFyaW91cyBwcm90b2NvbHMgKGxpa2VseSBHUkUgb3IgVURQIGVuY2Fwc3VsYXRlZCkuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB1bGVuO2AsIGFuZCB0aGlzIGNoYW5nZSB3aWxsIGFmZmVjdCB0aGUgY29yZSBJUFZTIGxvZ2ljLgoKTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhhdCBgSVBfVlNgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gV2hpbGUgSVBWUyBjb3ZlcnMgdGhlIGNvcmUgZnVuY3Rpb25zLCBjb3VsZCBpdCBuZWVkIHNvbWV0aGluZyBzcGVjaWZpYyBmb3IsIHNheSwgVURQIG9yIEdSRSB0dW5uZWxpbmc/IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYElQX1ZTX1BST1RPX1VEUGAgb3IgYElQX1ZTX1BST1RPX0dSRWAuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgcmVmZXJlbmNlcyB0byBHUkUsIGFzIHRoYXQmIzM5O3MgYSBjb21tb24gdHVubmVsaW5nIHByb3RvY29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1BST1RPX0dSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwNDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipRdWljayBJUFZTIEJ1ZyBDaGVjayoqCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gKm5vKi4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtObywgd2UgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgYW55dGhpbmcgYmV5b25kIGBJUF9WU2AgZm9yIHRoaXMgc3BlY2lmaWMgaXNzdWUuJiMzNDsgU28gdGhlIGNyaXRpY2FsIGZhY3RvciBoZXJlIGlzIHNpbXBseSBgSVBfVlNgLiBJJiMzOTt2ZSBhbHJlYWR5IG1hZGUgdGhlIGRlY2lzaW9uLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGxldCYjMzk7cyBkbyBhIGZhc3QgdmVyaWZpY2F0aW9uLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYGlwX3ZzX2luX2ljbXBfdjZgIG1vZHVsZS4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIGl0IGV4aGliaXRzIHRoZSBzYW1lIGJlaGF2aW9yIG9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJdCYjMzk7cyBhYm91dCBhIHF1aWNrIGNyb3NzLWNoZWNrIHRvIHNvbGlkaWZ5IG15IGN1cnJlbnQgYXNzdW1wdGlvbiBhbmQgYXZvaWQgYW55IG92ZXJzaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfdnNfaW5faWNtcF92NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzgtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5Nzk6c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xOTgwLVx0XHRcdCAgICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzUtXHRcdFx0aW50IHJlbGF0ZWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMzY6XHRcdFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KGlwdnMsIHNrYiwgXHUwMDI2cmVsYXRlZCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNy1cdFx0XHRcdFx0XHQgICAgICAgaG9va251bSwgXHUwMDI2aXBoKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIyNzk9aXBfdnNfZm9yd2FyZF9pY21wKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzAxOlx0XHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFx1MDAyNnIsIHN0YXRlLVx1MDAzZWhvb2ssIFx1MDAyNmlwaGRyKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBJUHY2IElDTVB2NiBJbnB1dCBGaWx0ZXJpbmcgQ29kZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgSUNNUHY2IGlucHV0IHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgcmVsYXRlZCBmaWx0ZXJpbmcuIEkmIzM5O20gZ29pbmcgdG8gZ3JhYiB0aGUgc291cmNlIGNvZGUgZm9yIGBpcF92c19pbl9pY21wX3Y2YC4gVGhlIGtleSB0aGluZyBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaXMgdGhlIHByZXNlbmNlIG9mIGB1bGVuYC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggSVB2NCBhbmQgSVB2NiwgdGhlIGB1bGVuYCBmaWVsZCBvciBzaW1pbGFyIGNvbnN0cnVjdCwgaXMgYSBjcml0aWNhbCBwaWVjZSB3aGVuIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSUNNUCBoYW5kbGluZy4gSXQmIzM5O3Mgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIGZpbHRlcmluZyBsb2dpYy4gQ2hlY2tpbmcgdGhhdCBxdWlja2x5IHdpbGwgZ2l2ZSBtZSBhIHZhbHVhYmxlIGRhdGEgcG9pbnQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBiZSBtYWRlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSB0byBjb25maXJtIGlmIGl0IGhhcyB0aGlzIGF0dHJpYnV0ZSBvciBlcXVpdmFsZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTc5Olx0c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMTk4MDpcdFx0XHRcdCAgICBpbnQgKnJlbGF0ZWQsIHVuc2lnbmVkIGludCBob29rbnVtLFxuMTk4MTpcdFx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaClcbjE5ODI6XHR7XG4xOTgzOlx0XHRzdHJ1Y3QgaWNtcDZoZHJcdF9pY21waCwgKmljO1xuMTk4NDpcdFx0c3RydWN0IGlwX3ZzX2lwaGRyIGNpcGggPSB7LmZsYWdzID0gMCwgLmZyYWdvZmZzID0gMH07LypDb250YWluZWQgSVAgKi9cbjE5ODU6XHRcdHN0cnVjdCBpcF92c19jb25uICpjcDtcbjE5ODY6XHRcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4xOTg3Olx0XHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XG4xOTg4Olx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCB2ZXJkaWN0O1xuMTk4OTpcdFx0Ym9vbCBuZXdfY3AgPSBmYWxzZTtcbjE5OTA6XHRcbjE5OTE6XHRcdCpyZWxhdGVkID0gMTtcbjE5OTI6XHRcbjE5OTM6XHRcdGljID0gZnJhZ19zYWZlX3NrYl9ocChza2IsIGlwaC1cdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcdTAwMjZfaWNtcGgpO1xuMTk5NDpcdFx0aWYgKGljID09IE5VTEwpXG4xOTk1Olx0XHRcdHJldHVybiBORl9EUk9QO1xuMTk5NjpcdFxuMTk5NzpcdFx0LypcbjE5OTg6XHRcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXG4xOTk5Olx0XHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxuMjAwMDpcdFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcbjIwMDE6XHRcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcbjIwMDI6XHRcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQmIzM5O3MgbGlmZS5cbjIwMDM6XHRcdCAqL1xuMjAwNDpcdFx0aWYgKGljLVx1MDAzZWljbXA2X3R5cGUgXHUwMDI2IElDTVBWNl9JTkZPTVNHX01BU0spIHtcbjIwMDU6XHRcdFx0KnJlbGF0ZWQgPSAwO1xuMjAwNjpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjAwNzpcdFx0fVxuMjAwODpcdFx0LyogRnJhZ21lbnQgaGVhZGVyIHRoYXQgaXMgYmVmb3JlIElDTVAgaGVhZGVyIHRlbGxzIHVzIHRoYXQ6XG4yMDA5Olx0XHQgKiBpdCYjMzk7cyBub3QgYW4gZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGV5IGNhbiYjMzk7dCBiZSBmcmFnbWVudGVkLlxuMjAxMDpcdFx0ICovXG4yMDExOlx0XHRpZiAoaXBoLVx1MDAzZWZsYWdzIFx1MDAyNiBJUDZfRkhfRl9GUkFHKVxuMjAxMjpcdFx0XHRyZXR1cm4gTkZfRFJPUDtcbjIwMTM6XHRcbjIwMTQ6XHRcdElQX1ZTX0RCRyg4LCBcJiMzNDtJbmNvbWluZyBJQ01QdjYgKCVkLCVkKSAlcEk2Yy1cdTAwM2UlcEk2Y1xcblwmIzM0OyxcbjIwMTU6XHRcdFx0ICBpYy1cdTAwM2VpY21wNl90eXBlLCBudG9ocyhpY21wdjZfaWQoaWMpKSxcbjIwMTY6XHRcdFx0ICBcdTAwMjZpcGgtXHUwMDNlc2FkZHIsIFx1MDAyNmlwaC1cdTAwM2VkYWRkcik7XG4yMDE3Olx0XG4yMDE4Olx0XHRvZmZzZXQgPSBpcGgtXHUwMDNlbGVuICYjNDM7IHNpemVvZihfaWNtcGgpO1xuMjAxOTpcdFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVUNiwgc2tiLCBvZmZzZXQsIHRydWUsIFx1MDAyNmNpcGgpKVxuMjAyMDpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjAyMTpcdFxuMjAyMjpcdFx0cGQgPSBpcF92c19wcm90b19kYXRhX2dldChpcHZzLCBjaXBoLnByb3RvY29sKTtcbjIwMjM6XHRcdGlmICghcGQpXG4yMDI0Olx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4yMDI1Olx0XHRwcCA9IHBkLVx1MDAzZXBwO1xuMjAyNjpcdFxuMjAyNzpcdFx0LyogQ2Fubm90IGhhbmRsZSBmcmFnbWVudGVkIGVtYmVkZGVkIHByb3RvY29sICovXG4yMDI4Olx0XHRpZiAoY2lwaC5mcmFnb2ZmcylcbjIwMjk6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbjIwMzA6XHRcbjIwMzE6XHRcdElQX1ZTX0RCR19QS1QoMTEsIEFGX0lORVQ2LCBwcCwgc2tiLCBvZmZzZXQsXG4yMDMyOlx0XHRcdCAgICAgIFwmIzM0O0NoZWNraW5nIGluY29taW5nIElDTVB2NiBmb3JcJiMzNDspO1xuMjAzMzpcdFxuMjAzNDpcdFx0LyogVGhlIGVtYmVkZGVkIGhlYWRlcnMgY29udGFpbiBzb3VyY2UgYW5kIGRlc3QgaW4gcmV2ZXJzZSBvcmRlclxuMjAzNTpcdFx0ICogaWYgbm90IGZyb20gbG9jYWxob3N0XG4yMDM2Olx0XHQgKi9cbjIwMzc6XHRcdGNwID0gSU5ESVJFQ1RfQ0FMTF8xKHBwLVx1MDAzZWNvbm5faW5fZ2V0LCBpcF92c19jb25uX2luX2dldF9wcm90byxcbjIwMzg6XHRcdFx0XHQgICAgIGlwdnMsIEFGX0lORVQ2LCBza2IsIFx1MDAyNmNpcGgpO1xuMjAzOTpcdFxuMjA0MDpcdFx0aWYgKCFjcCkge1xuMjA0MTpcdFx0XHRpbnQgdjtcbjIwNDI6XHRcbjIwNDM6XHRcdFx0aWYgKCFzeXNjdGxfc2NoZWR1bGVfaWNtcChpcHZzKSlcbjIwNDQ6XHRcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuMjA0NTpcdFxuMjA0NjpcdFx0XHRpZiAoIWlwX3ZzX3RyeV90b19zY2hlZHVsZShpcHZzLCBBRl9JTkVUNiwgc2tiLCBwZCwgXHUwMDI2diwgXHUwMDI2Y3AsIFx1MDAyNmNpcGgpKVxuMjA0NzpcdFx0XHRcdHJldHVybiB2O1xuMjA0ODpcdFxuMjA0OTpcdFx0XHRuZXdfY3AgPSB0cnVlO1xuMjA1MDpcdFx0fVxuMjA1MTpcdFxuMjA1MjpcdFx0LyogVlMvVFVOLCBWUy9EUiBhbmQgTE9DQUxOT0RFIGp1c3QgbGV0IGl0IGdvICovXG4yMDUzOlx0XHRpZiAoKGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9PVVQpIFx1MDAyNlx1MDAyNlxuMjA1NDpcdFx0ICAgIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSBJUF9WU19DT05OX0ZfTUFTUSkpIHtcbjIwNTU6XHRcdFx0dmVyZGljdCA9IE5GX0FDQ0VQVDtcbjIwNTY6XHRcdFx0Z290byBvdXQ7XG4yMDU3Olx0XHR9XG4yMDU4Olx0XG4yMDU5Olx0XHQvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi9cbjIwNjA6XHRcdGlwX3ZzX2luX3N0YXRzKGNwLCBza2IpO1xuMjA2MTpcdFxuMjA2MjpcdFx0LyogTmVlZCB0byBtYW5nbGUgY29udGFpbmVkIElQdjYgaGVhZGVyIGluIElDTVB2NiBwYWNrZXQgKi9cbjIwNjM6XHRcdG9mZnNldCA9IGNpcGgubGVuO1xuMjA2NDpcdFx0aWYgKElQUFJPVE9fVENQID09IGNpcGgucHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC5wcm90b2NvbCB8fFxuMjA2NTpcdFx0ICAgIElQUFJPVE9fU0NUUCA9PSBjaXBoLnByb3RvY29sKVxuMjA2NjpcdFx0XHRvZmZzZXQgJiM0Mzs9IDIgKiBzaXplb2YoX191MTYpOyAvKiBBbHNvIG1hbmdsZSBwb3J0cyAqL1xuMjA2NzpcdFxuMjA2ODpcdFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcdTAwMjZjaXBoKTtcbjIwNjk6XHRcbjIwNzA6XHRvdXQ6XG4yMDcxOlx0XHRpZiAobGlrZWx5KCFuZXdfY3ApKVxuMjA3MjpcdFx0XHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcbjIwNzM6XHRcdGVsc2VcbjIwNzQ6XHRcdFx0aXBfdnNfY29ubl9wdXQoY3ApO1xuMjA3NTpcdFxuMjA3NjpcdFx0cmV0dXJuIHZlcmRpY3Q7XG4yMDc3Olx0fVxuMjA3ODpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY2MQoJCQkJCQkJb3V0cHV0OiA4NQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBJQ01QdjYgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgaXBfdnNfaW5faWNtcF92NmAgaXNuJiMzOTt0IGludm9sdmVkIGF0IGFsbC4gVGhlIHR1bm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBNVFUgY2FsY3VsYXRpb25zIGZvciBlbmNhcHN1bGF0ZWQgSUNNUCBwYWNrZXRzLCBpc24mIzM5O3QgcHJlc2VudCBpbiB0aGUgSVB2NiBpbXBsZW1lbnRhdGlvbiBvZiBJQ01QIHByb2Nlc3Npbmcgd2l0aGluIElQVlMuIFRoZXJlZm9yZSwgdGhlIGZpeCBpcyBleGNsdXNpdmVseSBmb3IgSVB2NCB0cmFmZmljLiBUaGUgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUgaXMgYElQX1ZTYCwgb2YgY291cnNlLiBNeSBmb2N1cyBpcyBuYXJyb3dlZCBkb3duIHRvIGBpcF92c19pbl9pY21wYCwgdGhlIGZ1bmN0aW9uIGluIHF1ZXN0aW9uLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBjcnVjaWFsIE1UVSBjYWxjdWxhdGlvbiBpc3N1ZSB3aXRoaW4gSVBWUy4gSXQmIzM5O3MgYWJvdXQgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBvdmVyaGVhZCBpbnRyb2R1Y2VkIGJ5IFVEUCBvciBHUkUgdHVubmVscyB3aGVuIGhhbmRsaW5nIElDTVAgcGFja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgcGFydCBvZiB0aGUgcmVhY2hhYmxlIGxvZ2ljIHdpdGhpbiBJUFZTLCBzbyB0aGF0JiMzOTtzIHdoeSBpdCYjMzk7cyBiZWVuIGlkZW50aWZpZWQgYXMgaW1wb3J0YW50LiBSaWdodCwgSSB0aGluayB0aGlzIGxvb2tzIGdvb2QuIEkmIzM5O2xsIGdldCB0aGlzIHNldC1yZXN1bHQgbG9nZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19pbl9pY21wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjQ0LjMxNDAzMDU4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjg4OTIzMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDQuMzE0MDM2NDM4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI1NzE3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTI6NDY6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5pbmRleCBkNDBiNDA0YzFiZjY0Ni4uOTA2ZjJjMzYxNjc2MzggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcXG5AQCAtMTc2Nyw2ICsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbiBcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuIFxcdHVuaW9uIG5mX2luZXRfYWRkciAqcmFkZHI7XFxuIFxcdGNoYXIgKm91dGVyX3Byb3RvID0gXFxcIklQSVBcXFwiO1xcbitcXHRpbnQgdWxlbiA9IDA7XFxuIFxcbiBcXHQqcmVsYXRlZCA9IDE7XFxuIFxcbkBAIC0xODMxLDcgKzE4MzIsNiBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdCAgIC8qIEVycm9yIGZvciBvdXIgdHVubmVsIG11c3QgYXJyaXZlIGF0IExPQ0FMX0lOICovXFxuIFxcdFxcdCAgIChza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpIHtcXG4gXFx0XFx0X191OCBpcHJvdG87XFxuLVxcdFxcdGludCB1bGVuO1xcbiBcXG4gXFx0XFx0LyogTm9uLWZpcnN0IGZyYWdtZW50IGhhcyBubyBVRFAvR1JFIGhlYWRlciAqL1xcbiBcXHRcXHRpZiAodW5saWtlbHkoY2loLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpKVxcbkBAIC0xOTM2LDggKzE5MzYsOCBAQCBpcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuIFxcdFxcdFxcdFxcdGlmIChkZXN0X2RzdClcXG4gXFx0XFx0XFx0XFx0XFx0bXR1ID0gZHN0X210dShkZXN0X2RzdC1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAobXR1IFxcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSlcXG4tXFx0XFx0XFx0XFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbitcXHRcXHRcXHRpZiAobXR1IFxcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW4pXFxuK1xcdFxcdFxcdFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW47XFxuIFxcdFxcdFxcdGluZm8gPSBodG9ubChtdHUpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIFN0cmlwIG91dGVyIElQLCBJQ01QIGFuZCBJUElQL1VEUC9HUkUsIGdvIHRvIElQIGhlYWRlciBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo0NC42MjczNjM2MzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzc1NTgxNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMDhlY2FjZDIzMWI3ZjZiOGExNjE4ZTE1MjBjZTBhOTYzZjEzYzkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxMjo0Njo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5pbmRleCBkNDBiNDA0YzFiZjY0Ni4uOTA2ZjJjMzYxNjc2MzggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXG5AQCAtMTc2Nyw2ICsxNzY3LDcgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0Ym9vbCB0dW5uZWwsIG5ld19jcCA9IGZhbHNlO1xuIFx0dW5pb24gbmZfaW5ldF9hZGRyICpyYWRkcjtcbiBcdGNoYXIgKm91dGVyX3Byb3RvID0gXCJJUElQXCI7XG4rXHRpbnQgdWxlbiA9IDA7XG4gXG4gXHQqcmVsYXRlZCA9IDE7XG4gXG5AQCAtMTgzMSw3ICsxODMyLDYgQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHQgICAvKiBFcnJvciBmb3Igb3VyIHR1bm5lbCBtdXN0IGFycml2ZSBhdCBMT0NBTF9JTiAqL1xuIFx0XHQgICAoc2tiX3J0YWJsZShza2IpLVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSkge1xuIFx0XHRfX3U4IGlwcm90bztcbi1cdFx0aW50IHVsZW47XG4gXG4gXHRcdC8qIE5vbi1maXJzdCBmcmFnbWVudCBoYXMgbm8gVURQL0dSRSBoZWFkZXIgKi9cbiBcdFx0aWYgKHVubGlrZWx5KGNpaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXG5AQCAtMTkzNiw4ICsxOTM2LDggQEAgaXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxuIFx0XHRcdFx0aWYgKGRlc3RfZHN0KVxuIFx0XHRcdFx0XHRtdHUgPSBkc3RfbXR1KGRlc3RfZHN0LVx1MDAzZWRzdF9jYWNoZSk7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChtdHUgXHUwMDNlIDY4ICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpXG4tXHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4rXHRcdFx0aWYgKG10dSBcdTAwM2UgNjggKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW4pXG4rXHRcdFx0XHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB1bGVuO1xuIFx0XHRcdGluZm8gPSBodG9ubChtdHUpO1xuIFx0XHR9XG4gXHRcdC8qIFN0cmlwIG91dGVyIElQLCBJQ01QIGFuZCBJUElQL1VEUC9HUkUsIGdvIHRvIElQIGhlYWRlciBvZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDQuNjI3MzY0ODY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTk0MTY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgSUNNUCBNVFUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY2AgYW5kIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byBgaXBfdnNfaW5faWNtcGAuICBJdCBsb29rcyBsaWtlIGEgc2ltcGxlIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgTVRVIGNhbGN1bGF0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyB0byBiZSBjYXV0aW91cyBhYm91dCwgZXNwZWNpYWxseSBpbiBhIG5ldHdvcmsgY29udGV4dC4gVGhpcyBwYXRjaCBhcHBlYXJzIHRvIG1vZGlmeSB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHN1YnRyYWN0ZWQgYHNpemVvZihzdHJ1Y3QgaXBoZHIpYCBmcm9tIHRoZSBNVFUgaWYgaXQgd2FzIGxhcmdlIGVub3VnaC4gTm93LCBpdCdzIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW5gLCB3aGVyZSBgdWxlbmAgaXMgbW92ZWQgYW5kIGluaXRpYWxpemVkIHRvIHplcm8gYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgaW5kaWNhdGVzIGl0J3MgZml4aW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBlcnJvciwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgSUNNUCBwYXlsb2FkIGxlbmd0aCwgYXMgdWxlbiBzZWVtcyByZWxhdGVkIHRvIHRoZSBzaXplLlxuXG5UaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBzdHJhaWdodGZvcndhcmQ7IHRoZSBpc3N1ZSBpcyBzdWJ0bGUuIFRoaXMgaXMgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24gaXNzdWVzIG9yLCB3b3JzZSwgaGFyZC10by1kaWFnbm9zZSBjb25uZWN0aW9uIHByb2JsZW1zIHVuZGVyIHNwZWNpZmljIG5ldHdvcmsgY29uZGl0aW9ucy4gSXQncyBlYXN5IHRvIG1pc3MgYSBzZWVtaW5nbHkgbWlub3IgaW50ZWdlciBvdmVyZmxvdy4gSSdtIG5vdGluZyB0aGF0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGlzIG5lZWRzIHRvIGJlIGZ1enplZCB0aG9yb3VnaGx5LiBNVFUtcmVsYXRlZCBpc3N1ZXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcgY2FtcGFpZ25zLCBhbmQgSVBWUyBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgbG9hZCBiYWxhbmNpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciByZWdyZXNzaW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIHN1cnJvdW5kaW5nIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiBhbmQgYW55IHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYCBmb3IgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb3IgcmVsYXRlZCBjYWxjdWxhdGlvbnMuIEFuZCwgbGV0IG1lIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBjdXJyZW50IElQVlMgY29uZmlndXJhdGlvbiwgb3IgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCBNVFUgaXMgcHJvcGVybHkgc2V0LiBUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDY6NDkuOTAzMzA4MjE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1ODQ2NDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX2NvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlPTE0PWlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgKz0gaXBfdnNfbmZjdC5vXFxubmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlLTE1LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZToxNjppcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZS0xNy1cXHRcXHRpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vXFx0ICAgXFx0XFx0ICAgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo0OS45NTkxNTk3NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY0ODE4Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBJUCBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgZm9jdXMgaGVyZSBpcyBgQ09ORklHX0lQX1ZTYC4gVGhhdCdzIHRoZSBrZXkgZW5hYmxpbmcgb3B0aW9uIGZvciBJUCBWaXJ0dWFsIFNlcnZlciBmdW5jdGlvbmFsaXR5IGluIHRoZSBMaW51eCBrZXJuZWwuIE15IG5leHQgc3RlcCwgYmFzZWQgb24gdGhhdCwgaXMgdG8gaW1tZWRpYXRlbHkgZGl2ZSBpbnRvIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IElDTVAgdHJhZmZpYyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgSVBWUyBjb3JlLiBJIGtub3cgdGhhdCBmaWxlIGFuZCBmdW5jdGlvbiBsaWtlIHRoZSBiYWNrIG9mIG15IGhhbmQsIHNvIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiB0aGUgaW50ZXJhY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpbmNvbWluZyBJQ01QIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBhbmQgcm91dGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggSUNNUCdzIGJlaGF2aW9yIGluIHJlbGF0aW9uIHRvIElQVlMgYXJlIGFsd2F5cyBhIGNvbmNlcm4sIGFuZCB0aGlzIGBpcF92c19pbl9pY21wYCBmdW5jdGlvbiBpcyBvZnRlbiB0aGUga2V5IHRvIHJlc29sdmluZyBzdWNoIGlzc3Vlcy4gSSB3aWxsIGdvIHRocm91Z2ggdGhlIGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHksIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjUzLjEyMzk4MDM5MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODU2NTc1NjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfaW5faWNtcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1NT1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNzU2OmlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE3NTctXFx0ICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5NzgtI2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxOTc5OnN0YXRpYyBpbnQgaXBfdnNfaW5faWNtcF92NihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE5ODAtXFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTIwODY9aXBfdnNfaW5faG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxMzUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTM2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaG9va251bSwgXFx1MDAyNmlwaCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIxNDUtXFx0XFx0XFx0aW50IHJlbGF0ZWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMTQ2OlxcdFxcdFxcdGludCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChpcHZzLCBza2IsIFxcdTAwMjZyZWxhdGVkLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjE0Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaG9va251bSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzQtICogICAgICBidXQgSUNNUCBkZXN0aW5lZCBmb3IgMC4wLjAuMC8wIGNhbm5vdCBub3QgYmUgZWFzaWx5IG1hcmtlZCBhbmRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzU6ICogICAgICBzZW50IHRvIGlwX3ZzX2luX2ljbXAuIFNvLCBjYXRjaCB0aGVtIGF0IHRoZSBORl9JTkVUX0ZPUldBUkQgY2hhaW5cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzY6ICogICAgICBhbmQgc2VuZCB0aGVtIHRvIGlwX3ZzX2luX2ljbXAuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjc3LSAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMjc5PWlwX3ZzX2ZvcndhcmRfaWNtcCh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjMwMTpcXHRcXHRyZXR1cm4gaXBfdnNfaW5faWNtcF92NihpcHZzLCBza2IsIFxcdTAwMjZyLCBzdGF0ZS1cXHUwMDNlaG9vaywgXFx1MDAyNmlwaGRyKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDItI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDQtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMzA1OlxcdHJldHVybiBpcF92c19pbl9pY21wKGlwdnMsIHNrYiwgXFx1MDAyNnIsIHN0YXRlLVxcdTAwM2Vob29rKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIzMDYtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo1My4zMDk2NDI3NjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxMTQ4NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSUNNUCBIYW5kbGluZyBpbiBJUFZTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24sIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQncyBiZWluZyB1c2VkIGJ5IGJvdGggYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gVGhhdCdzIGdvb2Qg4oCTIGl0IG1lYW5zIHRoZSBjb3JlIElDTVAgcHJvY2Vzc2luZyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYWN0aXZlLiBJJ20gYXNzdW1pbmcgdGhlIGBJUF9WU2AgY29uZmlnIG9wdGlvbiBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUgYmFzZWxpbmUuIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrOiBpcyB0aGVyZSBhbnl0aGluZyAqZWxzZSogdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIHNwZWNpZmljIElDTVAgZnVuY3Rpb25hbGl0eSB0byB3b3JrIGNvcnJlY3RseT8gQXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZyBkZXBlbmRlbmNpZXMgSSBtaWdodCBiZSBtaXNzaW5nPyBUaW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIgaW50byB0aGUgY29uZmlnIG9wdGlvbnMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ2OjU2LjcwMDc5MzY4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ5MTIxOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Njo1Ni43NTcyOTgyODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDc4OTI3OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldGZpbHRlciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBuZXRmaWx0ZXItcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBtaWdodCBiZSBsb2NhdGVkLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3MgYnVyaWVkIGluIG9uZSBvZiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgYXJlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIOKAkyB0aGUgb2J2aW91cyBnZW5lcmFsIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGZpbGUg4oCTIG9yLCBzaW5jZSBJJ20gdmFndWVseSByZW1lbWJlcmluZyBzb21ldGhpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBvciBsb2FkIGJhbGFuY2luZywgcGVyaGFwcyBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHR3byBtb3N0IGxpa2VseSBjYW5kaWRhdGVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRob3NlIGZpbGVzIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJdCdzIGEgYml0IG9mIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBzb21ldGltZXMuIEhvcGVmdWxseSB0aGUgb3B0aW9ucyBhcmUgd2VsbC1kb2N1bWVudGVkIHdpdGhpbiB0aG9zZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjA1LjgzNjIyOTc2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg5MjI5ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjU6bWVudWNvbmZpZyBJUF9WU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIklQIHZpcnR1YWwgc2VydmVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yODY9Y29tbWVudCAnSVBWUyBTSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjI4ODpjb25maWcgSVBfVlNfU0hfVEFCX0JJVFNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODktXFx0aW50IFxcXCJJUFZTIHNvdXJjZSBoYXNoaW5nIHRhYmxlIHNpemUgKHRoZSBOdGggcG93ZXIgb2YgMilcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMDE9Y29tbWVudCAnSVBWUyBNSCBzY2hlZHVsZXInXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMwMzpjb25maWcgSVBfVlNfTUhfVEFCX0lOREVYXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzA0LVxcdGludCBcXFwiSVBWUyBtYWdsZXYgaGFzaGluZyB0YWJsZSBpbmRleCBvZiBzaXplICh0aGUgcHJpbWUgbnVtYmVycylcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjA1LjkxNTE1ODgxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM5ODczMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSVBWUyBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYElQX1ZTYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlP1wiIFRoZW4gSSByZWNhbGwgYGlwX3ZzX2luX2ljbXBgLCBhbmQgSSBoYXZlIHRvIGNsYXJpZnk6IHdhaXQsIHRoYXQncyBzcGVjaWZpY2FsbHkgZm9yIElQdjQgSUNNUCB0cmFmZmljLCBpc24ndCBpdD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZSB0aGF0J3MgcmVsZXZhbnQuXG5cbk15IHRyYWluIG9mIHRob3VnaHQgZ29lcyBzdHJhaWdodCB0byBuZWVkaW5nIHRvIGxvb2sgZGVlcGVyLCBzcGVjaWZpY2FsbHkgSSBuZWVkIHRvIGdvIHRvIGBpcF92c19jb3JlLmNgIGFuZCBkaWcgYXJvdW5kIGZvciB0aGlzIGBpcF92c19pbl9pY21wYCBzZXR0aW5nIHRvIGdhaW4gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIFRoYXQncyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBpbmZvcm1hdGlvbiBhbmQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkxNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjEwLjI1NTAzMzgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc1MDpcXHQgKlxcdEhhbmRsZSBJQ01QIG1lc3NhZ2VzIGluIHRoZSBvdXRzaWRlLXRvLWluc2lkZSBkaXJlY3Rpb24gKGluY29taW5nKS5cXG4xNzUxOlxcdCAqXFx0RmluZCBhbnkgdGhhdCBtaWdodCBiZSByZWxldmFudCwgY2hlY2sgYWdhaW5zdCBleGlzdGluZyBjb25uZWN0aW9ucyxcXG4xNzUyOlxcdCAqXFx0Zm9yd2FyZCB0byB0aGUgcmlnaHQgZGVzdGluYXRpb24gaG9zdCBpZiByZWxldmFudC5cXG4xNzUzOlxcdCAqXFx0Q3VycmVudGx5IGhhbmRsZXMgZXJyb3IgdHlwZXMgLSB1bnJlYWNoYWJsZSwgcXVlbmNoLCB0dGwgZXhjZWVkZWQuXFxuMTc1NDpcXHQgKi9cXG4xNzU1OlxcdHN0YXRpYyBpbnRcXG4xNzU2OlxcdGlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4xNzU3OlxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBob29rbnVtKVxcbjE3NTg6XFx0e1xcbjE3NTk6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuMTc2MDpcXHRcXHRzdHJ1Y3QgaWNtcGhkclxcdF9pY21waCwgKmljO1xcbjE3NjE6XFx0XFx0c3RydWN0IGlwaGRyXFx0X2NpcGgsICpjaWg7XFx0LyogVGhlIGlwIGhlYWRlciBjb250YWluZWQgd2l0aGluIHRoZSBJQ01QICovXFxuMTc2MjpcXHRcXHRzdHJ1Y3QgaXBfdnNfaXBoZHIgY2lwaDtcXG4xNzYzOlxcdFxcdHN0cnVjdCBpcF92c19jb25uICpjcDtcXG4xNzY0OlxcdFxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuMTc2NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9fZGF0YSAqcGQ7XFxuMTc2NjpcXHRcXHR1bnNpZ25lZCBpbnQgb2Zmc2V0LCBvZmZzZXQyLCBpaGwsIHZlcmRpY3Q7XFxuMTc2NzpcXHRcXHRib29sIHR1bm5lbCwgbmV3X2NwID0gZmFsc2U7XFxuMTc2ODpcXHRcXHR1bmlvbiBuZl9pbmV0X2FkZHIgKnJhZGRyO1xcbjE3Njk6XFx0XFx0Y2hhciAqb3V0ZXJfcHJvdG8gPSBcXFwiSVBJUFxcXCI7XFxuMTc3MDpcXHRcXHRpbnQgdWxlbiA9IDA7XFxuMTc3MTpcXHRcXG4xNzcyOlxcdFxcdCpyZWxhdGVkID0gMTtcXG4xNzczOlxcdFxcbjE3NzQ6XFx0XFx0LyogcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMgKi9cXG4xNzc1OlxcdFxcdGlmIChpcF9pc19mcmFnbWVudChpcF9oZHIoc2tiKSkpIHtcXG4xNzc2OlxcdFxcdFxcdGlmIChpcF92c19nYXRoZXJfZnJhZ3MoaXB2cywgc2tiLCBpcF92c19kZWZyYWdfdXNlcihob29rbnVtKSkpXFxuMTc3NzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfU1RPTEVOO1xcbjE3Nzg6XFx0XFx0fVxcbjE3Nzk6XFx0XFxuMTc4MDpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4xNzgxOlxcdFxcdG9mZnNldCA9IGlobCA9IGlwaC1cXHUwMDNlaWhsICogNDtcXG4xNzgyOlxcdFxcdGljID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX2ljbXBoKSwgXFx1MDAyNl9pY21waCk7XFxuMTc4MzpcXHRcXHRpZiAoaWMgPT0gTlVMTClcXG4xNzg0OlxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbjE3ODU6XFx0XFxuMTc4NjpcXHRcXHRJUF9WU19EQkcoMTIsIFxcXCJJbmNvbWluZyBJQ01QICglZCwlZCkgJXBJNC1cXHUwMDNlJXBJNFxcXFxuXFxcIixcXG4xNzg3OlxcdFxcdFxcdCAgaWMtXFx1MDAzZXR5cGUsIG50b2hzKGljbXBfaWQoaWMpKSxcXG4xNzg4OlxcdFxcdFxcdCAgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIsIFxcdTAwMjZpcGgtXFx1MDAzZWRhZGRyKTtcXG4xNzg5OlxcdFxcbjE3OTA6XFx0XFx0LypcXG4xNzkxOlxcdFxcdCAqIFdvcmsgdGhyb3VnaCBzZWVpbmcgaWYgdGhpcyBpcyBmb3IgdXMuXFxuMTc5MjpcXHRcXHQgKiBUaGVzZSBjaGVja3MgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGFuIG9yZGVyIHRoYXQgbWVhbnMgZWFzeVxcbjE3OTM6XFx0XFx0ICogdGhpbmdzIGFyZSBjaGVja2VkIGZpcnN0IHRvIHNwZWVkIHVwIHByb2Nlc3NpbmcuLi4uIGhvd2V2ZXJcXG4xNzk0OlxcdFxcdCAqIHRoaXMgbWVhbnMgdGhhdCBzb21lIHBhY2tldHMgd2lsbCBtYW5hZ2UgdG8gZ2V0IGEgbG9uZyB3YXlcXG4xNzk1OlxcdFxcdCAqIGRvd24gdGhpcyBzdGFjayBhbmQgdGhlbiBiZSByZWplY3RlZCwgYnV0IHRoYXQncyBsaWZlLlxcbjE3OTY6XFx0XFx0ICovXFxuMTc5NzpcXHRcXHRpZiAoKGljLVxcdTAwM2V0eXBlICE9IElDTVBfREVTVF9VTlJFQUNIKSBcXHUwMDI2XFx1MDAyNlxcbjE3OTg6XFx0XFx0ICAgIChpYy1cXHUwMDNldHlwZSAhPSBJQ01QX1NPVVJDRV9RVUVOQ0gpIFxcdTAwMjZcXHUwMDI2XFxuMTc5OTpcXHRcXHQgICAgKGljLVxcdTAwM2V0eXBlICE9IElDTVBfVElNRV9FWENFRURFRCkpIHtcXG4xODAwOlxcdFxcdFxcdCpyZWxhdGVkID0gMDtcXG4xODAxOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMTgwMjpcXHRcXHR9XFxuMTgwMzpcXHRcXG4xODA0OlxcdFxcdC8qIE5vdyBmaW5kIHRoZSBjb250YWluZWQgSVAgaGVhZGVyICovXFxuMTgwNTpcXHRcXHRvZmZzZXQgKz0gc2l6ZW9mKF9pY21waCk7XFxuMTgwNjpcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuMTgwNzpcXHRcXHRpZiAoY2loID09IE5VTEwpXFxuMTgwODpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4xODA5OlxcdFxcdHJhZGRyID0gKHVuaW9uIG5mX2luZXRfYWRkciAqKVxcdTAwMjZjaWgtXFx1MDAzZWRhZGRyO1xcbjE4MTA6XFx0XFxuMTgxMTpcXHRcXHQvKiBTcGVjaWFsIGNhc2UgZm9yIGVycm9ycyBmb3IgSVBJUC9VRFAvR1JFIHR1bm5lbCBwYWNrZXRzICovXFxuMTgxMjpcXHRcXHR0dW5uZWwgPSBmYWxzZTtcXG4xODEzOlxcdFxcdGlmIChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fSVBJUCkge1xcbjE4MTQ6XFx0XFx0XFx0c3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7XFxuMTgxNTpcXHRcXG4xODE2OlxcdFxcdFxcdGlmICh1bmxpa2VseShjaWgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfT0ZGU0VUKSkpXFxuMTgxNzpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE4MTg6XFx0XFx0XFx0LyogRXJyb3IgZm9yIG91ciBJUElQIG11c3QgYXJyaXZlIGF0IExPQ0FMX0lOICovXFxuMTgxOTpcXHRcXHRcXHRpZiAoIShza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpXFxuMTgyMDpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbjE4MjE6XFx0XFx0XFx0ZGVzdCA9IGlwX3ZzX2ZpbmRfdHVubmVsKGlwdnMsIEFGX0lORVQsIHJhZGRyLCAwKTtcXG4xODIyOlxcdFxcdFxcdC8qIE9ubHkgZm9yIGtub3duIHR1bm5lbCAqL1xcbjE4MjM6XFx0XFx0XFx0aWYgKCFkZXN0IHx8IGRlc3QtXFx1MDAzZXR1bl90eXBlICE9IElQX1ZTX0NPTk5fRl9UVU5ORUxfVFlQRV9JUElQKVxcbjE4MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xODI1OlxcdFxcdFxcdG9mZnNldCArPSBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuMTgyNjpcXHRcXHRcXHRjaWggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfY2lwaCksIFxcdTAwMjZfY2lwaCk7XFxuMTgyNzpcXHRcXHRcXHRpZiAoY2loID09IE5VTEwpXFxuMTgyODpcXHRcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUOyAvKiBUaGUgcGFja2V0IGxvb2tzIHdyb25nLCBpZ25vcmUgKi9cXG4xODI5OlxcdFxcdFxcdHR1bm5lbCA9IHRydWU7XFxuMTgzMDpcXHRcXHR9IGVsc2UgaWYgKChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQIHx8XFx0LyogQ2FuIGJlIFVEUCBlbmNhcCAqL1xcbjE4MzE6XFx0XFx0XFx0ICAgIGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19HUkUpIFxcdTAwMjZcXHUwMDI2XFx0LyogQ2FuIGJlIEdSRSBlbmNhcCAqL1xcbjE4MzI6XFx0XFx0XFx0ICAgLyogRXJyb3IgZm9yIG91ciB0dW5uZWwgbXVzdCBhcnJpdmUgYXQgTE9DQUxfSU4gKi9cXG4xODMzOlxcdFxcdFxcdCAgIChza2JfcnRhYmxlKHNrYiktXFx1MDAzZXJ0X2ZsYWdzIFxcdTAwMjYgUlRDRl9MT0NBTCkpIHtcXG4xODM0OlxcdFxcdFxcdF9fdTggaXByb3RvO1xcbjE4MzU6XFx0XFxuMTgzNjpcXHRcXHRcXHQvKiBOb24tZmlyc3QgZnJhZ21lbnQgaGFzIG5vIFVEUC9HUkUgaGVhZGVyICovXFxuMTgzNzpcXHRcXHRcXHRpZiAodW5saWtlbHkoY2loLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX09GRlNFVCkpKVxcbjE4Mzg6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4xODM5OlxcdFxcdFxcdG9mZnNldDIgPSBvZmZzZXQgKyBjaWgtXFx1MDAzZWlobCAqIDQ7XFxuMTg0MDpcXHRcXHRcXHRpZiAoY2loLVxcdTAwM2Vwcm90b2NvbCA9PSBJUFBST1RPX1VEUCkge1xcbjE4NDE6XFx0XFx0XFx0XFx0dWxlbiA9IGlwdnNfdWRwX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG4xODQyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG4xODQzOlxcdFxcdFxcdFxcdG91dGVyX3Byb3RvID0gXFxcIlVEUFxcXCI7XFxuMTg0NDpcXHRcXHRcXHR9IGVsc2Uge1xcbjE4NDU6XFx0XFx0XFx0XFx0dWxlbiA9IGlwdnNfZ3JlX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG4xODQ2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG4xODQ3OlxcdFxcdFxcdFxcdG91dGVyX3Byb3RvID0gXFxcIkdSRVxcXCI7XFxuMTg0ODpcXHRcXHRcXHR9XFxuMTg0OTpcXHRcXHRcXHRpZiAodWxlbiBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTAuMjU1MTkzMzU5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjYxMDQ1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgTVRVIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IG1vZGlmaWVzIHRoZSBgaXBfdnNfaW5faWNtcGAgZnVuY3Rpb24uIFRoZSBjb2RlIHNlZW1zIGZ1bmN0aW9uYWwsIGFuZCB0aGUgY29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZSBpcyBgSVBfVlNgLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGRlZmluaXRlbHkgYGlwX3ZzX2luX2ljbXBgLCBzbyBJIHdhbnQgdG8gZXhwbG9yZSBpdCBpbiBkZXB0aC5cblxuRmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBIbW0sIG5vcGUsIGl0J3MganVzdCBgaXBfdnNfaW5faWNtcGAuIEFscmlnaHQsIGxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpdHNlbGYuIEFoLCB0aGlzIGlzIGZpeGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGZvciBJQ01QIHBhY2tldHMgdGhhdCBhcmUgdHVubmVsZWQgdGhyb3VnaCBJUFZTLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGB1bGVuYCB2YXJpYWJsZSB0byBhZGp1c3QgdGhlIE1UVSBjYWxjdWxhdGlvbiBhbmQgYWRkcmVzcyBhbiBNVFUgY2FsY3VsYXRpb24gaXNzdWUgdGhhdCBvY2N1cnMgd2l0aCBVRFAgb3IgR1JFIGVuY2Fwc3VsYXRlZCBwYWNrZXRzLiBUaGlzIHR5cGUgb2YgZml4IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIHRob3JvdWdoIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaXMgZGVmaW5pdGVseSBgaXBfdnNfaW5faWNtcGAsIGFuZCBJIHdhbnQgdG8gY29uZmlybSB0aGF0LiBZZXMsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBoZWxwcy4gQW5kIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBpcF92c19pbl9pY21wYCBpcyBjYWxsZWQgYnkgYGlwX3ZzX2luX2hvb2tgIGFuZCBgaXBfdnNfZm9yd2FyZF9pY21wYC4gQm90aCBvZiB0aGVzZSBhcmUgbmV0ZmlsdGVyIGhvb2tzLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHQuIFRoaXMgbWFrZXMgYGlwX3ZzX2luX2ljbXBgIGEgc29saWQgY2hvaWNlIGZvciBmb2N1c2VkIGFuYWx5c2lzLlxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgYElQX1ZTYCBpcyB0aGUgb25seSBjb25maWcgaGVyZS4gRG9lcyB0aGlzIGludm9sdmUgYW55IElQVlMgVURQIG9yIEdSRSB0dW5uZWxpbmc/IExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSByZWxhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzIGBpcHZzX3VkcF9kZWNhcGAgYW5kIGBpcHZzX2dyZV9kZWNhcGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgYW5hbHlzaXMuIEdvb2QsIEkgdGhpbmsgSSBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQgd2l0aCBtb3JlIGRldGFpbGVkIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTguNTIxMjk5OTY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA0OTg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHZzX3VkcF9kZWNhcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTY0ND1pcF92c190cnlfdG9fc2NoZWR1bGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTY3OC0vKiBDaGVjayB0aGUgVURQIHR1bm5lbCBhbmQgcmV0dXJuIGl0cyBoZWFkZXIgbGVuZ3RoICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxNjc5OnN0YXRpYyBpbnQgaXB2c191ZHBfZGVjYXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjgwLVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jPTE3NTY9aXBfdnNfaW5faWNtcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpyZWxhdGVkLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQwLVxcdFxcdGlmIChjaWgtXFx1MDAzZXByb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoxODQxOlxcdFxcdFxcdHVsZW4gPSBpcHZzX3VkcF9kZWNhcChpcHZzLCBza2IsIG9mZnNldDIsIEFGX0lORVQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xODQyLVxcdFxcdFxcdFxcdFxcdCAgICAgIHJhZGRyLCBcXHUwMDI2aXByb3RvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MTguNTc4MzU1MDgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzQ1MTQxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgc3VtbWFyaXplZCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydCB1bmRlcnN0YW5kaW5nOlxuXG4qKkludmVzdGlnYXRpbmcgSVBWUyBhbmQgVURQL0dSRSBUdW5uZWxpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZXJlIGFyZSBhbnkgKnNwZWNpZmljKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgc3lzdGVtIHRoYXQgYXJlIHBhcnRpY3VsYXJseSByZWxldmFudCB0byBVRFAgb3IgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgdHVubmVsaW5nLiBJIGtub3cgdGhlIGJhc2ljcywgYnV0IEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21lIG51YW5jZSBvciBhIHNwZWNpYWxpemVkIHNldHRpbmcgdGhhdCBvcHRpbWl6ZXMgcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3IgaW4gYSB0dW5uZWxpbmcgc2NlbmFyaW8uIEknbSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdGFuZGFyZCBkb2N1bWVudGF0aW9uIGFuZCBtYXliZSBzb21lIGxlc3Mgb2J2aW91cyBzb3VyY2Vz4oCUcGVyaGFwcyBzb21lIGZvcnVtIGRpc2N1c3Npb25zIG9yIGV4cGVyaW1lbnRhbCBjb25maWd1cmF0aW9uc+KAlHRvIHNlZSBpZiB0aGVyZSdzIGFueSBJUFZTLXNwZWNpZmljIHR1bmluZyByZXF1aXJlZCB3aGVuIHRoZXNlIHByb3RvY29scyBhcmUgaW52b2x2ZWQuIEl04oCZcyBhYm91dCBiZWluZyB0aG9yb3VnaCBhbmQgbWFraW5nIHN1cmUgdGhlIHNvbHV0aW9uIGlzIG9wdGltYWwsIG5vdCBqdXN0IGZ1bmN0aW9uYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyMS40MTI4NzEzMTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTI1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy00LSNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo1Om1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjg2PWNvbW1lbnQgJ0lQVlMgU0ggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzoyODg6Y29uZmlnIElQX1ZTX1NIX1RBQl9CSVRTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVxcdGludCBcXFwiSVBWUyBzb3VyY2UgaGFzaGluZyB0YWJsZSBzaXplICh0aGUgTnRoIHBvd2VyIG9mIDIpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzAxPWNvbW1lbnQgJ0lQVlMgTUggc2NoZWR1bGVyJ1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMDM6Y29uZmlnIElQX1ZTX01IX1RBQl9JTkRFWFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cXHRpbnQgXFxcIklQVlMgbWFnbGV2IGhhc2hpbmcgdGFibGUgaW5kZXggb2Ygc2l6ZSAodGhlIHByaW1lIG51bWJlcnMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyMS40NjgwMDE4NTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3Nzk2MjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSVBWUyBUdW5uZWxpbmcgT3B0aW9ucyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBJUFZTIGhhbmRsZXMgdHVubmVsaW5nIHByb3RvY29scy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBhbmQgaXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdHVubmVsaW5nLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzY2FuIHRoZSBlbnRpcmUgZmlsZSBmb3IgYW55IG1lbnRpb25zIG9mIGBUVU5ORUxgLCBgR1JFYCwgb3IgYFVEUGAga2V5d29yZHMuIFRoaXMgd2lsbCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIG1vZHVsZSBkZXBlbmRlbmNpZXMsIG9yIGZlYXR1cmUgZmxhZ3MgdGllZCB0byB0aGVzZSB0dW5uZWxpbmcgdGVjaG5vbG9naWVzIHdpdGhpbiB0aGUgSVBWUyBjb250ZXh0LiBJdCdzIGEgcXVpY2sgYW5kIGRpcnR5LCBidXQgZWZmZWN0aXZlLCB3YXkgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50LCBiZWZvcmUgYW55IGRlZXBlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODk5OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjI0LjY0NTk2NjgyMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NTU0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFVOTkVMfEdSRXxVRFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Nzk9Y29uZmlnXFx0SVBfVlNfUFJPVE9fVENQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NTpjb25maWdcXHRJUF9WU19QUk9UT19VRFBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4NjpcXHRib29sIFxcXCJVRFAgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04Ny1cXHRoZWxwXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6ODg6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGxvYWQgYmFsYW5jaW5nIFVEUCB0cmFuc3BvcnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy04OS1cXHQgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXFx0SVBfVlNfUEVfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVxcdHRyaXN0YXRlIFxcXCJTSVAgcGVyc2lzdGVuY2UgZW5naW5lXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0OC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MjQuNzAyNDI5NTc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDA0NzU2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVURQIExvYWQgQmFsYW5jaW5nIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSBgSVBfVlNfUFJPVE9fVURQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aGF0J3MgZm9yIFVEUCBsb2FkIGJhbGFuY2luZywgZ290IGl0LlwiIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhhdCBgaXB2c191ZHBfZGVjYXBgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBpcF92c19jb3JlLmNgLiBBbmQgdGhhdCBmaWxlIGdldHMgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGlmIGBJUF9WU2AgaXMgZW5hYmxlZC4gU28sIHRoZSBxdWVzdGlvbiBpcywgKmRvKiBJIGV2ZW4gbmVlZCBgSVBfVlNfUFJPVE9fVURQYCBmb3IgdGhlIHR1bm5lbGluZyBpdHNlbGYsIG9yIGlzIGl0IGp1c3QgZm9yIHRoZSBsb2FkIGJhbGFuY2luZyBhc3BlY3Q/IEl0J3MgZWFzeSB0byBnZXQgY29uZnVzZWQgd2l0aCB0aGVzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy5cblxuSSB0aGluayB0byBiZSBjb21wbGV0ZWx5IHNhZmUsIEknbGwganVzdCBnbyBhaGVhZCBhbmQgaW5jbHVkZSBib3RoIGBJUF9WU2AgYW5kIGBJUF9WU19QUk9UT19VRFBgLiBCdXQgd2FpdCwgSSBzaG91bGQgZG91YmxlIGNoZWNrOiBJJ20gcHJldHR5IHN1cmUgYGlwdnNfdWRwX2RlY2FwYCBpc24ndCBjb25kaXRpb25hbCBvbiBgQ09ORklHX0lQX1ZTX1BST1RPX1VEUGAsIGFuZCBzaW5jZSBpdCdzIGRlZmluZWQgaW4gYGlwX3ZzX2NvcmUuY2AsIGFuZCB0aGF0J3MgZW5hYmxlZCB3aXRoIGBJUF9WU2AsIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUyMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyOC45MDI5MjE2ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTg3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdnNfdWRwX2RlY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNjQ0PWlwX3ZzX3RyeV90b19zY2hlZHVsZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0xNjc4LS8qIENoZWNrIHRoZSBVRFAgdHVubmVsIGFuZCByZXR1cm4gaXRzIGhlYWRlciBsZW5ndGggKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE2Nzk6c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE2ODAtXFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBfX3UxNiBhZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MTc1Nj1pcF92c19pbl9pY21wKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKnJlbGF0ZWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDAtXFx0XFx0aWYgKGNpaC1cXHUwMDNlcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE4NDE6XFx0XFx0XFx0dWxlbiA9IGlwdnNfdWRwX2RlY2FwKGlwdnMsIHNrYiwgb2Zmc2V0MiwgQUZfSU5FVCxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTE4NDItXFx0XFx0XFx0XFx0XFx0ICAgICAgcmFkZHIsIFxcdTAwMjZpcHJvdG8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0NzoyOC45NjAxMTQ1ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5NzU2NTQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfY29yZS5jYCBhbmQgYGlwdnNfdWRwX2RlY2FwYCoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgaXB2c191ZHBfZGVjYXBgIGluIGBpcF92c19jb3JlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJSaWdodCwgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGF0IGl0J3MgZG9pbmcsIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCdzIGludGVyYWN0aW5nIHdpdGguXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBVRFAgZGVjYXBzdWxhdGlvbiBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgSVBWUyBmcmFtZXdvcmsuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgd2hlcmUgd2UncmUgcGVlbGluZyBvZmYgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVycyBmb3IgVURQIHRyYWZmaWMgZGVzdGluZWQgZm9yIFZpcnR1YWwgU2VydmVycy4gV2UnbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0IGlzIHJlY2VpdmVkLCBwcm9jZXNzZWQsIGFuZCBwYXNzZWQgb250byB0aGUgUmVhbCBTZXJ2ZXIuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgbG9hZCBiYWxhbmNpbmcgZGVjaXNpb25zIGF0IHRoaXMgcG9pbnQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIGVycm9yIGhhbmRsaW5nIHJlbGF0ZWQgdG8gbWFsZm9ybWVkIHBhY2tldHMgb3IgdW5leHBlY3RlZCBVRFAgaGVhZGVyIGNvbmZpZ3VyYXRpb25zLiBBbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBzaG91bGQgYWxzbyBiZSBrZXB0IGluIG1pbmQsIGFzIGltcHJvcGVyIGhhbmRsaW5nIG9mIGVuY2Fwc3VsYXRlZCB0cmFmZmljIGNhbiBzb21ldGltZXMgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzE1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MzIuNTU3NjgyNTY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2NzA6XFx0XFxuMTY3MTpcXHRcXHRcXHQqdmVyZGljdCA9IE5GX0FDQ0VQVDtcXG4xNjcyOlxcdFxcdFxcdHJldHVybiAwO1xcbjE2NzM6XFx0XFx0fVxcbjE2NzQ6XFx0XFxuMTY3NTpcXHRcXHRyZXR1cm4gMTtcXG4xNjc2OlxcdH1cXG4xNjc3OlxcdFxcbjE2Nzg6XFx0LyogQ2hlY2sgdGhlIFVEUCB0dW5uZWwgYW5kIHJldHVybiBpdHMgaGVhZGVyIGxlbmd0aCAqL1xcbjE2Nzk6XFx0c3RhdGljIGludCBpcHZzX3VkcF9kZWNhcChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xNjgwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG9mZnNldCwgX191MTYgYWYsXFxuMTY4MTpcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqZGFkZHIsIF9fdTggKnByb3RvKVxcbjE2ODI6XFx0e1xcbjE2ODM6XFx0XFx0c3RydWN0IHVkcGhkciBfdWRwaCwgKnVkcGg7XFxuMTY4NDpcXHRcXHRzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDtcXG4xNjg1OlxcdFxcbjE2ODY6XFx0XFx0dWRwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF91ZHBoKSwgXFx1MDAyNl91ZHBoKTtcXG4xNjg3OlxcdFxcdGlmICghdWRwaClcXG4xNjg4OlxcdFxcdFxcdGdvdG8gdW5rO1xcbjE2ODk6XFx0XFx0b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6MzIuNTU3ODIyODg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNTY0NTc4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUFZTIElDTVAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBpcF92c19pbl9pY21wYCwgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gU2luY2UgaXQgZG9lc24ndCBzZWVtIHRvIGJlIGdhdGVkIGJ5IGFueSBgI2lmZGVmYCBzdGF0ZW1lbnRzLCBJIGNhbiBhc3N1bWUgdGhhdCBgSVBfVlNgIGlzIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uIGhlcmUsIGFzIGl0IGVuYWJsZXMgSVBWUyBmdW5jdGlvbmFsaXR5IG92ZXJhbGwuIEkgc2hvdWxkIHN0aWxsIHZlcmlmeSB0aGF0LlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gaWYgYElQX1ZTX0lQVjZgIGlzIHJlbGV2YW50LCBidXQgbG9va2luZyBhdCB0aGUgZnVuY3Rpb24gbmFtZSwgYGlwX3ZzX2luX2ljbXBgLCBpdCdzIGNsZWFyIHRoaXMgaXMgdGhlIElQdjQgdmVyc2lvbi4gTm93LCB0aGUgbWFpbiBjaGFuZ2Ugc2VlbXMgdG8gYmUgd2l0aGluIGBpcF92c19pbl9pY21wYCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmaXggcmVsYXRlZCB0byBNVFUgY2FsY3VsYXRpb25zIGluIHR1bm5lbGVkIElDTVAgcGFja2V0cywgYW5kIGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgaGVhZGVyIGxlbmd0aCBvZiB0aGUgdHVubmVsaW5nIHByb3RvY29scy5cblxuT2theSwgbGV0IG1lIGdvIG92ZXIgdGhlIGRldGFpbHMuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIE1UVSBjYWxjdWxhdGlvbiBmb3IgSUNNUCBwYWNrZXRzIHR1bm5lbGVkIG92ZXIgdmFyaW91cyBwcm90b2NvbHMgKGxpa2VseSBHUkUgb3IgVURQIGVuY2Fwc3VsYXRlZCkuIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG10dSAtPSBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVsZW47YCwgYW5kIHRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IHRoZSBjb3JlIElQVlMgbG9naWMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhhdCBgSVBfVlNgIGlzIHJlYWxseSB0aGUgKm9ubHkqIHJlcXVpcmVkIGNvbmZpZy4gV2hpbGUgSVBWUyBjb3ZlcnMgdGhlIGNvcmUgZnVuY3Rpb25zLCBjb3VsZCBpdCBuZWVkIHNvbWV0aGluZyBzcGVjaWZpYyBmb3IsIHNheSwgVURQIG9yIEdSRSB0dW5uZWxpbmc/IEknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBgSVBfVlNfUFJPVE9fVURQYCBvciBgSVBfVlNfUFJPVE9fR1JFYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHJlZmVyZW5jZXMgdG8gR1JFLCBhcyB0aGF0J3MgYSBjb21tb24gdHVubmVsaW5nIHByb3RvY29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDEyOjQ3OjQwLjcxNDI4MzMxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2ODQ4NzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX1ZTX1BST1RPX0dSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NDAuNzcxOTc1NDg0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzU4OTM5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlF1aWNrIElQVlMgQnVnIENoZWNrKipcblxuQWxyaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gKm5vKi4gSSdtIHRoaW5raW5nLCBcIk5vLCB3ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGFueXRoaW5nIGJleW9uZCBgSVBfVlNgIGZvciB0aGlzIHNwZWNpZmljIGlzc3VlLlwiIFNvIHRoZSBjcml0aWNhbCBmYWN0b3IgaGVyZSBpcyBzaW1wbHkgYElQX1ZTYC4gSSd2ZSBhbHJlYWR5IG1hZGUgdGhlIGRlY2lzaW9uLlxuXG5Ob3csIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGJlY2F1c2UgaXQncyBnb29kIHByYWN0aWNlLCBsZXQncyBkbyBhIGZhc3QgdmVyaWZpY2F0aW9uLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgaXBfdnNfaW5faWNtcF92NmAgbW9kdWxlLiBJIHdhbnQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgaXQgZXhoaWJpdHMgdGhlIHNhbWUgYmVoYXZpb3Igb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEl0J3MgYWJvdXQgYSBxdWljayBjcm9zcy1jaGVjayB0byBzb2xpZGlmeSBteSBjdXJyZW50IGFzc3VtcHRpb24gYW5kIGF2b2lkIGFueSBvdmVyc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDQyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NDUuMzA3ODc3OTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ1NDU1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF92c19pbl9pY21wX3Y2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0xNzU2PWlwX3ZzX2luX2ljbXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBza19idWZmICpza2IsIGludCAqcmVsYXRlZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk3OC0jaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjE5Nzk6c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMTk4MC1cXHRcXHRcXHQgICAgaW50ICpyZWxhdGVkLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4Nj1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjEzNS1cXHRcXHRcXHRpbnQgcmVsYXRlZDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIxMzY6XFx0XFx0XFx0aW50IHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KGlwdnMsIHNrYiwgXFx1MDAyNnJlbGF0ZWQsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMTM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBob29rbnVtLCBcXHUwMDI2aXBoKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjI3OT1pcF92c19mb3J3YXJkX2ljbXAodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjMwMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIzMDE6XFx0XFx0cmV0dXJuIGlwX3ZzX2luX2ljbXBfdjYoaXB2cywgc2tiLCBcXHUwMDI2ciwgc3RhdGUtXFx1MDAzZWhvb2ssIFxcdTAwMjZpcGhkcik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMzAyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Nzo0NS40MTAzNDA5ODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMzcwMDEwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBJQ01QdjYgSW5wdXQgRmlsdGVyaW5nIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHdlJ3JlIGhhbmRsaW5nIElDTVB2NiBpbnB1dCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHJlbGF0ZWQgZmlsdGVyaW5nLiBJJ20gZ29pbmcgdG8gZ3JhYiB0aGUgc291cmNlIGNvZGUgZm9yIGBpcF92c19pbl9pY21wX3Y2YC4gVGhlIGtleSB0aGluZyBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBpcyB0aGUgcHJlc2VuY2Ugb2YgYHVsZW5gLiBCYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBJUHY0IGFuZCBJUHY2LCB0aGUgYHVsZW5gIGZpZWxkIG9yIHNpbWlsYXIgY29uc3RydWN0LCBpcyBhIGNyaXRpY2FsIHBpZWNlIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIElDTVAgaGFuZGxpbmcuIEl0J3Mgb2Z0ZW4gYXQgdGhlIGhlYXJ0IG9mIGZpbHRlcmluZyBsb2dpYy4gQ2hlY2tpbmcgdGhhdCBxdWlja2x5IHdpbGwgZ2l2ZSBtZSBhIHZhbHVhYmxlIGRhdGEgcG9pbnQuIFRoaXMgY291bGQgYmUgd2hlcmUgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBiZSBtYWRlLiBJJ20gbG9va2luZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIHRvIGNvbmZpcm0gaWYgaXQgaGFzIHRoaXMgYXR0cmlidXRlIG9yIGVxdWl2YWxlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzgxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NTAuNTI0MDQzOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5Nzk6XFx0c3RhdGljIGludCBpcF92c19pbl9pY21wX3Y2KHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjE5ODA6XFx0XFx0XFx0XFx0ICAgIGludCAqcmVsYXRlZCwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuMTk4MTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX2lwaGRyICppcGgpXFxuMTk4MjpcXHR7XFxuMTk4MzpcXHRcXHRzdHJ1Y3QgaWNtcDZoZHJcXHRfaWNtcGgsICppYztcXG4xOTg0OlxcdFxcdHN0cnVjdCBpcF92c19pcGhkciBjaXBoID0gey5mbGFncyA9IDAsIC5mcmFnb2ZmcyA9IDB9Oy8qQ29udGFpbmVkIElQICovXFxuMTk4NTpcXHRcXHRzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7XFxuMTk4NjpcXHRcXHRzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwO1xcbjE5ODc6XFx0XFx0c3RydWN0IGlwX3ZzX3Byb3RvX2RhdGEgKnBkO1xcbjE5ODg6XFx0XFx0dW5zaWduZWQgaW50IG9mZnNldCwgdmVyZGljdDtcXG4xOTg5OlxcdFxcdGJvb2wgbmV3X2NwID0gZmFsc2U7XFxuMTk5MDpcXHRcXG4xOTkxOlxcdFxcdCpyZWxhdGVkID0gMTtcXG4xOTkyOlxcdFxcbjE5OTM6XFx0XFx0aWMgPSBmcmFnX3NhZmVfc2tiX2hwKHNrYiwgaXBoLVxcdTAwM2VsZW4sIHNpemVvZihfaWNtcGgpLCBcXHUwMDI2X2ljbXBoKTtcXG4xOTk0OlxcdFxcdGlmIChpYyA9PSBOVUxMKVxcbjE5OTU6XFx0XFx0XFx0cmV0dXJuIE5GX0RST1A7XFxuMTk5NjpcXHRcXG4xOTk3OlxcdFxcdC8qXFxuMTk5ODpcXHRcXHQgKiBXb3JrIHRocm91Z2ggc2VlaW5nIGlmIHRoaXMgaXMgZm9yIHVzLlxcbjE5OTk6XFx0XFx0ICogVGhlc2UgY2hlY2tzIGFyZSBzdXBwb3NlZCB0byBiZSBpbiBhbiBvcmRlciB0aGF0IG1lYW5zIGVhc3lcXG4yMDAwOlxcdFxcdCAqIHRoaW5ncyBhcmUgY2hlY2tlZCBmaXJzdCB0byBzcGVlZCB1cCBwcm9jZXNzaW5nLi4uLiBob3dldmVyXFxuMjAwMTpcXHRcXHQgKiB0aGlzIG1lYW5zIHRoYXQgc29tZSBwYWNrZXRzIHdpbGwgbWFuYWdlIHRvIGdldCBhIGxvbmcgd2F5XFxuMjAwMjpcXHRcXHQgKiBkb3duIHRoaXMgc3RhY2sgYW5kIHRoZW4gYmUgcmVqZWN0ZWQsIGJ1dCB0aGF0J3MgbGlmZS5cXG4yMDAzOlxcdFxcdCAqL1xcbjIwMDQ6XFx0XFx0aWYgKGljLVxcdTAwM2VpY21wNl90eXBlIFxcdTAwMjYgSUNNUFY2X0lORk9NU0dfTUFTSykge1xcbjIwMDU6XFx0XFx0XFx0KnJlbGF0ZWQgPSAwO1xcbjIwMDY6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDA3OlxcdFxcdH1cXG4yMDA4OlxcdFxcdC8qIEZyYWdtZW50IGhlYWRlciB0aGF0IGlzIGJlZm9yZSBJQ01QIGhlYWRlciB0ZWxscyB1cyB0aGF0OlxcbjIwMDk6XFx0XFx0ICogaXQncyBub3QgYW4gZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGV5IGNhbid0IGJlIGZyYWdtZW50ZWQuXFxuMjAxMDpcXHRcXHQgKi9cXG4yMDExOlxcdFxcdGlmIChpcGgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVA2X0ZIX0ZfRlJBRylcXG4yMDEyOlxcdFxcdFxcdHJldHVybiBORl9EUk9QO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRJUF9WU19EQkcoOCwgXFxcIkluY29taW5nIElDTVB2NiAoJWQsJWQpICVwSTZjLVxcdTAwM2UlcEk2Y1xcXFxuXFxcIixcXG4yMDE1OlxcdFxcdFxcdCAgaWMtXFx1MDAzZWljbXA2X3R5cGUsIG50b2hzKGljbXB2Nl9pZChpYykpLFxcbjIwMTY6XFx0XFx0XFx0ICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkciwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbjIwMTc6XFx0XFxuMjAxODpcXHRcXHRvZmZzZXQgPSBpcGgtXFx1MDAzZWxlbiArIHNpemVvZihfaWNtcGgpO1xcbjIwMTk6XFx0XFx0aWYgKCFpcF92c19maWxsX2lwaF9za2JfaWNtcChBRl9JTkVUNiwgc2tiLCBvZmZzZXQsIHRydWUsIFxcdTAwMjZjaXBoKSlcXG4yMDIwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuMjAyMTpcXHRcXG4yMDIyOlxcdFxcdHBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQoaXB2cywgY2lwaC5wcm90b2NvbCk7XFxuMjAyMzpcXHRcXHRpZiAoIXBkKVxcbjIwMjQ6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDI1OlxcdFxcdHBwID0gcGQtXFx1MDAzZXBwO1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRcXHQvKiBDYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgZW1iZWRkZWQgcHJvdG9jb2wgKi9cXG4yMDI4OlxcdFxcdGlmIChjaXBoLmZyYWdvZmZzKVxcbjIwMjk6XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDMwOlxcdFxcbjIwMzE6XFx0XFx0SVBfVlNfREJHX1BLVCgxMSwgQUZfSU5FVDYsIHBwLCBza2IsIG9mZnNldCxcXG4yMDMyOlxcdFxcdFxcdCAgICAgIFxcXCJDaGVja2luZyBpbmNvbWluZyBJQ01QdjYgZm9yXFxcIik7XFxuMjAzMzpcXHRcXG4yMDM0OlxcdFxcdC8qIFRoZSBlbWJlZGRlZCBoZWFkZXJzIGNvbnRhaW4gc291cmNlIGFuZCBkZXN0IGluIHJldmVyc2Ugb3JkZXJcXG4yMDM1OlxcdFxcdCAqIGlmIG5vdCBmcm9tIGxvY2FsaG9zdFxcbjIwMzY6XFx0XFx0ICovXFxuMjAzNzpcXHRcXHRjcCA9IElORElSRUNUX0NBTExfMShwcC1cXHUwMDNlY29ubl9pbl9nZXQsIGlwX3ZzX2Nvbm5faW5fZ2V0X3Byb3RvLFxcbjIwMzg6XFx0XFx0XFx0XFx0ICAgICBpcHZzLCBBRl9JTkVUNiwgc2tiLCBcXHUwMDI2Y2lwaCk7XFxuMjAzOTpcXHRcXG4yMDQwOlxcdFxcdGlmICghY3ApIHtcXG4yMDQxOlxcdFxcdFxcdGludCB2O1xcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRcXHRpZiAoIXN5c2N0bF9zY2hlZHVsZV9pY21wKGlwdnMpKVxcbjIwNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIE5GX0FDQ0VQVDtcXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0XFx0aWYgKCFpcF92c190cnlfdG9fc2NoZWR1bGUoaXB2cywgQUZfSU5FVDYsIHNrYiwgcGQsIFxcdTAwMjZ2LCBcXHUwMDI2Y3AsIFxcdTAwMjZjaXBoKSlcXG4yMDQ3OlxcdFxcdFxcdFxcdHJldHVybiB2O1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHRcXHRuZXdfY3AgPSB0cnVlO1xcbjIwNTA6XFx0XFx0fVxcbjIwNTE6XFx0XFxuMjA1MjpcXHRcXHQvKiBWUy9UVU4sIFZTL0RSIGFuZCBMT0NBTE5PREUganVzdCBsZXQgaXQgZ28gKi9cXG4yMDUzOlxcdFxcdGlmICgoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCkgXFx1MDAyNlxcdTAwMjZcXG4yMDU0OlxcdFxcdCAgICAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpKSB7XFxuMjA1NTpcXHRcXHRcXHR2ZXJkaWN0ID0gTkZfQUNDRVBUO1xcbjIwNTY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA1NzpcXHRcXHR9XFxuMjA1ODpcXHRcXG4yMDU5OlxcdFxcdC8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqL1xcbjIwNjA6XFx0XFx0aXBfdnNfaW5fc3RhdHMoY3AsIHNrYik7XFxuMjA2MTpcXHRcXG4yMDYyOlxcdFxcdC8qIE5lZWQgdG8gbWFuZ2xlIGNvbnRhaW5lZCBJUHY2IGhlYWRlciBpbiBJQ01QdjYgcGFja2V0ICovXFxuMjA2MzpcXHRcXHRvZmZzZXQgPSBjaXBoLmxlbjtcXG4yMDY0OlxcdFxcdGlmIChJUFBST1RPX1RDUCA9PSBjaXBoLnByb3RvY29sIHx8IElQUFJPVE9fVURQID09IGNpcGgucHJvdG9jb2wgfHxcXG4yMDY1OlxcdFxcdCAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC5wcm90b2NvbClcXG4yMDY2OlxcdFxcdFxcdG9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsgLyogQWxzbyBtYW5nbGUgcG9ydHMgKi9cXG4yMDY3OlxcdFxcbjIwNjg6XFx0XFx0dmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0LCBob29rbnVtLCBcXHUwMDI2Y2lwaCk7XFxuMjA2OTpcXHRcXG4yMDcwOlxcdG91dDpcXG4yMDcxOlxcdFxcdGlmIChsaWtlbHkoIW5ld19jcCkpXFxuMjA3MjpcXHRcXHRcXHRfX2lwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4yMDczOlxcdFxcdGVsc2VcXG4yMDc0OlxcdFxcdFxcdGlwX3ZzX2Nvbm5fcHV0KGNwKTtcXG4yMDc1OlxcdFxcbjIwNzY6XFx0XFx0cmV0dXJuIHZlcmRpY3Q7XFxuMjA3NzpcXHR9XFxuMjA3ODpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTI6NDc6NTAuNTI0MjU1ODdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNjM0MTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSVBWUyBJQ01QdjYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYGlwX3ZzX2luX2ljbXBfdjZgIGlzbid0IGludm9sdmVkIGF0IGFsbC4gVGhlIHR1bm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHRoYXQgaGFuZGxlcyBNVFUgY2FsY3VsYXRpb25zIGZvciBlbmNhcHN1bGF0ZWQgSUNNUCBwYWNrZXRzLCBpc24ndCBwcmVzZW50IGluIHRoZSBJUHY2IGltcGxlbWVudGF0aW9uIG9mIElDTVAgcHJvY2Vzc2luZyB3aXRoaW4gSVBWUy4gVGhlcmVmb3JlLCB0aGUgZml4IGlzIGV4Y2x1c2l2ZWx5IGZvciBJUHY0IHRyYWZmaWMuIFRoZSBjb25maWd1cmF0aW9uIHRoYXQncyByZWxldmFudCBoZXJlIGlzIGBJUF9WU2AsIG9mIGNvdXJzZS4gTXkgZm9jdXMgaXMgbmFycm93ZWQgZG93biB0byBgaXBfdnNfaW5faWNtcGAsIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgdGhhdCdzIHdoYXQncyBiZWVuIGNoYW5nZWQuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGNydWNpYWwgTVRVIGNhbGN1bGF0aW9uIGlzc3VlIHdpdGhpbiBJUFZTLiBJdCdzIGFib3V0IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgb3ZlcmhlYWQgaW50cm9kdWNlZCBieSBVRFAgb3IgR1JFIHR1bm5lbHMgd2hlbiBoYW5kbGluZyBJQ01QIHBhY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIHBhcnQgb2YgdGhlIHJlYWNoYWJsZSBsb2dpYyB3aXRoaW4gSVBWUywgc28gdGhhdCdzIHdoeSBpdCdzIGJlZW4gaWRlbnRpZmllZCBhcyBpbXBvcnRhbnQuIFJpZ2h0LCBJIHRoaW5rIHRoaXMgbG9va3MgZ29vZC4gSSdsbCBnZXQgdGhpcyBzZXQtcmVzdWx0IGxvZ2dlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NjEsIk91dHB1dFRva2VucyI6ODUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxMjo0Nzo1NC41MzA2MDAzODdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzNDA5NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfaW5faWNtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIE1UVSBjYWxjdWxhdGlvbiBmb3IgdHVubmVsZWQgSUNNUCBwYWNrZXRzIGluIElQVlMgYnkgY29ycmVjdGx5IGFjY291bnRpbmcgZm9yIHRoZSBVRFAvR1JFIHR1bm5lbCBoZWFkZXIgbGVuZ3RoLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgSVBWUyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX2luX2ljbXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBNVFUgY2FsY3VsYXRpb24gZm9yIHR1bm5lbGVkIElDTVAgcGFja2V0cyBpbiBJUFZTIGJ5IGNvcnJlY3RseSBhY2NvdW50aW5nIGZvciB0aGUgVURQL0dSRSB0dW5uZWwgaGVhZGVyIGxlbmd0aC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIElQVlMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt4j8r[1] Phase: Succeeded StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 12:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 12:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2] Phase: Succeeded StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 12:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 12:48:06 +0000 UTC FinishedAt: 2026-07-02 12:48:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowt4j8r/series-workflowt4j8r-convert-artifact-718345450/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 12:48:16 +0000 UTC FinishedAt: 2026-07-02 13:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 12:48:16 +0000 UTC FinishedAt: 2026-07-02 13:14:57 +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:*00fcb383-77c5-4d31-aeb0-d5ac8aee42fd,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-workflowt4j8r/series-workflowt4j8r-convert-artifact-718345450/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": "3ca06f17-7db0-49a0-bfa8-db8139682fcc", "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-workflowt4j8r/series-workflowt4j8r-build-action-3723479896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 12:48:16 +0000 UTC FinishedAt: 2026-07-02 13:14:46 +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:*00fcb383-77c5-4d31-aeb0-d5ac8aee42fd,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-workflowt4j8r/series-workflowt4j8r-convert-artifact-718345450/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": "3ca06f17-7db0-49a0-bfa8-db8139682fcc", "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-workflowt4j8r/series-workflowt4j8r-build-action-3723479896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 13:14:57 +0000 UTC FinishedAt: 2026-07-02 13:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 13:14:57 +0000 UTC FinishedAt: 2026-07-02 13:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 13:14:57 +0000 UTC FinishedAt: 2026-07-02 13:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 13:14:57 +0000 UTC FinishedAt: 2026-07-02 13:15:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowt4j8r/series-workflowt4j8r-convert-artifact-3836671237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 13:16:18 +0000 UTC FinishedAt: 2026-07-02 13:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 13:16:18 +0000 UTC FinishedAt: 2026-07-02 13:18:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ca06f17-7db0-49a0-bfa8-db8139682fcc,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-workflowt4j8r/series-workflowt4j8r-build-action-3723479896/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-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 13:18:44 +0000 UTC FinishedAt: 2026-07-02 13:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 13:18:44 +0000 UTC FinishedAt: 2026-07-02 13:18:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 13:18:44 +0000 UTC FinishedAt: 2026-07-02 13:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 13:18:45 +0000 UTC FinishedAt: 2026-07-02 13:55:18 +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:*00fcb383-77c5-4d31-aeb0-d5ac8aee42fd,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-workflowt4j8r/series-workflowt4j8r-convert-artifact-3836671237/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": "b9e0809e-ea34-4d5b-bee9-a3e28fb2edb1", "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-workflowt4j8r/series-workflowt4j8r-build-action-903583825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 13:18:45 +0000 UTC FinishedAt: 2026-07-02 13:54:57 +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:*00fcb383-77c5-4d31-aeb0-d5ac8aee42fd,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-workflowt4j8r/series-workflowt4j8r-convert-artifact-3836671237/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": "b9e0809e-ea34-4d5b-bee9-a3e28fb2edb1", "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-workflowt4j8r/series-workflowt4j8r-build-action-903583825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 13:55:18 +0000 UTC FinishedAt: 2026-07-02 13:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 13:55:18 +0000 UTC FinishedAt: 2026-07-02 13:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 13:55:18 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 13:55:18 +0000 UTC FinishedAt: 2026-07-02 13:57:26 +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:*b9e0809e-ea34-4d5b-bee9-a3e28fb2edb1,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-workflowt4j8r/series-workflowt4j8r-build-action-903583825/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-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"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:*3ca06f17-7db0-49a0-bfa8-db8139682fcc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9e0809e-ea34-4d5b-bee9-a3e28fb2edb1,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-workflowt4j8r/series-workflowt4j8r-build-action-3723479896/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-workflowt4j8r/series-workflowt4j8r-build-action-903583825/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"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-workflowt4j8r/series-workflowt4j8r-convert-artifact-1499234186/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 13:57:35 +0000 UTC FinishedAt: 2026-07-02 13:57:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 13:57:45 +0000 UTC FinishedAt: 2026-07-02 17:00:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt4j8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_in_icmp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb09d0e64ecaa0aa0f7d1133a1696ed74dead295","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"5ec2b482-f8d8-4e2a-861a-68e4faaf5533","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 13:57:45 +0000 UTC FinishedAt: 2026-07-02 17:00:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3ca06f17-7db0-49a0-bfa8-db8139682fcc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9e0809e-ea34-4d5b-bee9-a3e28fb2edb1,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-workflowt4j8r/series-workflowt4j8r-build-action-3723479896/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-workflowt4j8r/series-workflowt4j8r-build-action-903583825/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-workflowt4j8r/series-workflowt4j8r-convert-artifact-1499234186/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,}