Name: series-workflow9zbbl Phase: Succeeded StartedAt: 2026-08-14 07:51:44 +0000 UTC FinishedAt: 2026-08-14 08:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[0] Phase: Succeeded StartedAt: 2026-08-14 07:51:44 +0000 UTC FinishedAt: 2026-08-14 08:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 07:51:44 +0000 UTC FinishedAt: 2026-08-14 08:21:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "20793955835fe29a5582f68ff031fdcd35cc98ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "20793955835fe29a5582f68ff031fdcd35cc98ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "1274e769-ea9b-4b12-996b-ece31197769e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_swapin_charge_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgIWN0cmwtXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhN2RjY2M1ZjVhN2VkMzA1YmQyYjBlZjRlYTlkMDk3NmU1ZmQ5MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODoxOTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xuaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfY2dyb3VwLmNcbkBAIC0xNjEsNiAmIzQzOzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcbiAgKi9cbiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjdHJsLVx1MDAzZW1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXHUwMDNlbWFwYCBpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gY2hhcmdlIG9wZXJhdGlvbnMgYW5kIGNncm91cCB2MSB0YXNrIG1pZ3JhdGlvbnMuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9jZ3JvdXAuYyBiL21tL3N3YXBfY2dyb3VwLmMKaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX2Nncm91cC5jCkBAIC0xNjEsNiAmIzQzOzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCwKICAqLwogdW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudCkKIHsKJiM0MzsJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7CiYjNDM7CiYjNDM7CWN0cmwgPSAmYW1wO3N3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07CiYjNDM7CWlmICh1bmxpa2VseSghY3RybC0mZ3Q7bWFwKSkKJiM0MzsJCXJldHVybiAwOwogCXJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS0mZ3Q7aWQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2FwIENncm91cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vc3dhcF9jZ3JvdXAuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBjaGVjazogYCFjdHJsLSZndDttYXBgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHRvIGdldCB0aGUgSUQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0JiMzOTtzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYHN3YXBfY2dyb3VwX2N0cmxgIGFycmF5LCB3aGljaCBpcyBpbmRleGVkIGJ5IHRoZSBzd2FwIHR5cGUgZGVyaXZlZCBmcm9tIHRoZSBgc3dwX2VudHJ5X3RgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJiMzOTtkIGJlIGJsaW5kbHkgY2FsbGluZyBgbG9va3VwX3N3YXBfY2dyb3VwYCB3aGljaCBjb3VsZCBsZWFkIHRvIHRyb3VibGUgaWYgdGhlIGBtYXBgIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9jZ3JvdXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYGN0cmwtJmd0O21hcGAgYmVpbmcgTlVMTC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM5O21hcCYjMzk7IHJlcHJlc2VudHMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgYWJzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb2t1cF9zd2FwX2Nncm91cF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9jZ3JvdXAuYz0xMjY9dW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vc3dhcF9jZ3JvdXAuYy0xNTYtLyoqXG5tbS9zd2FwX2Nncm91cC5jOjE1NzogKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnlcbm1tL3N3YXBfY2dyb3VwLmMtMTU4LSAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgbG9va2VkIHVwLlxuLS1cbm1tL3N3YXBfY2dyb3VwLmMtMTYxLSAqL1xubW0vc3dhcF9jZ3JvdXAuYzoxNjI6dW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudClcbm1tL3N3YXBfY2dyb3VwLmMtMTYzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHNlZSB3aGF0IG90aGVyIGNvZGUgZGVwZW5kcyBvbiBpdCwgYW5kIHdoYXQsIGluIHR1cm4sIGRlcGVuZHMgb24gKnRoYXQqLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBjYWxsIGdyYXBoLCB5b3Uga25vdz8gVGhpcyBmdW5jdGlvbuKAmXMgdXNhZ2Ugd2lsbCBiZSBhIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW3igJlzIGJlaGF2aW9yIHJlZ2FyZGluZyBzd2FwIGFuZCBjZ3JvdXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX3N3YXBfY2dyb3VwX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0xMT1leHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmgtMTItXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbnJfZW50cyk7XG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmg6MTM6ZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpO1xuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTE0LWV4dGVybiBpbnQgc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oPTI2PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaDoyNzp1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTI4LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9ODg2PXN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy05NTYtXHRpZiAoZW50LnZhbCBcdTAwMjZcdTAwMjYgIXJldCBcdTAwMjZcdTAwMjYgKCFwYWdlIHx8ICFQYWdlVHJhbnNDb21wb3VuZChwYWdlKSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLXYxLmM6OTU3Olx0ICAgIG1lbV9jZ3JvdXBfaWQobWMuZnJvbSkgPT0gbG9va3VwX3N3YXBfY2dyb3VwX2lkKGVudCkpIHtcbm1tL21lbWNvbnRyb2wtdjEuYy05NTgtXHRcdHJldCA9IE1DX1RBUkdFVF9TV0FQO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NTA3PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1MTYtXG5tbS9tZW1jb250cm9sLmM6NDUxNzpcdGlkID0gbG9va3VwX3N3YXBfY2dyb3VwX2lkKGVudHJ5KTtcbm1tL21lbWNvbnRyb2wuYy00NTE4LVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL3N3YXBfY2dyb3VwLmM9MTI2PXVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL3N3YXBfY2dyb3VwLmMtMTU2LS8qKlxubW0vc3dhcF9jZ3JvdXAuYzoxNTc6ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XG5tbS9zd2FwX2Nncm91cC5jLTE1OC0gKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGxvb2tlZCB1cC5cbi0tXG5tbS9zd2FwX2Nncm91cC5jLTE2MS0gKi9cbm1tL3N3YXBfY2dyb3VwLmM6MTYyOnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG5tbS9zd2FwX2Nncm91cC5jLTE2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb2RlIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgY29kZSBzbmlwcGV0IGlzIHVzZWQgaW4gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgYW5kIGBnZXRfbWN0Z3RfdHlwZWAuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb250ZXh0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGNvbnRyb2xzIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBtbS9zd2FwX2Nncm91cC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBlbmFibGUgZmxhZ3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyB0aGUgYmVoYXZpb3IgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2Nncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1pZmRlZiBDT05GSUdfU1dBUFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IHN3YXBfY2dyb3VwLm9cbm1tL01ha2VmaWxlLTEwMy1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHNldHVwIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01FTUNHYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMuIEJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhleSYjMzk7cmUgc2V0IHVwLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2AsIHNpbmNlIGl0IGRlYWxzIHdpdGggY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGBtbS9LY29uZmlnYCwgYXMgYm90aCBkZWFsIHdpdGggdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggd291bGQgbWFrZSBtb3JlIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCB0aGUgZGVhbCBpcyB3aXRoIHRoZXNlIHR3byBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTk1Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctOTY1LVxuaW5pdC9LY29uZmlnOjk2Njpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy05NjctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTk3My1cbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctOTc1LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBDT05GSUdfU1dBUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBzdGF0dXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHN3YXAgaXMgZW5hYmxlZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyMjk9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjMxLVxuYXJjaC9taXBzL0tjb25maWc6MTIzMjpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTIzMy1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI5PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEzMS1cbmFyY2gvc2gvS2NvbmZpZzoxMzI6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXHRib29sXG4tLVxubW0vS2NvbmZpZz0xMj1jb25maWcgWlBPT0xcbi0tXG5tbS9LY29uZmlnLTE0LVxubW0vS2NvbmZpZzoxNTptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBJbnRlcmFjdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBzd2FwIGFuZCBtZW1vcnkgY2dyb3VwcyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZW0sIHdoaWNoIGFyZSBgU1dBUGAgYW5kIGBNRU1DR2AsIG9idmlvdXNseS4gVGhlIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uIGlzIHRoaXMgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gTm93LCBpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpdHNlbGYgYSBnb29kIGZvY3VzIHN5bWJvbCBmb3IgbXkgaW52ZXN0aWdhdGlvbj8gSXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIHRoZSBwb2ludCB3aGVyZSBzd2FwLWluIGFuZCBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgY29tZSB0b2dldGhlci4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYSBiaXQgZGVlcGVyIGFuZCBzZWUgaG93IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGZvbGlvIGNoYXJnaW5nIGR1cmluZyBzd2FwLWluIG9wZXJhdGlvbnMsIGFuZCB3aGF0IHRoaXMgY2dyb3VwIElEIGxvb2t1cCBpcyBkb2luZyB0byBpbXBhY3QgbWVtb3J5IG1hbmFnZW1lbnQgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NzU9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3ODppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc5LVx0XHRcdFx0ICBnZnBfdCBnZnAsIHN3cF9lbnRyeV90IGVudHJ5KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTY3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTcyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE3MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzQtXHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCwgc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0Nzc9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDk1LS8qKlxubW0vbWVtY29udHJvbC5jOjQ0OTY6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNDQ5Ny0gKiBAZm9saW86IGZvbGlvIHRvIGNoYXJnZS5cbi0tXG5tbS9tZW1jb250cm9sLmMtNDUwNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo0NTA3OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tZW1jb250cm9sLmMtNDUwOC1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9tZW1vcnkuYz0zOTk3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQwOTgtXG5tbS9tZW1vcnkuYzo0MDk5Olx0XHRcdFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbyxcbm1tL21lbW9yeS5jLTQxMDAtXHRcdFx0XHRcdFx0XHR2bWEtXHUwMDNldm1fbW0sIEdGUF9LRVJORUwsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQzMj1zdHJ1Y3QgZm9saW8gKl9fcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDkxLVx0XHQgKiBpcyBzZXQgYnV0IHRoZSBmb2xpbyBpcyBub3QgdGhlIHN3YXAgY2FjaGUgeWV0LiBUaGlzIGNhblxubW0vc3dhcF9zdGF0ZS5jOjQ5MjpcdFx0ICogaGFwcGVuIHRvZGF5IGlmIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbygpIGJlbG93XG5tbS9zd2FwX3N0YXRlLmMtNDkzLVx0XHQgKiB0cmlnZ2VycyByZWNsYWltIHRocm91Z2ggenN3YXAsIHdoaWNoIG1heSBjYWxsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUxNS1cbm1tL3N3YXBfc3RhdGUuYzo1MTY6XHRpZiAobWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKGZvbGlvLCBOVUxMLCBnZnBfbWFzaywgZW50cnkpKVxubW0vc3dhcF9zdGF0ZS5jLTUxNy1cdFx0Z290byBmYWlsX3VubG9jaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBNZW1vcnkgQ2hhcmdlIFBvaW50cyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyBzd2FwLWluIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBwcmV0dHkgY2VudHJhbCBoZXJlIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBmb2N1cyBwb2ludCwgZ2l2ZW4gaXRzIGludm9sdmVtZW50IHdpdGggYm90aCBgZG9fc3dhcF9wYWdlYCBhbmQgYF9fcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGtleSBjb21wb25lbnQgaW4gdGhlIHN3YXAtaW4gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIG1hbmFnZWQuIEl0JiMzOTtzIGEgY2xlYXIgc3ltYm9sIGZvciBtZSB0byBmb2N1cyBvbi4KCkJ1dCB0aGVuLCBteSBtaW5kIGRyaWZ0cy4gV2hpbGUgbG9va2luZyBhdCB0aGlzLCBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBXaGF0IGFib3V0IGBnZXRfbWN0Z3RfdHlwZWA/IElzIHRoYXQgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gY29uc2lkZXIgaW4gdGhpcyBjb250ZXh0PyBJJiMzOTtsbCBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwLWluIHByb2Nlc3MuIEl0JiMzOTtzIGltcG9ydGFudCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgYW5kIGluZmx1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9tY3RndF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz03NTc9c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy04NjUtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6ODY2OiAqIGdldF9tY3RndF90eXBlIC0gZ2V0IHRhcmdldCB0eXBlIG9mIG1vdmluZyBjaGFyZ2Vcbm1tL21lbWNvbnRyb2wtdjEuYy04NjctICogQHZtYTogdGhlIHZtYSB0aGUgcHRlIHRvIGJlIGNoZWNrZWQgYmVsb25nc1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy04ODUtICovXG5tbS9tZW1jb250cm9sLXYxLmM6ODg2OnN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTg4Ny1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGVudCwgdW5pb24gbWNfdGFyZ2V0ICp0YXJnZXQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTk3MC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzo5NzE6c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTk3Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCBwbWQsIHVuaW9uIG1jX3RhcmdldCAqdGFyZ2V0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMDAxLSNlbHNlXG5tbS9tZW1jb250cm9sLXYxLmM6MTAwMjpzdGF0aWMgaW5saW5lIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTEwMDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kLCB1bmlvbiBtY190YXJnZXQgKnRhcmdldClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTAwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfcHJlY2hhcmdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMDIzLVx0XHQgKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMDI0Olx0XHRpZiAoZ2V0X21jdGd0X3R5cGVfdGhwKHZtYSwgYWRkciwgKnBtZCwgTlVMTCkgPT0gTUNfVEFSR0VUX1BBR0UpXG5tbS9tZW1jb250cm9sLXYxLmMtMTAyNS1cdFx0XHRtYy5wcmVjaGFyZ2UgJiM0Mzs9IEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTAzMy1cdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKVxubW0vbWVtY29udHJvbC12MS5jOjEwMzQ6XHRcdGlmIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSksIE5VTEwpKVxubW0vbWVtY29udHJvbC12MS5jLTEwMzUtXHRcdFx0bWMucHJlY2hhcmdlJiM0MzsmIzQzOztcdC8qIGluY3JlbWVudCBwcmVjaGFyZ2UgdGVtcG9yYXJpbHkgKi9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTIwNj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEyMjMtXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzoxMjI0Olx0XHR0YXJnZXRfdHlwZSA9IGdldF9tY3RndF90eXBlX3RocCh2bWEsIGFkZHIsICpwbWQsIFx1MDAyNnRhcmdldCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTIyNS1cdFx0aWYgKHRhcmdldF90eXBlID09IE1DX1RBUkdFVF9QQUdFKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEyNjItXG5tbS9tZW1jb250cm9sLXYxLmM6MTI2MzpcdFx0c3dpdGNoIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZW50LCBcdTAwMjZ0YXJnZXQpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMTI2NC1cdFx0Y2FzZSBNQ19UQVJHRVRfREVWSUNFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg2LVx0XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jOjEyODc6cHV0Olx0XHRcdC8qIGdldF9tY3RndF90eXBlKCkgZ2V0cyBcdTAwMjYgbG9ja3MgdGhlIHBhZ2UgKi9cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg4LVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqVHJhY2luZyB0aGUgTWVtb3J5IENoYXJnZSBGbG93KioKCk9rYXksIHNvIGBnZXRfbWN0Z3RfdHlwZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY2FsbCBzdGFjayBsb29rcyBsaWtlIHRoaXM6IGBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV9wdGVfcmFuZ2VgIGFuZCBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2VgIGJvdGggY2FsbCBpdC4gVGhleSBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZWAuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgbWVtb3J5IGFjY291bnRpbmcgYW5kIGNoYXJnZSBtb3ZlbWVudCwgSSBuZWVkIHRvIGRpZyBpbnRvIGBtZW1fY2dyb3VwX21vdmVfY2hhcmdlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBtdXN0IHJlc2lkZSwgZ2l2ZW4gdGhlIGNhbGwgaGllcmFyY2h5LiBJJiMzOTtsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX21vdmVfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz01ODY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9tb3ZlX3N3YXBfYWNjb3VudChzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNTkyLVxubW0vbWVtY29udHJvbC12MS5jOjU5MzpzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxubW0vbWVtY29udHJvbC12MS5jLTU5NC1cdFx0XHRcdHN0cnVjdCBjZnR5cGUgKmNmdClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNTk5LSNpZmRlZiBDT05GSUdfTU1VXG5tbS9tZW1jb250cm9sLXYxLmM6NjAwOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxubW0vbWVtY29udHJvbC12MS5jLTYwMS1cdFx0XHRcdCBzdHJ1Y3QgY2Z0eXBlICpjZnQsIHU2NCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYyMS0jZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjYyMjpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbm1tL21lbWNvbnRyb2wtdjEuYy02MjMtXHRcdFx0XHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xMjAwPXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjA1LVxubW0vbWVtY29udHJvbC12MS5jOjEyMDY6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWVtY29udHJvbC12MS5jLTEyMDctXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xMzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY2hhcmdlX3dhbGtfb3BzID0ge1xubW0vbWVtY29udHJvbC12MS5jOjEzMjM6XHQucG1kX2VudHJ5XHQ9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlLFxubW0vbWVtY29udHJvbC12MS5jLTEzMjQtXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzMjYtXG5tbS9tZW1jb250cm9sLXYxLmM6MTMyNzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTMyOC17XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTEzNTk9dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzNjEtXHRpZiAobWMudG8pIHtcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzYyOlx0XHRtZW1fY2dyb3VwX21vdmVfY2hhcmdlKCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTM2My1cdFx0bWVtX2Nncm91cF9jbGVhcl9tYygpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNzczPXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjgyNy1cdFx0Lm5hbWUgPSBcJiMzNDttb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjgyODpcdFx0LnJlYWRfdTY0ID0gbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkLFxubW0vbWVtY29udHJvbC12MS5jOjI4Mjk6XHRcdC53cml0ZV91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlLFxubW0vbWVtY29udHJvbC12MS5jLTI4MzAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1lbWNnMV9tb3ZlX3Rhc2sqKgoKT2theSwgc28gYG1lbWNnMV9tb3ZlX3Rhc2tgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX21vdmVfdGFza2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgaGlnaGVyLWxldmVsIGludGVyZmFjZSBpbiBgbW0vbWVtY29udHJvbC5jYCBvciBhIHNpbWlsYXIgZmlsZSB0aGF0IEkgd291bGQgZXhwZWN0IHRvIGZpbmQgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgbG9naWMuIExldCYjMzk7cyBkaWcgaW50byBgbWVtY2cxX21vdmVfdGFza2AgYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIG1lY2hhbmljcyBvZiBtb3ZpbmcgYSB0YXNrIGJldHdlZW4gbWVtb3J5IGNncm91cHMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IExldCYjMzk7cyBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnMV9tb3ZlX3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTEzMjc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZSh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMzU4LVxubW0vbWVtY29udHJvbC12MS5jOjEzNTk6dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTM2MC17XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTEzNzI9dm9pZCBtZW1jZzFfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzNzQtfVxubW0vbWVtY29udHJvbC12MS5jOjEzNzU6dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTM3Ni17XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTg2PXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbm1tL21lbWNvbnRyb2wtdjEuaDo4Nzp2b2lkIG1lbWNnMV9tb3ZlX3Rhc2sodm9pZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtODgtdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM5MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ0MDQtXHQuY2FuY2VsX2F0dGFjaCA9IG1lbWNnMV9jYW5jZWxfYXR0YWNoLFxubW0vbWVtY29udHJvbC5jOjQ0MDU6XHQucG9zdF9hdHRhY2ggPSBtZW1jZzFfbW92ZV90YXNrLFxubW0vbWVtY29udHJvbC5jLTQ0MDYtXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRocm91Z2ggaXRzIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIGBtZW1jZzFfbW92ZV90YXNrYCBpcyBhY3RpbmcgYXMgdGhlIGNhbGxiYWNrIHRoYXQgcnVucyBhZnRlciBhIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgaXMgYXR0YWNoZWQgdmlhIGBtZW1vcnlfY2dycF9zdWJzeXNgLiBJIHVuZGVyc3RhbmQgdGhhdC4gVGhlbiwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgdGllZCBpbnRvIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHN3YXBwaW5nIHBlcnNwZWN0aXZlLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoaXMgbmV3IGNoZWNrIHdpdGhpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYDogYGlmICh1bmxpa2VseSghY3RybC0mZ3Q7bWFwKSkgcmV0dXJuIDA7YC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY3RybC0mZ3Q7bWFwYCBwb2ludGVyIGlzIE5VTEwuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgYSBjcmFzaC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGtub3cgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGJlY2F1c2Ugb2YgYG1lbWNnMV9tb3ZlX3Rhc2tgLiBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19TV0FQYCBhcmUgYWxzbyBjbGVhcmx5IG5lY2Vzc2FyeSBmb3IgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgaW4gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTk2Nj1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctOTczLVxuaW5pdC9LY29uZmlnOjk3NDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy05NzUtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4NQoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBNRU1DR19WMWAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNRU1DR19WMWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQgY2hlY2tzIG91dC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSB0YXJnZXRlZCBmaXguCgpUaGUga2V5IHBvaW50cyBhcmU6IHRoZSBzeXN0ZW0mIzM5O3MgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCwgd2UmIzM5O3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gb24gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgYXJlIGBTV0FQYCwgYE1FTUNHYCwgYW5kLCBvZiBjb3Vyc2UsIGBNRU1DR19WMWAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZml4IGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBjaGVjayBjb25jZXJuaW5nIGBjdHJsLSZndDttYXBgIHdpdGhpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCB3aGVuIGNncm91cCB2MSB0YXNrcyBtaWdyYXRlLCB3aGljaCBwb2ludHMgdG93YXJkcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgYSB2dWxuZXJhYmlsaXR5IHdpbmRvdyBkdXJpbmcgdGhlc2Ugc3BlY2lmaWMgYWN0aXZpdGllcy4gQWRkaW5nIHRoaXMgY2hlY2sgaXMgY2xlYXJseSBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlLiBUaGUgcG90ZW50aWFsIGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3b3VsZCBkZWZpbml0ZWx5IGJlIGJhZCBuZXdzLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZXkgYXJlIHRha2luZyBhY3Rpb24gaW4gdGhpcyBzcGFjZS4gSSB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXggaW4gbW9yZSBkZXB0aCwgYW5kIHdpbGwgZm9sbG93IHRoZSBwcm9ncmVzcyBvZiB0aGVzZSBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGZvciBgY3RybC1cdTAwM2VtYXBgIGluIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHYxIHRhc2sgbWlncmF0aW9ucy4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTdkY2NjNWY1YTdlZDMwNWJkMmIwZWY0ZWE5ZDA5NzZlNWZkOTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MTk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuYwppbmRleCBkYjZjNGEyNmNmNTkzLi4yZDA0MjVmNGE2YjljIDEwMDY0NAotLS0gYS9tbS9zd2FwX2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfY2dyb3VwLmMKQEAgLTE2MSw2ICYjNDM7MTYxLDExIEBAIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLAogICovCiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKJiM0MzsKJiM0MzsJY3RybCA9ICZhbXA7c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTsKJiM0MzsJaWYgKHVubGlrZWx5KCFjdHJsLSZndDttYXApKQomIzQzOwkJcmV0dXJuIDA7CiAJcmV0dXJuIGxvb2t1cF9zd2FwX2Nncm91cChlbnQsIE5VTEwpLSZndDtpZDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2dyb3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vc3dhcF9jZ3JvdXAuY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGEgbmV3IGNoZWNrOiBgaWYgKHVubGlrZWx5KCFjdHJsLSZndDttYXApKSByZXR1cm4gMDtgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIHBvaW50ZXIgY2hlY2ssIG9yIG1vcmUgYWNjdXJhdGVseSwgYW4gdW5pbml0aWFsaXplZCBtYXAgY2hlY2sgb24gdGhlIGBjdHJsLSZndDttYXBgIHBvaW50ZXIuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBjcmFzaCBzY2VuYXJpbzogYSBOVUxMIGRlcmVmZXJlbmNlIG9yLCBldmVuIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG1hcCBwb2ludGVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IGBjdHJsLSZndDttYXBgIG1pZ2h0IGJlY29tZSBOVUxMLiBMZXQmIzM5O3MgZGlnIGludG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgZnVuY3Rpb24gaXMgdG8gcHJldmVudCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBjcmFzaCBmaXguCgpOb3csIG15IG1vcmUgYWR2YW5jZWQga2VybmVsIGRlYnVnZ2luZyBpbnN0aW5jdHMga2ljayBpbi4gRG9lcyB0aGlzICppbnRyb2R1Y2UqIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgYnkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGFua2Z1bGx5IG5vdC4gVGhlIHBhdGNoIGp1c3QgcmV0dXJucyBgMGAgaWYgdGhlIG1hcCBpcyBOVUxMLiBTbywgaXQgc2ltcGx5IGF2b2lkcyB0aGUgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaXQgaXMganVzdCBhIGJ1Z2ZpeCBmb3Igd2hhdCBJIGFscmVhZHkgZGVkdWNlZDogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpJJiMzOTtkIGV4cGVjdCBLQVNBTiBvciB0aGUgc3RhbmRhcmQga2VybmVsIGNoZWNrcyB0byBjYXRjaCBhIGNyYXNoIGxpa2UgdGhpcyAodGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgdGhhdCBpcykuIEtNU0FOIGlzIHdoYXQgSSYjMzk7ZCB1c2UgaWYgSSBzdXNwZWN0ZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGJlaW5nIGFjY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHNvbGlkIGZpeC4gSSYjMzk7bGwgdGFrZSBvbmUgbW9yZSBsb29rIGF0IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcF9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XHR9XG4gMTUxOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDE1MjpcdFxuIDE1MzpcdFx0cmV0dXJuIG9sZDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LyoqXG4gMTU3Olx0ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XG4gMTU4Olx0ICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXG4gMTU5Olx0ICpcbiAxNjA6XHQgKiBSZXR1cm5zIElEIG9mIG1lbV9jZ3JvdXAgYXQgc3VjY2Vzcy4gMCBhdCBmYWlsdXJlLiAoMCBpcyBpbnZhbGlkIElEKVxuIDE2MTpcdCAqL1xuIDE2MjpcdHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG4gMTYzOlx0e1xuIDE2NDpcdFx0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XG4gMTY1Olx0XG4gMTY2Olx0XHRjdHJsID0gXHUwMDI2c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTtcbiAxNjc6XHRcdGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKVxuIDE2ODpcdFx0XHRyZXR1cm4gMDtcbiAxNjk6XHRcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiAxNzA6XHR9XG4gMTcxOlx0XG4gMTcyOlx0aW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpXG4gMTczOlx0e1xuIDE3NDpcdFx0dm9pZCAqYXJyYXk7XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIGxlbmd0aDtcbiAxNzY6XHRcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiAxNzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDEKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrIGZvciBgIWN0cmwtJmd0O21hcGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgYGN0cmwtJmd0O21hcGAgaW5zaWRlIGBsb29rdXBfc3dhcF9jZ3JvdXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgY2hlY2sg4oCTIG5vdGhpbmcgZmFuY3ksIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpGcmFua2x5LCBhbnkgZGVjZW50IHN0YXRpYyBhbmFseXNpcyB0b29sIG9yIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLCBpbmNsdWRpbmcgS0FTQU4sIHdvdWxkJiMzOTt2ZSBjYXVnaHQgdGhpcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFueXdheS4gS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGJhc2ljIGRlZmVuc2l2ZSBjb2RpbmcgcHJhY3RpY2UsIG5vdCBzb21lIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgYnV0IG5vdCBhIEtNU0FOIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo0Ni4wNDYxNzgzNjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTYxODE4NTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGAhY3RybC1cXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NDYuMDQ2MTgzODYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNDIyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODoxOTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xcbmluZGV4IGRiNmM0YTI2Y2Y1OTMuLjJkMDQyNWY0YTZiOWMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9jZ3JvdXAuY1xcbisrKyBiL21tL3N3YXBfY2dyb3VwLmNcXG5AQCAtMTYxLDYgKzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gICovXFxuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxuIHtcXG4rXFx0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XFxuK1xcbitcXHRjdHJsID0gXFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XFxuK1xcdGlmICh1bmxpa2VseSghY3RybC1cXHUwMDNlbWFwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cXHUwMDNlaWQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjE5OjQ3LjIzMDUyNDkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgwMDY1OTQ2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjE5OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9jZ3JvdXAuYyBiL21tL3N3YXBfY2dyb3VwLmNcbmluZGV4IGRiNmM0YTI2Y2Y1OTMuLjJkMDQyNWY0YTZiOWMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX2Nncm91cC5jXG4rKysgYi9tbS9zd2FwX2Nncm91cC5jXG5AQCAtMTYxLDYgKzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcbiAgKi9cbiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuIHtcbitcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xuK1xuK1x0Y3RybCA9IFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XG4rXHRpZiAodW5saWtlbHkoIWN0cmwtXHUwMDNlbWFwKSlcbitcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gbG9va3VwX3N3YXBfY2dyb3VwKGVudCwgTlVMTCktXHUwMDNlaWQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NDcuMjMwNTI2NDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk4MDU5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN3YXAgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vc3dhcF9jZ3JvdXAuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtZXNzaW5nIHdpdGggdGhlIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGNoZWNrOiBgIWN0cmwtXHUwMDNlbWFwYCBiZWZvcmUgZGVyZWZlcmVuY2luZyB0byBnZXQgdGhlIElELiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBJdCdzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYHN3YXBfY2dyb3VwX2N0cmxgIGFycmF5LCB3aGljaCBpcyBpbmRleGVkIGJ5IHRoZSBzd2FwIHR5cGUgZGVyaXZlZCBmcm9tIHRoZSBgc3dwX2VudHJ5X3RgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgYmUgYmxpbmRseSBjYWxsaW5nIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHdoaWNoIGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBpZiB0aGUgYG1hcGAgaXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9jZ3JvdXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYGN0cmwtXHUwMDNlbWFwYCBiZWluZyBOVUxMLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICdtYXAnIHJlcHJlc2VudHMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgYWJzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTAuOTI4NTg5NDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIxNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb2t1cF9zd2FwX2Nncm91cF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfY2dyb3VwLmM9MTI2PXVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vc3dhcF9jZ3JvdXAuYy0xNTYtLyoqXFxubW0vc3dhcF9jZ3JvdXAuYzoxNTc6ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XFxubW0vc3dhcF9jZ3JvdXAuYy0xNTgtICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXFxuLS1cXG5tbS9zd2FwX2Nncm91cC5jLTE2MS0gKi9cXG5tbS9zd2FwX2Nncm91cC5jOjE2Mjp1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxcbm1tL3N3YXBfY2dyb3VwLmMtMTYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTAuOTc0MTE0ODU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4MjQzODE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCBvdGhlciBjb2RlIGRlcGVuZHMgb24gaXQsIGFuZCB3aGF0LCBpbiB0dXJuLCBkZXBlbmRzIG9uICp0aGF0Ki4gSXTigJlzIGFsbCBhYm91dCB0aGUgY2FsbCBncmFwaCwgeW91IGtub3c/IFRoaXMgZnVuY3Rpb27igJlzIHVzYWdlIHdpbGwgYmUgYSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVt4oCZcyBiZWhhdmlvciByZWdhcmRpbmcgc3dhcCBhbmQgY2dyb3Vwcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo1My44NTY1NTUzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjQ2Mzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29rdXBfc3dhcF9jZ3JvdXBfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0xMT1leHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTEyLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbnJfZW50cyk7XFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oOjEzOmV4dGVybiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmgtMTQtZXh0ZXJuIGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0yNj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oOjI3OnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTI4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz04ODY9c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtOTU2LVxcdGlmIChlbnQudmFsIFxcdTAwMjZcXHUwMDI2ICFyZXQgXFx1MDAyNlxcdTAwMjYgKCFwYWdlIHx8ICFQYWdlVHJhbnNDb21wb3VuZChwYWdlKSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLXYxLmM6OTU3OlxcdCAgICBtZW1fY2dyb3VwX2lkKG1jLmZyb20pID09IGxvb2t1cF9zd2FwX2Nncm91cF9pZChlbnQpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTk1OC1cXHRcXHRyZXQgPSBNQ19UQVJHRVRfU1dBUDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NTA3PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDUxNi1cXG5tbS9tZW1jb250cm9sLmM6NDUxNzpcXHRpZCA9IGxvb2t1cF9zd2FwX2Nncm91cF9pZChlbnRyeSk7XFxubW0vbWVtY29udHJvbC5jLTQ1MTgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxubW0vc3dhcF9jZ3JvdXAuYz0xMjY9dW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5tbS9zd2FwX2Nncm91cC5jLTE1Ni0vKipcXG5tbS9zd2FwX2Nncm91cC5jOjE1NzogKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnlcXG5tbS9zd2FwX2Nncm91cC5jLTE1OC0gKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGxvb2tlZCB1cC5cXG4tLVxcbm1tL3N3YXBfY2dyb3VwLmMtMTYxLSAqL1xcbm1tL3N3YXBfY2dyb3VwLmM6MTYyOnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxubW0vc3dhcF9jZ3JvdXAuYy0xNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo1NS43MTkwMjQ2MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE4MzUxOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGNvZGUgc25pcHBldCBpcyB1c2VkIGluIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGFuZCBgZ2V0X21jdGd0X3R5cGVgLiBUaGF0IGdpdmVzIG1lIGEgYmFzaWMgY29udGV4dC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBjb250cm9scyB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgbW0vc3dhcF9jZ3JvdXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlIGZsYWdzLiBMZXQncyBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTguNjM3Mzc5NzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjIwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMT1pZmRlZiBDT05GSUdfU1dBUFxcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfTUVNQ0cpICs9IHN3YXBfY2dyb3VwLm9cXG5tbS9NYWtlZmlsZS0xMDMtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTguNzA5MDA1NTgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNDA5ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgc2V0dXAgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cy4gQmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byBjb25maXJtIGhvdyB0aGV5J3JlIHNldCB1cC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgZWl0aGVyIGBpbml0L0tjb25maWdgLCBzaW5jZSBpdCBkZWFscyB3aXRoIGNvcmUgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBvciBgbW0vS2NvbmZpZ2AsIGFzIGJvdGggZGVhbCB3aXRoIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIHdvdWxkIG1ha2UgbW9yZSBzZW5zZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB3aGF0IHRoZSBkZWFsIGlzIHdpdGggdGhlc2UgdHdvIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDowNy44NDMxMDgyNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTgxNzU5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9OTU2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTk2NS1cXG5pbml0L0tjb25maWc6OTY2OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy05NjctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctOTczLVxcbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTk3NS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDowOS41MDEzMDIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY0NjA3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBDT05GSUdfU1dBUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBzdGF0dXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHN3YXAgaXMgZW5hYmxlZCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoxMS43NjU5MTI1ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDY5OTQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyMjk9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyMzEtXFxuYXJjaC9taXBzL0tjb25maWc6MTIzMjpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyMzMtXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyOT1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEzMS1cXG5hcmNoL3NoL0tjb25maWc6MTMyOmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMy1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTEyPWNvbmZpZyBaUE9PTFxcbi0tXFxubW0vS2NvbmZpZy0xNC1cXG5tbS9LY29uZmlnOjE1Om1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoxMy4yNzI5MTIzOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MTA2MzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBJbnRlcmFjdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgc3dhcCBhbmQgbWVtb3J5IGNncm91cHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0aGVtLCB3aGljaCBhcmUgYFNXQVBgIGFuZCBgTUVNQ0dgLCBvYnZpb3VzbHkuIFRoZSBjb2RlIHBhdGggdGhhdCdzIGdyYWJiZWQgbXkgYXR0ZW50aW9uIGlzIHRoaXMgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gTm93LCBpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpdHNlbGYgYSBnb29kIGZvY3VzIHN5bWJvbCBmb3IgbXkgaW52ZXN0aWdhdGlvbj8gSXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgdGhlIHBvaW50IHdoZXJlIHN3YXAtaW4gYW5kIGNncm91cCBtZW1vcnkgYWNjb3VudGluZyBjb21lIHRvZ2V0aGVyLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSBob3cgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgZm9saW8gY2hhcmdpbmcgZHVyaW5nIHN3YXAtaW4gb3BlcmF0aW9ucywgYW5kIHdoYXQgdGhpcyBjZ3JvdXAgSUQgbG9va3VwIGlzIGRvaW5nIHRvIGltcGFjdCBtZW1vcnkgbWFuYWdlbWVudCB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjE2LjUzMzk3ODgzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzcxNTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3NT1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Njc4OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc5LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTY3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE3MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTc0LVxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnAsIHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0Nzc9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0OTUtLyoqXFxubW0vbWVtY29udHJvbC5jOjQ0OTY6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTQ0OTctICogQGZvbGlvOiBmb2xpbyB0byBjaGFyZ2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDUwNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NDUwNzppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21lbWNvbnRyb2wuYy00NTA4LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL21lbW9yeS5jPTM5OTc9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00MDk4LVxcbm1tL21lbW9yeS5jOjQwOTk6XFx0XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbyxcXG5tbS9tZW1vcnkuYy00MTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYS1cXHUwMDNldm1fbW0sIEdGUF9LRVJORUwsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDMyPXN0cnVjdCBmb2xpbyAqX19yZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQ5MS1cXHRcXHQgKiBpcyBzZXQgYnV0IHRoZSBmb2xpbyBpcyBub3QgdGhlIHN3YXAgY2FjaGUgeWV0LiBUaGlzIGNhblxcbm1tL3N3YXBfc3RhdGUuYzo0OTI6XFx0XFx0ICogaGFwcGVuIHRvZGF5IGlmIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbygpIGJlbG93XFxubW0vc3dhcF9zdGF0ZS5jLTQ5My1cXHRcXHQgKiB0cmlnZ2VycyByZWNsYWltIHRocm91Z2ggenN3YXAsIHdoaWNoIG1heSBjYWxsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTE1LVxcbm1tL3N3YXBfc3RhdGUuYzo1MTY6XFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbywgTlVMTCwgZ2ZwX21hc2ssIGVudHJ5KSlcXG5tbS9zd2FwX3N0YXRlLmMtNTE3LVxcdFxcdGdvdG8gZmFpbF91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjE3Ljk3MTY5OTcxOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY5NzQ4NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBQb2ludHMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGhhbmRsZWQgZHVyaW5nIHN3YXAtaW4gb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIHByZXR0eSBjZW50cmFsIGhlcmUg4oCTIGl0J3MgZGVmaW5pdGVseSBhIGNydWNpYWwgZm9jdXMgcG9pbnQsIGdpdmVuIGl0cyBpbnZvbHZlbWVudCB3aXRoIGJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBfX3JlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBrZXkgY29tcG9uZW50IGluIHRoZSBzd2FwLWluIHByb2Nlc3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBtYW5hZ2VkLiBJdCdzIGEgY2xlYXIgc3ltYm9sIGZvciBtZSB0byBmb2N1cyBvbi5cblxuQnV0IHRoZW4sIG15IG1pbmQgZHJpZnRzLiBXaGlsZSBsb29raW5nIGF0IHRoaXMsIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFdoYXQgYWJvdXQgYGdldF9tY3RndF90eXBlYD8gSXMgdGhhdCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQ/IEknbGwgaGF2ZSB0byBkaWcgZGVlcGVyIGludG8gaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3dhcC1pbiBwcm9jZXNzLiBJdCdzIGltcG9ydGFudCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgYW5kIGluZmx1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoyMi4xNDE0NTE1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzcxMzA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbWN0Z3RfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTc1Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtODY1LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzo4NjY6ICogZ2V0X21jdGd0X3R5cGUgLSBnZXQgdGFyZ2V0IHR5cGUgb2YgbW92aW5nIGNoYXJnZVxcbm1tL21lbWNvbnRyb2wtdjEuYy04NjctICogQHZtYTogdGhlIHZtYSB0aGUgcHRlIHRvIGJlIGNoZWNrZWQgYmVsb25nc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTg4NS0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6ODg2OnN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy04ODctXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGVudCwgdW5pb24gbWNfdGFyZ2V0ICp0YXJnZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtOTcwLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzo5NzE6c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy05NzItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCBwbWQsIHVuaW9uIG1jX3RhcmdldCAqdGFyZ2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEwMDEtI2Vsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTAwMjpzdGF0aWMgaW5saW5lIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDAzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kLCB1bmlvbiBtY190YXJnZXQgKnRhcmdldClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMDA5PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTAyMy1cXHRcXHQgKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MTAyNDpcXHRcXHRpZiAoZ2V0X21jdGd0X3R5cGVfdGhwKHZtYSwgYWRkciwgKnBtZCwgTlVMTCkgPT0gTUNfVEFSR0VUX1BBR0UpXFxubW0vbWVtY29udHJvbC12MS5jLTEwMjUtXFx0XFx0XFx0bWMucHJlY2hhcmdlICs9IEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDMzLVxcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMDM0OlxcdFxcdGlmIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSksIE5VTEwpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDM1LVxcdFxcdFxcdG1jLnByZWNoYXJnZSsrO1xcdC8qIGluY3JlbWVudCBwcmVjaGFyZ2UgdGVtcG9yYXJpbHkgKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMjA2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjIzLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTIyNDpcXHRcXHR0YXJnZXRfdHlwZSA9IGdldF9tY3RndF90eXBlX3RocCh2bWEsIGFkZHIsICpwbWQsIFxcdTAwMjZ0YXJnZXQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjI1LVxcdFxcdGlmICh0YXJnZXRfdHlwZSA9PSBNQ19UQVJHRVRfUEFHRSkge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEyNjItXFxubW0vbWVtY29udHJvbC12MS5jOjEyNjM6XFx0XFx0c3dpdGNoIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZW50LCBcXHUwMDI2dGFyZ2V0KSkge1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjY0LVxcdFxcdGNhc2UgTUNfVEFSR0VUX0RFVklDRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg2LVxcdFxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTI4NzpwdXQ6XFx0XFx0XFx0LyogZ2V0X21jdGd0X3R5cGUoKSBnZXRzIFxcdTAwMjYgbG9ja3MgdGhlIHBhZ2UgKi9cXG5tbS9tZW1jb250cm9sLXYxLmMtMTI4OC1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoyMy41NjUxNzcxMTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NTc0NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIE1lbW9yeSBDaGFyZ2UgRmxvdyoqXG5cbk9rYXksIHNvIGBnZXRfbWN0Z3RfdHlwZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY2FsbCBzdGFjayBsb29rcyBsaWtlIHRoaXM6IGBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV9wdGVfcmFuZ2VgIGFuZCBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2VgIGJvdGggY2FsbCBpdC4gVGhleSBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZWAuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgY2hhcmdlIG1vdmVtZW50LCBJIG5lZWQgdG8gZGlnIGludG8gYG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgbXVzdCByZXNpZGUsIGdpdmVuIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MjcuMzMwOTI0ODIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzMzkzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz01ODY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9tb3ZlX3N3YXBfYWNjb3VudChzd3BfZW50cnlfdCBlbnRyeSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy01OTItXFxubW0vbWVtY29udHJvbC12MS5jOjU5MzpzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbm1tL21lbWNvbnRyb2wtdjEuYy01OTQtXFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTU5OS0jaWZkZWYgQ09ORklHX01NVVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MDA6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxubW0vbWVtY29udHJvbC12MS5jLTYwMS1cXHRcXHRcXHRcXHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYyMS0jZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MjI6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxubW0vbWVtY29udHJvbC12MS5jLTYyMy1cXHRcXHRcXHRcXHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTEyMDA9dm9pZCBtZW1jZzFfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTIwNS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTIwNjpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWVtY29udHJvbC12MS5jLTEyMDctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY2hhcmdlX3dhbGtfb3BzID0ge1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzIzOlxcdC5wbWRfZW50cnlcXHQ9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzI0LVxcdC53YWxrX2xvY2tcXHQ9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTMyNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTMyNzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlKHZvaWQpXFxubW0vbWVtY29udHJvbC12MS5jLTEzMjgte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTEzNTk9dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTM2MS1cXHRpZiAobWMudG8pIHtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTM2MjpcXHRcXHRtZW1fY2dyb3VwX21vdmVfY2hhcmdlKCk7XFxubW0vbWVtY29udHJvbC12MS5jLTEzNjMtXFx0XFx0bWVtX2Nncm91cF9jbGVhcl9tYygpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3NzM9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI4MjctXFx0XFx0Lm5hbWUgPSBcXFwibW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjgyODpcXHRcXHQucmVhZF91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQsXFxubW0vbWVtY29udHJvbC12MS5jOjI4Mjk6XFx0XFx0LndyaXRlX3U2NCA9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTI4MzAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MjguNzk0MzI2NjQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI1NDc3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG1lbWNnMV9tb3ZlX3Rhc2sqKlxuXG5Pa2F5LCBzbyBgbWVtY2cxX21vdmVfdGFza2AgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZm9jdXMgb24uIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX3Rhc2tgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCBmdW5jdGlvbiB3b3VsZCBiZSB0aGUgbGlrZWx5IGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgYSBzaW1pbGFyIGZpbGUgdGhhdCBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIG1lbW9yeSBjb250cm9sIGdyb3VwIGxvZ2ljLiBMZXQncyBkaWcgaW50byBgbWVtY2cxX21vdmVfdGFza2AgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaWNzIG9mIG1vdmluZyBhIHRhc2sgYmV0d2VlbiBtZW1vcnkgY2dyb3Vwcy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gTGV0J3MgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MzIuODc2ODc3NjI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAzNzAyNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9tb3ZlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xMzI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Uodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzU4LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzU5OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMzcyPXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEzNzQtfVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzc1OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzc2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD04Nj12b2lkIG1lbWNnMV9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxubW0vbWVtY29udHJvbC12MS5oOjg3OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtODgtdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzkwPXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDA0LVxcdC5jYW5jZWxfYXR0YWNoID0gbWVtY2cxX2NhbmNlbF9hdHRhY2gsXFxubW0vbWVtY29udHJvbC5jOjQ0MDU6XFx0LnBvc3RfYXR0YWNoID0gbWVtY2cxX21vdmVfdGFzayxcXG5tbS9tZW1jb250cm9sLmMtNDQwNi1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MzQuMjgwNTg3NTE1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzE0NTU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhyb3VnaCBpdHMgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgYG1lbWNnMV9tb3ZlX3Rhc2tgIGlzIGFjdGluZyBhcyB0aGUgY2FsbGJhY2sgdGhhdCBydW5zIGFmdGVyIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBpcyBhdHRhY2hlZCB2aWEgYG1lbW9yeV9jZ3JwX3N1YnN5c2AuIEkgdW5kZXJzdGFuZCB0aGF0LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyB0aWVkIGludG8gdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgc3dhcHBpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGlzIG5ldyBjaGVjayB3aXRoaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGA6IGBpZiAodW5saWtlbHkoIWN0cmwtXHUwMDNlbWFwKSkgcmV0dXJuIDA7YC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY3RybC1cdTAwM2VtYXBgIHBvaW50ZXIgaXMgTlVMTC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBhIGNyYXNoLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBrbm93IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVzc2VudGlhbCBiZWNhdXNlIG9mIGBtZW1jZzFfbW92ZV90YXNrYC4gYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfU1dBUGAgYXJlIGFsc28gY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgaW4gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjM5LjQxMjA0NzEwN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQzMTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz05NjY9Y29uZmlnIE1FTUNHXFxuLS1cXG5pbml0L0tjb25maWctOTczLVxcbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTk3NS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0MC44Mjc0ODQyMTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NjI3MzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYE1FTUNHX1YxYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUVNQ0dfVjFgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IGNoZWNrcyBvdXQuIExldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSB0YXJnZXRlZCBmaXguXG5cblRoZSBrZXkgcG9pbnRzIGFyZTogdGhlIHN5c3RlbSdzIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAsIHdlJ3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gb24gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgYXJlIGBTV0FQYCwgYE1FTUNHYCwgYW5kLCBvZiBjb3Vyc2UsIGBNRU1DR19WMWAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmaXggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGNvbmNlcm5pbmcgYGN0cmwtXHUwMDNlbWFwYCB3aXRoaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgd2hlbiBjZ3JvdXAgdjEgdGFza3MgbWlncmF0ZSwgd2hpY2ggcG9pbnRzIHRvd2FyZHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGEgdnVsbmVyYWJpbGl0eSB3aW5kb3cgZHVyaW5nIHRoZXNlIHNwZWNpZmljIGFjdGl2aXRpZXMuIEFkZGluZyB0aGlzIGNoZWNrIGlzIGNsZWFybHkgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZS4gVGhlIHBvdGVudGlhbCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd291bGQgZGVmaW5pdGVseSBiZSBiYWQgbmV3cywgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGV5IGFyZSB0YWtpbmcgYWN0aW9uIGluIHRoaXMgc3BhY2UuIEkgd291bGQgbGlrZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4IGluIG1vcmUgZGVwdGgsIGFuZCB3aWxsIGZvbGxvdyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlc2UgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg1LCJPdXRwdXRUb2tlbnMiOjExMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0NS4xMDM3NjA3MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMzNTQwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVxcdTAwM2VtYXBgIGluIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHYxIHRhc2sgbWlncmF0aW9ucy4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6NDUuMjM3MTI1ODIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyNzIyOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjQ1LjI0MDE1Mzc2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQyNDE5NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVxcdTAwM2VtYXBgKSB0byBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIGEgc3dhcCBjZ3JvdXAgbWFwIGlzIG5vdCBpbml0aWFsaXplZC4gVGhpcyBidWcgd291bGQgbWFuaWZlc3QgYXMgYSBjcmFzaCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlYWRpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTdkY2NjNWY1YTdlZDMwNWJkMmIwZWY0ZWE5ZDA5NzZlNWZkOTI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDg6MTk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xuaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfY2dyb3VwLmNcbisrKyBiL21tL3N3YXBfY2dyb3VwLmNcbkBAIC0xNjEsNiArMTYxLDExIEBAIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxuICAqL1xuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XG4rXG4rXHRjdHJsID0gXHUwMDI2c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTtcbitcdGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKVxuK1x0XHRyZXR1cm4gMDtcbiBcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0NS4yNDAxNTYyODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMjExMTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3N3YXBfY2dyb3VwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBhIG5ldyBjaGVjazogYGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKSByZXR1cm4gMDtgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIHBvaW50ZXIgY2hlY2ssIG9yIG1vcmUgYWNjdXJhdGVseSwgYW4gdW5pbml0aWFsaXplZCBtYXAgY2hlY2sgb24gdGhlIGBjdHJsLVx1MDAzZW1hcGAgcG9pbnRlci4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgY3Jhc2ggc2NlbmFyaW86IGEgTlVMTCBkZXJlZmVyZW5jZSBvciwgZXZlbiB3b3JzZSwgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBtYXAgcG9pbnRlciBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCBob3cgYGN0cmwtXHUwMDNlbWFwYCBtaWdodCBiZWNvbWUgTlVMTC4gTGV0J3MgZGlnIGludG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBmdW5jdGlvbiBpcyB0byBwcmV2ZW50IHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBXZSBhcmUgdGFsa2luZyBhYm91dCBhIGNyYXNoIGZpeC5cblxuTm93LCBteSBtb3JlIGFkdmFuY2VkIGtlcm5lbCBkZWJ1Z2dpbmcgaW5zdGluY3RzIGtpY2sgaW4uIERvZXMgdGhpcyAqaW50cm9kdWNlKiBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIGJ5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhbmtmdWxseSBub3QuIFRoZSBwYXRjaCBqdXN0IHJldHVybnMgYDBgIGlmIHRoZSBtYXAgaXMgTlVMTC4gU28sIGl0IHNpbXBseSBhdm9pZHMgdGhlIGNyYXNoLiBJdCBsb29rcyBsaWtlIGl0IGlzIGp1c3QgYSBidWdmaXggZm9yIHdoYXQgSSBhbHJlYWR5IGRlZHVjZWQ6IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5JJ2QgZXhwZWN0IEtBU0FOIG9yIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIHRvIGNhdGNoIGEgY3Jhc2ggbGlrZSB0aGlzICh0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB0aGF0IGlzKS4gS01TQU4gaXMgd2hhdCBJJ2QgdXNlIGlmIEkgc3VzcGVjdGVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBiZWluZyBhY2Nlc3NlZC4gSXQgc2VlbXMgbGlrZSBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZS4gU28sIHRoZSBwYXRjaCBpcyBsaWtlbHkgYSBzb2xpZCBmaXguIEknbGwgdGFrZSBvbmUgbW9yZSBsb29rIGF0IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjUxLjc3MjI3MDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0fVxcbiAxNTE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRyZXR1cm4gb2xkO1xcbiAxNTQ6XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHQvKipcXG4gMTU3OlxcdCAqIGxvb2t1cF9zd2FwX2Nncm91cF9pZCAtIGxvb2t1cCBtZW1fY2dyb3VwIGlkIHRpZWQgdG8gc3dhcCBlbnRyeVxcbiAxNTg6XFx0ICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXFxuIDE1OTpcXHQgKlxcbiAxNjA6XFx0ICogUmV0dXJucyBJRCBvZiBtZW1fY2dyb3VwIGF0IHN1Y2Nlc3MuIDAgYXQgZmFpbHVyZS4gKDAgaXMgaW52YWxpZCBJRClcXG4gMTYxOlxcdCAqL1xcbiAxNjI6XFx0dW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudClcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRjdHJsID0gXFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XFxuIDE2NzpcXHRcXHRpZiAodW5saWtlbHkoIWN0cmwtXFx1MDAzZW1hcCkpXFxuIDE2ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTY5OlxcdFxcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cXHUwMDNlaWQ7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0dm9pZCAqYXJyYXk7XFxuIDE3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGxlbmd0aDtcXG4gMTc2OlxcdFxcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjUxLjc3MjM0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxOTg2NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGEgY2hlY2sgZm9yIGAhY3RybC1cdTAwM2VtYXBgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBjdHJsLVx1MDAzZW1hcGAgaW5zaWRlIGBsb29rdXBfc3dhcF9jZ3JvdXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgY2hlY2sg4oCTIG5vdGhpbmcgZmFuY3ksIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbkZyYW5rbHksIGFueSBkZWNlbnQgc3RhdGljIGFuYWx5c2lzIHRvb2wgb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MsIGluY2x1ZGluZyBLQVNBTiwgd291bGQndmUgY2F1Z2h0IHRoaXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbnl3YXkuIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgYmFzaWMgZGVmZW5zaXZlIGNvZGluZyBwcmFjdGljZSwgbm90IHNvbWUgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0J3MgYSBnb29kIHByYWN0aWNlLCBidXQgbm90IGEgS01TQU4gY2FuZGlkYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAxLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6NTUuNjY0MzM0ODYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgIWN0cmwtXFx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGAhY3RybC1cXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9zbbl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 07:51:44 +0000 UTC FinishedAt: 2026-08-14 08:20:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "20793955835fe29a5582f68ff031fdcd35cc98ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "20793955835fe29a5582f68ff031fdcd35cc98ed", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "1274e769-ea9b-4b12-996b-ece31197769e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_swapin_charge_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgIWN0cmwtXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhN2RjY2M1ZjVhN2VkMzA1YmQyYjBlZjRlYTlkMDk3NmU1ZmQ5MjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODoxOTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xuaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfY2dyb3VwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfY2dyb3VwLmNcbkBAIC0xNjEsNiAmIzQzOzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcbiAgKi9cbiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjdHJsLVx1MDAzZW1hcCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXHUwMDNlbWFwYCBpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gY2hhcmdlIG9wZXJhdGlvbnMgYW5kIGNncm91cCB2MSB0YXNrIG1pZ3JhdGlvbnMuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDE0IDA4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9jZ3JvdXAuYyBiL21tL3N3YXBfY2dyb3VwLmMKaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9jZ3JvdXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX2Nncm91cC5jCkBAIC0xNjEsNiAmIzQzOzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCwKICAqLwogdW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudCkKIHsKJiM0MzsJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7CiYjNDM7CiYjNDM7CWN0cmwgPSAmYW1wO3N3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07CiYjNDM7CWlmICh1bmxpa2VseSghY3RybC0mZ3Q7bWFwKSkKJiM0MzsJCXJldHVybiAwOwogCXJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS0mZ3Q7aWQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTd2FwIENncm91cCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vc3dhcF9jZ3JvdXAuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIHRoZSBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBjaGVjazogYCFjdHJsLSZndDttYXBgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHRvIGdldCB0aGUgSUQuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwuIEl0JiMzOTtzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYHN3YXBfY2dyb3VwX2N0cmxgIGFycmF5LCB3aGljaCBpcyBpbmRleGVkIGJ5IHRoZSBzd2FwIHR5cGUgZGVyaXZlZCBmcm9tIHRoZSBgc3dwX2VudHJ5X3RgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJiMzOTtkIGJlIGJsaW5kbHkgY2FsbGluZyBgbG9va3VwX3N3YXBfY2dyb3VwYCB3aGljaCBjb3VsZCBsZWFkIHRvIHRyb3VibGUgaWYgdGhlIGBtYXBgIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9jZ3JvdXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYGN0cmwtJmd0O21hcGAgYmVpbmcgTlVMTC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCAmIzM5O21hcCYjMzk7IHJlcHJlc2VudHMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgYWJzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb2t1cF9zd2FwX2Nncm91cF9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfY2dyb3VwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9jZ3JvdXAuYz0xMjY9dW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vc3dhcF9jZ3JvdXAuYy0xNTYtLyoqXG5tbS9zd2FwX2Nncm91cC5jOjE1NzogKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnlcbm1tL3N3YXBfY2dyb3VwLmMtMTU4LSAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgbG9va2VkIHVwLlxuLS1cbm1tL3N3YXBfY2dyb3VwLmMtMTYxLSAqL1xubW0vc3dhcF9jZ3JvdXAuYzoxNjI6dW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudClcbm1tL3N3YXBfY2dyb3VwLmMtMTYzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nICp1c2VkKi4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHJlZmVyZW5jZXMgYW5kIHNlZSB3aGF0IG90aGVyIGNvZGUgZGVwZW5kcyBvbiBpdCwgYW5kIHdoYXQsIGluIHR1cm4sIGRlcGVuZHMgb24gKnRoYXQqLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBjYWxsIGdyYXBoLCB5b3Uga25vdz8gVGhpcyBmdW5jdGlvbuKAmXMgdXNhZ2Ugd2lsbCBiZSBhIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW3igJlzIGJlaGF2aW9yIHJlZ2FyZGluZyBzd2FwIGFuZCBjZ3JvdXBzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9va3VwX3N3YXBfY2dyb3VwX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0xMT1leHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmgtMTItXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbnJfZW50cyk7XG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmg6MTM6ZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpO1xuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTE0LWV4dGVybiBpbnQgc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oPTI2PXN0YXRpYyBpbmxpbmVcbmluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaDoyNzp1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTI4LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9ODg2PXN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy05NTYtXHRpZiAoZW50LnZhbCBcdTAwMjZcdTAwMjYgIXJldCBcdTAwMjZcdTAwMjYgKCFwYWdlIHx8ICFQYWdlVHJhbnNDb21wb3VuZChwYWdlKSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1jb250cm9sLXYxLmM6OTU3Olx0ICAgIG1lbV9jZ3JvdXBfaWQobWMuZnJvbSkgPT0gbG9va3VwX3N3YXBfY2dyb3VwX2lkKGVudCkpIHtcbm1tL21lbWNvbnRyb2wtdjEuYy05NTgtXHRcdHJldCA9IE1DX1RBUkdFVF9TV0FQO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NTA3PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1MTYtXG5tbS9tZW1jb250cm9sLmM6NDUxNzpcdGlkID0gbG9va3VwX3N3YXBfY2dyb3VwX2lkKGVudHJ5KTtcbm1tL21lbWNvbnRyb2wuYy00NTE4LVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm1tL3N3YXBfY2dyb3VwLmM9MTI2PXVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL3N3YXBfY2dyb3VwLmMtMTU2LS8qKlxubW0vc3dhcF9jZ3JvdXAuYzoxNTc6ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XG5tbS9zd2FwX2Nncm91cC5jLTE1OC0gKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGxvb2tlZCB1cC5cbi0tXG5tbS9zd2FwX2Nncm91cC5jLTE2MS0gKi9cbm1tL3N3YXBfY2dyb3VwLmM6MTYyOnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG5tbS9zd2FwX2Nncm91cC5jLTE2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb2RlIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgY29kZSBzbmlwcGV0IGlzIHVzZWQgaW4gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgYW5kIGBnZXRfbWN0Z3RfdHlwZWAuIFRoYXQgZ2l2ZXMgbWUgYSBiYXNpYyBjb250ZXh0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBpbmZsdWVuY2luZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGNvbnRyb2xzIHRoaXMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGBtbS9zd2FwX2Nncm91cC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBlbmFibGUgZmxhZ3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyB0aGUgYmVoYXZpb3IgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2Nncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTEwMT1pZmRlZiBDT05GSUdfU1dBUFxubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IHN3YXBfY2dyb3VwLm9cbm1tL01ha2VmaWxlLTEwMy1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MzcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIHNldHVwIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01FTUNHYCBhcmUgZXNzZW50aWFsIGNvbXBvbmVudHMuIEJlZm9yZSBkaXZpbmcgZGVlcGVyLCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhleSYjMzk7cmUgc2V0IHVwLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2AsIHNpbmNlIGl0IGRlYWxzIHdpdGggY29yZSBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGBtbS9LY29uZmlnYCwgYXMgYm90aCBkZWFsIHdpdGggdGhlIHNwZWNpZmljcyBvZiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggd291bGQgbWFrZSBtb3JlIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3aWxsIGZpbmQgd2hhdCB0aGUgZGVhbCBpcyB3aXRoIHRoZXNlIHR3byBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTk1Nj1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctOTY1LVxuaW5pdC9LY29uZmlnOjk2Njpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy05NjctXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTk3My1cbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctOTc1LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwODcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBDT05GSUdfU1dBUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBzdGF0dXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHN3YXAgaXMgZW5hYmxlZCBvciBub3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyMjk9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjMxLVxuYXJjaC9taXBzL0tjb25maWc6MTIzMjpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTIzMy1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI5PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEzMS1cbmFyY2gvc2gvS2NvbmZpZzoxMzI6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzMtXHRib29sXG4tLVxubW0vS2NvbmZpZz0xMj1jb25maWcgWlBPT0xcbi0tXG5tbS9LY29uZmlnLTE0LVxubW0vS2NvbmZpZzoxNTptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBJbnRlcmFjdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBzd2FwIGFuZCBtZW1vcnkgY2dyb3VwcyBpbnRlcmFjdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoZW0sIHdoaWNoIGFyZSBgU1dBUGAgYW5kIGBNRU1DR2AsIG9idmlvdXNseS4gVGhlIGNvZGUgcGF0aCB0aGF0JiMzOTtzIGdyYWJiZWQgbXkgYXR0ZW50aW9uIGlzIHRoaXMgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gTm93LCBpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpdHNlbGYgYSBnb29kIGZvY3VzIHN5bWJvbCBmb3IgbXkgaW52ZXN0aWdhdGlvbj8gSXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIHRoZSBwb2ludCB3aGVyZSBzd2FwLWluIGFuZCBjZ3JvdXAgbWVtb3J5IGFjY291bnRpbmcgY29tZSB0b2dldGhlci4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgYXJlYSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gYSBiaXQgZGVlcGVyIGFuZCBzZWUgaG93IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGZvbGlvIGNoYXJnaW5nIGR1cmluZyBzd2FwLWluIG9wZXJhdGlvbnMsIGFuZCB3aGF0IHRoaXMgY2dyb3VwIElEIGxvb2t1cCBpcyBkb2luZyB0byBpbXBhY3QgbWVtb3J5IG1hbmFnZW1lbnQgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD02NzU9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY3Ny1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY3ODppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc5LVx0XHRcdFx0ICBnZnBfdCBnZnAsIHN3cF9lbnRyeV90IGVudHJ5KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTY3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTcyLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE3MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzQtXHRcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCwgc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0Nzc9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NDk1LS8qKlxubW0vbWVtY29udHJvbC5jOjQ0OTY6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXG5tbS9tZW1jb250cm9sLmMtNDQ5Ny0gKiBAZm9saW86IGZvbGlvIHRvIGNoYXJnZS5cbi0tXG5tbS9tZW1jb250cm9sLmMtNDUwNi0gKi9cbm1tL21lbWNvbnRyb2wuYzo0NTA3OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tZW1jb250cm9sLmMtNDUwOC1cdFx0XHRcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9tZW1vcnkuYz0zOTk3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQwOTgtXG5tbS9tZW1vcnkuYzo0MDk5Olx0XHRcdFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbyxcbm1tL21lbW9yeS5jLTQxMDAtXHRcdFx0XHRcdFx0XHR2bWEtXHUwMDNldm1fbW0sIEdGUF9LRVJORUwsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTQzMj1zdHJ1Y3QgZm9saW8gKl9fcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDkxLVx0XHQgKiBpcyBzZXQgYnV0IHRoZSBmb2xpbyBpcyBub3QgdGhlIHN3YXAgY2FjaGUgeWV0LiBUaGlzIGNhblxubW0vc3dhcF9zdGF0ZS5jOjQ5MjpcdFx0ICogaGFwcGVuIHRvZGF5IGlmIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbygpIGJlbG93XG5tbS9zd2FwX3N0YXRlLmMtNDkzLVx0XHQgKiB0cmlnZ2VycyByZWNsYWltIHRocm91Z2ggenN3YXAsIHdoaWNoIG1heSBjYWxsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUxNS1cbm1tL3N3YXBfc3RhdGUuYzo1MTY6XHRpZiAobWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKGZvbGlvLCBOVUxMLCBnZnBfbWFzaywgZW50cnkpKVxubW0vc3dhcF9zdGF0ZS5jLTUxNy1cdFx0Z290byBmYWlsX3VubG9jaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBNZW1vcnkgQ2hhcmdlIFBvaW50cyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGR1cmluZyBzd2FwLWluIG9wZXJhdGlvbnMuIFRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyBwcmV0dHkgY2VudHJhbCBoZXJlIOKAkyBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY3J1Y2lhbCBmb2N1cyBwb2ludCwgZ2l2ZW4gaXRzIGludm9sdmVtZW50IHdpdGggYm90aCBgZG9fc3dhcF9wYWdlYCBhbmQgYF9fcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGtleSBjb21wb25lbnQgaW4gdGhlIHN3YXAtaW4gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBob3cgbWVtb3J5IGNoYXJnZXMgYXJlIG1hbmFnZWQuIEl0JiMzOTtzIGEgY2xlYXIgc3ltYm9sIGZvciBtZSB0byBmb2N1cyBvbi4KCkJ1dCB0aGVuLCBteSBtaW5kIGRyaWZ0cy4gV2hpbGUgbG9va2luZyBhdCB0aGlzLCBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IG90aGVyIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBXaGF0IGFib3V0IGBnZXRfbWN0Z3RfdHlwZWA/IElzIHRoYXQgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gY29uc2lkZXIgaW4gdGhpcyBjb250ZXh0PyBJJiMzOTtsbCBoYXZlIHRvIGRpZyBkZWVwZXIgaW50byBpdHMgcm9sZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwLWluIHByb2Nlc3MuIEl0JiMzOTtzIGltcG9ydGFudCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgYW5kIGluZmx1ZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9tY3RndF90eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz03NTc9c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy04NjUtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6ODY2OiAqIGdldF9tY3RndF90eXBlIC0gZ2V0IHRhcmdldCB0eXBlIG9mIG1vdmluZyBjaGFyZ2Vcbm1tL21lbWNvbnRyb2wtdjEuYy04NjctICogQHZtYTogdGhlIHZtYSB0aGUgcHRlIHRvIGJlIGNoZWNrZWQgYmVsb25nc1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy04ODUtICovXG5tbS9tZW1jb250cm9sLXYxLmM6ODg2OnN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTg4Ny1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGVudCwgdW5pb24gbWNfdGFyZ2V0ICp0YXJnZXQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTk3MC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzo5NzE6c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTk3Mi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCBwbWQsIHVuaW9uIG1jX3RhcmdldCAqdGFyZ2V0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMDAxLSNlbHNlXG5tbS9tZW1jb250cm9sLXYxLmM6MTAwMjpzdGF0aWMgaW5saW5lIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtY29udHJvbC12MS5jLTEwMDMtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kLCB1bmlvbiBtY190YXJnZXQgKnRhcmdldClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTAwOT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfcHJlY2hhcmdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMDIzLVx0XHQgKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMDI0Olx0XHRpZiAoZ2V0X21jdGd0X3R5cGVfdGhwKHZtYSwgYWRkciwgKnBtZCwgTlVMTCkgPT0gTUNfVEFSR0VUX1BBR0UpXG5tbS9tZW1jb250cm9sLXYxLmMtMTAyNS1cdFx0XHRtYy5wcmVjaGFyZ2UgJiM0Mzs9IEhQQUdFX1BNRF9OUjtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTAzMy1cdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlJiM0MzsmIzQzOywgYWRkciAmIzQzOz0gUEFHRV9TSVpFKVxubW0vbWVtY29udHJvbC12MS5jOjEwMzQ6XHRcdGlmIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSksIE5VTEwpKVxubW0vbWVtY29udHJvbC12MS5jLTEwMzUtXHRcdFx0bWMucHJlY2hhcmdlJiM0MzsmIzQzOztcdC8qIGluY3JlbWVudCBwcmVjaGFyZ2UgdGVtcG9yYXJpbHkgKi9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTIwNj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEyMjMtXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzoxMjI0Olx0XHR0YXJnZXRfdHlwZSA9IGdldF9tY3RndF90eXBlX3RocCh2bWEsIGFkZHIsICpwbWQsIFx1MDAyNnRhcmdldCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTIyNS1cdFx0aWYgKHRhcmdldF90eXBlID09IE1DX1RBUkdFVF9QQUdFKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEyNjItXG5tbS9tZW1jb250cm9sLXYxLmM6MTI2MzpcdFx0c3dpdGNoIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZW50LCBcdTAwMjZ0YXJnZXQpKSB7XG5tbS9tZW1jb250cm9sLXYxLmMtMTI2NC1cdFx0Y2FzZSBNQ19UQVJHRVRfREVWSUNFOlxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg2LVx0XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xubW0vbWVtY29udHJvbC12MS5jOjEyODc6cHV0Olx0XHRcdC8qIGdldF9tY3RndF90eXBlKCkgZ2V0cyBcdTAwMjYgbG9ja3MgdGhlIHBhZ2UgKi9cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg4LVx0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjoKCioqVHJhY2luZyB0aGUgTWVtb3J5IENoYXJnZSBGbG93KioKCk9rYXksIHNvIGBnZXRfbWN0Z3RfdHlwZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY2FsbCBzdGFjayBsb29rcyBsaWtlIHRoaXM6IGBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV9wdGVfcmFuZ2VgIGFuZCBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2VgIGJvdGggY2FsbCBpdC4gVGhleSBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZWAuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgbWVtb3J5IGFjY291bnRpbmcgYW5kIGNoYXJnZSBtb3ZlbWVudCwgSSBuZWVkIHRvIGRpZyBpbnRvIGBtZW1fY2dyb3VwX21vdmVfY2hhcmdlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyBtdXN0IHJlc2lkZSwgZ2l2ZW4gdGhlIGNhbGwgaGllcmFyY2h5LiBJJiMzOTtsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX21vdmVfY2hhcmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz01ODY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9tb3ZlX3N3YXBfYWNjb3VudChzd3BfZW50cnlfdCBlbnRyeSxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNTkyLVxubW0vbWVtY29udHJvbC12MS5jOjU5MzpzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxubW0vbWVtY29udHJvbC12MS5jLTU5NC1cdFx0XHRcdHN0cnVjdCBjZnR5cGUgKmNmdClcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNTk5LSNpZmRlZiBDT05GSUdfTU1VXG5tbS9tZW1jb250cm9sLXYxLmM6NjAwOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV93cml0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxubW0vbWVtY29udHJvbC12MS5jLTYwMS1cdFx0XHRcdCBzdHJ1Y3QgY2Z0eXBlICpjZnQsIHU2NCB2YWwpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTYyMS0jZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjYyMjpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyxcbm1tL21lbWNvbnRyb2wtdjEuYy02MjMtXHRcdFx0XHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xMjAwPXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMjA1LVxubW0vbWVtY29udHJvbC12MS5jOjEyMDY6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxubW0vbWVtY29udHJvbC12MS5jLTEyMDctXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xMzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY2hhcmdlX3dhbGtfb3BzID0ge1xubW0vbWVtY29udHJvbC12MS5jOjEzMjM6XHQucG1kX2VudHJ5XHQ9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlLFxubW0vbWVtY29udHJvbC12MS5jLTEzMjQtXHQud2Fsa19sb2NrXHQ9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzMjYtXG5tbS9tZW1jb250cm9sLXYxLmM6MTMyNzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTMyOC17XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTEzNTk9dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzNjEtXHRpZiAobWMudG8pIHtcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzYyOlx0XHRtZW1fY2dyb3VwX21vdmVfY2hhcmdlKCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTM2My1cdFx0bWVtX2Nncm91cF9jbGVhcl9tYygpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0yNzczPXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMjgyNy1cdFx0Lm5hbWUgPSBcJiMzNDttb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGVcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjgyODpcdFx0LnJlYWRfdTY0ID0gbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9yZWFkLFxubW0vbWVtY29udHJvbC12MS5jOjI4Mjk6XHRcdC53cml0ZV91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlLFxubW0vbWVtY29udHJvbC12MS5jLTI4MzAtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODc2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIG1lbWNnMV9tb3ZlX3Rhc2sqKgoKT2theSwgc28gYG1lbWNnMV9tb3ZlX3Rhc2tgIGlzIHRoZSBmdW5jdGlvbiB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1fY2dyb3VwX21vdmVfdGFza2AsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0IGZ1bmN0aW9uIHdvdWxkIGJlIHRoZSBsaWtlbHkgaGlnaGVyLWxldmVsIGludGVyZmFjZSBpbiBgbW0vbWVtY29udHJvbC5jYCBvciBhIHNpbWlsYXIgZmlsZSB0aGF0IEkgd291bGQgZXhwZWN0IHRvIGZpbmQgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgbG9naWMuIExldCYjMzk7cyBkaWcgaW50byBgbWVtY2cxX21vdmVfdGFza2AgYW5kIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIG1lY2hhbmljcyBvZiBtb3ZpbmcgYSB0YXNrIGJldHdlZW4gbWVtb3J5IGNncm91cHMuIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCBhbmQgd2hhdCBsb2NrcyBhcmUgaW52b2x2ZWQ/IExldCYjMzk7cyBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnMV9tb3ZlX3Rhc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTEzMjc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZSh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xMzU4LVxubW0vbWVtY29udHJvbC12MS5jOjEzNTk6dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTM2MC17XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTEzNzI9dm9pZCBtZW1jZzFfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTEzNzQtfVxubW0vbWVtY29udHJvbC12MS5jOjEzNzU6dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTM3Ni17XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTg2PXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KTtcbm1tL21lbWNvbnRyb2wtdjEuaDo4Nzp2b2lkIG1lbWNnMV9tb3ZlX3Rhc2sodm9pZCk7XG5tbS9tZW1jb250cm9sLXYxLmgtODgtdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM5MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ0MDQtXHQuY2FuY2VsX2F0dGFjaCA9IG1lbWNnMV9jYW5jZWxfYXR0YWNoLFxubW0vbWVtY29udHJvbC5jOjQ0MDU6XHQucG9zdF9hdHRhY2ggPSBtZW1jZzFfbW92ZV90YXNrLFxubW0vbWVtY29udHJvbC5jLTQ0MDYtXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cmFjaW5nIHRocm91Z2ggaXRzIGltcGxpY2F0aW9ucy4gRXNzZW50aWFsbHksIGBtZW1jZzFfbW92ZV90YXNrYCBpcyBhY3RpbmcgYXMgdGhlIGNhbGxiYWNrIHRoYXQgcnVucyBhZnRlciBhIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgaXMgYXR0YWNoZWQgdmlhIGBtZW1vcnlfY2dycF9zdWJzeXNgLiBJIHVuZGVyc3RhbmQgdGhhdC4gVGhlbiwgYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AgaXMgdGllZCBpbnRvIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHN3YXBwaW5nIHBlcnNwZWN0aXZlLgoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIHRoaXMgbmV3IGNoZWNrIHdpdGhpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYDogYGlmICh1bmxpa2VseSghY3RybC0mZ3Q7bWFwKSkgcmV0dXJuIDA7YC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY3RybC0mZ3Q7bWFwYCBwb2ludGVyIGlzIE5VTEwuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgYSBjcmFzaC4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBJIGtub3cgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGJlY2F1c2Ugb2YgYG1lbWNnMV9tb3ZlX3Rhc2tgLiBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19TV0FQYCBhcmUgYWxzbyBjbGVhcmx5IG5lY2Vzc2FyeSBmb3IgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgaW4gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTk2Nj1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctOTczLVxuaW5pdC9LY29uZmlnOjk3NDpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy05NzUtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4NQoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBNRU1DR19WMWAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBNRU1DR19WMWAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQgY2hlY2tzIG91dC4gTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSB0YXJnZXRlZCBmaXguCgpUaGUga2V5IHBvaW50cyBhcmU6IHRoZSBzeXN0ZW0mIzM5O3MgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCwgd2UmIzM5O3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gb24gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgYXJlIGBTV0FQYCwgYE1FTUNHYCwgYW5kLCBvZiBjb3Vyc2UsIGBNRU1DR19WMWAuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgZml4IGFkZHJlc3NlcyBhIE5VTEwgcG9pbnRlciBjaGVjayBjb25jZXJuaW5nIGBjdHJsLSZndDttYXBgIHdpdGhpbiBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYC4gSXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCB3aGVuIGNncm91cCB2MSB0YXNrcyBtaWdyYXRlLCB3aGljaCBwb2ludHMgdG93YXJkcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgYSB2dWxuZXJhYmlsaXR5IHdpbmRvdyBkdXJpbmcgdGhlc2Ugc3BlY2lmaWMgYWN0aXZpdGllcy4gQWRkaW5nIHRoaXMgY2hlY2sgaXMgY2xlYXJseSBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlLiBUaGUgcG90ZW50aWFsIGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3b3VsZCBkZWZpbml0ZWx5IGJlIGJhZCBuZXdzLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IHRoZXkgYXJlIHRha2luZyBhY3Rpb24gaW4gdGhpcyBzcGFjZS4gSSB3b3VsZCBsaWtlIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmaXggaW4gbW9yZSBkZXB0aCwgYW5kIHdpbGwgZm9sbG93IHRoZSBwcm9ncmVzcyBvZiB0aGVzZSBjb2RlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGZvciBgY3RybC1cdTAwM2VtYXBgIGluIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHYxIHRhc2sgbWlncmF0aW9ucy4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTdkY2NjNWY1YTdlZDMwNWJkMmIwZWY0ZWE5ZDA5NzZlNWZkOTI4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDg6MTk6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuYwppbmRleCBkYjZjNGEyNmNmNTkzLi4yZDA0MjVmNGE2YjljIDEwMDY0NAotLS0gYS9tbS9zd2FwX2Nncm91cC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfY2dyb3VwLmMKQEAgLTE2MSw2ICYjNDM7MTYxLDExIEBAIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLAogICovCiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KQogewomIzQzOwlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKJiM0MzsKJiM0MzsJY3RybCA9ICZhbXA7c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTsKJiM0MzsJaWYgKHVubGlrZWx5KCFjdHJsLSZndDttYXApKQomIzQzOwkJcmV0dXJuIDA7CiAJcmV0dXJuIGxvb2t1cF9zd2FwX2Nncm91cChlbnQsIE5VTEwpLSZndDtpZDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgQ2dyb3VwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vc3dhcF9jZ3JvdXAuY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGEgbmV3IGNoZWNrOiBgaWYgKHVubGlrZWx5KCFjdHJsLSZndDttYXApKSByZXR1cm4gMDtgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIHBvaW50ZXIgY2hlY2ssIG9yIG1vcmUgYWNjdXJhdGVseSwgYW4gdW5pbml0aWFsaXplZCBtYXAgY2hlY2sgb24gdGhlIGBjdHJsLSZndDttYXBgIHBvaW50ZXIuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbCBjcmFzaCBzY2VuYXJpbzogYSBOVUxMIGRlcmVmZXJlbmNlIG9yLCBldmVuIHdvcnNlLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG1hcCBwb2ludGVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIHVuZGVyc3RhbmQgaG93IGBjdHJsLSZndDttYXBgIG1pZ2h0IGJlY29tZSBOVUxMLiBMZXQmIzM5O3MgZGlnIGludG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgZnVuY3Rpb24gaXMgdG8gcHJldmVudCB0aGlzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgZ29vZC4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBjcmFzaCBmaXguCgpOb3csIG15IG1vcmUgYWR2YW5jZWQga2VybmVsIGRlYnVnZ2luZyBpbnN0aW5jdHMga2ljayBpbi4gRG9lcyB0aGlzICppbnRyb2R1Y2UqIGEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgYnkgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCB0aGFua2Z1bGx5IG5vdC4gVGhlIHBhdGNoIGp1c3QgcmV0dXJucyBgMGAgaWYgdGhlIG1hcCBpcyBOVUxMLiBTbywgaXQgc2ltcGx5IGF2b2lkcyB0aGUgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaXQgaXMganVzdCBhIGJ1Z2ZpeCBmb3Igd2hhdCBJIGFscmVhZHkgZGVkdWNlZDogYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCgpJJiMzOTtkIGV4cGVjdCBLQVNBTiBvciB0aGUgc3RhbmRhcmQga2VybmVsIGNoZWNrcyB0byBjYXRjaCBhIGNyYXNoIGxpa2UgdGhpcyAodGhlIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgdGhhdCBpcykuIEtNU0FOIGlzIHdoYXQgSSYjMzk7ZCB1c2UgaWYgSSBzdXNwZWN0ZWQgdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGJlaW5nIGFjY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlLiBTbywgdGhlIHBhdGNoIGlzIGxpa2VseSBhIHNvbGlkIGZpeC4gSSYjMzk7bGwgdGFrZSBvbmUgbW9yZSBsb29rIGF0IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc3dhcF9jZ3JvdXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XHR9XG4gMTUxOlx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0cmwtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIDE1MjpcdFxuIDE1MzpcdFx0cmV0dXJuIG9sZDtcbiAxNTQ6XHR9XG4gMTU1Olx0XG4gMTU2Olx0LyoqXG4gMTU3Olx0ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XG4gMTU4Olx0ICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXG4gMTU5Olx0ICpcbiAxNjA6XHQgKiBSZXR1cm5zIElEIG9mIG1lbV9jZ3JvdXAgYXQgc3VjY2Vzcy4gMCBhdCBmYWlsdXJlLiAoMCBpcyBpbnZhbGlkIElEKVxuIDE2MTpcdCAqL1xuIDE2MjpcdHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG4gMTYzOlx0e1xuIDE2NDpcdFx0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XG4gMTY1Olx0XG4gMTY2Olx0XHRjdHJsID0gXHUwMDI2c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTtcbiAxNjc6XHRcdGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKVxuIDE2ODpcdFx0XHRyZXR1cm4gMDtcbiAxNjk6XHRcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiAxNzA6XHR9XG4gMTcxOlx0XG4gMTcyOlx0aW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpXG4gMTczOlx0e1xuIDE3NDpcdFx0dm9pZCAqYXJyYXk7XG4gMTc1Olx0XHR1bnNpZ25lZCBsb25nIGxlbmd0aDtcbiAxNzY6XHRcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xuIDE3NzpcdFxuIDE3ODpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcbiAxNzk6XHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDEKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIGFkZGluZyBhIGNoZWNrIGZvciBgIWN0cmwtJmd0O21hcGAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgYGN0cmwtJmd0O21hcGAgaW5zaWRlIGBsb29rdXBfc3dhcF9jZ3JvdXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgY2hlY2sg4oCTIG5vdGhpbmcgZmFuY3ksIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpGcmFua2x5LCBhbnkgZGVjZW50IHN0YXRpYyBhbmFseXNpcyB0b29sIG9yIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzLCBpbmNsdWRpbmcgS0FTQU4sIHdvdWxkJiMzOTt2ZSBjYXVnaHQgdGhpcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGFueXdheS4gS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGJhc2ljIGRlZmVuc2l2ZSBjb2RpbmcgcHJhY3RpY2UsIG5vdCBzb21lIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbi4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgYnV0IG5vdCBhIEtNU0FOIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo0Ni4wNDYxNzgzNjFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTYxODE4NTkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGAhY3RybC1cXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NDYuMDQ2MTgzODYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgzNDIyNTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwODoxOTo0NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xcbmluZGV4IGRiNmM0YTI2Y2Y1OTMuLjJkMDQyNWY0YTZiOWMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9jZ3JvdXAuY1xcbisrKyBiL21tL3N3YXBfY2dyb3VwLmNcXG5AQCAtMTYxLDYgKzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcXG4gICovXFxuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxuIHtcXG4rXFx0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XFxuK1xcbitcXHRjdHJsID0gXFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XFxuK1xcdGlmICh1bmxpa2VseSghY3RybC1cXHUwMDNlbWFwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cXHUwMDNlaWQ7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjE5OjQ3LjIzMDUyNDkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTgwMDY1OTQ2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGE3ZGNjYzVmNWE3ZWQzMDViZDJiMGVmNGVhOWQwOTc2ZTVmZDkyOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA4OjE5OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9jZ3JvdXAuYyBiL21tL3N3YXBfY2dyb3VwLmNcbmluZGV4IGRiNmM0YTI2Y2Y1OTMuLjJkMDQyNWY0YTZiOWMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX2Nncm91cC5jXG4rKysgYi9tbS9zd2FwX2Nncm91cC5jXG5AQCAtMTYxLDYgKzE2MSwxMSBAQCB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCxcbiAgKi9cbiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxuIHtcbitcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xuK1xuK1x0Y3RybCA9IFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XG4rXHRpZiAodW5saWtlbHkoIWN0cmwtXHUwMDNlbWFwKSlcbitcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gbG9va3VwX3N3YXBfY2dyb3VwKGVudCwgTlVMTCktXHUwMDNlaWQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NDcuMjMwNTI2NDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjk4MDU5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN3YXAgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vc3dhcF9jZ3JvdXAuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtZXNzaW5nIHdpdGggdGhlIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGNoZWNrOiBgIWN0cmwtXHUwMDNlbWFwYCBiZWZvcmUgZGVyZWZlcmVuY2luZyB0byBnZXQgdGhlIElELiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLiBJdCdzIGxpa2VseSBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIHdpdGhpbiB0aGUgYHN3YXBfY2dyb3VwX2N0cmxgIGFycmF5LCB3aGljaCBpcyBpbmRleGVkIGJ5IHRoZSBzd2FwIHR5cGUgZGVyaXZlZCBmcm9tIHRoZSBgc3dwX2VudHJ5X3RgLiBXaXRob3V0IHRoaXMgY2hlY2ssIHdlJ2QgYmUgYmxpbmRseSBjYWxsaW5nIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHdoaWNoIGNvdWxkIGxlYWQgdG8gdHJvdWJsZSBpZiB0aGUgYG1hcGAgaXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vc3dhcF9jZ3JvdXAuY2AgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGxlYWQgdG8gYGN0cmwtXHUwMDNlbWFwYCBiZWluZyBOVUxMLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICdtYXAnIHJlcHJlc2VudHMgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXQgYmVpbmcgYWJzZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTAuOTI4NTg5NDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTIxNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb2t1cF9zd2FwX2Nncm91cF9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX2Nncm91cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfY2dyb3VwLmM9MTI2PXVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vc3dhcF9jZ3JvdXAuYy0xNTYtLyoqXFxubW0vc3dhcF9jZ3JvdXAuYzoxNTc6ICogbG9va3VwX3N3YXBfY2dyb3VwX2lkIC0gbG9va3VwIG1lbV9jZ3JvdXAgaWQgdGllZCB0byBzd2FwIGVudHJ5XFxubW0vc3dhcF9jZ3JvdXAuYy0xNTgtICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXFxuLS1cXG5tbS9zd2FwX2Nncm91cC5jLTE2MS0gKi9cXG5tbS9zd2FwX2Nncm91cC5jOjE2Mjp1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KVxcbm1tL3N3YXBfY2dyb3VwLmMtMTYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTAuOTc0MTE0ODU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg4MjQzODE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIGFuZCBzZWUgd2hhdCBvdGhlciBjb2RlIGRlcGVuZHMgb24gaXQsIGFuZCB3aGF0LCBpbiB0dXJuLCBkZXBlbmRzIG9uICp0aGF0Ki4gSXTigJlzIGFsbCBhYm91dCB0aGUgY2FsbCBncmFwaCwgeW91IGtub3c/IFRoaXMgZnVuY3Rpb27igJlzIHVzYWdlIHdpbGwgYmUgYSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVt4oCZcyBiZWhhdmlvciByZWdhcmRpbmcgc3dhcCBhbmQgY2dyb3Vwcy4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo1My44NTY1NTUzMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjQ2Mzc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29rdXBfc3dhcF9jZ3JvdXBfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0xMT1leHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTEyLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbnJfZW50cyk7XFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oOjEzOmV4dGVybiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXBfaWQoc3dwX2VudHJ5X3QgZW50KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBfY2dyb3VwLmgtMTQtZXh0ZXJuIGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcF9jZ3JvdXAuaD0yNj1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oOjI3OnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxuaW5jbHVkZS9saW51eC9zd2FwX2Nncm91cC5oLTI4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz04ODY9c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtOTU2LVxcdGlmIChlbnQudmFsIFxcdTAwMjZcXHUwMDI2ICFyZXQgXFx1MDAyNlxcdTAwMjYgKCFwYWdlIHx8ICFQYWdlVHJhbnNDb21wb3VuZChwYWdlKSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1jb250cm9sLXYxLmM6OTU3OlxcdCAgICBtZW1fY2dyb3VwX2lkKG1jLmZyb20pID09IGxvb2t1cF9zd2FwX2Nncm91cF9pZChlbnQpKSB7XFxubW0vbWVtY29udHJvbC12MS5jLTk1OC1cXHRcXHRyZXQgPSBNQ19UQVJHRVRfU1dBUDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NTA3PWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDUxNi1cXG5tbS9tZW1jb250cm9sLmM6NDUxNzpcXHRpZCA9IGxvb2t1cF9zd2FwX2Nncm91cF9pZChlbnRyeSk7XFxubW0vbWVtY29udHJvbC5jLTQ1MTgtXFx0cmN1X3JlYWRfbG9jaygpO1xcbi0tXFxubW0vc3dhcF9jZ3JvdXAuYz0xMjY9dW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5tbS9zd2FwX2Nncm91cC5jLTE1Ni0vKipcXG5tbS9zd2FwX2Nncm91cC5jOjE1NzogKiBsb29rdXBfc3dhcF9jZ3JvdXBfaWQgLSBsb29rdXAgbWVtX2Nncm91cCBpZCB0aWVkIHRvIHN3YXAgZW50cnlcXG5tbS9zd2FwX2Nncm91cC5jLTE1OC0gKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGxvb2tlZCB1cC5cXG4tLVxcbm1tL3N3YXBfY2dyb3VwLmMtMTYxLSAqL1xcbm1tL3N3YXBfY2dyb3VwLmM6MTYyOnVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXFxubW0vc3dhcF9jZ3JvdXAuYy0xNjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoxOTo1NS43MTkwMjQ2MzlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTE4MzUxOTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb2RlIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGlzIGNvZGUgc25pcHBldCBpcyB1c2VkIGluIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGFuZCBgZ2V0X21jdGd0X3R5cGVgLiBUaGF0IGdpdmVzIG1lIGEgYmFzaWMgY29udGV4dC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBjb250cm9scyB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZvciBgbW0vc3dhcF9jZ3JvdXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIHJlbGV2YW50IGRlcGVuZGVuY2llcyBhbmQgZW5hYmxlIGZsYWdzLiBMZXQncyBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTguNjM3Mzc5NzAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjIwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEwMT1pZmRlZiBDT05GSUdfU1dBUFxcbm1tL01ha2VmaWxlOjEwMjpvYmotJChDT05GSUdfTUVNQ0cpICs9IHN3YXBfY2dyb3VwLm9cXG5tbS9NYWtlZmlsZS0xMDMtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MTk6NTguNzA5MDA1NTgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNDA5ODI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgc2V0dXAgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSBlc3NlbnRpYWwgY29tcG9uZW50cy4gQmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byBjb25maXJtIGhvdyB0aGV5J3JlIHNldCB1cC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgZWl0aGVyIGBpbml0L0tjb25maWdgLCBzaW5jZSBpdCBkZWFscyB3aXRoIGNvcmUgc3lzdGVtIGluaXRpYWxpemF0aW9uLCBvciBgbW0vS2NvbmZpZ2AsIGFzIGJvdGggZGVhbCB3aXRoIHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIHdvdWxkIG1ha2UgbW9yZSBzZW5zZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbnMuIFRoYXQncyB3aGVyZSBJIHdpbGwgZmluZCB3aGF0IHRoZSBkZWFsIGlzIHdpdGggdGhlc2UgdHdvIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDowNy44NDMxMDgyNTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTgxNzU5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9OTU2PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTk2NS1cXG5pbml0L0tjb25maWc6OTY2OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy05NjctXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctOTczLVxcbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTk3NS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDowOS41MDEzMDIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjY0NjA3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBDT05GSUdfU1dBUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyBzdGF0dXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHN3YXAgaXMgZW5hYmxlZCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoxMS43NjU5MTI1ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDY5OTQyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyMjk9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyMzEtXFxuYXJjaC9taXBzL0tjb25maWc6MTIzMjpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyMzMtXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyOT1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEzMS1cXG5hcmNoL3NoL0tjb25maWc6MTMyOmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMy1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTEyPWNvbmZpZyBaUE9PTFxcbi0tXFxubW0vS2NvbmZpZy0xNC1cXG5tbS9LY29uZmlnOjE1Om1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoxMy4yNzI5MTIzOTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2MTA2MzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCBJbnRlcmFjdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgc3dhcCBhbmQgbWVtb3J5IGNncm91cHMgaW50ZXJhY3QsIHNwZWNpZmljYWxseSB0aGUgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byB0aGVtLCB3aGljaCBhcmUgYFNXQVBgIGFuZCBgTUVNQ0dgLCBvYnZpb3VzbHkuIFRoZSBjb2RlIHBhdGggdGhhdCdzIGdyYWJiZWQgbXkgYXR0ZW50aW9uIGlzIHRoaXMgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYC4gTm93LCBpcyBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpdHNlbGYgYSBnb29kIGZvY3VzIHN5bWJvbCBmb3IgbXkgaW52ZXN0aWdhdGlvbj8gSXQncyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhaywgdGhlIHBvaW50IHdoZXJlIHN3YXAtaW4gYW5kIGNncm91cCBtZW1vcnkgYWNjb3VudGluZyBjb21lIHRvZ2V0aGVyLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSBhcmVhIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmbG93LiBJIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBhIGJpdCBkZWVwZXIgYW5kIHNlZSBob3cgYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgZm9saW8gY2hhcmdpbmcgZHVyaW5nIHN3YXAtaW4gb3BlcmF0aW9ucywgYW5kIHdoYXQgdGhpcyBjZ3JvdXAgSUQgbG9va3VwIGlzIGRvaW5nIHRvIGltcGFjdCBtZW1vcnkgbWFuYWdlbWVudCB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQxNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjE2LjUzMzk3ODgzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzcxNTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY3NT1pbnQgbWVtX2Nncm91cF9odWdldGxiX3RyeV9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnAsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NzctXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Njc4OmludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjc5LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTY3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNzItXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE3MzpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTc0LVxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnAsIHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ0Nzc9aW50IG1lbV9jZ3JvdXBfaHVnZXRsYl90cnlfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0OTUtLyoqXFxubW0vbWVtY29udHJvbC5jOjQ0OTY6ICogbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvIC0gQ2hhcmdlIGEgbmV3bHkgYWxsb2NhdGVkIGZvbGlvIGZvciBzd2FwaW4uXFxubW0vbWVtY29udHJvbC5jLTQ0OTctICogQGZvbGlvOiBmb2xpbyB0byBjaGFyZ2UuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDUwNi0gKi9cXG5tbS9tZW1jb250cm9sLmM6NDUwNzppbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21lbWNvbnRyb2wuYy00NTA4LVxcdFxcdFxcdFxcdCAgZ2ZwX3QgZ2ZwLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL21lbW9yeS5jPTM5OTc9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00MDk4LVxcbm1tL21lbW9yeS5jOjQwOTk6XFx0XFx0XFx0XFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbyxcXG5tbS9tZW1vcnkuYy00MTAwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtYS1cXHUwMDNldm1fbW0sIEdGUF9LRVJORUwsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDMyPXN0cnVjdCBmb2xpbyAqX19yZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQ5MS1cXHRcXHQgKiBpcyBzZXQgYnV0IHRoZSBmb2xpbyBpcyBub3QgdGhlIHN3YXAgY2FjaGUgeWV0LiBUaGlzIGNhblxcbm1tL3N3YXBfc3RhdGUuYzo0OTI6XFx0XFx0ICogaGFwcGVuIHRvZGF5IGlmIG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbygpIGJlbG93XFxubW0vc3dhcF9zdGF0ZS5jLTQ5My1cXHRcXHQgKiB0cmlnZ2VycyByZWNsYWltIHRocm91Z2ggenN3YXAsIHdoaWNoIG1heSBjYWxsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTE1LVxcbm1tL3N3YXBfc3RhdGUuYzo1MTY6XFx0aWYgKG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhmb2xpbywgTlVMTCwgZ2ZwX21hc2ssIGVudHJ5KSlcXG5tbS9zd2FwX3N0YXRlLmMtNTE3LVxcdFxcdGdvdG8gZmFpbF91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjE3Ljk3MTY5OTcxOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY5NzQ4NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IENoYXJnZSBQb2ludHMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGhhbmRsZWQgZHVyaW5nIHN3YXAtaW4gb3BlcmF0aW9ucy4gVGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW9gIGlzIHByZXR0eSBjZW50cmFsIGhlcmUg4oCTIGl0J3MgZGVmaW5pdGVseSBhIGNydWNpYWwgZm9jdXMgcG9pbnQsIGdpdmVuIGl0cyBpbnZvbHZlbWVudCB3aXRoIGJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBfX3JlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBrZXkgY29tcG9uZW50IGluIHRoZSBzd2FwLWluIHByb2Nlc3MsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgaG93IG1lbW9yeSBjaGFyZ2VzIGFyZSBtYW5hZ2VkLiBJdCdzIGEgY2xlYXIgc3ltYm9sIGZvciBtZSB0byBmb2N1cyBvbi5cblxuQnV0IHRoZW4sIG15IG1pbmQgZHJpZnRzLiBXaGlsZSBsb29raW5nIGF0IHRoaXMsIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgb3RoZXIgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIFdoYXQgYWJvdXQgYGdldF9tY3RndF90eXBlYD8gSXMgdGhhdCBhbm90aGVyIGltcG9ydGFudCBmdW5jdGlvbiB0byBjb25zaWRlciBpbiB0aGlzIGNvbnRleHQ/IEknbGwgaGF2ZSB0byBkaWcgZGVlcGVyIGludG8gaXRzIHJvbGUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgc3dhcC1pbiBwcm9jZXNzLiBJdCdzIGltcG9ydGFudCB0byBsb29rIGF0IGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgYW5kIGluZmx1ZW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoyMi4xNDE0NTE1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzcxMzA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbWN0Z3RfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC12MS5jPTc1Nz1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtODY1LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzo4NjY6ICogZ2V0X21jdGd0X3R5cGUgLSBnZXQgdGFyZ2V0IHR5cGUgb2YgbW92aW5nIGNoYXJnZVxcbm1tL21lbWNvbnRyb2wtdjEuYy04NjctICogQHZtYTogdGhlIHZtYSB0aGUgcHRlIHRvIGJlIGNoZWNrZWQgYmVsb25nc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTg4NS0gKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6ODg2OnN0YXRpYyBlbnVtIG1jX3RhcmdldF90eXBlIGdldF9tY3RndF90eXBlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy04ODctXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGVudCwgdW5pb24gbWNfdGFyZ2V0ICp0YXJnZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtOTcwLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzo5NzE6c3RhdGljIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy05NzItXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCBwbWQsIHVuaW9uIG1jX3RhcmdldCAqdGFyZ2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEwMDEtI2Vsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTAwMjpzdGF0aWMgaW5saW5lIGVudW0gbWNfdGFyZ2V0X3R5cGUgZ2V0X21jdGd0X3R5cGVfdGhwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDAzLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgcG1kLCB1bmlvbiBtY190YXJnZXQgKnRhcmdldClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMDA5PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTAyMy1cXHRcXHQgKi9cXG5tbS9tZW1jb250cm9sLXYxLmM6MTAyNDpcXHRcXHRpZiAoZ2V0X21jdGd0X3R5cGVfdGhwKHZtYSwgYWRkciwgKnBtZCwgTlVMTCkgPT0gTUNfVEFSR0VUX1BBR0UpXFxubW0vbWVtY29udHJvbC12MS5jLTEwMjUtXFx0XFx0XFx0bWMucHJlY2hhcmdlICs9IEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDMzLVxcdGZvciAoOyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMDM0OlxcdFxcdGlmIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZXBfZ2V0KHB0ZSksIE5VTEwpKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMDM1LVxcdFxcdFxcdG1jLnByZWNoYXJnZSsrO1xcdC8qIGluY3JlbWVudCBwcmVjaGFyZ2UgdGVtcG9yYXJpbHkgKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMjA2PXN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjIzLVxcdFxcdH1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTIyNDpcXHRcXHR0YXJnZXRfdHlwZSA9IGdldF9tY3RndF90eXBlX3RocCh2bWEsIGFkZHIsICpwbWQsIFxcdTAwMjZ0YXJnZXQpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjI1LVxcdFxcdGlmICh0YXJnZXRfdHlwZSA9PSBNQ19UQVJHRVRfUEFHRSkge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEyNjItXFxubW0vbWVtY29udHJvbC12MS5jOjEyNjM6XFx0XFx0c3dpdGNoIChnZXRfbWN0Z3RfdHlwZSh2bWEsIGFkZHIsIHB0ZW50LCBcXHUwMDI2dGFyZ2V0KSkge1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjY0LVxcdFxcdGNhc2UgTUNfVEFSR0VUX0RFVklDRTpcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMjg2LVxcdFxcdFxcdFxcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTI4NzpwdXQ6XFx0XFx0XFx0LyogZ2V0X21jdGd0X3R5cGUoKSBnZXRzIFxcdTAwMjYgbG9ja3MgdGhlIHBhZ2UgKi9cXG5tbS9tZW1jb250cm9sLXYxLmMtMTI4OC1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDoyMy41NjUxNzcxMTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NTc0NDk2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOlxuXG4qKlRyYWNpbmcgdGhlIE1lbW9yeSBDaGFyZ2UgRmxvdyoqXG5cbk9rYXksIHNvIGBnZXRfbWN0Z3RfdHlwZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCB0byBrbm93IHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY2FsbCBzdGFjayBsb29rcyBsaWtlIHRoaXM6IGBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV9wdGVfcmFuZ2VgIGFuZCBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2VgIGJvdGggY2FsbCBpdC4gVGhleSBpbiB0dXJuIGFyZSBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZWAuIFRvIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBtZW1vcnkgYWNjb3VudGluZyBhbmQgY2hhcmdlIG1vdmVtZW50LCBJIG5lZWQgdG8gZGlnIGludG8gYG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgbXVzdCByZXNpZGUsIGdpdmVuIHRoZSBjYWxsIGhpZXJhcmNoeS4gSSdsbCBmb2N1cyBteSBpbnZlc3RpZ2F0aW9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MjcuMzMwOTI0ODIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDYzMzkzMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz01ODY9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9tb3ZlX3N3YXBfYWNjb3VudChzd3BfZW50cnlfdCBlbnRyeSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy01OTItXFxubW0vbWVtY29udHJvbC12MS5jOjU5MzpzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLFxcbm1tL21lbWNvbnRyb2wtdjEuYy01OTQtXFx0XFx0XFx0XFx0c3RydWN0IGNmdHlwZSAqY2Z0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTU5OS0jaWZkZWYgQ09ORklHX01NVVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MDA6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxubW0vbWVtY29udHJvbC12MS5jLTYwMS1cXHRcXHRcXHRcXHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYyMS0jZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzo2MjI6c3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsXFxubW0vbWVtY29udHJvbC12MS5jLTYyMy1cXHRcXHRcXHRcXHQgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTEyMDA9dm9pZCBtZW1jZzFfY2FuY2VsX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTIwNS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTIwNjpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWVtY29udHJvbC12MS5jLTEyMDctXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMzIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY2hhcmdlX3dhbGtfb3BzID0ge1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzIzOlxcdC5wbWRfZW50cnlcXHQ9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcHRlX3JhbmdlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzI0LVxcdC53YWxrX2xvY2tcXHQ9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTMyNi1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTMyNzpzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfY2hhcmdlKHZvaWQpXFxubW0vbWVtY29udHJvbC12MS5jLTEzMjgte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTEzNTk9dm9pZCBtZW1jZzFfbW92ZV90YXNrKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTM2MS1cXHRpZiAobWMudG8pIHtcXG5tbS9tZW1jb250cm9sLXYxLmM6MTM2MjpcXHRcXHRtZW1fY2dyb3VwX21vdmVfY2hhcmdlKCk7XFxubW0vbWVtY29udHJvbC12MS5jLTEzNjMtXFx0XFx0bWVtX2Nncm91cF9jbGVhcl9tYygpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3NzM9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTI4MjctXFx0XFx0Lm5hbWUgPSBcXFwibW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MjgyODpcXHRcXHQucmVhZF91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQsXFxubW0vbWVtY29udHJvbC12MS5jOjI4Mjk6XFx0XFx0LndyaXRlX3U2NCA9IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTI4MzAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MjguNzk0MzI2NjQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI1NDc3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIG1lbWNnMV9tb3ZlX3Rhc2sqKlxuXG5Pa2F5LCBzbyBgbWVtY2cxX21vdmVfdGFza2AgaXMgdGhlIGZ1bmN0aW9uIHdlIG5lZWQgdG8gZm9jdXMgb24uIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBgbWVtX2Nncm91cF9tb3ZlX3Rhc2tgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhhdCBmdW5jdGlvbiB3b3VsZCBiZSB0aGUgbGlrZWx5IGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgaW4gYG1tL21lbWNvbnRyb2wuY2Agb3IgYSBzaW1pbGFyIGZpbGUgdGhhdCBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIG1lbW9yeSBjb250cm9sIGdyb3VwIGxvZ2ljLiBMZXQncyBkaWcgaW50byBgbWVtY2cxX21vdmVfdGFza2AgYW5kIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBhdCB0aGF0IGxldmVsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaWNzIG9mIG1vdmluZyBhIHRhc2sgYmV0d2VlbiBtZW1vcnkgY2dyb3Vwcy4gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIGFuZCB3aGF0IGxvY2tzIGFyZSBpbnZvbHZlZD8gTGV0J3MgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MzIuODc2ODc3NjI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAzNzAyNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnMV9tb3ZlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xMzI3PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Uodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzU4LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzU5OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xMzcyPXZvaWQgbWVtY2cxX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTEzNzQtfVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxMzc1OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xMzc2LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD04Nj12b2lkIG1lbWNnMV9jYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCk7XFxubW0vbWVtY29udHJvbC12MS5oOjg3OnZvaWQgbWVtY2cxX21vdmVfdGFzayh2b2lkKTtcXG5tbS9tZW1jb250cm9sLXYxLmgtODgtdm9pZCBtZW1jZzFfY3NzX29mZmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzkwPXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NDA0LVxcdC5jYW5jZWxfYXR0YWNoID0gbWVtY2cxX2NhbmNlbF9hdHRhY2gsXFxubW0vbWVtY29udHJvbC5jOjQ0MDU6XFx0LnBvc3RfYXR0YWNoID0gbWVtY2cxX21vdmVfdGFzayxcXG5tbS9tZW1jb250cm9sLmMtNDQwNi1cXHQubGVnYWN5X2NmdHlwZXMgPSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6MzQuMjgwNTg3NTE1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzE0NTU2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhyb3VnaCBpdHMgaW1wbGljYXRpb25zLiBFc3NlbnRpYWxseSwgYG1lbWNnMV9tb3ZlX3Rhc2tgIGlzIGFjdGluZyBhcyB0aGUgY2FsbGJhY2sgdGhhdCBydW5zIGFmdGVyIGEgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBpcyBhdHRhY2hlZCB2aWEgYG1lbW9yeV9jZ3JwX3N1YnN5c2AuIEkgdW5kZXJzdGFuZCB0aGF0LiBUaGVuLCBgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvYCBpcyB0aWVkIGludG8gdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgc3dhcHBpbmcgcGVyc3BlY3RpdmUuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSB0aGlzIG5ldyBjaGVjayB3aXRoaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGA6IGBpZiAodW5saWtlbHkoIWN0cmwtXHUwMDNlbWFwKSkgcmV0dXJuIDA7YC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aGVuIHRoZSBgY3RybC1cdTAwM2VtYXBgIHBvaW50ZXIgaXMgTlVMTC4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGltcG9ydGFudCBmb3IgcHJldmVudGluZyBhIGNyYXNoLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSBrbm93IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVzc2VudGlhbCBiZWNhdXNlIG9mIGBtZW1jZzFfbW92ZV90YXNrYC4gYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfU1dBUGAgYXJlIGFsc28gY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgaW4gYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjM5LjQxMjA0NzEwN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNTQzMTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dfVjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz05NjY9Y29uZmlnIE1FTUNHXFxuLS1cXG5pbml0L0tjb25maWctOTczLVxcbmluaXQvS2NvbmZpZzo5NzQ6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTk3NS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0MC44Mjc0ODQyMTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NjI3MzU0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYE1FTUNHX1YxYCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUVNQ0dfVjFgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IGNoZWNrcyBvdXQuIExldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4uLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSB0YXJnZXRlZCBmaXguXG5cblRoZSBrZXkgcG9pbnRzIGFyZTogdGhlIHN5c3RlbSdzIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAsIHdlJ3JlIGZvY3VzaW5nIG91ciBhdHRlbnRpb24gb24gYG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb2AsIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQgYXJlIGBTV0FQYCwgYE1FTUNHYCwgYW5kLCBvZiBjb3Vyc2UsIGBNRU1DR19WMWAuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmaXggYWRkcmVzc2VzIGEgTlVMTCBwb2ludGVyIGNoZWNrIGNvbmNlcm5pbmcgYGN0cmwtXHUwMDNlbWFwYCB3aXRoaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAuIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgd2hlbiBjZ3JvdXAgdjEgdGFza3MgbWlncmF0ZSwgd2hpY2ggcG9pbnRzIHRvd2FyZHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGEgdnVsbmVyYWJpbGl0eSB3aW5kb3cgZHVyaW5nIHRoZXNlIHNwZWNpZmljIGFjdGl2aXRpZXMuIEFkZGluZyB0aGlzIGNoZWNrIGlzIGNsZWFybHkgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZS4gVGhlIHBvdGVudGlhbCBmb3IgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd291bGQgZGVmaW5pdGVseSBiZSBiYWQgbmV3cywgc28gaXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGV5IGFyZSB0YWtpbmcgYWN0aW9uIGluIHRoaXMgc3BhY2UuIEkgd291bGQgbGlrZSB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZml4IGluIG1vcmUgZGVwdGgsIGFuZCB3aWxsIGZvbGxvdyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlc2UgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg1LCJPdXRwdXRUb2tlbnMiOjExMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0NS4xMDM3NjA3MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMzNTQwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgZm9yIGBjdHJsLVxcdTAwM2VtYXBgIGluIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHN3YXBpbiBjaGFyZ2Ugb3BlcmF0aW9ucyBhbmQgY2dyb3VwIHYxIHRhc2sgbWlncmF0aW9ucy4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgYGN0cmwtXFx1MDAzZW1hcGAgaW4gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAsIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgc3dhcGluIGNoYXJnZSBvcGVyYXRpb25zIGFuZCBjZ3JvdXAgdjEgdGFzayBtaWdyYXRpb25zLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6NDUuMjM3MTI1ODIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyNzIyOTU3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjQ1LjI0MDE1Mzc2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQyNDE5NzI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIE5VTEwgcG9pbnRlciBjaGVjayAoYCFjdHJsLVxcdTAwM2VtYXBgKSB0byBgbG9va3VwX3N3YXBfY2dyb3VwX2lkYCB0byBwcmV2ZW50IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyB3aGVuIGEgc3dhcCBjZ3JvdXAgbWFwIGlzIG5vdCBpbml0aWFsaXplZC4gVGhpcyBidWcgd291bGQgbWFuaWZlc3QgYXMgYSBjcmFzaCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGlzIHJlYWRpbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTdkY2NjNWY1YTdlZDMwNWJkMmIwZWY0ZWE5ZDA5NzZlNWZkOTI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDg6MTk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX2Nncm91cC5jIGIvbW0vc3dhcF9jZ3JvdXAuY1xuaW5kZXggZGI2YzRhMjZjZjU5My4uMmQwNDI1ZjRhNmI5YyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfY2dyb3VwLmNcbisrKyBiL21tL3N3YXBfY2dyb3VwLmNcbkBAIC0xNjEsNiArMTYxLDExIEBAIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkLFxuICAqL1xuIHVuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cF9pZChzd3BfZW50cnlfdCBlbnQpXG4ge1xuK1x0c3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7XG4rXG4rXHRjdHJsID0gXHUwMDI2c3dhcF9jZ3JvdXBfY3RybFtzd3BfdHlwZShlbnQpXTtcbitcdGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKVxuK1x0XHRyZXR1cm4gMDtcbiBcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cdTAwM2VpZDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwODoyMDo0NS4yNDAxNTYyODJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMjExMTI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ2dyb3VwIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3N3YXBfY2dyb3VwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyBhIG5ldyBjaGVjazogYGlmICh1bmxpa2VseSghY3RybC1cdTAwM2VtYXApKSByZXR1cm4gMDtgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBOVUxMIHBvaW50ZXIgY2hlY2ssIG9yIG1vcmUgYWNjdXJhdGVseSwgYW4gdW5pbml0aWFsaXplZCBtYXAgY2hlY2sgb24gdGhlIGBjdHJsLVx1MDAzZW1hcGAgcG9pbnRlci4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwb3RlbnRpYWwgY3Jhc2ggc2NlbmFyaW86IGEgTlVMTCBkZXJlZmVyZW5jZSBvciwgZXZlbiB3b3JzZSwgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGlmIHRoZSBtYXAgcG9pbnRlciBpc24ndCBwcm9wZXJseSBpbml0aWFsaXplZC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgdW5kZXJzdGFuZCBob3cgYGN0cmwtXHUwMDNlbWFwYCBtaWdodCBiZWNvbWUgTlVMTC4gTGV0J3MgZGlnIGludG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgYW5kIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGBsb29rdXBfc3dhcF9jZ3JvdXBgIHRvIGdldCB0aGUgd2hvbGUgcGljdHVyZS4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBmdW5jdGlvbiBpcyB0byBwcmV2ZW50IHRoaXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyBnb29kLiBXZSBhcmUgdGFsa2luZyBhYm91dCBhIGNyYXNoIGZpeC5cblxuTm93LCBteSBtb3JlIGFkdmFuY2VkIGtlcm5lbCBkZWJ1Z2dpbmcgaW5zdGluY3RzIGtpY2sgaW4uIERvZXMgdGhpcyAqaW50cm9kdWNlKiBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIGJ5IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgdGhhbmtmdWxseSBub3QuIFRoZSBwYXRjaCBqdXN0IHJldHVybnMgYDBgIGlmIHRoZSBtYXAgaXMgTlVMTC4gU28sIGl0IHNpbXBseSBhdm9pZHMgdGhlIGNyYXNoLiBJdCBsb29rcyBsaWtlIGl0IGlzIGp1c3QgYSBidWdmaXggZm9yIHdoYXQgSSBhbHJlYWR5IGRlZHVjZWQ6IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuXG5JJ2QgZXhwZWN0IEtBU0FOIG9yIHRoZSBzdGFuZGFyZCBrZXJuZWwgY2hlY2tzIHRvIGNhdGNoIGEgY3Jhc2ggbGlrZSB0aGlzICh0aGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB0aGF0IGlzKS4gS01TQU4gaXMgd2hhdCBJJ2QgdXNlIGlmIEkgc3VzcGVjdGVkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBiZWluZyBhY2Nlc3NlZC4gSXQgc2VlbXMgbGlrZSBLTVNBTiBpcyBub3QgcmVsZXZhbnQgaGVyZS4gU28sIHRoZSBwYXRjaCBpcyBsaWtlbHkgYSBzb2xpZCBmaXguIEknbGwgdGFrZSBvbmUgbW9yZSBsb29rIGF0IGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjUxLjc3MjI3MDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9jZ3JvdXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0XFx0fVxcbiAxNTE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3RybC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRyZXR1cm4gb2xkO1xcbiAxNTQ6XFx0fVxcbiAxNTU6XFx0XFxuIDE1NjpcXHQvKipcXG4gMTU3OlxcdCAqIGxvb2t1cF9zd2FwX2Nncm91cF9pZCAtIGxvb2t1cCBtZW1fY2dyb3VwIGlkIHRpZWQgdG8gc3dhcCBlbnRyeVxcbiAxNTg6XFx0ICogQGVudDogc3dhcCBlbnRyeSB0byBiZSBsb29rZWQgdXAuXFxuIDE1OTpcXHQgKlxcbiAxNjA6XFx0ICogUmV0dXJucyBJRCBvZiBtZW1fY2dyb3VwIGF0IHN1Y2Nlc3MuIDAgYXQgZmFpbHVyZS4gKDAgaXMgaW52YWxpZCBJRClcXG4gMTYxOlxcdCAqL1xcbiAxNjI6XFx0dW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwX2lkKHN3cF9lbnRyeV90IGVudClcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRjdHJsID0gXFx1MDAyNnN3YXBfY2dyb3VwX2N0cmxbc3dwX3R5cGUoZW50KV07XFxuIDE2NzpcXHRcXHRpZiAodW5saWtlbHkoIWN0cmwtXFx1MDAzZW1hcCkpXFxuIDE2ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTY5OlxcdFxcdHJldHVybiBsb29rdXBfc3dhcF9jZ3JvdXAoZW50LCBOVUxMKS1cXHUwMDNlaWQ7XFxuIDE3MDpcXHR9XFxuIDE3MTpcXHRcXG4gMTcyOlxcdGludCBzd2FwX2Nncm91cF9zd2Fwb24oaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzKVxcbiAxNzM6XFx0e1xcbiAxNzQ6XFx0XFx0dm9pZCAqYXJyYXk7XFxuIDE3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGxlbmd0aDtcXG4gMTc2OlxcdFxcdHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsO1xcbiAxNzc6XFx0XFxuIDE3ODpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbiAxNzk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA4OjIwOjUxLjc3MjM0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODkxOTg2NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQuIEl0J3MgYWRkaW5nIGEgY2hlY2sgZm9yIGAhY3RybC1cdTAwM2VtYXBgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBjdHJsLVx1MDAzZW1hcGAgaW5zaWRlIGBsb29rdXBfc3dhcF9jZ3JvdXBgLiBUaGlzIGlzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgY2hlY2sg4oCTIG5vdGhpbmcgZmFuY3ksIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbkZyYW5rbHksIGFueSBkZWNlbnQgc3RhdGljIGFuYWx5c2lzIHRvb2wgb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3MsIGluY2x1ZGluZyBLQVNBTiwgd291bGQndmUgY2F1Z2h0IHRoaXMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBhbnl3YXkuIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBmb3IgdGhpcyBwYXJ0aWN1bGFyIGlzc3VlLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgYmFzaWMgZGVmZW5zaXZlIGNvZGluZyBwcmFjdGljZSwgbm90IHNvbWUgc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEl0J3MgYSBnb29kIHByYWN0aWNlLCBidXQgbm90IGEgS01TQU4gY2FuZGlkYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTAxLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDg6MjA6NTUuNjY0MzM0ODYzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIChgIWN0cmwtXFx1MDAzZW1hcGApIHRvIGBsb29rdXBfc3dhcF9jZ3JvdXBfaWRgIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzIHdoZW4gYSBzd2FwIGNncm91cCBtYXAgaXMgbm90IGluaXRpYWxpemVkLiBUaGlzIGJ1ZyB3b3VsZCBtYW5pZmVzdCBhcyBhIGNyYXNoIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggaXMgcmVhZGlseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgKGAhY3RybC1cXHUwMDNlbWFwYCkgdG8gYGxvb2t1cF9zd2FwX2Nncm91cF9pZGAgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3Mgd2hlbiBhIHN3YXAgY2dyb3VwIG1hcCBpcyBub3QgaW5pdGlhbGl6ZWQuIFRoaXMgYnVnIHdvdWxkIG1hbmlmZXN0IGFzIGEgY3Jhc2ggb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBpcyByZWFkaWx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow9zbbl[1] Phase: Succeeded StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[2] Phase: Succeeded StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:40:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:21:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 08:21:07 +0000 UTC FinishedAt: 2026-08-14 08:21:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9zbbl/series-workflow9zbbl-convert-artifact-3239752842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 08:21:17 +0000 UTC FinishedAt: 2026-08-14 08:40:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 08:21:17 +0000 UTC FinishedAt: 2026-08-14 08:40:04 +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:*6a585ef3-284a-4c04-bfe3-a1bcc65053d2,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-workflow9zbbl/series-workflow9zbbl-convert-artifact-3239752842/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": "76128eaa-6b31-4610-99e5-7acff40ab4bc", "success": false },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-workflow9zbbl/series-workflow9zbbl-build-action-3941293944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 08:21:17 +0000 UTC FinishedAt: 2026-08-14 08:39:31 +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:*6a585ef3-284a-4c04-bfe3-a1bcc65053d2,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-workflow9zbbl/series-workflow9zbbl-convert-artifact-3239752842/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": "76128eaa-6b31-4610-99e5-7acff40ab4bc", "success": false },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-workflow9zbbl/series-workflow9zbbl-build-action-3941293944/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-08-14 08:40:04 +0000 UTC FinishedAt: 2026-08-14 08:40:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9zbbl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_swapin_charge_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"20793955835fe29a5582f68ff031fdcd35cc98ed","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"1274e769-ea9b-4b12-996b-ece31197769e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-08-14 08:40:04 +0000 UTC FinishedAt: 2026-08-14 08:40:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}