Name: series-workflowvdcgs Phase: Succeeded StartedAt: 2026-08-26 17:22:20 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[0] Phase: Succeeded StartedAt: 2026-08-26 17:22:20 +0000 UTC FinishedAt: 2026-08-26 17:24:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 17:22:20 +0000 UTC FinishedAt: 2026-08-26 17:24:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_GUEST_MEMFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_GUEST_MEMFD" ], "series_id": "f3e1a2b9-7488-47a3-bac9-568563c4fd23" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fR1VFU1RfTUVNRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBpbiBga3ZtX2dtZW1fYmluZCgpYC4gSWYgdGhlIHhhcnJheSBzdG9yZSBmYWlscywgaXQgY2xlYXJzIHRoZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVx1MDAzZWZsYWdzYCBmaWVsZHMgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBtZW1vcnkgc2xvdCBpbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBsb2dpYyBidWdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgS1ZNIGd1ZXN0X21lbWZkIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBhbmQgYSBzYW5pdHkgY2hlY2sgaW4gYGt2bV9nbWVtX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwgd2hlbiBzZXR0aW5nIHVwIGd1ZXN0IG1lbW9yeSB3aXRoIGBLVk1fTUVNX0dVRVNUX01FTUZEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyODJhYWRjMjY1ZGM3NjNmNTQ5MGY2Y2ZmMTY0NDQzMTIwYTRiMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzoyMzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0aW50IHIgPSAtRUlOVkFMO1xuJiM0MztcdHZvaWQgKnhhcjtcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2YoZ3BhX3QpICE9IHNpemVvZihvZmZzZXQpKTtcbiBcdEJVSUxEX0JVR19PTihzaXplb2YoZ2ZuX3QpICE9IHNpemVvZihzbG90LVx1MDAzZWdtZW0ucGdvZmYpKTtcbiBcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRmaWxlID0gZmdldChmZCk7XG4gXHRpZiAoIWZpbGUpXG4gXHRcdHJldHVybiAtRUJBREY7XG5AQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4mIzQzO1x0c2xvdC1cdTAwM2VnbWVtLmZpbGUgPSBmaWxlO1xuIFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gc3RhcnQ7XG4gXHRpZiAoa3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkpXG4gXHRcdHNsb3QtXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuIFxuLVx0eGFfc3RvcmVfcmFuZ2UoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIHNsb3QsIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhciA9IHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qXG5AQCAtNjYyLDcgJiM0Mzs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJiMzOTtyb3VuZC4gIEFjdGl2ZSBiaW5kaW5ncyBhcmUgaW52YWxpZGF0ZWQgaWYgdGhlXG4gXHQgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC5cbiBcdCAqL1xuLVx0ciA9IDA7XG4mIzQzO1x0ciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwO1xuJiM0MztcdGlmIChyKSB7XG4mIzQzO1x0XHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IE5VTEw7XG4mIzQzO1x0XHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSAwO1xuJiM0MztcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4mIzQzO1x0fVxuIGVycjpcbiBcdGZwdXQoZmlsZSk7XG4gXHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9HVUVTVF9NRU1GRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI4MmFhZGMyNjVkYzc2M2Y1NDkwZjZjZmYxNjQ0NDMxMjBhNGIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IHIgPSAtRUlOVkFMOwomIzQzOwl2b2lkICp4YXI7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7CiAJQlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtJmd0O2dtZW0ucGdvZmYpKTsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOwpAQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdAogCSAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLgogCSAqLwotCVdSSVRFX09OQ0Uoc2xvdC0mZ3Q7Z21lbS5maWxlLCBmaWxlKTsKJiM0MzsJc2xvdC0mZ3Q7Z21lbS5maWxlID0gZmlsZTsKIAlzbG90LSZndDtnbWVtLnBnb2ZmID0gc3RhcnQ7CiAJaWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKQogCQlzbG90LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiAKLQl4YV9zdG9yZV9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhciA9IHhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLSZndDtpX21hcHBpbmcpOwogCiAJLyoKQEAgLTY2Miw3ICYjNDM7NjY2LDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBub3QgdGhlIG90aGVyIHdheSAmIzM5O3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGUKIAkgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC4KIAkgKi8KLQlyID0gMDsKJiM0MzsJciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwOwomIzQzOwlpZiAocikgewomIzQzOwkJc2xvdC0mZ3Q7Z21lbS5maWxlID0gTlVMTDsKJiM0MzsJCXNsb3QtJmd0O2dtZW0ucGdvZmYgPSAwOwomIzQzOwkJc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CX0KIGVycjoKIAlmcHV0KGZpbGUpOwogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBGaWxlIEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHRvIHRoZSBga3ZtX2dtZW1fYmluZGAgZnVuY3Rpb24uIEZpcnN0IGdsYW5jZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2lnbm1lbnQgc3RyYXRlZ3kgZm9yIHRoZSBndWVzdCBtZW1vcnkgZmlsZS4KClRoZSBwYXRjaCBpbmNsdWRlcyBhIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGxpa2VseSBhZGRlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgdW5leHBlY3RlZCBpc24mIzM5O3QgaGFwcGVuaW5nIHdpdGggdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBiYWlscyBvdXQgd2l0aCBgLUVJTlZBTGAuIE1ha2VzIHNlbnNlOyB0aGF0IGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgZW5mb3JjZWQuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGBXUklURV9PTkNFYCB3aXRoIGEgZGlyZWN0IGFzc2lnbm1lbnQgdG8gYHNsb3QtJmd0O2dtZW0uZmlsZWAuIFRoYXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBtZW1vcnkgb3JkZXJpbmcgb3IgY29tcGlsZXIgb3B0aW1pemF0aW9uIHdoZXJlIGBXUklURV9PTkNFYCBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBtZWFucyB3ZSYjMzk7dmUgc2VlbiBzb21lIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoYXQgaW4gdGVzdGluZy9wcm9kdWN0aW9uLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuCgpGaW5hbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgd2l0aCBgeGFfc3RvcmVfcmFuZ2VgJiMzOTtzIHJldHVybiB2YWx1ZSAoYHhhcmApLiBCZWZvcmUsIHRoZSBjb2RlIHNlZW1pbmdseSBkaWQgbm90IGhhbmRsZSB0aGUgZXJyb3IgZnJvbSBgeGFfc3RvcmVfcmFuZ2VgLiBOb3csIGlmIGB4YV9zdG9yZV9yYW5nZWAgZmFpbHMsIGl0IHJvbGxzIGJhY2sgdGhvc2UgYXNzaWdubWVudHMgdG8gYHNsb3QtJmd0O2dtZW1gLCB3aGljaCBpcyBnb29kISBBdG9taWMgb3BlcmF0aW9ucyBhcmUga2V5IGZvciBLVk0mIzM5O3MgcGVyZm9ybWFuY2UuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbGx5IGltcHJvdmVzIG1lbW9yeSBvcmRlcmluZyB3aXRoIHRoZSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbWVtb3J5IGFzc2lnbm1lbnQuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBvbmUg4oCTIGNsZWFuLCBmb2N1c2VkLCBhbmQgbGlrZWx5IGltcHJvdmVzIHRoZSByZWxpYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoaXMgcGFydCBvZiBLVk0uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NTkyPWludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjA2OmludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjA3LVx0XHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cdCAqIG1lbXNsb3RzIG9mIGZsYWcgS1ZNX01FTV9HVUVTVF9NRU1GRCBhcmUgaW1tdXRhYmxlIHRvIGNoYW5nZSwgc29cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjUzOlx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjU0LVx0ICogaXMgbm90IHZpc2libGUgeWV0LCBrdm1fZ21lbV9nZXRfcGZuKCkgaXMgZ3VhcmFudGVlZCB0byBzZWUgdGhlIGZpbGUuXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD0xMD1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaDoxMTppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTEyLVx0XHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldCk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2dtZW1fZXhpdCh2b2lkKSB7fTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MjA6c3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTIxLVx0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwOTpcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXHRcdGlmIChyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBga3ZtX2dtZW1fYmluZGAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwuIEFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcmV0dHkgb2J2aW91cyB0aGF0IGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIGlzIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMuIFRoYXQgbWFrZXMgYGt2bV9nbWVtX2JpbmRgIGEgcHJpbWUgZnV6emluZyB0YXJnZXQg4oCTIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBCZWZvcmUgSSBqdW1wIGluIHRob3VnaCwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkgbmVlZCB0byBjb25maXJtIGlmIGBndWVzdF9tZW1mZGAgaXMgZW5hYmxlZCwgYXMgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFuZCB3aGF0IGtpbmQgb2YgbWVtb3J5IHJlZ2lvbnMgaXTigJlzIGRlYWxpbmcgd2l0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBrZXkgYmVmb3JlIEkgc3RhcnQgdGhyb3dpbmcgZnV6eiBkYXRhIGF0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29tcGlsYXRpb24gTG9jYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGlzIGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgb3V0cHV0LCBvciBkZXRlcm1pbmUgdGhlIHBhdGhzIHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIGhvdyBpdOKAmXMgYmVpbmcgbGlua2VkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25maWd1cmF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGhpZGluZy4gVGltZSB0byB0cmFjZSB0aGUgYnVpbGQgc3RlcHMgcmVsYXRlZCB0byB0aGF0IHNvdXJjZSBmaWxlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBNZW1vcnkgTWFwcGluZyBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBwcm9ibGVtLCBhbmQgSSYjMzk7dmUgaGl0IGEgYml0IG9mIGEgcm9hZGJsb2NrLiBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBicmVha2Rvd24gaXMgb2NjdXJyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgYmFzaWMgY29uZmlndXJhdGlvbiBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGUgZ3Vlc3QgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4KCldhaXQgYSBzZWNvbmQuLi4gY291bGQgdGhpcyB3aG9sZSB0aGluZyBiZSByZWxhdGVkIHRvIHRoZSBgS1ZNX1BSSVZBVEVfTUVNYCBmbGFnPyBJIHdvbmRlciBpZiBJJiMzOTttIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBpdHMgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZSB3YXkgSSYjMzk7bSBoYW5kbGluZyB0aGUgbWVtb3J5IHJlZ2lvbnMgb3IgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBpcyBvZmYgYmVjYXVzZSBvZiBpdC4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgS1ZNX1BSSVZBVEVfTUVNYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgY2FsbHMgSSYjMzk7bSB1c2luZy4gSXQgY291bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyBwdXp6bGUuIEkgd2lsbCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMS0jaW5jbHVkZSBcJiMzNDtrdm1fbW0uaFwmIzM0O1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMjojaW5jbHVkZSBcJiMzNDtndWVzdF9tZW1mZC5oXCYjMzQ7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEzLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0xND1zdGF0aWMgc3RydWN0IHZmc21vdW50ICprdm1fZ21lbV9tbnQ7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xNi0vKlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxNzogKiBBIGd1ZXN0X21lbWZkIGluc3RhbmNlIGNhbiBiZSBhc3NvY2lhdGVkIG11bHRpcGxlIFZNcywgZWFjaCB3aXRoIGl0cyBvd25cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTgtICogXCYjMzQ7dmlld1wmIzM0OyBvZiB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBtZW1vcnkuXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNC1cdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjEwNTpcdCAqIHdpdGggaHVnZXBhZ2VzIHRvIGEgZGVncmVlLCBidXQgaW50ZXJuYWxseSwgZ3Vlc3RfbWVtZmQgY3VycmVudGx5XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNi1cdCAqIGFzc3VtZXMgdGhhdCBhbGwgZm9saW9zIGFyZSBvcmRlci0wIGFuZCBoYW5kbGluZyB3b3VsZCBuZWVkXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MjM9c3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01OTEtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjU5MjppbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTU5My17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz05MDQ9c3RhdGljIHZvaWQga3ZtX2dtZW1faW5pdF9pbm9kZV9vbmNlKHZvaWQgKl9fZ2kpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDktXHQgKiBOb3RlISAgRG9uJiMzOTt0IGluaXRpYWxpemUgdGhlIGlub2RlIHdpdGggYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxMDpcdCAqIGd1ZXN0X21lbWZkIGluc3RhbmNlLCBvciB0aGF0IG1pZ2h0IGJlIHNwZWNpZmljIHRvIGhvdyB0aGUgaW5vZGUgaXNcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTExLVx0ICogdXNlZCAoZnJvbSB0aGUgVkZTLWxheWVyJiMzOTtzIHBlcnNwZWN0aXZlKS4gIFRoaXMgaG9vayBpcyBjYWxsZWQgb25seVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9OTY0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBrdm1fZ21lbV9mcyA9IHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6OTY1Olx0Lm5hbWVcdFx0ID0gXCYjMzQ7Z3Vlc3RfbWVtZmRcJiMzNDssXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTk2Ni1cdC5pbml0X2ZzX2NvbnRleHQgPSBrdm1fZ21lbV9pbml0X2ZzX2NvbnRleHQsXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD05PXZvaWQga3ZtX2dtZW1fZXhpdCh2b2lkKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MTA6aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmgtMTEtaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTgtI2luY2x1ZGUgXCYjMzQ7YXN5bmNfcGYuaFwmIzM0O1xudmlydC9rdm0va3ZtX21haW4uYzo1OTojaW5jbHVkZSBcJiMzNDtndWVzdF9tZW1mZC5oXCYjMzQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTYwLSNpbmNsdWRlIFwmIzM0O2t2bV9tbS5oXCYjMzQ7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xNjk3PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNzMwLVx0XHQvKlxudmlydC9rdm0va3ZtX21haW4uYzoxNzMxOlx0XHQgKiBNb3ZpbmcgYSBndWVzdF9tZW1mZCBtZW1zbG90IGlzbiYjMzk7dCBzdXBwb3J0ZWQsIGFuZCB3aWxsIG5ldmVyXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3MzItXHRcdCAqIGJlIHN1cHBvcnRlZC5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDQtXHRcdC8qXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDU6XHRcdCAqIFVuYmluZCB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UgYXMgbmVlZGVkOyB0aGUgQG5ldyBzbG90IGhhc1xudmlydC9rdm0va3ZtX21haW4uYy0xNzQ2LVx0XHQgKiBhbHJlYWR5IGNyZWF0ZWQgaXRzIG93biBiaW5kaW5nLiAgVE9ETzogRHJvcCB0aGUgV0FSTiB3aGVuXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDc6XHRcdCAqIGRpcnR5IGxvZ2dpbmcgZ3Vlc3RfbWVtZmQgbWVtc2xvdHMgaXMgc3VwcG9ydGVkLiAgVW50aWwgdGhlbixcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0ODpcdFx0ICogZmxhZ3Mtb25seSBjaGFuZ2VzIG9uIGd1ZXN0X21lbWZkIHNsb3RzIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVx0XHQgKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXHUwMDI2XHUwMDI2XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XHQgICAgKG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxudmlydC9rdm0va3ZtX21haW4uYzoyMDI5Olx0ICAgICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbS1cdTAwM2VtZW1vcnlfc2l6ZSBcdTAwM2MgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMzAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwOTpcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXHRcdGlmIChyKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE2Nz1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01Mzg4LVx0Y2FzZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzODk6XHRcdHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIGd1ZXN0X21lbWZkO1xudmlydC9rdm0va3ZtX21haW4uYy01MzkwLVxudmlydC9rdm0va3ZtX21haW4uYy01MzkxLVx0XHRyID0gLUVGQVVMVDtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM5MjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmd1ZXN0X21lbWZkLCBhcmdwLCBzaXplb2YoZ3Vlc3RfbWVtZmQpKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5My1cdFx0XHRnb3RvIG91dDtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5NC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM5NTpcdFx0ciA9IGt2bV9nbWVtX2NyZWF0ZShrdm0sIFx1MDAyNmd1ZXN0X21lbWZkKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgRGVzY3JpcHRvciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IGJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgKmV4YWN0bHkqIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCwgYW5kIG5vdCwgc2F5LCBgS1ZNX0dVRVNUX01FTUZEYCBvciBzb21lIHZhcmlhdGlvbiB0aGF0IEkmIzM5O20gbWlzcmVtZW1iZXJpbmcuIEdvdCB0byBnZXQgdGhlIGRldGFpbHMgZXhhY3RseSByaWdodCB0byBzYXZlIG15c2VsZiBzb21lIHJld29yay4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCBhIGZ1dHVyZSBoZWFkYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0dVRVNUX01FTUZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG52aXJ0L2t2bS9LY29uZmlnLTExMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZzoxMTI6ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cbnZpcnQva3ZtL0tjb25maWc9MTE0PWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMTctXG52aXJ0L2t2bS9LY29uZmlnPTExOD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbnZpcnQva3ZtL0tjb25maWctMTE5LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnOjEyMDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTIxLVxudmlydC9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxudmlydC9rdm0vS2NvbmZpZy0xMjMtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWc6MTI0OiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktWTV9HVUVTVF9NRU1GRDogRGlnZ2luZyBEZWVwZXIqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYEtWTV9HVUVTVF9NRU1GRGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBJdCYjMzk7cyBhIGtleSBiaXQgb2YgZnVuY3Rpb25hbGl0eSwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXM6ICYjMzQ7d2hhdCBzZWxlY3RzIGBLVk1fR1VFU1RfTUVNRkRgPyYjMzQ7LiBUaW1lIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYEtWTWAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYGt2bV9nbWVtX2JpbmRgIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgS1ZNYCBvbiBhcm02NCBhbmQgYEtWTV9YODZgIG9uIHg4Nl82NCwgc28ganVzdCBlbmFibGluZyBgS1ZNYCBpcyBzdWZmaWNpZW50IGZvciB0aGlzLiBNeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBrdm1fZ21lbV9iaW5kYCBoZXJlLgoKVGhlIGZpbGUgbW9kaWZpZWQgaXMgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGV4Y2x1c2l2ZWx5IHRvdWNoIGBrdm1fZ21lbV9iaW5kYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5Li4uIFllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwuIEdvb2QsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhlIHJpZ2h0IHNwb3QuCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBXQVJOX09OX09OQ0VgIGNoZWNrOiBgc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTVNMT1RfR01FTV9PTkxZYC4gQWxyaWdodCwgYW5kIGltcHJvdmVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgeGFfc3RvcmVfcmFuZ2VgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHdoaWNoIGlzIGltcG9ydGFudC4KCkkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBpZiBga3ZtX2dtZW1fYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaGVyZSBhcmUgYEtWTWAgYW5kIGBLVk1fR1VFU1RfTUVNRkRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDUtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNy1cdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NTItXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY1MzpcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI3CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDc4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrdm1fZ21lbV9iaW5kYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBzdGF0aWM7IGl0JiMzOTtzIGR5bmFtaWMuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBLVk0gc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIGl0IGFzIGFuIEFQSSBlbnRyeXBvaW50LiBTcGVjaWZpY2FsbHksIGl0IGlzIGNhbGxlZCBmcm9tIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYW4gYGlvY3RsYC4gVGhpcyBtZWFucyBga3ZtX2dtZW1fYmluZGAgaXMgYSBjcml0aWNhbCBmb2N1cyBzeW1ib2wuCgpJJiMzOTttIHdvbmRlcmluZyBpZiBlbmFibGluZyBgS1ZNX0dVRVNUX01FTUZEYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYEtWTWAgaXRzZWxmIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uOyBgS1ZNYCAqYW5kKiBgS1ZNX0dVRVNUX01FTUZEYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpOb3cgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QgYSByZWZhY3Rvci4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBUaGVyZSYjMzk7cyBhbHNvIGEgc2FuaXR5IGNoZWNrIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4KCk5vdyBJIGtub3cgd2hhdCB0aGUgcmVzdWx0cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dVRVNUX01FTUZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fR1VFU1RfTUVNRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgS1ZNIGd1ZXN0X21lbWZkIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBhbmQgYSBzYW5pdHkgY2hlY2sgaW4gYGt2bV9nbWVtX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwgd2hlbiBzZXR0aW5nIHVwIGd1ZXN0IG1lbW9yeSB3aXRoIGBLVk1fTUVNX0dVRVNUX01FTUZEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVx1MDAzZWdtZW0ucGdvZmZgLCBhbmQgYHNsb3QtXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI4MmFhZGMyNjVkYzc2M2Y1NDkwZjZjZmYxNjQ0NDMxMjBhNGIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IHIgPSAtRUlOVkFMOwomIzQzOwl2b2lkICp4YXI7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7CiAJQlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtJmd0O2dtZW0ucGdvZmYpKTsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOwpAQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdAogCSAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLgogCSAqLwotCVdSSVRFX09OQ0Uoc2xvdC0mZ3Q7Z21lbS5maWxlLCBmaWxlKTsKJiM0MzsJc2xvdC0mZ3Q7Z21lbS5maWxlID0gZmlsZTsKIAlzbG90LSZndDtnbWVtLnBnb2ZmID0gc3RhcnQ7CiAJaWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKQogCQlzbG90LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiAKLQl4YV9zdG9yZV9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhciA9IHhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLSZndDtpX21hcHBpbmcpOwogCiAJLyoKQEAgLTY2Miw3ICYjNDM7NjY2LDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBub3QgdGhlIG90aGVyIHdheSAmIzM5O3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGUKIAkgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC4KIAkgKi8KLQlyID0gMDsKJiM0MzsJciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwOwomIzQzOwlpZiAocikgewomIzQzOwkJc2xvdC0mZ3Q7Z21lbS5maWxlID0gTlVMTDsKJiM0MzsJCXNsb3QtJmd0O2dtZW0ucGdvZmYgPSAwOwomIzQzOwkJc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CX0KIGVycjoKIAlmcHV0KGZpbGUpOwogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1fZ21lbV9iaW5kYCB3aXRoaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhY3R1YWxseS4gRmlyc3QsIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrOiBgaWYgKFdBUk5fT05fT05DRShzbG90LSZndDtmbGFncyAmYW1wOyBLVk1fTUVNU0xPVF9HTUVNX09OTFkpKSByZXR1cm4gLUVJTlZBTDtgLiAgVGhhdCYjMzk7cyBhIHNhZmV0eSBuZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoYXQgYFdSSVRFX09OQ0VgIGZvciB0aGUgZmlsZSBwb2ludGVyIHRvIGEgc3RyYWlnaHQgYXNzaWdubWVudDogYHNsb3QtJmd0O2dtZW0uZmlsZSA9IGZpbGU7YC4gIEEgbGl0dGxlIGxlc3MgZGVmZW5zaXZlLCBwZXJoYXBzLCBidXQgcHJvYmFibHkgZmluZSBpbiB0aGlzIGNvbnRleHQuCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgYHhhX3N0b3JlX3JhbmdlYC4gVGhleSYjMzk7cmUgbm93IGNhcHR1cmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uIElmIGl0IGVycm9ycyBvdXQsIHRoZXkmIzM5O3JlIGNsZWFyaW5nIGBzbG90LSZndDtnbWVtLmZpbGVgLCBgc2xvdC0mZ3Q7Z21lbS5wZ29mZmAsIGFuZCB1bnNldHRpbmcgdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuICBUaGlzIGlzIGFsbCBhYm91dCByb2J1c3RseSBoYW5kbGluZyBmYWlsdXJlIGluIGB4YV9zdG9yZV9yYW5nZWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55LiBJdCYjMzk7cyBzdHJpY3RseSBlcnJvciBoYW5kbGluZyBhbmQgZmllbGQgY2xlYW51cC4gIFRoZSBmaWVsZHMgaW4gcXVlc3Rpb24g4oCTIGBzbG90LSZndDtnbWVtLmZpbGVgLCBgc2xvdC0mZ3Q7Z21lbS5wZ29mZmAsIGFuZCBgc2xvdC0mZ3Q7ZmxhZ3NgIOKAkyBhcmUgZWl0aGVyIHBvaW50ZXJzIG9yIGludGVnZXJzLCBhbGwgYmFzaWMgdHlwZXMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGNoYW5jZSBvZiBhIGxlYWsgdG8gdXNlcnNwYWNlLCBhbmQgbm8gZGF0YSBpcyBiZWluZyByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSB1c3VhbCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlbGF0ZWQgY2hlY2tzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCBmb3IgZ2VuZXJhbCBidWdzLiBUaGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTiBoZXJlLgoKTGV0JiMzOTtzIGp1c3QgcXVpY2tseSB2ZXJpZnkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBzbG90YCwgYSBgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqYC4gIGBzbG90LSZndDtnbWVtLmZpbGVgIGlzIGEgcG9pbnRlciwgYHNsb3QtJmd0O2dtZW0ucGdvZmZgIGlzIGEgYHBnb2ZmX3RgLCBhbmQgYHNsb3QtJmd0O2ZsYWdzYCBpcyBhbiBpbnRlZ2VyLiBJZiBgeGFfc3RvcmVfcmFuZ2VgIGJhaWxzLCB0aGV5IGNsZWFuIHRob3NlIGZpZWxkcyB1cCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlICp3YW50Ki4gIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBtZW1vcnkgc2xvdCBvciBkYW5nbGluZyBwb2ludGVycyBhZnRlciBhIGZhaWxlZCBzdG9yYWdlIGF0dGVtcHQuIFRoaXMgaXMgcHJvdGVjdGluZyB1cyBmcm9tIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxvZ2ljIGJ1Zy4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgbWVhc3VyZSwgbm90IGEgS01TQU4gaXNzdWUuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBpbiBga3ZtX2dtZW1fYmluZCgpYC4gSWYgdGhlIHhhcnJheSBzdG9yZSBmYWlscywgaXQgY2xlYXJzIHRoZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVx1MDAzZWZsYWdzYCBmaWVsZHMgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBtZW1vcnkgc2xvdCBpbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBsb2dpYyBidWdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjM0LjAyNDk4MDEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2ODk0MDMwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVxcdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjM0LjAyNDk4NTExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM1NTIzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiBcXHRpbnQgciA9IC1FSU5WQUw7XFxuK1xcdHZvaWQgKnhhcjtcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YoZ3BhX3QpICE9IHNpemVvZihvZmZzZXQpKTtcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtXFx1MDAzZWdtZW0ucGdvZmYpKTtcXG4gXFxuK1xcdGlmIChXQVJOX09OX09OQ0Uoc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNU0xPVF9HTUVNX09OTFkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGZpbGUgPSBmZ2V0KGZkKTtcXG4gXFx0aWYgKCFmaWxlKVxcbiBcXHRcXHRyZXR1cm4gLUVCQURGO1xcbkBAIC02NDksMTIgKzY1MywxMiBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XFxuIFxcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxcbiBcXHQgKi9cXG4tXFx0V1JJVEVfT05DRShzbG90LVxcdTAwM2VnbWVtLmZpbGUsIGZpbGUpO1xcbitcXHRzbG90LVxcdTAwM2VnbWVtLmZpbGUgPSBmaWxlO1xcbiBcXHRzbG90LVxcdTAwM2VnbWVtLnBnb2ZmID0gc3RhcnQ7XFxuIFxcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcXG4gXFx0XFx0c2xvdC1cXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xcbiBcXG4tXFx0eGFfc3RvcmVfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhciA9IHhhX3N0b3JlX3JhbmdlKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIHNsb3QsIEdGUF9LRVJORUwpO1xcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0LypcXG5AQCAtNjYyLDcgKzY2NiwxMiBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdCAqIG5vdCB0aGUgb3RoZXIgd2F5ICdyb3VuZC4gIEFjdGl2ZSBiaW5kaW5ncyBhcmUgaW52YWxpZGF0ZWQgaWYgdGhlXFxuIFxcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxcbiBcXHQgKi9cXG4tXFx0ciA9IDA7XFxuK1xcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcXG4rXFx0aWYgKHIpIHtcXG4rXFx0XFx0c2xvdC1cXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcXG4rXFx0XFx0c2xvdC1cXHUwMDNlZ21lbS5wZ29mZiA9IDA7XFxuK1xcdFxcdHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuK1xcdH1cXG4gZXJyOlxcbiBcXHRmcHV0KGZpbGUpO1xcbiBcXHRyZXR1cm4gcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6MzQuNjI5MzY4MjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTI4NDczMDY2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MjM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgciA9IC1FSU5WQUw7XG4rXHR2b2lkICp4YXI7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdmbl90KSAhPSBzaXplb2Yoc2xvdC1cdTAwM2VnbWVtLnBnb2ZmKSk7XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZmlsZSA9IGZnZXQoZmQpO1xuIFx0aWYgKCFmaWxlKVxuIFx0XHRyZXR1cm4gLUVCQURGO1xuQEAgLTY0OSwxMiArNjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4rXHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IGZpbGU7XG4gXHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSBzdGFydDtcbiBcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcbiBcdFx0c2xvdC1cdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4gXG4tXHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4rXHR4YXIgPSB4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTY2Miw3ICs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJ3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGVcbiBcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxuIFx0ICovXG4tXHRyID0gMDtcbitcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcbitcdGlmIChyKSB7XG4rXHRcdHNsb3QtXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcbitcdFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gMDtcbitcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4rXHR9XG4gZXJyOlxuIFx0ZnB1dChmaWxlKTtcbiBcdHJldHVybiByO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6MzQuNjI5MzY5NDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU5MDcyNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBHdWVzdCBNZW1vcnkgRmlsZSBCaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gdGhlIGBrdm1fZ21lbV9iaW5kYCBmdW5jdGlvbi4gRmlyc3QgZ2xhbmNlLCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSBmdW5jdGlvbmFsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgYXNzaWdubWVudCBzdHJhdGVneSBmb3IgdGhlIGd1ZXN0IG1lbW9yeSBmaWxlLlxuXG5UaGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgYFdBUk5fT05fT05DRWAgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBsaWtlbHkgYWRkZWQgdG8gZW5zdXJlIHRoYXQgc29tZXRoaW5nIHVuZXhwZWN0ZWQgaXNuJ3QgaGFwcGVuaW5nIHdpdGggdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBiYWlscyBvdXQgd2l0aCBgLUVJTlZBTGAuIE1ha2VzIHNlbnNlOyB0aGF0IGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgZW5mb3JjZWQuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZXkndmUgcmVwbGFjZWQgdGhlIGBXUklURV9PTkNFYCB3aXRoIGEgZGlyZWN0IGFzc2lnbm1lbnQgdG8gYHNsb3QtXHUwMDNlZ21lbS5maWxlYC4gVGhhdCBzdWdnZXN0cyB0aGV5J3JlIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG9yZGVyaW5nIG9yIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgV1JJVEVfT05DRWAgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBtZWFucyB3ZSd2ZSBzZWVuIHNvbWUgcG90ZW50aWFsIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhhdCBpbiB0ZXN0aW5nL3Byb2R1Y3Rpb24uIEdvdHRhIGRpZyBkZWVwZXIgaW50byB0aGF0IG9uZS5cblxuRmluYWxseSwgdGhleSd2ZSBhZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgd2l0aCBgeGFfc3RvcmVfcmFuZ2VgJ3MgcmV0dXJuIHZhbHVlIChgeGFyYCkuIEJlZm9yZSwgdGhlIGNvZGUgc2VlbWluZ2x5IGRpZCBub3QgaGFuZGxlIHRoZSBlcnJvciBmcm9tIGB4YV9zdG9yZV9yYW5nZWAuIE5vdywgaWYgYHhhX3N0b3JlX3JhbmdlYCBmYWlscywgaXQgcm9sbHMgYmFjayB0aG9zZSBhc3NpZ25tZW50cyB0byBgc2xvdC1cdTAwM2VnbWVtYCwgd2hpY2ggaXMgZ29vZCEgQXRvbWljIG9wZXJhdGlvbnMgYXJlIGtleSBmb3IgS1ZNJ3MgcGVyZm9ybWFuY2UuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZXMgbWVtb3J5IG9yZGVyaW5nIHdpdGggdGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBtZW1vcnkgYXNzaWdubWVudC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQgYXBwZWFycyB0byBiZSBhIGdvb2Qgb25lIOKAkyBjbGVhbiwgZm9jdXNlZCwgYW5kIGxpa2VseSBpbXByb3ZlcyB0aGUgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIHBhcnQgb2YgS1ZNLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQxLjIyMDA5OTEwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDM1MTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ21lbV9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDctXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2NTM6XFx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg9MTA9aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oOjExOmludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTEyLVxcdFxcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg9MTk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9nbWVtX2V4aXQodm9pZCkge307XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaDoyMDpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTIxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMDk6XFx0XFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQxLjI3NDQ1NzYxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDY1MDM0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX2dtZW1fYmluZGAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQncyBhIGNsZWFyIHNpZ25hbC4gQW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IG9idmlvdXMgdGhhdCBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCBpcyBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzLiBUaGF0IG1ha2VzIGBrdm1fZ21lbV9iaW5kYCBhIHByaW1lIGZ1enppbmcgdGFyZ2V0IOKAkyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gQmVmb3JlIEkganVtcCBpbiB0aG91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgZ3Vlc3RfbWVtZmRgIGlzIGVuYWJsZWQsIGFzIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBhbmQgd2hhdCBraW5kIG9mIG1lbW9yeSByZWdpb25zIGl04oCZcyBkZWFsaW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMga2V5IGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIGZ1enogZGF0YSBhdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQ1Ljk4MDk2MzM2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3NDAzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3Vlc3RfbWVtZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDYuMDI4NDY3NDMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1ODk5MjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29tcGlsYXRpb24gTG9jYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoZSBgZ3Vlc3RfbWVtZmQuY2AgZmlsZSBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhpcyBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IG91dHB1dCwgb3IgZGV0ZXJtaW5lIHRoZSBwYXRocyB1c2VkIGZvciB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXTigJlzIGJlaW5nIGxpbmtlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBiZSBoaWRpbmcuIFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHN0ZXBzIHJlbGF0ZWQgdG8gdGhhdCBzb3VyY2UgZmlsZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDkuMTg3NDYyMjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTkyNDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndWVzdF9tZW1mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDkuMjM5NDYxMTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NDYxMDEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIE1lbW9yeSBNYXBwaW5nIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBwcm9ibGVtLCBhbmQgSSd2ZSBoaXQgYSBiaXQgb2YgYSByb2FkYmxvY2suIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYnJlYWtkb3duIGlzIG9jY3VycmluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGEgYmFzaWMgY29uZmlndXJhdGlvbiBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBJJ20gbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IHRoZSBndWVzdCBtZW1vcnkgaXMgYmVpbmcgbWFuYWdlZCBoZXJlLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGNvdWxkIHRoaXMgd2hvbGUgdGhpbmcgYmUgcmVsYXRlZCB0byB0aGUgYEtWTV9QUklWQVRFX01FTWAgZmxhZz8gSSB3b25kZXIgaWYgSSdtIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBpdHMgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZSB3YXkgSSdtIGhhbmRsaW5nIHRoZSBtZW1vcnkgcmVnaW9ucyBvciB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIGlzIG9mZiBiZWNhdXNlIG9mIGl0LiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBLVk1fUFJJVkFURV9NRU1gIGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBjYWxscyBJJ20gdXNpbmcuIEl0IGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoaXMgcHV6emxlLiBJIHdpbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1My4wODQwNzM5OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTU0NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTQ9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNTprdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMS0jaW5jbHVkZSBcXFwia3ZtX21tLmhcXFwiXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMjojaW5jbHVkZSBcXFwiZ3Vlc3RfbWVtZmQuaFxcXCJcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEzLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MTQ9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqa3ZtX2dtZW1fbW50O1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xNi0vKlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MTc6ICogQSBndWVzdF9tZW1mZCBpbnN0YW5jZSBjYW4gYmUgYXNzb2NpYXRlZCBtdWx0aXBsZSBWTXMsIGVhY2ggd2l0aCBpdHMgb3duXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xOC0gKiBcXFwidmlld1xcXCIgb2YgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbWVtb3J5Llxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTA0LVxcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMDU6XFx0ICogd2l0aCBodWdlcGFnZXMgdG8gYSBkZWdyZWUsIGJ1dCBpbnRlcm5hbGx5LCBndWVzdF9tZW1mZCBjdXJyZW50bHlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNi1cXHQgKiBhc3N1bWVzIHRoYXQgYWxsIGZvbGlvcyBhcmUgb3JkZXItMCBhbmQgaGFuZGxpbmcgd291bGQgbmVlZFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MjM9c3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTU5MS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjU5MjppbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01OTMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz05MDQ9c3RhdGljIHZvaWQga3ZtX2dtZW1faW5pdF9pbm9kZV9vbmNlKHZvaWQgKl9fZ2kpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkwOS1cXHQgKiBOb3RlISAgRG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5vZGUgd2l0aCBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGVcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxMDpcXHQgKiBndWVzdF9tZW1mZCBpbnN0YW5jZSwgb3IgdGhhdCBtaWdodCBiZSBzcGVjaWZpYyB0byBob3cgdGhlIGlub2RlIGlzXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTEtXFx0ICogdXNlZCAoZnJvbSB0aGUgVkZTLWxheWVyJ3MgcGVyc3BlY3RpdmUpLiAgVGhpcyBob29rIGlzIGNhbGxlZCBvbmx5XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTk2ND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUga3ZtX2dtZW1fZnMgPSB7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5NjU6XFx0Lm5hbWVcXHRcXHQgPSBcXFwiZ3Vlc3RfbWVtZmRcXFwiLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTY2LVxcdC5pbml0X2ZzX2NvbnRleHQgPSBrdm1fZ21lbV9pbml0X2ZzX2NvbnRleHQsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oPTk9dm9pZCBrdm1fZ21lbV9leGl0KHZvaWQpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MTA6aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTExLWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTgtI2luY2x1ZGUgXFxcImFzeW5jX3BmLmhcXFwiXFxudmlydC9rdm0va3ZtX21haW4uYzo1OTojaW5jbHVkZSBcXFwiZ3Vlc3RfbWVtZmQuaFxcXCJcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTYwLSNpbmNsdWRlIFxcXCJrdm1fbW0uaFxcXCJcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTY5Nz1zdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzMwLVxcdFxcdC8qXFxudmlydC9rdm0va3ZtX21haW4uYzoxNzMxOlxcdFxcdCAqIE1vdmluZyBhIGd1ZXN0X21lbWZkIG1lbXNsb3QgaXNuJ3Qgc3VwcG9ydGVkLCBhbmQgd2lsbCBuZXZlclxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTczMi1cXHRcXHQgKiBiZSBzdXBwb3J0ZWQuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDQtXFx0XFx0LypcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDU6XFx0XFx0ICogVW5iaW5kIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZSBhcyBuZWVkZWQ7IHRoZSBAbmV3IHNsb3QgaGFzXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ2LVxcdFxcdCAqIGFscmVhZHkgY3JlYXRlZCBpdHMgb3duIGJpbmRpbmcuICBUT0RPOiBEcm9wIHRoZSBXQVJOIHdoZW5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDc6XFx0XFx0ICogZGlydHkgbG9nZ2luZyBndWVzdF9tZW1mZCBtZW1zbG90cyBpcyBzdXBwb3J0ZWQuICBVbnRpbCB0aGVuLFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0ODpcXHRcXHQgKiBmbGFncy1vbmx5IGNoYW5nZXMgb24gZ3Vlc3RfbWVtZmQgc2xvdHMgc2hvdWxkIGJlIGltcG9zc2libGUuXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVxcdFxcdCAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XFx0ICAgIChtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyOTpcXHQgICAgIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0ICsgbWVtLVxcdTAwM2VtZW1vcnlfc2l6ZSBcXHUwMDNjIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDgtXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTA5OlxcdFxcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMTEwLVxcdFxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTY3PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM4OC1cXHRjYXNlIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQ6IHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzODk6XFx0XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQ7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzkwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5MS1cXHRcXHRyID0gLUVGQVVMVDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzOTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZndWVzdF9tZW1mZCwgYXJncCwgc2l6ZW9mKGd1ZXN0X21lbWZkKSkpXFxudmlydC9rdm0va3ZtX21haW4uYy01MzkzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzOTU6XFx0XFx0ciA9IGt2bV9nbWVtX2NyZWF0ZShrdm0sIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy01Mzk2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1My4xNDgwMzQ1MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NDQxMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBGaWxlIERlc2NyaXB0b3IgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBwcmV0dHkgc3VyZSB3ZSdyZSB0YWxraW5nIGFib3V0IGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYC4gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCBwYXRoLCBpdCdzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqZXhhY3RseSogYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLCBhbmQgbm90LCBzYXksIGBLVk1fR1VFU1RfTUVNRkRgIG9yIHNvbWUgdmFyaWF0aW9uIHRoYXQgSSdtIG1pc3JlbWVtYmVyaW5nLiBHb3QgdG8gZ2V0IHRoZSBkZXRhaWxzIGV4YWN0bHkgcmlnaHQgdG8gc2F2ZSBteXNlbGYgc29tZSByZXdvcmsuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYXZvaWQgYSBmdXR1cmUgaGVhZGFjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1Ny41NDI0NDk5MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQ0MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTExMD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG52aXJ0L2t2bS9LY29uZmlnLTExMS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWc6MTEyOiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTEzLVxcbnZpcnQva3ZtL0tjb25maWc9MTE0PWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbnZpcnQva3ZtL0tjb25maWctMTE1LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZzoxMTY6ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMTctXFxudmlydC9rdm0vS2NvbmZpZz0xMTg9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMTktICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnOjEyMDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEyMS1cXG52aXJ0L2t2bS9LY29uZmlnPTEyMj1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMjMtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnOjEyNDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NTcuNTk3OTk5NzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1OTY1MjQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLVk1fR1VFU1RfTUVNRkQ6IERpZ2dpbmcgRGVlcGVyKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgS1ZNX0dVRVNUX01FTUZEYC4gUmlnaHQsIHRoYXQncyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBJdCdzIGEga2V5IGJpdCBvZiBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZmlyc3QgdGhvdWdodCBpczogXCJ3aGF0IHNlbGVjdHMgYEtWTV9HVUVTVF9NRU1GRGA/XCIuIFRpbWUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRyaWdnZXJzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDowMi4xOTQ1Mjg4NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgzNzMzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDowMy45NTI5MDcxNDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxNDY2MTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBgS1ZNYCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBga3ZtX2dtZW1fYmluZGAgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3Mgc2VsZWN0ZWQgYnkgYEtWTWAgb24gYXJtNjQgYW5kIGBLVk1fWDg2YCBvbiB4ODZfNjQsIHNvIGp1c3QgZW5hYmxpbmcgYEtWTWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTXkgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBga3ZtX2dtZW1fYmluZGAgaGVyZS5cblxuVGhlIGZpbGUgbW9kaWZpZWQgaXMgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGV4Y2x1c2l2ZWx5IHRvdWNoIGBrdm1fZ21lbV9iaW5kYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5Li4uIFllcywgaXQncyBjYWxsZWQgYnkgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bC4gR29vZCwgd2UncmUgZGVmaW5pdGVseSBoaXR0aW5nIHRoZSByaWdodCBzcG90LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBXQVJOX09OX09OQ0VgIGNoZWNrOiBgc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTVNMT1RfR01FTV9PTkxZYC4gQWxyaWdodCwgYW5kIGltcHJvdmVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgeGFfc3RvcmVfcmFuZ2VgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHdoaWNoIGlzIGltcG9ydGFudC5cblxuSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgYGt2bV9nbWVtX2JpbmRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIGltcGFjdCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGhlcmUgYXJlIGBLVk1gIGFuZCBgS1ZNX0dVRVNUX01FTUZEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDoxMC4xNjc1NzEzMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDctXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2NTM6XFx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MTAuMjExNDg0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxODgxODcxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga3ZtX2dtZW1fYmluZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhlIHNpdHVhdGlvbiBpc24ndCBzdGF0aWM7IGl0J3MgZHluYW1pYy4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIEtWTSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY29uc2lkZXIgaXQgYXMgYW4gQVBJIGVudHJ5cG9pbnQuIFNwZWNpZmljYWxseSwgaXQgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBhbiBgaW9jdGxgLiBUaGlzIG1lYW5zIGBrdm1fZ21lbV9iaW5kYCBpcyBhIGNyaXRpY2FsIGZvY3VzIHN5bWJvbC5cblxuSSdtIHdvbmRlcmluZyBpZiBlbmFibGluZyBgS1ZNX0dVRVNUX01FTUZEYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgS1ZNYCBpdHNlbGYgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb247IGBLVk1gICphbmQqIGBLVk1fR1VFU1RfTUVNRkRgIGFyZSB0aGUgcmVsZXZhbnQgZmxhZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuTm93IGxldCdzIGRlbHZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBhIHJlZmFjdG9yLlxuXG5JdCdzIGNsZWFyIHRoYXQgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0J3MgY3JpdGljYWwuIFRoZXJlJ3MgYWxzbyBhIHNhbml0eSBjaGVjayBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUuXG5cbk5vdyBJIGtub3cgd2hhdCB0aGUgcmVzdWx0cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjcsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjI0OjI3LjM5OTY3NTk3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTk1NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9HVUVTVF9NRU1GRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDoyNy40NzY2NzkxNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjM3Njc1Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MjcuNDc3MjA2NDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjM3MTQ0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVxcdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MjM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgciA9IC1FSU5WQUw7XG4rXHR2b2lkICp4YXI7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdmbl90KSAhPSBzaXplb2Yoc2xvdC1cdTAwM2VnbWVtLnBnb2ZmKSk7XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZmlsZSA9IGZnZXQoZmQpO1xuIFx0aWYgKCFmaWxlKVxuIFx0XHRyZXR1cm4gLUVCQURGO1xuQEAgLTY0OSwxMiArNjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4rXHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IGZpbGU7XG4gXHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSBzdGFydDtcbiBcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcbiBcdFx0c2xvdC1cdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4gXG4tXHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4rXHR4YXIgPSB4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTY2Miw3ICs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJ3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGVcbiBcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxuIFx0ICovXG4tXHRyID0gMDtcbitcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcbitcdGlmIChyKSB7XG4rXHRcdHNsb3QtXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcbitcdFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gMDtcbitcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4rXHR9XG4gZXJyOlxuIFx0ZnB1dChmaWxlKTtcbiBcdHJldHVybiByO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MjcuNDc3MjA3MTQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjM3MTE5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBHdWVzdCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1fZ21lbV9iaW5kYCB3aXRoaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBGaXJzdCwgdGhlcmUncyBhIG5ldyBjaGVjazogYGlmIChXQVJOX09OX09OQ0Uoc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTVNMT1RfR01FTV9PTkxZKSkgcmV0dXJuIC1FSU5WQUw7YC4gIFRoYXQncyBhIHNhZmV0eSBuZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5J3ZlIGNoYW5nZWQgdGhhdCBgV1JJVEVfT05DRWAgZm9yIHRoZSBmaWxlIHBvaW50ZXIgdG8gYSBzdHJhaWdodCBhc3NpZ25tZW50OiBgc2xvdC1cdTAwM2VnbWVtLmZpbGUgPSBmaWxlO2AuICBBIGxpdHRsZSBsZXNzIGRlZmVuc2l2ZSwgcGVyaGFwcywgYnV0IHByb2JhYmx5IGZpbmUgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgYHhhX3N0b3JlX3JhbmdlYC4gVGhleSdyZSBub3cgY2FwdHVyaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi4gSWYgaXQgZXJyb3JzIG91dCwgdGhleSdyZSBjbGVhcmluZyBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIHVuc2V0dGluZyB0aGUgYEtWTV9NRU1TTE9UX0dNRU1fT05MWWAgZmxhZy4gIFRoaXMgaXMgYWxsIGFib3V0IHJvYnVzdGx5IGhhbmRsaW5nIGZhaWx1cmUgaW4gYHhhX3N0b3JlX3JhbmdlYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBObywgSSBkb24ndCBzZWUgYW55LiBJdCdzIHN0cmljdGx5IGVycm9yIGhhbmRsaW5nIGFuZCBmaWVsZCBjbGVhbnVwLiAgVGhlIGZpZWxkcyBpbiBxdWVzdGlvbiDigJMgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2Ag4oCTIGFyZSBlaXRoZXIgcG9pbnRlcnMgb3IgaW50ZWdlcnMsIGFsbCBiYXNpYyB0eXBlcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgc28gbm8gY2hhbmNlIG9mIGEgbGVhayB0byB1c2Vyc3BhY2UsIGFuZCBubyBkYXRhIGlzIGJlaW5nIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIHVzdWFsIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVsYXRlZCBjaGVja3MgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IGZvciBnZW5lcmFsIGJ1Z3MuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS5cblxuTGV0J3MganVzdCBxdWlja2x5IHZlcmlmeS4gV2UncmUgbG9va2luZyBhdCBgc2xvdGAsIGEgYHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmAuICBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgIGlzIGEgcG9pbnRlciwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAgaXMgYSBgcGdvZmZfdGAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2AgaXMgYW4gaW50ZWdlci4gSWYgYHhhX3N0b3JlX3JhbmdlYCBiYWlscywgdGhleSBjbGVhbiB0aG9zZSBmaWVsZHMgdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSAqd2FudCouICBUaGlzIGlzIGFib3V0IHByZXZlbnRpbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5IHNsb3Qgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgYWZ0ZXIgYSBmYWlsZWQgc3RvcmFnZSBhdHRlbXB0LiBUaGlzIGlzIHByb3RlY3RpbmcgdXMgZnJvbSBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsb2dpYyBidWcuIEl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZSwgbm90IGEgS01TQU4gaXNzdWUuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOSwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDozOC43MTQzMjk3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXFx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVxcdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVxcdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXFx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVxcdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVxcdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 17:22:20 +0000 UTC FinishedAt: 2026-08-26 17:24:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_GUEST_MEMFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_GUEST_MEMFD" ], "series_id": "f3e1a2b9-7488-47a3-bac9-568563c4fd23" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_gmem_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fR1VFU1RfTUVNRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBpbiBga3ZtX2dtZW1fYmluZCgpYC4gSWYgdGhlIHhhcnJheSBzdG9yZSBmYWlscywgaXQgY2xlYXJzIHRoZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVx1MDAzZWZsYWdzYCBmaWVsZHMgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBtZW1vcnkgc2xvdCBpbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBsb2dpYyBidWdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgS1ZNIGd1ZXN0X21lbWZkIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBhbmQgYSBzYW5pdHkgY2hlY2sgaW4gYGt2bV9nbWVtX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwgd2hlbiBzZXR0aW5nIHVwIGd1ZXN0IG1lbW9yeSB3aXRoIGBLVk1fTUVNX0dVRVNUX01FTUZEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcyODJhYWRjMjY1ZGM3NjNmNTQ5MGY2Y2ZmMTY0NDQzMTIwYTRiMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNzoyMzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuIFx0aW50IHIgPSAtRUlOVkFMO1xuJiM0MztcdHZvaWQgKnhhcjtcbiBcbiBcdEJVSUxEX0JVR19PTihzaXplb2YoZ3BhX3QpICE9IHNpemVvZihvZmZzZXQpKTtcbiBcdEJVSUxEX0JVR19PTihzaXplb2YoZ2ZuX3QpICE9IHNpemVvZihzbG90LVx1MDAzZWdtZW0ucGdvZmYpKTtcbiBcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRmaWxlID0gZmdldChmZCk7XG4gXHRpZiAoIWZpbGUpXG4gXHRcdHJldHVybiAtRUJBREY7XG5AQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4mIzQzO1x0c2xvdC1cdTAwM2VnbWVtLmZpbGUgPSBmaWxlO1xuIFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gc3RhcnQ7XG4gXHRpZiAoa3ZtX2dtZW1fc3VwcG9ydHNfbW1hcChpbm9kZSkpXG4gXHRcdHNsb3QtXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xuIFxuLVx0eGFfc3RvcmVfcmFuZ2UoXHUwMDI2Zi1cdTAwM2ViaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIHNsb3QsIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhciA9IHhhX3N0b3JlX3JhbmdlKFx1MDAyNmYtXHUwMDNlYmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTtcbiBcdGZpbGVtYXBfaW52YWxpZGF0ZV91bmxvY2soaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qXG5AQCAtNjYyLDcgJiM0Mzs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJiMzOTtyb3VuZC4gIEFjdGl2ZSBiaW5kaW5ncyBhcmUgaW52YWxpZGF0ZWQgaWYgdGhlXG4gXHQgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC5cbiBcdCAqL1xuLVx0ciA9IDA7XG4mIzQzO1x0ciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwO1xuJiM0MztcdGlmIChyKSB7XG4mIzQzO1x0XHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IE5VTEw7XG4mIzQzO1x0XHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSAwO1xuJiM0MztcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4mIzQzO1x0fVxuIGVycjpcbiBcdGZwdXQoZmlsZSk7XG4gXHRyZXR1cm4gcjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9HVUVTVF9NRU1GRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9nbWVtX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI4MmFhZGMyNjVkYzc2M2Y1NDkwZjZjZmYxNjQ0NDMxMjBhNGIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IHIgPSAtRUlOVkFMOwomIzQzOwl2b2lkICp4YXI7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7CiAJQlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtJmd0O2dtZW0ucGdvZmYpKTsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOwpAQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdAogCSAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLgogCSAqLwotCVdSSVRFX09OQ0Uoc2xvdC0mZ3Q7Z21lbS5maWxlLCBmaWxlKTsKJiM0MzsJc2xvdC0mZ3Q7Z21lbS5maWxlID0gZmlsZTsKIAlzbG90LSZndDtnbWVtLnBnb2ZmID0gc3RhcnQ7CiAJaWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKQogCQlzbG90LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiAKLQl4YV9zdG9yZV9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhciA9IHhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLSZndDtpX21hcHBpbmcpOwogCiAJLyoKQEAgLTY2Miw3ICYjNDM7NjY2LDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBub3QgdGhlIG90aGVyIHdheSAmIzM5O3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGUKIAkgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC4KIAkgKi8KLQlyID0gMDsKJiM0MzsJciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwOwomIzQzOwlpZiAocikgewomIzQzOwkJc2xvdC0mZ3Q7Z21lbS5maWxlID0gTlVMTDsKJiM0MzsJCXNsb3QtJmd0O2dtZW0ucGdvZmYgPSAwOwomIzQzOwkJc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CX0KIGVycjoKIAlmcHV0KGZpbGUpOwogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBGaWxlIEJpbmRpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHRvIHRoZSBga3ZtX2dtZW1fYmluZGAgZnVuY3Rpb24uIEZpcnN0IGdsYW5jZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIHByaW1hcnkgZnVuY3Rpb25hbCBjaGFuZ2UgYXBwZWFycyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2lnbm1lbnQgc3RyYXRlZ3kgZm9yIHRoZSBndWVzdCBtZW1vcnkgZmlsZS4KClRoZSBwYXRjaCBpbmNsdWRlcyBhIG5ldyBgV0FSTl9PTl9PTkNFYCBjaGVjay4gVGhpcyBpcyBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGxpa2VseSBhZGRlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgdW5leHBlY3RlZCBpc24mIzM5O3QgaGFwcGVuaW5nIHdpdGggdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBiYWlscyBvdXQgd2l0aCBgLUVJTlZBTGAuIE1ha2VzIHNlbnNlOyB0aGF0IGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgZW5mb3JjZWQuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGBXUklURV9PTkNFYCB3aXRoIGEgZGlyZWN0IGFzc2lnbm1lbnQgdG8gYHNsb3QtJmd0O2dtZW0uZmlsZWAuIFRoYXQgc3VnZ2VzdHMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBzb21lIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBtZW1vcnkgb3JkZXJpbmcgb3IgY29tcGlsZXIgb3B0aW1pemF0aW9uIHdoZXJlIGBXUklURV9PTkNFYCBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBtZWFucyB3ZSYjMzk7dmUgc2VlbiBzb21lIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoYXQgaW4gdGVzdGluZy9wcm9kdWN0aW9uLiBHb3R0YSBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuCgpGaW5hbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgd2l0aCBgeGFfc3RvcmVfcmFuZ2VgJiMzOTtzIHJldHVybiB2YWx1ZSAoYHhhcmApLiBCZWZvcmUsIHRoZSBjb2RlIHNlZW1pbmdseSBkaWQgbm90IGhhbmRsZSB0aGUgZXJyb3IgZnJvbSBgeGFfc3RvcmVfcmFuZ2VgLiBOb3csIGlmIGB4YV9zdG9yZV9yYW5nZWAgZmFpbHMsIGl0IHJvbGxzIGJhY2sgdGhvc2UgYXNzaWdubWVudHMgdG8gYHNsb3QtJmd0O2dtZW1gLCB3aGljaCBpcyBnb29kISBBdG9taWMgb3BlcmF0aW9ucyBhcmUga2V5IGZvciBLVk0mIzM5O3MgcGVyZm9ybWFuY2UuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYW5kIHBvdGVudGlhbGx5IGltcHJvdmVzIG1lbW9yeSBvcmRlcmluZyB3aXRoIHRoZSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbWVtb3J5IGFzc2lnbm1lbnQuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGJ1dCBpdCBhcHBlYXJzIHRvIGJlIGEgZ29vZCBvbmUg4oCTIGNsZWFuLCBmb2N1c2VkLCBhbmQgbGlrZWx5IGltcHJvdmVzIHRoZSByZWxpYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoaXMgcGFydCBvZiBLVk0uIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9NTkyPWludCBrdm1fZ21lbV9jcmVhdGUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2NyZWF0ZV9ndWVzdF9tZW1mZCAqYXJncylcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjA2OmludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjA3LVx0XHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cdCAqIG1lbXNsb3RzIG9mIGZsYWcgS1ZNX01FTV9HVUVTVF9NRU1GRCBhcmUgaW1tdXRhYmxlIHRvIGNoYW5nZSwgc29cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6NjUzOlx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtNjU0LVx0ICogaXMgbm90IHZpc2libGUgeWV0LCBrdm1fZ21lbV9nZXRfcGZuKCkgaXMgZ3VhcmFudGVlZCB0byBzZWUgdGhlIGZpbGUuXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD0xMD1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpO1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaDoxMTppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTEyLVx0XHQgIHVuc2lnbmVkIGludCBmZCwgdW9mZl90IG9mZnNldCk7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD0xOT1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX2dtZW1fZXhpdCh2b2lkKSB7fTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MjA6c3RhdGljIGlubGluZSBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTIxLVx0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwOTpcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXHRcdGlmIChyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3ODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBga3ZtX2dtZW1fYmluZGAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwuIEFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBwcmV0dHkgb2J2aW91cyB0aGF0IGBrdm1fc2V0X21lbW9yeV9yZWdpb25gIGlzIGFjY2Vzc2libGUgdmlhIEtWTSBpb2N0bHMuIFRoYXQgbWFrZXMgYGt2bV9nbWVtX2JpbmRgIGEgcHJpbWUgZnV6emluZyB0YXJnZXQg4oCTIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBCZWZvcmUgSSBqdW1wIGluIHRob3VnaCwgSSBzaG91bGQgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEkgbmVlZCB0byBjb25maXJtIGlmIGBndWVzdF9tZW1mZGAgaXMgZW5hYmxlZCwgYXMgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGFuZCB3aGF0IGtpbmQgb2YgbWVtb3J5IHJlZ2lvbnMgaXTigJlzIGRlYWxpbmcgd2l0aC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyBrZXkgYmVmb3JlIEkgc3RhcnQgdGhyb3dpbmcgZnV6eiBkYXRhIGF0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29tcGlsYXRpb24gTG9jYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgd2hlcmUgdGhlIGBndWVzdF9tZW1mZC5jYCBmaWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGlzIGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIHRoZSB0YXJnZXQgb3V0cHV0LCBvciBkZXRlcm1pbmUgdGhlIHBhdGhzIHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIGhvdyBpdOKAmXMgYmVpbmcgbGlua2VkIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25maWd1cmF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGhpZGluZy4gVGltZSB0byB0cmFjZSB0aGUgYnVpbGQgc3RlcHMgcmVsYXRlZCB0byB0aGF0IHNvdXJjZSBmaWxlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEludmVzdGlnYXRpb24gaW50byBNZW1vcnkgTWFwcGluZyBJc3N1ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBwcm9ibGVtLCBhbmQgSSYjMzk7dmUgaGl0IGEgYml0IG9mIGEgcm9hZGJsb2NrLiBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBicmVha2Rvd24gaXMgb2NjdXJyaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgYmFzaWMgY29uZmlndXJhdGlvbiBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGUgZ3Vlc3QgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgaGVyZS4KCldhaXQgYSBzZWNvbmQuLi4gY291bGQgdGhpcyB3aG9sZSB0aGluZyBiZSByZWxhdGVkIHRvIHRoZSBgS1ZNX1BSSVZBVEVfTUVNYCBmbGFnPyBJIHdvbmRlciBpZiBJJiMzOTttIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBpdHMgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZSB3YXkgSSYjMzk7bSBoYW5kbGluZyB0aGUgbWVtb3J5IHJlZ2lvbnMgb3IgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBpcyBvZmYgYmVjYXVzZSBvZiBpdC4gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBgS1ZNX1BSSVZBVEVfTUVNYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgY2FsbHMgSSYjMzk7bSB1c2luZy4gSXQgY291bGQgYmUgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyBwdXp6bGUuIEkgd2lsbCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3Vlc3RfbWVtZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt2aXJ0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dmlydC9rdm0vTWFrZWZpbGUua3ZtPTE0PWt2bS0kKENPTkZJR19IQVZFX0tWTV9QRk5DQUNIRSkgJiM0Mzs9ICQoS1ZNKS9wZm5jYWNoZS5vXG52aXJ0L2t2bS9NYWtlZmlsZS5rdm06MTU6a3ZtLSQoQ09ORklHX0tWTV9HVUVTVF9NRU1GRCkgJiM0Mzs9ICQoS1ZNKS9ndWVzdF9tZW1mZC5vXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMS0jaW5jbHVkZSBcJiMzNDtrdm1fbW0uaFwmIzM0O1xudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMjojaW5jbHVkZSBcJiMzNDtndWVzdF9tZW1mZC5oXCYjMzQ7XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEzLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz0xND1zdGF0aWMgc3RydWN0IHZmc21vdW50ICprdm1fZ21lbV9tbnQ7XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xNi0vKlxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxNzogKiBBIGd1ZXN0X21lbWZkIGluc3RhbmNlIGNhbiBiZSBhc3NvY2lhdGVkIG11bHRpcGxlIFZNcywgZWFjaCB3aXRoIGl0cyBvd25cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTgtICogXCYjMzQ7dmlld1wmIzM0OyBvZiB0aGUgdW5kZXJseWluZyBwaHlzaWNhbCBtZW1vcnkuXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcbi0tXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNC1cdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjEwNTpcdCAqIHdpdGggaHVnZXBhZ2VzIHRvIGEgZGVncmVlLCBidXQgaW50ZXJuYWxseSwgZ3Vlc3RfbWVtZmQgY3VycmVudGx5XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNi1cdCAqIGFzc3VtZXMgdGhhdCBhbGwgZm9saW9zIGFyZSBvcmRlci0wIGFuZCBoYW5kbGluZyB3b3VsZCBuZWVkXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MjM9c3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01OTEtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjU5MjppbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTU5My17XG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz05MDQ9c3RhdGljIHZvaWQga3ZtX2dtZW1faW5pdF9pbm9kZV9vbmNlKHZvaWQgKl9fZ2kpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MDktXHQgKiBOb3RlISAgRG9uJiMzOTt0IGluaXRpYWxpemUgdGhlIGlub2RlIHdpdGggYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxMDpcdCAqIGd1ZXN0X21lbWZkIGluc3RhbmNlLCBvciB0aGF0IG1pZ2h0IGJlIHNwZWNpZmljIHRvIGhvdyB0aGUgaW5vZGUgaXNcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTExLVx0ICogdXNlZCAoZnJvbSB0aGUgVkZTLWxheWVyJiMzOTtzIHBlcnNwZWN0aXZlKS4gIFRoaXMgaG9vayBpcyBjYWxsZWQgb25seVxuLS1cbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9OTY0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBrdm1fZ21lbV9mcyA9IHtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6OTY1Olx0Lm5hbWVcdFx0ID0gXCYjMzQ7Z3Vlc3RfbWVtZmRcJiMzNDssXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTk2Ni1cdC5pbml0X2ZzX2NvbnRleHQgPSBrdm1fZ21lbV9pbml0X2ZzX2NvbnRleHQsXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaD05PXZvaWQga3ZtX2dtZW1fZXhpdCh2b2lkKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MTA6aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmgtMTEtaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtNTgtI2luY2x1ZGUgXCYjMzQ7YXN5bmNfcGYuaFwmIzM0O1xudmlydC9rdm0va3ZtX21haW4uYzo1OTojaW5jbHVkZSBcJiMzNDtndWVzdF9tZW1mZC5oXCYjMzQ7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTYwLSNpbmNsdWRlIFwmIzM0O2t2bV9tbS5oXCYjMzQ7XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0xNjk3PXN0YXRpYyB2b2lkIGt2bV9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0xNzMwLVx0XHQvKlxudmlydC9rdm0va3ZtX21haW4uYzoxNzMxOlx0XHQgKiBNb3ZpbmcgYSBndWVzdF9tZW1mZCBtZW1zbG90IGlzbiYjMzk7dCBzdXBwb3J0ZWQsIGFuZCB3aWxsIG5ldmVyXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3MzItXHRcdCAqIGJlIHN1cHBvcnRlZC5cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDQtXHRcdC8qXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDU6XHRcdCAqIFVuYmluZCB0aGUgZ3Vlc3RfbWVtZmQgaW5zdGFuY2UgYXMgbmVlZGVkOyB0aGUgQG5ldyBzbG90IGhhc1xudmlydC9rdm0va3ZtX21haW4uYy0xNzQ2LVx0XHQgKiBhbHJlYWR5IGNyZWF0ZWQgaXRzIG93biBiaW5kaW5nLiAgVE9ETzogRHJvcCB0aGUgV0FSTiB3aGVuXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDc6XHRcdCAqIGRpcnR5IGxvZ2dpbmcgZ3Vlc3RfbWVtZmQgbWVtc2xvdHMgaXMgc3VwcG9ydGVkLiAgVW50aWwgdGhlbixcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0ODpcdFx0ICogZmxhZ3Mtb25seSBjaGFuZ2VzIG9uIGd1ZXN0X21lbWZkIHNsb3RzIHNob3VsZCBiZSBpbXBvc3NpYmxlLlxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVx0XHQgKi9cbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jPTE5OTU9c3RhdGljIGludCBrdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXHUwMDI2XHUwMDI2XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XHQgICAgKG1lbS1cdTAwM2VndWVzdF9tZW1mZF9vZmZzZXQgXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxudmlydC9rdm0va3ZtX21haW4uYzoyMDI5Olx0ICAgICBtZW0tXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0ICYjNDM7IG1lbS1cdTAwM2VtZW1vcnlfc2l6ZSBcdTAwM2MgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCkpXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMzAtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cdGlmIChtZW0tXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjEwOTpcdFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cdTAwM2VndWVzdF9tZW1mZCwgbWVtLVx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXHRcdGlmIChyKVxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9NTE2Nz1zdGF0aWMgbG9uZyBrdm1fdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy01Mzg4LVx0Y2FzZSBLVk1fQ1JFQVRFX0dVRVNUX01FTUZEOiB7XG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzODk6XHRcdHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkIGd1ZXN0X21lbWZkO1xudmlydC9rdm0va3ZtX21haW4uYy01MzkwLVxudmlydC9rdm0va3ZtX21haW4uYy01MzkxLVx0XHRyID0gLUVGQVVMVDtcbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM5MjpcdFx0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmd1ZXN0X21lbWZkLCBhcmdwLCBzaXplb2YoZ3Vlc3RfbWVtZmQpKSlcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5My1cdFx0XHRnb3RvIG91dDtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5NC1cbnZpcnQva3ZtL2t2bV9tYWluLmM6NTM5NTpcdFx0ciA9IGt2bV9nbWVtX2NyZWF0ZShrdm0sIFx1MDAyNmd1ZXN0X21lbWZkKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNDYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBLVk0gR3Vlc3QgTWVtb3J5IEZpbGUgRGVzY3JpcHRvciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IGJlZm9yZSBJIGdvIHRvbyBmYXIgZG93biB0aGF0IHBhdGgsIGl0JiMzOTtzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgKmV4YWN0bHkqIGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYCwgYW5kIG5vdCwgc2F5LCBgS1ZNX0dVRVNUX01FTUZEYCBvciBzb21lIHZhcmlhdGlvbiB0aGF0IEkmIzM5O20gbWlzcmVtZW1iZXJpbmcuIEdvdCB0byBnZXQgdGhlIGRldGFpbHMgZXhhY3RseSByaWdodCB0byBzYXZlIG15c2VsZiBzb21lIHJld29yay4gSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCBhIGZ1dHVyZSBoZWFkYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX0dVRVNUX01FTUZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9LY29uZmlnPTEwMz1jb25maWcgS1ZNX0dFTkVSSUNfTUVNT1JZX0FUVFJJQlVURVNcbi0tXG52aXJ0L2t2bS9LY29uZmlnLTEwNS1cbnZpcnQva3ZtL0tjb25maWc6MTA2OmNvbmZpZyBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXG4tLVxudmlydC9rdm0vS2NvbmZpZz0xMTA9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG52aXJ0L2t2bS9LY29uZmlnLTExMS0gICAgICAgYm9vbFxudmlydC9rdm0vS2NvbmZpZzoxMTI6ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnLTExMy1cbnZpcnQva3ZtL0tjb25maWc9MTE0PWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxudmlydC9rdm0vS2NvbmZpZy0xMTUtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxudmlydC9rdm0vS2NvbmZpZy0xMTctXG52aXJ0L2t2bS9LY29uZmlnPTExOD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0lOVkFMSURBVEVcbnZpcnQva3ZtL0tjb25maWctMTE5LSAgICAgICBib29sXG52aXJ0L2t2bS9LY29uZmlnOjEyMDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcbnZpcnQva3ZtL0tjb25maWctMTIxLVxudmlydC9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxudmlydC9rdm0vS2NvbmZpZy0xMjMtICAgICAgIGJvb2xcbnZpcnQva3ZtL0tjb25maWc6MTI0OiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktWTV9HVUVTVF9NRU1GRDogRGlnZ2luZyBEZWVwZXIqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgYEtWTV9HVUVTVF9NRU1GRGAuIFJpZ2h0LCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBJdCYjMzk7cyBhIGtleSBiaXQgb2YgZnVuY3Rpb25hbGl0eSwgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXM6ICYjMzQ7d2hhdCBzZWxlY3RzIGBLVk1fR1VFU1RfTUVNRkRgPyYjMzQ7LiBUaW1lIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBrZXJuZWwgY29kZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0cmlnZ2VycyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgS1ZNX0dVRVNUX01FTUZEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9MjA9bWVudWNvbmZpZyBLVk1cbi0tXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTM4LVx0c2VsZWN0IEdVRVNUX1BFUkZfRVZFTlRTIGlmIFBFUkZfRVZFTlRTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5Olx0c2VsZWN0IEtWTV9HVUVTVF9NRU1GRFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00MC1cdGhlbHBcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0yMD1jb25maWcgS1ZNX1g4NlxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTQ5LVx0c2VsZWN0IEtWTV9XRVJST1IgaWYgV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM2NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgYEtWTWAgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYGt2bV9nbWVtX2JpbmRgIGZ1bmN0aW9uLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyBzZWxlY3RlZCBieSBgS1ZNYCBvbiBhcm02NCBhbmQgYEtWTV9YODZgIG9uIHg4Nl82NCwgc28ganVzdCBlbmFibGluZyBgS1ZNYCBpcyBzdWZmaWNpZW50IGZvciB0aGlzLiBNeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBrdm1fZ21lbV9iaW5kYCBoZXJlLgoKVGhlIGZpbGUgbW9kaWZpZWQgaXMgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGV4Y2x1c2l2ZWx5IHRvdWNoIGBrdm1fZ21lbV9iaW5kYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5Li4uIFllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwuIEdvb2QsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGhpdHRpbmcgdGhlIHJpZ2h0IHNwb3QuCgpJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBXQVJOX09OX09OQ0VgIGNoZWNrOiBgc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDsgS1ZNX01FTVNMT1RfR01FTV9PTkxZYC4gQWxyaWdodCwgYW5kIGltcHJvdmVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgeGFfc3RvcmVfcmFuZ2VgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHdoaWNoIGlzIGltcG9ydGFudC4KCkkmIzM5O20gYWxzbyBnb2luZyB0byBjaGVjayBpZiBga3ZtX2dtZW1fYmluZGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY291bGQgaW1wYWN0IHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgaGVyZSBhcmUgYEtWTWAgYW5kIGBLVk1fR1VFU1RfTUVNRkRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDUtXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNy1cdFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXG4tLVxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02NTItXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjY1MzpcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI3CgkJCQkJCQlvdXRwdXQ6IDEzMwoJCQkJCQkJdGhvdWdodHM6IDc4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBrdm1fZ21lbV9iaW5kYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc2l0dWF0aW9uIGlzbiYjMzk7dCBzdGF0aWM7IGl0JiMzOTtzIGR5bmFtaWMuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBLVk0gc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNvbnNpZGVyIGl0IGFzIGFuIEFQSSBlbnRyeXBvaW50LiBTcGVjaWZpY2FsbHksIGl0IGlzIGNhbGxlZCBmcm9tIGBrdm1fc2V0X21lbW9yeV9yZWdpb25gLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYW4gYGlvY3RsYC4gVGhpcyBtZWFucyBga3ZtX2dtZW1fYmluZGAgaXMgYSBjcml0aWNhbCBmb2N1cyBzeW1ib2wuCgpJJiMzOTttIHdvbmRlcmluZyBpZiBlbmFibGluZyBgS1ZNX0dVRVNUX01FTUZEYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYEtWTWAgaXRzZWxmIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uOyBgS1ZNYCAqYW5kKiBgS1ZNX0dVRVNUX01FTUZEYCBhcmUgdGhlIHJlbGV2YW50IGZsYWdzIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpOb3cgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QgYSByZWZhY3Rvci4KCkl0JiMzOTtzIGNsZWFyIHRoYXQgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0JiMzOTtzIGNyaXRpY2FsLiBUaGVyZSYjMzk7cyBhbHNvIGEgc2FuaXR5IGNoZWNrIGJlaW5nIGludHJvZHVjZWQsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4KCk5vdyBJIGtub3cgd2hhdCB0aGUgcmVzdWx0cyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0dVRVNUX01FTUZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2dtZW1fYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fR1VFU1RfTUVNRkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fZ21lbV9iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgS1ZNIGd1ZXN0X21lbWZkIGltcGxlbWVudGF0aW9uIGJ5IGFkZGluZyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBhbmQgYSBzYW5pdHkgY2hlY2sgaW4gYGt2bV9nbWVtX2JpbmRgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTmAgaW9jdGwgd2hlbiBzZXR0aW5nIHVwIGd1ZXN0IG1lbW9yeSB3aXRoIGBLVk1fTUVNX0dVRVNUX01FTUZEYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVx1MDAzZWdtZW0ucGdvZmZgLCBhbmQgYHNsb3QtXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzI4MmFhZGMyNjVkYzc2M2Y1NDkwZjZjZmYxNjQ0NDMxMjBhNGIyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMKaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuYwomIzQzOyYjNDM7JiM0MzsgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jCkBAIC02MTIsMTAgJiM0Mzs2MTIsMTQgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJaW50IHIgPSAtRUlOVkFMOwomIzQzOwl2b2lkICp4YXI7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7CiAJQlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtJmd0O2dtZW0ucGdvZmYpKTsKIAomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKHNsb3QtJmd0O2ZsYWdzICZhbXA7IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOwpAQCAtNjQ5LDEyICYjNDM7NjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBrdm1fZ21lbV9iaW5kKCkgbXVzdCBvY2N1ciBvbiBhIG5ldyBtZW1zbG90LiAgQmVjYXVzZSB0aGUgbWVtc2xvdAogCSAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLgogCSAqLwotCVdSSVRFX09OQ0Uoc2xvdC0mZ3Q7Z21lbS5maWxlLCBmaWxlKTsKJiM0MzsJc2xvdC0mZ3Q7Z21lbS5maWxlID0gZmlsZTsKIAlzbG90LSZndDtnbWVtLnBnb2ZmID0gc3RhcnQ7CiAJaWYgKGt2bV9nbWVtX3N1cHBvcnRzX21tYXAoaW5vZGUpKQogCQlzbG90LSZndDtmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7CiAKLQl4YV9zdG9yZV9yYW5nZSgmYW1wO2YtJmd0O2JpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhciA9IHhhX3N0b3JlX3JhbmdlKCZhbXA7Zi0mZ3Q7YmluZGluZ3MsIHN0YXJ0LCBlbmQgLSAxLCBzbG90LCBHRlBfS0VSTkVMKTsKIAlmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLSZndDtpX21hcHBpbmcpOwogCiAJLyoKQEAgLTY2Miw3ICYjNDM7NjY2LDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKIAkgKiBub3QgdGhlIG90aGVyIHdheSAmIzM5O3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGUKIAkgKiBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgbWVtc2xvdHMgYXJlIGRlc3Ryb3llZC4KIAkgKi8KLQlyID0gMDsKJiM0MzsJciA9IHhhX2lzX2Vycih4YXIpID8geGFfZXJyKHhhcikgOiAwOwomIzQzOwlpZiAocikgewomIzQzOwkJc2xvdC0mZ3Q7Z21lbS5maWxlID0gTlVMTDsKJiM0MzsJCXNsb3QtJmd0O2dtZW0ucGdvZmYgPSAwOwomIzQzOwkJc2xvdC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7CiYjNDM7CX0KIGVycjoKIAlmcHV0KGZpbGUpOwogCXJldHVybiByOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwOQoJCQkJCQkJb3V0cHV0OiAxNjEKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1fZ21lbV9iaW5kYCB3aXRoaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhY3R1YWxseS4gRmlyc3QsIHRoZXJlJiMzOTtzIGEgbmV3IGNoZWNrOiBgaWYgKFdBUk5fT05fT05DRShzbG90LSZndDtmbGFncyAmYW1wOyBLVk1fTUVNU0xPVF9HTUVNX09OTFkpKSByZXR1cm4gLUVJTlZBTDtgLiAgVGhhdCYjMzk7cyBhIHNhZmV0eSBuZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoYXQgYFdSSVRFX09OQ0VgIGZvciB0aGUgZmlsZSBwb2ludGVyIHRvIGEgc3RyYWlnaHQgYXNzaWdubWVudDogYHNsb3QtJmd0O2dtZW0uZmlsZSA9IGZpbGU7YC4gIEEgbGl0dGxlIGxlc3MgZGVmZW5zaXZlLCBwZXJoYXBzLCBidXQgcHJvYmFibHkgZmluZSBpbiB0aGlzIGNvbnRleHQuCgpUaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgYHhhX3N0b3JlX3JhbmdlYC4gVGhleSYjMzk7cmUgbm93IGNhcHR1cmluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uIElmIGl0IGVycm9ycyBvdXQsIHRoZXkmIzM5O3JlIGNsZWFyaW5nIGBzbG90LSZndDtnbWVtLmZpbGVgLCBgc2xvdC0mZ3Q7Z21lbS5wZ29mZmAsIGFuZCB1bnNldHRpbmcgdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuICBUaGlzIGlzIGFsbCBhYm91dCByb2J1c3RseSBoYW5kbGluZyBmYWlsdXJlIGluIGB4YV9zdG9yZV9yYW5nZWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLCBJIGRvbiYjMzk7dCBzZWUgYW55LiBJdCYjMzk7cyBzdHJpY3RseSBlcnJvciBoYW5kbGluZyBhbmQgZmllbGQgY2xlYW51cC4gIFRoZSBmaWVsZHMgaW4gcXVlc3Rpb24g4oCTIGBzbG90LSZndDtnbWVtLmZpbGVgLCBgc2xvdC0mZ3Q7Z21lbS5wZ29mZmAsIGFuZCBgc2xvdC0mZ3Q7ZmxhZ3NgIOKAkyBhcmUgZWl0aGVyIHBvaW50ZXJzIG9yIGludGVnZXJzLCBhbGwgYmFzaWMgdHlwZXMuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHNvIG5vIGNoYW5jZSBvZiBhIGxlYWsgdG8gdXNlcnNwYWNlLCBhbmQgbm8gZGF0YSBpcyBiZWluZyByZWFkIHVuaW5pdGlhbGl6ZWQuIFRoZSB1c3VhbCBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlbGF0ZWQgY2hlY2tzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCBmb3IgZ2VuZXJhbCBidWdzLiBUaGVyZSYjMzk7cyBubyBuZWVkIGZvciBLTVNBTiBoZXJlLgoKTGV0JiMzOTtzIGp1c3QgcXVpY2tseSB2ZXJpZnkuIFdlJiMzOTtyZSBsb29raW5nIGF0IGBzbG90YCwgYSBgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqYC4gIGBzbG90LSZndDtnbWVtLmZpbGVgIGlzIGEgcG9pbnRlciwgYHNsb3QtJmd0O2dtZW0ucGdvZmZgIGlzIGEgYHBnb2ZmX3RgLCBhbmQgYHNsb3QtJmd0O2ZsYWdzYCBpcyBhbiBpbnRlZ2VyLiBJZiBgeGFfc3RvcmVfcmFuZ2VgIGJhaWxzLCB0aGV5IGNsZWFuIHRob3NlIGZpZWxkcyB1cCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlICp3YW50Ki4gIFRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBtZW1vcnkgc2xvdCBvciBkYW5nbGluZyBwb2ludGVycyBhZnRlciBhIGZhaWxlZCBzdG9yYWdlIGF0dGVtcHQuIFRoaXMgaXMgcHJvdGVjdGluZyB1cyBmcm9tIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGxvZ2ljIGJ1Zy4gSXQmIzM5O3MgYSBkZWZlbnNpdmUgbWVhc3VyZSwgbm90IGEgS01TQU4gaXNzdWUuIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBmb3IgYHhhX3N0b3JlX3JhbmdlYCBpbiBga3ZtX2dtZW1fYmluZCgpYC4gSWYgdGhlIHhhcnJheSBzdG9yZSBmYWlscywgaXQgY2xlYXJzIHRoZSBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVx1MDAzZWZsYWdzYCBmaWVsZHMgdG8gcHJldmVudCBsZWF2aW5nIHRoZSBtZW1vcnkgc2xvdCBpbiBhIHBhcnRpYWxseSBpbml0aWFsaXplZCBzdGF0ZS4gVGhpcyBwcmV2ZW50cyBsb2dpYyBidWdzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZS9OVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjM0LjAyNDk4MDEzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ2ODk0MDMwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVxcdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjM0LjAyNDk4NTExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDM1NTIzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjIzOjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmMgYi92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcXG4tLS0gYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jXFxuKysrIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiBcXHRpbnQgciA9IC1FSU5WQUw7XFxuK1xcdHZvaWQgKnhhcjtcXG4gXFxuIFxcdEJVSUxEX0JVR19PTihzaXplb2YoZ3BhX3QpICE9IHNpemVvZihvZmZzZXQpKTtcXG4gXFx0QlVJTERfQlVHX09OKHNpemVvZihnZm5fdCkgIT0gc2l6ZW9mKHNsb3QtXFx1MDAzZWdtZW0ucGdvZmYpKTtcXG4gXFxuK1xcdGlmIChXQVJOX09OX09OQ0Uoc2xvdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNU0xPVF9HTUVNX09OTFkpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGZpbGUgPSBmZ2V0KGZkKTtcXG4gXFx0aWYgKCFmaWxlKVxcbiBcXHRcXHRyZXR1cm4gLUVCQURGO1xcbkBAIC02NDksMTIgKzY1MywxMiBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XFxuIFxcdCAqIGlzIG5vdCB2aXNpYmxlIHlldCwga3ZtX2dtZW1fZ2V0X3BmbigpIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBmaWxlLlxcbiBcXHQgKi9cXG4tXFx0V1JJVEVfT05DRShzbG90LVxcdTAwM2VnbWVtLmZpbGUsIGZpbGUpO1xcbitcXHRzbG90LVxcdTAwM2VnbWVtLmZpbGUgPSBmaWxlO1xcbiBcXHRzbG90LVxcdTAwM2VnbWVtLnBnb2ZmID0gc3RhcnQ7XFxuIFxcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcXG4gXFx0XFx0c2xvdC1cXHUwMDNlZmxhZ3MgfD0gS1ZNX01FTVNMT1RfR01FTV9PTkxZO1xcbiBcXG4tXFx0eGFfc3RvcmVfcmFuZ2UoXFx1MDAyNmYtXFx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhciA9IHhhX3N0b3JlX3JhbmdlKFxcdTAwMjZmLVxcdTAwM2ViaW5kaW5ncywgc3RhcnQsIGVuZCAtIDEsIHNsb3QsIEdGUF9LRVJORUwpO1xcbiBcXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbiBcXG4gXFx0LypcXG5AQCAtNjYyLDcgKzY2NiwxMiBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuIFxcdCAqIG5vdCB0aGUgb3RoZXIgd2F5ICdyb3VuZC4gIEFjdGl2ZSBiaW5kaW5ncyBhcmUgaW52YWxpZGF0ZWQgaWYgdGhlXFxuIFxcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxcbiBcXHQgKi9cXG4tXFx0ciA9IDA7XFxuK1xcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcXG4rXFx0aWYgKHIpIHtcXG4rXFx0XFx0c2xvdC1cXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcXG4rXFx0XFx0c2xvdC1cXHUwMDNlZ21lbS5wZ29mZiA9IDA7XFxuK1xcdFxcdHNsb3QtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XFxuK1xcdH1cXG4gZXJyOlxcbiBcXHRmcHV0KGZpbGUpO1xcbiBcXHRyZXR1cm4gcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6MzQuNjI5MzY4MjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTI4NDczMDY2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MjM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgciA9IC1FSU5WQUw7XG4rXHR2b2lkICp4YXI7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdmbl90KSAhPSBzaXplb2Yoc2xvdC1cdTAwM2VnbWVtLnBnb2ZmKSk7XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZmlsZSA9IGZnZXQoZmQpO1xuIFx0aWYgKCFmaWxlKVxuIFx0XHRyZXR1cm4gLUVCQURGO1xuQEAgLTY0OSwxMiArNjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4rXHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IGZpbGU7XG4gXHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSBzdGFydDtcbiBcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcbiBcdFx0c2xvdC1cdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4gXG4tXHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4rXHR4YXIgPSB4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTY2Miw3ICs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJ3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGVcbiBcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxuIFx0ICovXG4tXHRyID0gMDtcbitcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcbitcdGlmIChyKSB7XG4rXHRcdHNsb3QtXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcbitcdFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gMDtcbitcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4rXHR9XG4gZXJyOlxuIFx0ZnB1dChmaWxlKTtcbiBcdHJldHVybiByO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6MzQuNjI5MzY5NDY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU5MDcyNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBHdWVzdCBNZW1vcnkgRmlsZSBCaW5kaW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgdG8gdGhlIGBrdm1fZ21lbV9iaW5kYCBmdW5jdGlvbi4gRmlyc3QgZ2xhbmNlLCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgcHJpbWFyeSBmdW5jdGlvbmFsIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgYXNzaWdubWVudCBzdHJhdGVneSBmb3IgdGhlIGd1ZXN0IG1lbW9yeSBmaWxlLlxuXG5UaGUgcGF0Y2ggaW5jbHVkZXMgYSBuZXcgYFdBUk5fT05fT05DRWAgY2hlY2suIFRoaXMgaXMgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBsaWtlbHkgYWRkZWQgdG8gZW5zdXJlIHRoYXQgc29tZXRoaW5nIHVuZXhwZWN0ZWQgaXNuJ3QgaGFwcGVuaW5nIHdpdGggdGhlIGBLVk1fTUVNU0xPVF9HTUVNX09OTFlgIGZsYWcuIElmIHRoYXQgZmxhZyBpcyBzZXQsIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBiYWlscyBvdXQgd2l0aCBgLUVJTlZBTGAuIE1ha2VzIHNlbnNlOyB0aGF0IGNvbnN0cmFpbnQgbmVlZHMgdG8gYmUgZW5mb3JjZWQuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZXkndmUgcmVwbGFjZWQgdGhlIGBXUklURV9PTkNFYCB3aXRoIGEgZGlyZWN0IGFzc2lnbm1lbnQgdG8gYHNsb3QtXHUwMDNlZ21lbS5maWxlYC4gVGhhdCBzdWdnZXN0cyB0aGV5J3JlIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IG9yZGVyaW5nIG9yIGNvbXBpbGVyIG9wdGltaXphdGlvbiB3aGVyZSBgV1JJVEVfT05DRWAgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBwcm9iYWJseSBtZWFucyB3ZSd2ZSBzZWVuIHNvbWUgcG90ZW50aWFsIHByb2JsZW1zIHJlbGF0ZWQgdG8gdGhhdCBpbiB0ZXN0aW5nL3Byb2R1Y3Rpb24uIEdvdHRhIGRpZyBkZWVwZXIgaW50byB0aGF0IG9uZS5cblxuRmluYWxseSwgdGhleSd2ZSBhZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgd2l0aCBgeGFfc3RvcmVfcmFuZ2VgJ3MgcmV0dXJuIHZhbHVlIChgeGFyYCkuIEJlZm9yZSwgdGhlIGNvZGUgc2VlbWluZ2x5IGRpZCBub3QgaGFuZGxlIHRoZSBlcnJvciBmcm9tIGB4YV9zdG9yZV9yYW5nZWAuIE5vdywgaWYgYHhhX3N0b3JlX3JhbmdlYCBmYWlscywgaXQgcm9sbHMgYmFjayB0aG9zZSBhc3NpZ25tZW50cyB0byBgc2xvdC1cdTAwM2VnbWVtYCwgd2hpY2ggaXMgZ29vZCEgQXRvbWljIG9wZXJhdGlvbnMgYXJlIGtleSBmb3IgS1ZNJ3MgcGVyZm9ybWFuY2UuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZXMgbWVtb3J5IG9yZGVyaW5nIHdpdGggdGhlIHNpbXBsaWZpY2F0aW9uIG9mIHRoZSBtZW1vcnkgYXNzaWdubWVudC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBidXQgaXQgYXBwZWFycyB0byBiZSBhIGdvb2Qgb25lIOKAkyBjbGVhbiwgZm9jdXNlZCwgYW5kIGxpa2VseSBpbXByb3ZlcyB0aGUgcmVsaWFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIHBhcnQgb2YgS1ZNLiBJdCdzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwganVzdCB0byBiZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQxLjIyMDA5OTEwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDM1MTIxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fZ21lbV9iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDctXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2NTM6XFx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg9MTA9aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oOjExOmludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTEyLVxcdFxcdCAgdW5zaWduZWQgaW50IGZkLCB1b2ZmX3Qgb2Zmc2V0KTtcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg9MTk9c3RhdGljIGlubGluZSB2b2lkIGt2bV9nbWVtX2V4aXQodm9pZCkge307XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuaDoyMDpzdGF0aWMgaW5saW5lIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSxcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTIxLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjEwOC1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQpIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIxMDk6XFx0XFx0ciA9IGt2bV9nbWVtX2JpbmQoa3ZtLCBuZXcsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmQsIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMTAtXFx0XFx0aWYgKHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQxLjI3NDQ1NzYxNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDY1MDM0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX2dtZW1fYmluZGAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAuIFRoYXQncyBhIGNsZWFyIHNpZ25hbC4gQW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgcHJldHR5IG9idmlvdXMgdGhhdCBga3ZtX3NldF9tZW1vcnlfcmVnaW9uYCBpcyBhY2Nlc3NpYmxlIHZpYSBLVk0gaW9jdGxzLiBUaGF0IG1ha2VzIGBrdm1fZ21lbV9iaW5kYCBhIHByaW1lIGZ1enppbmcgdGFyZ2V0IOKAkyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gQmVmb3JlIEkganVtcCBpbiB0aG91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgZ3Vlc3RfbWVtZmRgIGlzIGVuYWJsZWQsIGFzIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBhbmQgd2hhdCBraW5kIG9mIG1lbW9yeSByZWdpb25zIGl04oCZcyBkZWFsaW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMga2V5IGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIGZ1enogZGF0YSBhdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjIzOjQ1Ljk4MDk2MzM2NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ3NDAzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3Vlc3RfbWVtZmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDYuMDI4NDY3NDMzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1ODk5MjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29tcGlsYXRpb24gTG9jYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5IHdoZXJlIHRoZSBgZ3Vlc3RfbWVtZmQuY2AgZmlsZSBpcyBiZWluZyBjb21waWxlZCB3aXRoaW4gdGhpcyBidWlsZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IG91dHB1dCwgb3IgZGV0ZXJtaW5lIHRoZSBwYXRocyB1c2VkIGZvciB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIGhlbHAgbWUgdG8gdW5kZXJzdGFuZCBob3cgaXTigJlzIGJlaW5nIGxpbmtlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBiZSBoaWRpbmcuIFRpbWUgdG8gdHJhY2UgdGhlIGJ1aWxkIHN0ZXBzIHJlbGF0ZWQgdG8gdGhhdCBzb3VyY2UgZmlsZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDkuMTg3NDYyMjY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTkyNDU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndWVzdF9tZW1mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NDkuMjM5NDYxMTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0NDYxMDEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIE1lbW9yeSBNYXBwaW5nIElzc3VlcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFwcGluZyBwcm9ibGVtLCBhbmQgSSd2ZSBoaXQgYSBiaXQgb2YgYSByb2FkYmxvY2suIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYnJlYWtkb3duIGlzIG9jY3VycmluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGEgYmFzaWMgY29uZmlndXJhdGlvbiBpc3N1ZS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCBJJ20gbWlzc2luZyBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IHRoZSBndWVzdCBtZW1vcnkgaXMgYmVpbmcgbWFuYWdlZCBoZXJlLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGNvdWxkIHRoaXMgd2hvbGUgdGhpbmcgYmUgcmVsYXRlZCB0byB0aGUgYEtWTV9QUklWQVRFX01FTWAgZmxhZz8gSSB3b25kZXIgaWYgSSdtIG5vdCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBpdHMgaW1wbGljYXRpb25zLiBQZXJoYXBzIHRoZSB3YXkgSSdtIGhhbmRsaW5nIHRoZSBtZW1vcnkgcmVnaW9ucyBvciB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIGlzIG9mZiBiZWNhdXNlIG9mIGl0LiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGBLVk1fUFJJVkFURV9NRU1gIGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBtZW1vcnkgbWFwcGluZyBjYWxscyBJJ20gdXNpbmcuIEl0IGNvdWxkIGJlIHRoZSBrZXkgdG8gdW5sb2NraW5nIHRoaXMgcHV6emxlLiBJIHdpbGwgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1My4wODQwNzM5OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTU0NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImd1ZXN0X21lbWZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInZpcnQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9NYWtlZmlsZS5rdm09MTQ9a3ZtLSQoQ09ORklHX0hBVkVfS1ZNX1BGTkNBQ0hFKSArPSAkKEtWTSkvcGZuY2FjaGUub1xcbnZpcnQva3ZtL01ha2VmaWxlLmt2bToxNTprdm0tJChDT05GSUdfS1ZNX0dVRVNUX01FTUZEKSArPSAkKEtWTSkvZ3Vlc3RfbWVtZmQub1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xMS0jaW5jbHVkZSBcXFwia3ZtX21tLmhcXFwiXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMjojaW5jbHVkZSBcXFwiZ3Vlc3RfbWVtZmQuaFxcXCJcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEzLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM9MTQ9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqa3ZtX2dtZW1fbW50O1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xNi0vKlxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmM6MTc6ICogQSBndWVzdF9tZW1mZCBpbnN0YW5jZSBjYW4gYmUgYXNzb2NpYXRlZCBtdWx0aXBsZSBWTXMsIGVhY2ggd2l0aCBpdHMgb3duXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy0xOC0gKiBcXFwidmlld1xcXCIgb2YgdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbWVtb3J5Llxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz04Mz1zdGF0aWMgc3RydWN0IGZvbGlvICprdm1fZ21lbV9nZXRfZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleClcXG4tLVxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtMTA0LVxcdCAqIEV4dGVybmFsIGludGVyZmFjZXMgbGlrZSBrdm1fZ21lbV9nZXRfcGZuKCkgc3VwcG9ydCBkZWFsaW5nXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzoxMDU6XFx0ICogd2l0aCBodWdlcGFnZXMgdG8gYSBkZWdyZWUsIGJ1dCBpbnRlcm5hbGx5LCBndWVzdF9tZW1mZCBjdXJyZW50bHlcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTEwNi1cXHQgKiBhc3N1bWVzIHRoYXQgYWxsIGZvbGlvcyBhcmUgb3JkZXItMCBhbmQgaGFuZGxpbmcgd291bGQgbmVlZFxcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz01MjM9c3RhdGljIGludCBfX2t2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIGxvZmZfdCBzaXplLCB1NjQgZmxhZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTU5MS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjU5MjppbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy01OTMte1xcbi0tXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYz05MDQ9c3RhdGljIHZvaWQga3ZtX2dtZW1faW5pdF9pbm9kZV9vbmNlKHZvaWQgKl9fZ2kpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTkwOS1cXHQgKiBOb3RlISAgRG9uJ3QgaW5pdGlhbGl6ZSB0aGUgaW5vZGUgd2l0aCBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGVcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjkxMDpcXHQgKiBndWVzdF9tZW1mZCBpbnN0YW5jZSwgb3IgdGhhdCBtaWdodCBiZSBzcGVjaWZpYyB0byBob3cgdGhlIGlub2RlIGlzXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy05MTEtXFx0ICogdXNlZCAoZnJvbSB0aGUgVkZTLWxheWVyJ3MgcGVyc3BlY3RpdmUpLiAgVGhpcyBob29rIGlzIGNhbGxlZCBvbmx5XFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTk2ND1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUga3ZtX2dtZW1fZnMgPSB7XFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo5NjU6XFx0Lm5hbWVcXHRcXHQgPSBcXFwiZ3Vlc3RfbWVtZmRcXFwiLFxcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmMtOTY2LVxcdC5pbml0X2ZzX2NvbnRleHQgPSBrdm1fZ21lbV9pbml0X2ZzX2NvbnRleHQsXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oPTk9dm9pZCBrdm1fZ21lbV9leGl0KHZvaWQpO1xcbnZpcnQva3ZtL2d1ZXN0X21lbWZkLmg6MTA6aW50IGt2bV9nbWVtX2NyZWF0ZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fY3JlYXRlX2d1ZXN0X21lbWZkICphcmdzKTtcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5oLTExLWludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTgtI2luY2x1ZGUgXFxcImFzeW5jX3BmLmhcXFwiXFxudmlydC9rdm0va3ZtX21haW4uYzo1OTojaW5jbHVkZSBcXFwiZ3Vlc3RfbWVtZmQuaFxcXCJcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTYwLSNpbmNsdWRlIFxcXCJrdm1fbW0uaFxcXCJcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MTY5Nz1zdGF0aWMgdm9pZCBrdm1fY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzMwLVxcdFxcdC8qXFxudmlydC9rdm0va3ZtX21haW4uYzoxNzMxOlxcdFxcdCAqIE1vdmluZyBhIGd1ZXN0X21lbWZkIG1lbXNsb3QgaXNuJ3Qgc3VwcG9ydGVkLCBhbmQgd2lsbCBuZXZlclxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMTczMi1cXHRcXHQgKiBiZSBzdXBwb3J0ZWQuXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTE3NDQtXFx0XFx0LypcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDU6XFx0XFx0ICogVW5iaW5kIHRoZSBndWVzdF9tZW1mZCBpbnN0YW5jZSBhcyBuZWVkZWQ7IHRoZSBAbmV3IHNsb3QgaGFzXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ2LVxcdFxcdCAqIGFscmVhZHkgY3JlYXRlZCBpdHMgb3duIGJpbmRpbmcuICBUT0RPOiBEcm9wIHRoZSBXQVJOIHdoZW5cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjE3NDc6XFx0XFx0ICogZGlydHkgbG9nZ2luZyBndWVzdF9tZW1mZCBtZW1zbG90cyBpcyBzdXBwb3J0ZWQuICBVbnRpbCB0aGVuLFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MTc0ODpcXHRcXHQgKiBmbGFncy1vbmx5IGNoYW5nZXMgb24gZ3Vlc3RfbWVtZmQgc2xvdHMgc2hvdWxkIGJlIGltcG9zc2libGUuXFxudmlydC9rdm0va3ZtX21haW4uYy0xNzQ5LVxcdFxcdCAqL1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0xOTk1PXN0YXRpYyBpbnQga3ZtX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMjAyNy1cXHRpZiAobWVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IEtWTV9NRU1fR1VFU1RfTUVNRkQgXFx1MDAyNlxcdTAwMjZcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjIwMjg6XFx0ICAgIChtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCBcXHUwMDI2IChQQUdFX1NJWkUgLSAxKSB8fFxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MjAyOTpcXHQgICAgIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0ICsgbWVtLVxcdTAwM2VtZW1vcnlfc2l6ZSBcXHUwMDNjIG1lbS1cXHUwMDNlZ3Vlc3RfbWVtZmRfb2Zmc2V0KSlcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIwMzAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTIxMDgtXFx0aWYgKG1lbS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBLVk1fTUVNX0dVRVNUX01FTUZEKSB7XFxudmlydC9rdm0va3ZtX21haW4uYzoyMTA5OlxcdFxcdHIgPSBrdm1fZ21lbV9iaW5kKGt2bSwgbmV3LCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkLCBtZW0tXFx1MDAzZWd1ZXN0X21lbWZkX29mZnNldCk7XFxudmlydC9rdm0va3ZtX21haW4uYy0yMTEwLVxcdFxcdGlmIChyKVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz01MTY3PXN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM4OC1cXHRjYXNlIEtWTV9DUkVBVEVfR1VFU1RfTUVNRkQ6IHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzODk6XFx0XFx0c3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgZ3Vlc3RfbWVtZmQ7XFxudmlydC9rdm0va3ZtX21haW4uYy01MzkwLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5MS1cXHRcXHRyID0gLUVGQVVMVDtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzOTI6XFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZndWVzdF9tZW1mZCwgYXJncCwgc2l6ZW9mKGd1ZXN0X21lbWZkKSkpXFxudmlydC9rdm0va3ZtX21haW4uYy01MzkzLVxcdFxcdFxcdGdvdG8gb3V0O1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtNTM5NC1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjUzOTU6XFx0XFx0ciA9IGt2bV9nbWVtX2NyZWF0ZShrdm0sIFxcdTAwMjZndWVzdF9tZW1mZCk7XFxudmlydC9rdm0va3ZtX21haW4uYy01Mzk2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1My4xNDgwMzQ1MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NDQxMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgS1ZNIEd1ZXN0IE1lbW9yeSBGaWxlIERlc2NyaXB0b3IgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBwcmV0dHkgc3VyZSB3ZSdyZSB0YWxraW5nIGFib3V0IGBDT05GSUdfS1ZNX0dVRVNUX01FTUZEYC4gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBiZWZvcmUgSSBnbyB0b28gZmFyIGRvd24gdGhhdCBwYXRoLCBpdCdzIGFsd2F5cyB3aXNlIHRvIGRvdWJsZS1jaGVjayB0aGUgbmFtaW5nIGNvbnZlbnRpb25zLiBHb3R0YSBtYWtlIHN1cmUgaXQncyAqZXhhY3RseSogYENPTkZJR19LVk1fR1VFU1RfTUVNRkRgLCBhbmQgbm90LCBzYXksIGBLVk1fR1VFU1RfTUVNRkRgIG9yIHNvbWUgdmFyaWF0aW9uIHRoYXQgSSdtIG1pc3JlbWVtYmVyaW5nLiBHb3QgdG8gZ2V0IHRoZSBkZXRhaWxzIGV4YWN0bHkgcmlnaHQgdG8gc2F2ZSBteXNlbGYgc29tZSByZXdvcmsuIEp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYXZvaWQgYSBmdXR1cmUgaGVhZGFjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyMzo1Ny41NDI0NDk5MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NTQ0MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL0tjb25maWc9MTAzPWNvbmZpZyBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xcbi0tXFxudmlydC9rdm0vS2NvbmZpZy0xMDUtXFxudmlydC9rdm0vS2NvbmZpZzoxMDY6Y29uZmlnIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTA3LSAgICAgICBzZWxlY3QgWEFSUkFZX01VTFRJXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTExMD1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG52aXJ0L2t2bS9LY29uZmlnLTExMS0gICAgICAgYm9vbFxcbnZpcnQva3ZtL0tjb25maWc6MTEyOiAgICAgICBkZXBlbmRzIG9uIEtWTV9HVUVTVF9NRU1GRFxcbnZpcnQva3ZtL0tjb25maWctMTEzLVxcbnZpcnQva3ZtL0tjb25maWc9MTE0PWNvbmZpZyBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbnZpcnQva3ZtL0tjb25maWctMTE1LSAgICAgICBib29sXFxudmlydC9rdm0vS2NvbmZpZzoxMTY6ICAgICAgIGRlcGVuZHMgb24gS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZy0xMTctXFxudmlydC9rdm0vS2NvbmZpZz0xMTg9Y29uZmlnIEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMTktICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnOjEyMDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG52aXJ0L2t2bS9LY29uZmlnLTEyMS1cXG52aXJ0L2t2bS9LY29uZmlnPTEyMj1jb25maWcgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxudmlydC9rdm0vS2NvbmZpZy0xMjMtICAgICAgIGJvb2xcXG52aXJ0L2t2bS9LY29uZmlnOjEyNDogICAgICAgZGVwZW5kcyBvbiBLVk1fR1VFU1RfTUVNRkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjM6NTcuNTk3OTk5NzQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1OTY1MjQ0OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLVk1fR1VFU1RfTUVNRkQ6IERpZ2dpbmcgRGVlcGVyKipcblxuT2theSwgc28gSSdtIHNlZWluZyBgS1ZNX0dVRVNUX01FTUZEYC4gUmlnaHQsIHRoYXQncyB3aGF0J3MgcGlxdWluZyBteSBpbnRlcmVzdCBhdCB0aGUgbW9tZW50LiBJdCdzIGEga2V5IGJpdCBvZiBmdW5jdGlvbmFsaXR5LCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gTXkgZmlyc3QgdGhvdWdodCBpczogXCJ3aGF0IHNlbGVjdHMgYEtWTV9HVUVTVF9NRU1GRGA/XCIuIFRpbWUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRyaWdnZXJzIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDowMi4xOTQ1Mjg4NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTgzNzMzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEtWTV9HVUVTVF9NRU1GRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0yMD1tZW51Y29uZmlnIEtWTVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgR1VFU1RfUEVSRl9FVkVOVFMgaWYgUEVSRl9FVkVOVFNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjM5OlxcdHNlbGVjdCBLVk1fR1VFU1RfTUVNRkRcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQwLVxcdGhlbHBcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1fWDg2XFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy00OS1cXHRzZWxlY3QgS1ZNX1dFUlJPUiBpZiBXRVJST1JcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1MDpcXHRzZWxlY3QgS1ZNX0dVRVNUX01FTUZEIGlmIFg4Nl82NFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDowMy45NTI5MDcxNDRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIxNDY2MTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBgS1ZNYCBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBga3ZtX2dtZW1fYmluZGAgZnVuY3Rpb24uIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3Mgc2VsZWN0ZWQgYnkgYEtWTWAgb24gYXJtNjQgYW5kIGBLVk1fWDg2YCBvbiB4ODZfNjQsIHNvIGp1c3QgZW5hYmxpbmcgYEtWTWAgaXMgc3VmZmljaWVudCBmb3IgdGhpcy4gTXkgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBga3ZtX2dtZW1fYmluZGAgaGVyZS5cblxuVGhlIGZpbGUgbW9kaWZpZWQgaXMgYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLCBhbmQgdGhlIHBhdGNoIHNlZW1zIHRvIGV4Y2x1c2l2ZWx5IHRvdWNoIGBrdm1fZ21lbV9iaW5kYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgcmVhY2hhYmlsaXR5Li4uIFllcywgaXQncyBjYWxsZWQgYnkgYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bC4gR29vZCwgd2UncmUgZGVmaW5pdGVseSBoaXR0aW5nIHRoZSByaWdodCBzcG90LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBXQVJOX09OX09OQ0VgIGNoZWNrOiBgc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTVNMT1RfR01FTV9PTkxZYC4gQWxyaWdodCwgYW5kIGltcHJvdmVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgeGFfc3RvcmVfcmFuZ2VgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBjb3NtZXRpYyBvbmUsIHdoaWNoIGlzIGltcG9ydGFudC5cblxuSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgYGt2bV9nbWVtX2JpbmRgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGNvdWxkIGltcGFjdCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIGhlcmUgYXJlIGBLVk1gIGFuZCBgS1ZNX0dVRVNUX01FTUZEYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDoxMC4xNjc1NzEzMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9nbWVtX2JpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwidmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ2aXJ0L2t2bS9ndWVzdF9tZW1mZC5jPTU5Mj1pbnQga3ZtX2dtZW1fY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9jcmVhdGVfZ3Vlc3RfbWVtZmQgKmFyZ3MpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTYwNS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jOjYwNjppbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYy02MDctXFx0XFx0ICB1bnNpZ25lZCBpbnQgZmQsIHVvZmZfdCBvZmZzZXQpXFxuLS1cXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1Mi1cXHQgKiBtZW1zbG90cyBvZiBmbGFnIEtWTV9NRU1fR1VFU1RfTUVNRkQgYXJlIGltbXV0YWJsZSB0byBjaGFuZ2UsIHNvXFxudmlydC9rdm0vZ3Vlc3RfbWVtZmQuYzo2NTM6XFx0ICoga3ZtX2dtZW1fYmluZCgpIG11c3Qgb2NjdXIgb24gYSBuZXcgbWVtc2xvdC4gIEJlY2F1c2UgdGhlIG1lbXNsb3RcXG52aXJ0L2t2bS9ndWVzdF9tZW1mZC5jLTY1NC1cXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MTAuMjExNDg0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxODgxODcxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBga3ZtX2dtZW1fYmluZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgdGhlIHNpdHVhdGlvbiBpc24ndCBzdGF0aWM7IGl0J3MgZHluYW1pYy4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIEtWTSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY29uc2lkZXIgaXQgYXMgYW4gQVBJIGVudHJ5cG9pbnQuIFNwZWNpZmljYWxseSwgaXQgaXMgY2FsbGVkIGZyb20gYGt2bV9zZXRfbWVtb3J5X3JlZ2lvbmAsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBhbiBgaW9jdGxgLiBUaGlzIG1lYW5zIGBrdm1fZ21lbV9iaW5kYCBpcyBhIGNyaXRpY2FsIGZvY3VzIHN5bWJvbC5cblxuSSdtIHdvbmRlcmluZyBpZiBlbmFibGluZyBgS1ZNX0dVRVNUX01FTUZEYCBpcyB0aGUgKm9ubHkqIGNvbmZpZ3VyYXRpb24gY2hhbmdlIHJlcXVpcmVkLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgS1ZNYCBpdHNlbGYgaXMgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb247IGBLVk1gICphbmQqIGBLVk1fR1VFU1RfTUVNRkRgIGFyZSB0aGUgcmVsZXZhbnQgZmxhZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC5cblxuTm93IGxldCdzIGRlbHZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBhIHJlZmFjdG9yLlxuXG5JdCdzIGNsZWFyIHRoYXQgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaXMgYmVpbmcgYWRkZWQsIGFuZCB0aGF0J3MgY3JpdGljYWwuIFRoZXJlJ3MgYWxzbyBhIHNhbml0eSBjaGVjayBiZWluZyBpbnRyb2R1Y2VkLCB3aGljaCBpcyBhbHdheXMgZ29vZCB0byBzZWUuXG5cbk5vdyBJIGtub3cgd2hhdCB0aGUgcmVzdWx0cyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjcsIk91dHB1dFRva2VucyI6MTMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjI0OjI3LjM5OTY3NTk3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTk1NjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9HVUVTVF9NRU1GRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9nbWVtX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEtWTSBndWVzdF9tZW1mZCBpbXBsZW1lbnRhdGlvbiBieSBhZGRpbmcgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgYW5kIGEgc2FuaXR5IGNoZWNrIGluIGBrdm1fZ21lbV9iaW5kYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT05gIGlvY3RsIHdoZW4gc2V0dGluZyB1cCBndWVzdCBtZW1vcnkgd2l0aCBgS1ZNX01FTV9HVUVTVF9NRU1GRGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fR1VFU1RfTUVNRkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fZ21lbV9iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBLVk0gZ3Vlc3RfbWVtZmQgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGFuZCBhIHNhbml0eSBjaGVjayBpbiBga3ZtX2dtZW1fYmluZGAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSB0aGUgYEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OYCBpb2N0bCB3aGVuIHNldHRpbmcgdXAgZ3Vlc3QgbWVtb3J5IHdpdGggYEtWTV9NRU1fR1VFU1RfTUVNRkRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDoyNy40NzY2NzkxNDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjM3Njc1Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MjcuNDc3MjA2NDQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjM3MTQ0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGZvciBgeGFfc3RvcmVfcmFuZ2VgIGluIGBrdm1fZ21lbV9iaW5kKClgLiBJZiB0aGUgeGFycmF5IHN0b3JlIGZhaWxzLCBpdCBjbGVhcnMgdGhlIGBzbG90LVxcdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cXHUwMDNlZmxhZ3NgIGZpZWxkcyB0byBwcmV2ZW50IGxlYXZpbmcgdGhlIG1lbW9yeSBzbG90IGluIGEgcGFydGlhbGx5IGluaXRpYWxpemVkIHN0YXRlLiBUaGlzIHByZXZlbnRzIGxvZ2ljIGJ1Z3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlL05VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MjgyYWFkYzI2NWRjNzYzZjU0OTBmNmNmZjE2NDQ0MzEyMGE0YjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MjM6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ndWVzdF9tZW1mZC5jIGIvdmlydC9rdm0vZ3Vlc3RfbWVtZmQuY1xuaW5kZXggYjU5NjQ4NmQxODRjYS4uMWQyZGU5YTFiYzNmMCAxMDA2NDRcbi0tLSBhL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbisrKyBiL3ZpcnQva3ZtL2d1ZXN0X21lbWZkLmNcbkBAIC02MTIsMTAgKzYxMiwxNCBAQCBpbnQga3ZtX2dtZW1fYmluZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gXHRpbnQgciA9IC1FSU5WQUw7XG4rXHR2b2lkICp4YXI7XG4gXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdwYV90KSAhPSBzaXplb2Yob2Zmc2V0KSk7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKGdmbl90KSAhPSBzaXplb2Yoc2xvdC1cdTAwM2VnbWVtLnBnb2ZmKSk7XG4gXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHNsb3QtXHUwMDNlZmxhZ3MgXHUwMDI2IEtWTV9NRU1TTE9UX0dNRU1fT05MWSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuIFx0ZmlsZSA9IGZnZXQoZmQpO1xuIFx0aWYgKCFmaWxlKVxuIFx0XHRyZXR1cm4gLUVCQURGO1xuQEAgLTY0OSwxMiArNjUzLDEyIEBAIGludCBrdm1fZ21lbV9iaW5kKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbiBcdCAqIGt2bV9nbWVtX2JpbmQoKSBtdXN0IG9jY3VyIG9uIGEgbmV3IG1lbXNsb3QuICBCZWNhdXNlIHRoZSBtZW1zbG90XG4gXHQgKiBpcyBub3QgdmlzaWJsZSB5ZXQsIGt2bV9nbWVtX2dldF9wZm4oKSBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgZmlsZS5cbiBcdCAqL1xuLVx0V1JJVEVfT05DRShzbG90LVx1MDAzZWdtZW0uZmlsZSwgZmlsZSk7XG4rXHRzbG90LVx1MDAzZWdtZW0uZmlsZSA9IGZpbGU7XG4gXHRzbG90LVx1MDAzZWdtZW0ucGdvZmYgPSBzdGFydDtcbiBcdGlmIChrdm1fZ21lbV9zdXBwb3J0c19tbWFwKGlub2RlKSlcbiBcdFx0c2xvdC1cdTAwM2VmbGFncyB8PSBLVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4gXG4tXHR4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4rXHR4YXIgPSB4YV9zdG9yZV9yYW5nZShcdTAwMjZmLVx1MDAzZWJpbmRpbmdzLCBzdGFydCwgZW5kIC0gMSwgc2xvdCwgR0ZQX0tFUk5FTCk7XG4gXHRmaWxlbWFwX2ludmFsaWRhdGVfdW5sb2NrKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXG4gXHQvKlxuQEAgLTY2Miw3ICs2NjYsMTIgQEAgaW50IGt2bV9nbWVtX2JpbmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0ICogbm90IHRoZSBvdGhlciB3YXkgJ3JvdW5kLiAgQWN0aXZlIGJpbmRpbmdzIGFyZSBpbnZhbGlkYXRlZCBpZiB0aGVcbiBcdCAqIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBtZW1zbG90cyBhcmUgZGVzdHJveWVkLlxuIFx0ICovXG4tXHRyID0gMDtcbitcdHIgPSB4YV9pc19lcnIoeGFyKSA/IHhhX2Vycih4YXIpIDogMDtcbitcdGlmIChyKSB7XG4rXHRcdHNsb3QtXHUwMDNlZ21lbS5maWxlID0gTlVMTDtcbitcdFx0c2xvdC1cdTAwM2VnbWVtLnBnb2ZmID0gMDtcbitcdFx0c2xvdC1cdTAwM2VmbGFncyBcdTAwMjY9IH5LVk1fTUVNU0xPVF9HTUVNX09OTFk7XG4rXHR9XG4gZXJyOlxuIFx0ZnB1dChmaWxlKTtcbiBcdHJldHVybiByO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MjQ6MjcuNDc3MjA3MTQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjM3MTE5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBHdWVzdCBNZW1vcnkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBrdm1fZ21lbV9iaW5kYCB3aXRoaW4gYHZpcnQva3ZtL2d1ZXN0X21lbWZkLmNgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFjdHVhbGx5LiBGaXJzdCwgdGhlcmUncyBhIG5ldyBjaGVjazogYGlmIChXQVJOX09OX09OQ0Uoc2xvdC1cdTAwM2VmbGFncyBcdTAwMjYgS1ZNX01FTVNMT1RfR01FTV9PTkxZKSkgcmV0dXJuIC1FSU5WQUw7YC4gIFRoYXQncyBhIHNhZmV0eSBuZXQsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuLCB0aGV5J3ZlIGNoYW5nZWQgdGhhdCBgV1JJVEVfT05DRWAgZm9yIHRoZSBmaWxlIHBvaW50ZXIgdG8gYSBzdHJhaWdodCBhc3NpZ25tZW50OiBgc2xvdC1cdTAwM2VnbWVtLmZpbGUgPSBmaWxlO2AuICBBIGxpdHRsZSBsZXNzIGRlZmVuc2l2ZSwgcGVyaGFwcywgYnV0IHByb2JhYmx5IGZpbmUgaW4gdGhpcyBjb250ZXh0LlxuXG5UaGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgYHhhX3N0b3JlX3JhbmdlYC4gVGhleSdyZSBub3cgY2FwdHVyaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi4gSWYgaXQgZXJyb3JzIG91dCwgdGhleSdyZSBjbGVhcmluZyBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgLCBgc2xvdC1cdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIHVuc2V0dGluZyB0aGUgYEtWTV9NRU1TTE9UX0dNRU1fT05MWWAgZmxhZy4gIFRoaXMgaXMgYWxsIGFib3V0IHJvYnVzdGx5IGhhbmRsaW5nIGZhaWx1cmUgaW4gYHhhX3N0b3JlX3JhbmdlYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBObywgSSBkb24ndCBzZWUgYW55LiBJdCdzIHN0cmljdGx5IGVycm9yIGhhbmRsaW5nIGFuZCBmaWVsZCBjbGVhbnVwLiAgVGhlIGZpZWxkcyBpbiBxdWVzdGlvbiDigJMgYHNsb3QtXHUwMDNlZ21lbS5maWxlYCwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2Ag4oCTIGFyZSBlaXRoZXIgcG9pbnRlcnMgb3IgaW50ZWdlcnMsIGFsbCBiYXNpYyB0eXBlcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgc28gbm8gY2hhbmNlIG9mIGEgbGVhayB0byB1c2Vyc3BhY2UsIGFuZCBubyBkYXRhIGlzIGJlaW5nIHJlYWQgdW5pbml0aWFsaXplZC4gVGhlIHVzdWFsIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVsYXRlZCBjaGVja3MgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IGZvciBnZW5lcmFsIGJ1Z3MuIFRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS5cblxuTGV0J3MganVzdCBxdWlja2x5IHZlcmlmeS4gV2UncmUgbG9va2luZyBhdCBgc2xvdGAsIGEgYHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmAuICBgc2xvdC1cdTAwM2VnbWVtLmZpbGVgIGlzIGEgcG9pbnRlciwgYHNsb3QtXHUwMDNlZ21lbS5wZ29mZmAgaXMgYSBgcGdvZmZfdGAsIGFuZCBgc2xvdC1cdTAwM2VmbGFnc2AgaXMgYW4gaW50ZWdlci4gSWYgYHhhX3N0b3JlX3JhbmdlYCBiYWlscywgdGhleSBjbGVhbiB0aG9zZSBmaWVsZHMgdXAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSAqd2FudCouICBUaGlzIGlzIGFib3V0IHByZXZlbnRpbmcgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgbWVtb3J5IHNsb3Qgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgYWZ0ZXIgYSBmYWlsZWQgc3RvcmFnZSBhdHRlbXB0LiBUaGlzIGlzIHByb3RlY3RpbmcgdXMgZnJvbSBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBsb2dpYyBidWcuIEl0J3MgYSBkZWZlbnNpdmUgbWVhc3VyZSwgbm90IGEgS01TQU4gaXNzdWUuIFRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOSwiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzoyNDozOC43MTQzMjk3NDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXFx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVxcdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVxcdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgZm9yIGB4YV9zdG9yZV9yYW5nZWAgaW4gYGt2bV9nbWVtX2JpbmQoKWAuIElmIHRoZSB4YXJyYXkgc3RvcmUgZmFpbHMsIGl0IGNsZWFycyB0aGUgYHNsb3QtXFx1MDAzZWdtZW0uZmlsZWAsIGBzbG90LVxcdTAwM2VnbWVtLnBnb2ZmYCwgYW5kIGBzbG90LVxcdTAwM2VmbGFnc2AgZmllbGRzIHRvIHByZXZlbnQgbGVhdmluZyB0aGUgbWVtb3J5IHNsb3QgaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuIFRoaXMgcHJldmVudHMgbG9naWMgYnVncyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUvTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[1] Phase: Succeeded StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 17:24:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 17:24:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2] Phase: Succeeded StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 17:25:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 17:24:51 +0000 UTC FinishedAt: 2026-08-26 17:25:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowvdcgs/series-workflowvdcgs-convert-artifact-2838643800/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 17:25:12 +0000 UTC FinishedAt: 2026-08-26 17:47:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 17:25:12 +0000 UTC FinishedAt: 2026-08-26 17:47:53 +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:*280de77a-bf1b-419e-ac02-b2a25b8ddee4,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-workflowvdcgs/series-workflowvdcgs-convert-artifact-2838643800/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": "43a305e3-2e1a-4d5b-987c-282b3ca4fa81", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-1763630222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 17:25:12 +0000 UTC FinishedAt: 2026-08-26 17:47:42 +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:*280de77a-bf1b-419e-ac02-b2a25b8ddee4,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-workflowvdcgs/series-workflowvdcgs-convert-artifact-2838643800/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": "43a305e3-2e1a-4d5b-987c-282b3ca4fa81", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-1763630222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 17:47:53 +0000 UTC FinishedAt: 2026-08-26 17:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 17:47:54 +0000 UTC FinishedAt: 2026-08-26 17:47:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 17:47:54 +0000 UTC FinishedAt: 2026-08-26 17:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 17:47:54 +0000 UTC FinishedAt: 2026-08-26 17:47:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowvdcgs/series-workflowvdcgs-convert-artifact-4145684927/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 17:48:04 +0000 UTC FinishedAt: 2026-08-26 17:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 17:48:04 +0000 UTC FinishedAt: 2026-08-26 17:50:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43a305e3-2e1a-4d5b-987c-282b3ca4fa81,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-1763630222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 17:50:31 +0000 UTC FinishedAt: 2026-08-26 17:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 17:50:31 +0000 UTC FinishedAt: 2026-08-26 17:50:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 17:50:31 +0000 UTC FinishedAt: 2026-08-26 18:12:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 17:50:31 +0000 UTC FinishedAt: 2026-08-26 18:12:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*280de77a-bf1b-419e-ac02-b2a25b8ddee4,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-workflowvdcgs/series-workflowvdcgs-convert-artifact-4145684927/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": "b75cbe1b-11fa-4bbe-b8ed-d3e88a7422f2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-705701331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 17:50:31 +0000 UTC FinishedAt: 2026-08-26 18:12:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*280de77a-bf1b-419e-ac02-b2a25b8ddee4,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-workflowvdcgs/series-workflowvdcgs-convert-artifact-4145684927/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": "b75cbe1b-11fa-4bbe-b8ed-d3e88a7422f2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-705701331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 18:12:36 +0000 UTC FinishedAt: 2026-08-26 18:12:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 18:12:36 +0000 UTC FinishedAt: 2026-08-26 18:12:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 18:12:36 +0000 UTC FinishedAt: 2026-08-26 18:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 18:12:36 +0000 UTC FinishedAt: 2026-08-26 18:14:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b75cbe1b-11fa-4bbe-b8ed-d3e88a7422f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-705701331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*43a305e3-2e1a-4d5b-987c-282b3ca4fa81,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b75cbe1b-11fa-4bbe-b8ed-d3e88a7422f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-1763630222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-705701331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 18:14:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 18:14:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-convert-artifact-2978365784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 18:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 18:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 18:14:39 +0000 UTC FinishedAt: 2026-08-26 18:14:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 18:14:49 +0000 UTC FinishedAt: 2026-08-26 21:17:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvdcgs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_gmem_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_GUEST_MEMFD"],"series_id":"f3e1a2b9-7488-47a3-bac9-568563c4fd23","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 18:14:49 +0000 UTC FinishedAt: 2026-08-26 21:17:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43a305e3-2e1a-4d5b-987c-282b3ca4fa81,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b75cbe1b-11fa-4bbe-b8ed-d3e88a7422f2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-1763630222/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-build-action-705701331/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvdcgs/series-workflowvdcgs-convert-artifact-2978365784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}