Name: series-workflowwq5pr Phase: Succeeded StartedAt: 2026-07-16 13:50:36 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[0] Phase: Succeeded StartedAt: 2026-07-16 13:50:36 +0000 UTC FinishedAt: 2026-07-16 14:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 13:50:36 +0000 UTC FinishedAt: 2026-07-16 14:10:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "b2d2ec66-3bb5-4734-88b4-83d7f62ca084" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_ir_to_ib", "ntfs_ir_reparent", "ntfs_ir_make_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Y1NTQ4NGQwOTIwZWMxYjg1OTY4M2IxYzMzNzljNjg1N2EzZjc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjA1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xuaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbmRleC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2luZGV4LmNcbkBAIC0xMTEyLDYgJiM0MzsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG4gXHRzdHJ1Y3QgaW5kZXhfZW50cnkgKmllX2xhc3Q7XG4gXHRjaGFyICppZXNfc3RhcnQsICppZXNfZW5kO1xuIFx0aW50IGk7XG4mIzQzO1x0dTMyIGliX2NhcDtcbiBcbiBcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmdcXG5cJiMzNDspO1xuIFxuQEAgLTExMjcsNiAmIzQzOzExMjgsMTUgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG4gXHQgKiBhcyB3ZWxsLCB3aGljaCBjYW4gbmV2ZXIgaGF2ZSBhbnkgZGF0YS5cbiBcdCAqL1xuIFx0aSA9IChjaGFyICopaWVfbGFzdCAtIGllc19zdGFydCAmIzQzOyBsZTE2X3RvX2NwdShpZV9sYXN0LVx1MDAzZWxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdC8qIEVudHJpZXMgbXVzdCBmaXQgaW4gdGhlIGFsbG9jYXRlZCBpbmRleCBibG9jayAqL1xuJiM0MztcdGliX2NhcCA9IGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxuJiM0MztcdFx0LSBsZTMyX3RvX2NwdShpYi1cdTAwM2VpbmRleC5lbnRyaWVzX29mZnNldCk7XG4mIzQzO1x0aWYgKCh1MzIpaSBcdTAwM2UgaWJfY2FwKSB7XG4mIzQzO1x0XHRrdmZyZWUoaWIpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcdTAwMjZpYi1cdTAwM2VpbmRleCksIGllc19zdGFydCwgaSk7XG4gXG4gXHRpYi1cdTAwM2VpbmRleC5mbGFncyA9IGlyLVx1MDAzZWluZGV4LmZsYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZjU1NDg0ZDA5MjBlYzFiODU5NjgzYjFjMzM3OWM2ODU3YTNmNzUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTQ6MDU6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL2luZGV4LmMgYi9mcy9udGZzL2luZGV4LmMKaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NAotLS0gYS9mcy9udGZzL2luZGV4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbmRleC5jCkBAIC0xMTEyLDYgJiM0MzsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pCiAJc3RydWN0IGluZGV4X2VudHJ5ICppZV9sYXN0OwogCWNoYXIgKmllc19zdGFydCwgKmllc19lbmQ7CiAJaW50IGk7CiYjNDM7CXUzMiBpYl9jYXA7CiAKIAludGZzX2RlYnVnKCYjMzQ7RW50ZXJpbmdcbiYjMzQ7KTsKIApAQCAtMTEyNyw2ICYjNDM7MTEyOCwxNSBAQCBzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbikKIAkgKiBhcyB3ZWxsLCB3aGljaCBjYW4gbmV2ZXIgaGF2ZSBhbnkgZGF0YS4KIAkgKi8KIAlpID0gKGNoYXIgKilpZV9sYXN0IC0gaWVzX3N0YXJ0ICYjNDM7IGxlMTZfdG9fY3B1KGllX2xhc3QtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CS8qIEVudHJpZXMgbXVzdCBmaXQgaW4gdGhlIGFsbG9jYXRlZCBpbmRleCBibG9jayAqLwomIzQzOwlpYl9jYXAgPSBsZTMyX3RvX2NwdShpYi0mZ3Q7aW5kZXguYWxsb2NhdGVkX3NpemUpCiYjNDM7CQktIGxlMzJfdG9fY3B1KGliLSZndDtpbmRleC5lbnRyaWVzX29mZnNldCk7CiYjNDM7CWlmICgodTMyKWkgJmd0OyBpYl9jYXApIHsKJiM0MzsJCWt2ZnJlZShpYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCW1lbWNweShudGZzX2llX2dldF9maXJzdCgmYW1wO2liLSZndDtpbmRleCksIGllc19zdGFydCwgaSk7CiAKIAlpYi0mZ3Q7aW5kZXguZmxhZ3MgPSBpci0mZ3Q7aW5kZXguZmxhZ3M7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL2luZGV4LmNgIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgbnRmc19pcl90b19pYmA6IGBpZiAoKHUzMilpICZndDsgaWJfY2FwKWAuIElmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGBpYmAgZ2V0cyBmcmVlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYE5VTExgLiBSaWdodCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqPyBBbmQgd2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8mIzM0OwoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG50ZnNfaXJfdG9faWJgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBmcy9udGZzL2luZGV4LmNgIGFuZCBwb3RlbnRpYWxseSBiZXlvbmQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIGRldGVybWluZSBpZiB0aGlzIGNoZWNrIGlzIGEgbGVnaXRpbWF0ZSBpbXByb3ZlbWVudCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIGEgbmV3IGVkZ2UgY2FzZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHBvdGVudGlhbCBgTlVMTGAgcmV0dXJuIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pcl90b19pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5kZXguYz0xMDczPXN0YXRpYyBzNjQgbnRmc19pYm1fZ2V0X2ZyZWUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMTA4LVxuZnMvbnRmcy9pbmRleC5jOjExMDk6c3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG5mcy9udGZzL2luZGV4LmMtMTExMC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNDk9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI4Ni1cbmZzL250ZnMvaW5kZXguYzoxMjg3Olx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcbmZzL250ZnMvaW5kZXguYy0xMjg4LVx0aWYgKGliID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5URlMgSW5kZXggUm9vdCB0byBJbmRleCBCdWZmZXIgUmVwYXJlbnRpbmcgTG9naWMqKgoKUmlnaHQsIGBudGZzX2lyX3RvX2liYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX3JlcGFyZW50YC4gT2theSwgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBhIHJlcGFyZW50aW5nIHNjZW5hcmlvIHdpdGhpbiB0aGUgTlRGUyBpbmRleCBzdHJ1Y3R1cmUgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIG9yIG1pZ3JhdGluZyBkYXRhIGZyb20gdGhlIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYnVmZmVyLiBTbywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gVGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoZXJlICpleGFjdGx5KiBpcyBgbnRmc19pcl9yZXBhcmVudGAgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2FsbCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIHRoaXMgc3BlY2lmaWMgaW5kZXggb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCYjMzk7cyB3b3JraW5nIHRocm91Z2ggdGhpcy4uLgoKKipUcmFjaW5nIHRoZSBOVEZTIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKgoKUmlnaHQsIGBudGZzX2lyX3JlcGFyZW50YCBpcyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGF0JiMzOTtzIGEga2V5IHJlbGF0aW9uc2hpcCB0byB1bmRlcnN0YW5kLiBOb3csIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gV2hlcmUgaXMgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYmVpbmcgaW52b2tlZD8gRmluZGluZyB0aGUgdXBzdHJlYW0gY2FsbHMgdG8gYG50ZnNfaXJfbWFrZV9zcGFjZWAgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIHJlcGFyZW50aW5nIG9wZXJhdGlvbiBpcyBoYXBwZW5pbmcuIEl0JiMzOTtzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgYW5kIHRoZSBleGVjdXRpb24gcGF0aCB0byBmaWd1cmUgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBnaXZlcyBtZSB0aGUgYmVzdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lyX21ha2Vfc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTM3OD1zdGF0aWMgaW50IG50ZnNfaXJfdHJ1bmNhdGUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDE0LS8qXG5mcy9udGZzL2luZGV4LmM6MTQxNTogKiBudGZzX2lyX21ha2Vfc3BhY2UgLSBNYWtlIG1vcmUgc3BhY2UgZm9yIHRoZSBpbmRleCByb290IGF0dHJpYnV0ZVxuZnMvbnRmcy9pbmRleC5jLTE0MTYtICogQGljeDogaW5kZXggY29udGV4dFxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDE4LSAqL1xuZnMvbnRmcy9pbmRleC5jOjE0MTk6c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuZnMvbnRmcy9pbmRleC5jLTE0MjAte1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNDkzPXN0YXRpYyBpbnQgbnRmc19pcl9pbnNlcnRfbWVkaWFuKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICptZWRpYW4sXG4tLVxuZnMvbnRmcy9pbmRleC5jLTE1MDktXG5mcy9udGZzL2luZGV4LmM6MTUxMDpcdHJldCA9IG50ZnNfaXJfbWFrZV9zcGFjZShpY3gsIG5ld19zaXplKTtcbmZzL250ZnMvaW5kZXguYy0xNTExLVx0aWYgKHJldClcbi0tXG5mcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjc5LVx0XHRpZiAoaWN4LVx1MDAzZWlzX2luX3Jvb3QpXG5mcy9udGZzL2luZGV4LmM6MTY4MDpcdFx0XHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XG5mcy9udGZzL2luZGV4LmMtMTY4MS1cdFx0ZWxzZVxuLS1cbmZzL250ZnMvaW5kZXguYz0xODgyPXN0YXRpYyBpbnQgbnRmc19pbmRleF9ybV9ub2RlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTk1MS1cdFx0aWYgKGljeC1cdTAwM2Vpc19pbl9yb290KSB7XG5mcy9udGZzL2luZGV4LmM6MTk1MjpcdFx0XHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XG5mcy9udGZzL2luZGV4LmMtMTk1My1cdFx0XHRpZiAocmV0ICE9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOVEZTIEluZGV4IE9wZXJhdGlvbnMqKgoKT2theSwgc28gYG50ZnNfaXJfbWFrZV9zcGFjZWAgaXMgdXNlZCBpbiBhIGZldyBrZXkgTlRGUyBpbmRleCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgYG50ZnNfaWVfYWRkYCwgYW5kIGBudGZzX2luZGV4X3JtX25vZGVgLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IGluZGV4IGltcGxlbWVudGF0aW9uLCBjYXJ2aW5nIG91dCBzcGFjZSBmb3IgbmV3IGVudHJpZXMsIHJpZ2h0PyBHaXZlbiB0aGUgbmFtZXMsIHRoZXNlIHNlZW0gbGlrZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGZvciBtYWludGFpbmluZyB0aGUgaW5kZXggc3RydWN0dXJlIHdpdGhpbiBOVEZTLiBJZiB0aGUgY29kZSYjMzk7cyB0aGVyZSwgdGhlbiBpdCYjMzk7cyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGlmIE5URlMgaXMgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBOVEZTIGlzIGVuYWJsZWQsIHJpZ2h0PyBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb25maXJtIE5URlMgaXMgY29tcGlsZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcbi0tXG5mcy9udGZzL0tjb25maWctMzQtXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG5mcy9udGZzL0tjb25maWctMzYtXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBOVEZTIFdyaXRlIFN1cHBvcnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgTlRGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBCdXQgSSBuZWVkIHRvIG5haWwgZG93biB3aGV0aGVyIHRoaXMgc2luZ2xlIG9wdGlvbiBlbmNvbXBhc3NlcyB0aGUgd2hvbGUgZmlsZSBzeXN0ZW0gc2V0dXAsIG9yIGlmIHRoZXJlJiMzOTtzIGEgc2VwYXJhdGUgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIGVuYWJsaW5nIHdyaXRlIHN1cHBvcnQuIEl0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLgoKVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGF0ZWQgYnVpbGQgZmxhZ3MsIGFuZCB0aGUgYW5zd2VyIHRvIG15IGNydWNpYWwgcXVlc3Rpb24uIERpZ2dpbmcgaW4gdGhlcmUgc2hvdWxkIGNsYXJpZnkgaWYgYE5URlNfRlNgIGNvbnRyb2xzIHJlYWQtb25seSAqYW5kKiB3cml0ZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCYjMzk7cyBtb3JlIG51YW5jZWQgdGhhbiB0aGF0LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcbiAgMTg6XHRcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxuICAxOTpcdFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXG4gIDIwOlx0XHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxuICAyMTpcdFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxuICAyMjpcdFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cbiAgMjM6XHRcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxuICAyNDpcdFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxuICAyNTpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXG4gIDI2Olx0XHQgIFJlcGxhY2luZyB0aGUgXCYjMzQ7MVwmIzM0OyB3aXRoIFwmIzM0OzBcJiMzNDsgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxuICAyOTpcdFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxuICAzMDpcdFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxuICAzMTpcdFxuICAzMjpcdFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXG4gIDMzOlx0XHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG4gIDM2Olx0XHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAzODpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDE6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxuICA0NDpcdFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNoZWNraW5nIGZvciBOVEZTX1JXIENvbmZpZ3VyYXRpb24qKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoaXMsIGEgZGV0YWlsIGlzIG5hZ2dpbmcgYXQgbWUuIFdhc24mIzM5O3QgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIE5URlMgcmVhZC93cml0ZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSBuZWVkIHRvIGNoZWNrPyBZZXMsIG5vdyBJIHJlbWVtYmVyLCBJIHRoaW5rIGl0JiMzOTtzIGNhbGxlZCBgTlRGU19SV2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV4aXN0cyBhbmQgaXMgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gaXMgaW50ZW5kZWQgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TlRGU19SVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5URlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgTlRGU19SV2Agd2FzIHJlbW92ZWQ/IFRoYXQgZG9lc24mIzM5O3Qgc291bmQgcmlnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwgaGVyZSB3ZSBnby4uLiBIbW0sIGl0IGRvZXMgc2VlbSB0byBiZSBtaXNzaW5nLiBPa2F5LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBpdC4gTGV0JiMzOTtzIG5vdCBhc3N1bWUgSSBrbm93IHRoZSBmaWxlIGNvbnRlbnRzLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgZW50aXJlIGBmcy9udGZzL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc3VidGxldHkgb3IgcmVsb2NhdGlvbiBJIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5maWxlIGZzL250ZnMvS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgNDksIGl0IGhhcyBvbmx5IDQ4IGxpbmVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIGZzL250ZnMvS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgNDksIGl0IGhhcyBvbmx5IDQ4IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKgoKUmlnaHQsIHNvIEkgcmVtZW1iZXIgaGVhcmluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRlcHJlY2F0ZWQgb3IgcmVtb3ZlZCByZWNlbnRseSwgbWF5YmUgYXJvdW5kIDIwMjQ/IEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCB0aGUgZXhhY3QgZGV0YWlscy4gV2FzIGl0IGJlY2F1c2UgYG50ZnMzYCBiZWNhbWUgdGhlIG5ldyBkZWZhdWx0PyBPciBtYXliZSBgbnRmc2AgaXRzZWxmIGlzIG5vdyByZWFkLW9ubHkgYnkgZGVmYXVsdCwgYW5kIHRoZXkgc3BlY2lmaWNhbGx5IHB1bGxlZCBvdXQgdGhlIHdyaXRlIHN1cHBvcnQ/IEl0JiMzOTtzIGFsbCBhIGJpdCBoYXp5LiBIb2xkIG9uLCB3YXNuJiMzOTt0IEkgbG9va2luZyBhdCBzb21lIGBudGZzX2lyX3JlcGFyZW50YCBjYWxscyByZWNlbnRseT8gQWggeWVzLCB0aGF04oCZcyBjYWxsZWQgZnJvbSBgbnRmc19pcl9tYWtlX3NwYWNlYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbnRmc19pZV9hZGRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB3cml0ZSBvcGVyYXRpb25zISBJZiB0aGV54oCZcmUgc3RpbGwgdGhlcmUgdGhhdCBzdWdnZXN0cyB0aGF0IHRoZSB3cml0ZSBjb2RlIGhhc24mIzM5O3QgYmVlbiByZW1vdmVkLCBidXQgaGFzIGp1c3QgY2hhbmdlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgb3V0IG1vcmUgaXMgcHJvYmFibHkgaW4gYGZzL250ZnMvaW5kZXguY2AuIFRpbWUgdG8gc2VlIGlmIHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBwcmVzZW50IHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipDaGVja2luZyB0aGUgQnVpbGQgU3RhdHVzIG9mIGBudGZzX2lyX3JlcGFyZW50YCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgcmVhZHkgdG8gZ28uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGl0JiMzOTtzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgd2FudCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgZGVidWdnaW5nIGlzc3VlcyB0aGF0IHNpbXBseSBzdGVtIGZyb20gYSBtaXNzaW5nIG9yIG91dGRhdGVkIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsaW5rZXIgd2lsbCBmaW5kIGl0LCBvciB3aGV0aGVyIEkgbmVlZCB0byByZXZpc2l0IHRoZSBidWlsZCBzY3JpcHRzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgSSBvZnRlbiBvdmVybG9vayBpbiB0aGUgaGVhdCBvZiBjb2RpbmcsIHNvIEkmIzM5O20gbWFraW5nIGl0IGEgcHJpb3JpdHkgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lyX3JlcGFyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbmRleC5jPTEyMjM9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4tLVxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXG5mcy9udGZzL2luZGV4LmM6MTI0OTpzdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuZnMvbnRmcy9pbmRleC5jLTEyNTAte1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNDE5PXN0YXRpYyBpbnQgbnRmc19pcl9tYWtlX3NwYWNlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgaW50IGRhdGFfc2l6ZSlcbi0tXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cdGlmIChyZXQgPT0gLUVOT1NQQykge1xuZnMvbnRmcy9pbmRleC5jOjE0Mjc6XHRcdHJldCA9IG50ZnNfaXJfcmVwYXJlbnQoaWN4KTtcbmZzL250ZnMvaW5kZXguYy0xNDI4LVx0XHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZnMvbnRmcy9pbmRleC5jYCoqCgpSaWdodCwgc28gYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFwcGFyZW50bHkgZGVmaW5lZCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGlzIHRoaXMgZmlsZSBldmVuIGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUgb3IgaW1hZ2UgSSYjMzk7bSB3b3JraW5nIHdpdGg/JiMzNDsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBpbmNsdWRlZCBhbmQgYXZhaWxhYmxlLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaWYgdGhhdCBzcGVjaWZpYyBmaWxlLCBgZnMvbnRmcy9pbmRleC5jYCwgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmRleFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05URlNfRlMpICYjNDM7PSBudGZzLm9cbmZzL250ZnMvTWFrZWZpbGUtNC1cbmZzL250ZnMvTWFrZWZpbGU6NTpudGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTYtXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyBgaW5kZXgub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmVzLiBMZXQmIzM5O3Mgc2VlLi4uIElzIHRoaXMgZnVuY3Rpb24sIGBudGZzX2lyX3RvX2liYCwgYWNjZXNzaWJsZT8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbnRmc19pcl9yZXBhcmVudGAuIEFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG50ZnNfaXJfbWFrZV9zcGFjZWAuIE9rYXksIHRoYXQmIzM5O3Mgc3RhcnRpbmcgdG8gcGFpbnQgdGhlIG91dGxpbmUgb2YgdGhlIGNhbGwgc3RhY2suLi4gQW5kLCBmaW5hbGx5LCBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBjYWxsZWQgZnJvbSBgbnRmc19pZV9hZGRgLiAKCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG50ZnNfaWVfYWRkYCBpcyB1c2VkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGl0LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGF0IHBhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaWVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDM5LSAqL1xuZnMvbnRmcy9pbmRleC5jOjE0NDA6c3RhdGljIGludCBudGZzX2llX2FkZF92Y24oc3RydWN0IGluZGV4X2VudHJ5ICoqaWUpXG5mcy9udGZzL2luZGV4LmMtMTQ0MS17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0NTQ9c3RhdGljIGludCBudGZzX2loX2luc2VydChzdHJ1Y3QgaW5kZXhfaGVhZGVyICppaCwgc3RydWN0IGluZGV4X2VudHJ5ICpvcmlnX2llLCBzNjQgbmV3X3Zjbixcbi0tXG5mcy9udGZzL2luZGV4LmMtMTQ2Ni1cdGlmICghKGllLVx1MDAzZWZsYWdzIFx1MDAyNiBJTkRFWF9FTlRSWV9OT0RFKSkge1xuZnMvbnRmcy9pbmRleC5jOjE0Njc6XHRcdHJldCA9IG50ZnNfaWVfYWRkX3ZjbihcdTAwMjZpZSk7XG5mcy9udGZzL2luZGV4LmMtMTQ2OC1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzL2luZGV4LmM9MTU3ND1zdGF0aWMgaW50IG50ZnNfaWJfc3BsaXQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfYmxvY2sgKmliKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjQ1LVxuZnMvbnRmcy9pbmRleC5jOjE2NDY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSlcbmZzL250ZnMvaW5kZXguYy0xNjQ3LXtcbi0tXG5mcy9udGZzL2luZGV4LmM9MTcwND1pbnQgbnRmc19pbmRleF9hZGRfZmlsZW5hbWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuLCB1NjQgbXJlZilcbi0tXG5mcy9udGZzL2luZGV4LmMtMTczNS1cbmZzL250ZnMvaW5kZXguYzoxNzM2Olx0ZXJyID0gbnRmc19pZV9hZGQoaWN4LCBpZSk7XG5mcy9udGZzL2luZGV4LmMtMTczNy1cdG50ZnNfaW5kZXhfY3R4X3B1dChpY3gpO1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNzQzPXN0YXRpYyBpbnQgbnRmc19paF90YWtlb3V0KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2hlYWRlciAqaWgsXG4tLVxuZnMvbnRmcy9pbmRleC5jLTE3ODAtXG5mcy9udGZzL2luZGV4LmM6MTc4MTpcdHJldCA9IG50ZnNfaWVfYWRkKGljeCwgaWVfcm9hbSk7XG5mcy9udGZzL2luZGV4LmMtMTc4Mi1vdXQ6XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE4ODI9c3RhdGljIGludCBudGZzX2luZGV4X3JtX25vZGUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xOTM2LVxuZnMvbnRmcy9pbmRleC5jOjE5Mzc6XHRyZXQgPSBudGZzX2llX2FkZF92Y24oXHUwMDI2aWUpO1xuZnMvbnRmcy9pbmRleC5jLTE5MzgtXHRpZiAocmV0KVxuLS1cbmZzL250ZnMvaW5kZXguaD0xMTU9dm9pZCBudGZzX2luZGV4X2N0eF9yZWluaXQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KTtcbmZzL250ZnMvaW5kZXguaDoxMTY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSk7XG5mcy9udGZzL2luZGV4LmgtMTE3LWludCBudGZzX2ljeF9pYl9zeW5jX3dyaXRlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCk7XG4tLVxuZnMvbnRmcy9yZXBhcnNlLmM9NDgwPXN0YXRpYyBpbnQgc2V0X3JlcGFyc2VfaW5kZXgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcbi0tXG5mcy9udGZzL3JlcGFyc2UuYy01MDItXG5mcy9udGZzL3JlcGFyc2UuYzo1MDM6XHRyZXR1cm4gbnRmc19pZV9hZGQoeHIsIChzdHJ1Y3QgaW5kZXhfZW50cnkgKilcdTAwMjZpbmR4KTtcbmZzL250ZnMvcmVwYXJzZS5jLTUwNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHdoZW4gZGVidWdnaW5nLCBvcHRpbWl6aW5nLCBvciBldmVuIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBleGVjdXRpb24gd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIGBncmVwYCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIGJyb3dzZXIsIHRvIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBpcyByZWZlcmVuY2VkLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzb3J0IHRocm91Z2ggdGhlIHJlc3VsdHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICpkaXJlY3QqIGNhbGxlcnMsIG5vdCBqdXN0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FsbCBpdC4gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OyBpcyBpdCBjYWxsZWQgd2l0aGluIGFuIGBpZmAgYmxvY2ssIGEgbG9vcCwgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbj8gV2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheT8gS25vd2luZyB0aGUgY29uZGl0aW9ucyBhcm91bmQgdGhlIGNhbGwgd2lsbCBiZSBqdXN0IGFzIGltcG9ydGFudCBhcyBrbm93aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbCBpdHNlbGYuCgpJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnB1cnBvc2UqIG9mIHRoZSBjYWxsZXIuIFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBpbnZva2VzIHRoaXMgZnVuY3Rpb24/IElzIGl0IGFkZGluZyBhIG5ldyBmaWxlLCByZW5hbWluZyBhbiBleGlzdGluZyBvbmUsIG9yIHVwZGF0aW5nIGFuIGluZGV4IGVudHJ5PyBUaGUgY2FsbGVyJiMzOTtzIGludGVudCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byB0aGUgYmVoYXZpb3Igb2YgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gQXJlIHdlIGluIHRoZSBtZXRhZGF0YSB1cGRhdGVzIG9yIGFyZSB3ZSBzdGlsbCBpbiB0aGUgaW5kZXhpbmcgaXRzZWxmPwoKSWYgc3RhdGljIGFuYWx5c2lzIGRvZXNuJiMzOTt0IGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIGRlYnVnZ2VyIHdpbGwgYmUgbmV4dC4gSSYjMzk7bGwgc2V0IGEgYnJlYWtwb2ludCBhdCB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCBzdGVwIGJhY2t3YXJkIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suIFRoaXMgd2lsbCByZXZlYWwgdGhlIGR5bmFtaWMgZXhlY3V0aW9uIHBhdGgsIHNob3dpbmcgbWUgZXhhY3RseSB3aGljaCBmdW5jdGlvbiBzZXF1ZW5jZXMgbGVhZCB0byB0aGUgY2FsbCBhbmQgdGhlIHZhbHVlcyBvZiBhbnkgY3JpdGljYWwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sIHJldmVhbGluZyB0aGUgY29udGV4dC4gSeKAmWxsIGJlIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlcywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBpbmZvcm1hdGlvbi4KClRoZSBlbmQgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBmcm9tIHRoZSBvcmlnaW5hdGluZyBmdW5jdGlvbiBhbGwgdGhlIHdheSB0byBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyB3aXRoIHRoZSBmaWxlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pbmRleF9hZGRfZmlsZW5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjk4LS8qXG5mcy9udGZzL2luZGV4LmM6MTY5OTogKiBudGZzX2luZGV4X2FkZF9maWxlbmFtZSAtIGFkZCBmaWxlbmFtZSB0byBkaXJlY3RvcnkgaW5kZXhcbmZzL250ZnMvaW5kZXguYy0xNzAwLSAqIEBuaTpcdFx0bnRmcyBpbm9kZSBkZXNjcmliaW5nIGRpcmVjdG9yeSB0byB3aGljaCBpbmRleCBhZGQgZmlsZW5hbWVcbi0tXG5mcy9udGZzL2luZGV4LmMtMTcwMy0gKi9cbmZzL250ZnMvaW5kZXguYzoxNzA0OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxuZnMvbnRmcy9pbmRleC5jLTE3MDUte1xuLS1cbmZzL250ZnMvaW5kZXguaD0xMDg9dm9pZCBudGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN0eCk7XG5mcy9udGZzL2luZGV4Lmg6MTA5OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKTtcbmZzL250ZnMvaW5kZXguaC0xMTAtaW50IG50ZnNfaW5kZXhfcmVtb3ZlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB1MzIga2V5bGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmcy9uYW1laS5jLTY3Ny1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGluZGV4LiAqL1xuZnMvbnRmcy9uYW1laS5jOjY3ODpcdGVyciA9IG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lKGRpcl9uaSwgZm4sIGNoaWxkX21mdF9yZWYpO1xuZnMvbnRmcy9uYW1laS5jLTY3OS1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTE0OT1zdGF0aWMgaW50IF9fbnRmc19saW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSxcbi0tXG5mcy9udGZzL25hbWVpLmMtMTIxNi1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGluZGV4LiAqL1xuZnMvbnRmcy9uYW1laS5jOjEyMTc6XHRlcnIgPSBudGZzX2luZGV4X2FkZF9maWxlbmFtZShkaXJfbmksIGZuLCBNS19NUkVGKG5pLVx1MDAzZW1mdF9ubyxcbmZzL250ZnMvbmFtZWkuYy0xMjE4LVx0XHRcdFx0XHRsZTE2X3RvX2NwdShuaV9tcmVjLVx1MDAzZXNlcXVlbmNlX251bWJlcikpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVEZTIE1vZHVsZSBDb21waWxhdGlvbiBhbmQgV3JpdGUgU3VwcG9ydCAtIEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBfX250ZnNfY3JlYXRlYCBhbmQgYF9fbnRmc19saW5rYCBhcmUgZGVmaW5pdGVseSBkZWZpbmVkIHdpdGhpbiBgZnMvbnRmcy9uYW1laS5jYC4mIzM0OyBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBmcy9udGZzL25hbWVpLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBzY2FuIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJldmVhbHMgdGhhdCwgeWVzLCBpdCYjMzk7cyBpbmNsdWRlZCB1bmRlciB0aGUgYG50ZnMteWAgZGlyZWN0aXZlLiBFeGNlbGxlbnQsIHNvIGZhciBzbyBnb29kLgoKTm93LCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBkb2VzIHRoZSBgZnMvbnRmc2AgbW9kdWxlICpzdXBwb3J0KiB3cml0ZSBvcGVyYXRpb25zPyBJIGhhZCBhIGZsZWV0aW5nIG1lbW9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgSSBjb3VsZG4mIzM5O3QgcXVpdGUgcGxhY2UgaXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBBaCwgeWVzLCBJIHJlY2FsbCBub3c6IGBOVEZTX1JXYC4gSXQmIzM5O3MgYWxsIGNvbWluZyBiYWNrIHRvIG1lLiBMZXQgbWUgZ28gYmFjayBhbmQgZ2l2ZSBpdCBhbm90aGVyIG9uY2Utb3Zlci4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSHVudGluZyBEb3duIFJlYWQvV3JpdGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVhZC93cml0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgaXQgd2FzbiYjMzk7dCB0aGVyZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIG90aGVyIHZhcmlhYmxlIHRoYXQgSSBjYW4gdHdlYWssIG1heWJlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfTlRGU19SV2AsIG9yIGEgcmVsYXRlZCBzeW1ib2wuIFRpbWUgdG8gY2hlY2sgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9sYXlvdXQuaD0xNzUyPXN0cnVjdCBzZGhfaW5kZXhfa2V5IHtcbi0tXG5mcy9udGZzL2xheW91dC5oLTE3NjYtICogVk9MVU1FX01PVU5URURfT05fTlQ0OiAgICAgICAgICBNb3VudGVkIG9uIE5UNCAoY29tcGF0aWJpbGl0eSBmbGFnKS5cbmZzL250ZnMvbGF5b3V0Lmg6MTc2NzogKiBWT0xVTUVfREVMRVRFX1VTTl9VTkRFUldBWTogICAgIFVTTiBqb3VybmFsIGRlbGV0aW9uIGluIHByb2dyZXNzLlxuZnMvbnRmcy9sYXlvdXQuaC0xNzY4LSAqIFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEOiAgICAgICAgUmVwYWlyICRPYmpJZCBvbiBuZXh0IG1vdW50LlxuZnMvbnRmcy9sYXlvdXQuaDoxNzY5OiAqIFZPTFVNRV9DSEtEU0tfVU5ERVJXQVk6ICAgICAgICAgQ2hrZHNrIGlzIHJ1bm5pbmcuXG5mcy9udGZzL2xheW91dC5oLTE3NzAtICogVk9MVU1FX01PRElGSUVEX0JZX0NIS0RTSzogICAgICBNb2RpZmllZCBieSBjaGtkc2suXG4tLVxuZnMvbnRmcy9sYXlvdXQuaD0xNzc1PWVudW0ge1xuLS1cbmZzL250ZnMvbGF5b3V0LmgtMTc4MC1cbmZzL250ZnMvbGF5b3V0Lmg6MTc4MTpcdFZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZXHQ9IGNwdV90b19sZTE2KDB4MDAxMCksXG5mcy9udGZzL2xheW91dC5oLTE3ODItXHRWT0xVTUVfUkVQQUlSX09CSkVDVF9JRFx0XHQ9IGNwdV90b19sZTE2KDB4MDAyMCksXG5mcy9udGZzL2xheW91dC5oLTE3ODMtXG5mcy9udGZzL2xheW91dC5oOjE3ODQ6XHRWT0xVTUVfQ0hLRFNLX1VOREVSV0FZXHRcdD0gY3B1X3RvX2xlMTYoMHg0MDAwKSxcbmZzL250ZnMvbGF5b3V0LmgtMTc4NS1cdFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0tcdD0gY3B1X3RvX2xlMTYoMHg4MDAwKSxcbi0tXG5mcy9udGZzL2xheW91dC5oLTE3OTctICogQG1pbm9yX3ZlcjogICAgICBNaW5vciBOVEZTIHZlcnNpb24gbnVtYmVyIChlLmcuLCAxIGZvciBOVEZTIDMuMSkuXG5mcy9udGZzL2xheW91dC5oOjE3OTg6ICogQGZsYWdzOiAgICAgICAgICBWb2x1bWUgZmxhZ3MgKFZPTFVNRV9JU19ESVJUWSwgVk9MVU1FX0NIS0RTS19VTkRFUldBWSwgZXRjLikuXG5mcy9udGZzL2xheW91dC5oLTE3OTktICogICAgICAgICAgICAgICAgICBTZWUgdm9sdW1lIGZsYWdzIGVudW0gZm9yIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkZpbGUgU3lzdGVtIElucXVpcnkqKgoKSG1tLCBJJiMzOTttIGN1cnJlbnRseSBsb29raW5nIGludG8gdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5LCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gQW0gSSBvdmVybG9va2luZyBhIHBvdGVudGlhbGx5IG1vcmUgcmVjZW50LCBpbXByb3ZlZCB2ZXJzaW9uPyBNeSBpbnR1aXRpb24gaXMgcHJvZGRpbmcgbWUgdG8gY29uc2lkZXIuLi4gaXMgdGhlcmUgYSBgZnMvbnRmczMvYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGF0IHNsaWdodCB1bmNlcnRhaW50eSBpcyBuYWdnaW5nIGF0IG1lLiBQZXJoYXBzIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCBtb3JlIHJlY2VudCB2ZXJzaW9uIGV4aXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWlvLmMmIzM0OywKICAgICYjMzQ7YW5vbl9pbm9kZXMuYyYjMzQ7LAogICAgJiMzNDthdHRyLmMmIzM0OywKICAgICYjMzQ7YmFja2luZy1maWxlLmMmIzM0OywKICAgICYjMzQ7YmFkX2lub2RlLmMmIzM0OywKICAgICYjMzQ7YmluZm10X2VsZi5jJiMzNDssCiAgICAmIzM0O2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7LAogICAgJiMzNDtiaW5mbXRfZmxhdC5jJiMzNDssCiAgICAmIzM0O2JpbmZtdF9taXNjLmMmIzM0OywKICAgICYjMzQ7YmluZm10X3NjcmlwdC5jJiMzNDssCiAgICAmIzM0O2JwZl9mc19rZnVuY3MuYyYjMzQ7LAogICAgJiMzNDtidWZmZXIuYyYjMzQ7LAogICAgJiMzNDtjaGFyX2Rldi5jJiMzNDssCiAgICAmIzM0O2NvbXBhdF9iaW5mbXRfZWxmLmMmIzM0OywKICAgICYjMzQ7Y29yZWR1bXAuYyYjMzQ7LAogICAgJiMzNDtkX3BhdGguYyYjMzQ7LAogICAgJiMzNDtkYXguYyYjMzQ7LAogICAgJiMzNDtkY2FjaGUuYyYjMzQ7LAogICAgJiMzNDtkaXJlY3QtaW8uYyYjMzQ7LAogICAgJiMzNDtkcm9wX2NhY2hlcy5jJiMzNDssCiAgICAmIzM0O2V2ZW50ZmQuYyYjMzQ7LAogICAgJiMzNDtldmVudHBvbGwuYyYjMzQ7LAogICAgJiMzNDtleGVjLmMmIzM0OywKICAgICYjMzQ7ZmNudGwuYyYjMzQ7LAogICAgJiMzNDtmaGFuZGxlLmMmIzM0OywKICAgICYjMzQ7ZmlsZS5jJiMzNDssCiAgICAmIzM0O2ZpbGVfYXR0ci5jJiMzNDssCiAgICAmIzM0O2ZpbGVfdGFibGUuYyYjMzQ7LAogICAgJiMzNDtmaWxlc3lzdGVtcy5jJiMzNDssCiAgICAmIzM0O2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgICAmIzM0O2ZzX2NvbnRleHQuYyYjMzQ7LAogICAgJiMzNDtmc19kaXJlbnQuYyYjMzQ7LAogICAgJiMzNDtmc19wYXJzZXIuYyYjMzQ7LAogICAgJiMzNDtmc19waW4uYyYjMzQ7LAogICAgJiMzNDtmc19zdHJ1Y3QuYyYjMzQ7LAogICAgJiMzNDtmc2Vycm9yLmMmIzM0OywKICAgICYjMzQ7ZnNvcGVuLmMmIzM0OywKICAgICYjMzQ7aW5pdC5jJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7aW50ZXJuYWwuaCYjMzQ7LAogICAgJiMzNDtpb2N0bC5jJiMzNDssCiAgICAmIzM0O2tlcm5lbF9yZWFkX2ZpbGUuYyYjMzQ7LAogICAgJiMzNDtsaWJmcy5jJiMzNDssCiAgICAmIzM0O2xvY2tzLmMmIzM0OywKICAgICYjMzQ7bWJjYWNoZS5jJiMzNDssCiAgICAmIzM0O21udF9pZG1hcHBpbmcuYyYjMzQ7LAogICAgJiMzNDttb3VudC5oJiMzNDssCiAgICAmIzM0O21wYWdlLmMmIzM0OywKICAgICYjMzQ7bmFtZWkuYyYjMzQ7LAogICAgJiMzNDtuYW1lc3BhY2UuYyYjMzQ7LAogICAgJiMzNDtuc2ZzLmMmIzM0OywKICAgICYjMzQ7bnVsbGZzLmMmIzM0OywKICAgICYjMzQ7b3Blbi5jJiMzNDssCiAgICAmIzM0O3BpZGZzLmMmIzM0OywKICAgICYjMzQ7cGlwZS5jJiMzNDssCiAgICAmIzM0O3Bub2RlLmMmIzM0OywKICAgICYjMzQ7cG5vZGUuaCYjMzQ7LAogICAgJiMzNDtwb3NpeF9hY2wuYyYjMzQ7LAogICAgJiMzNDtwcm9jX25hbWVzcGFjZS5jJiMzNDssCiAgICAmIzM0O3JlYWRfd3JpdGUuYyYjMzQ7LAogICAgJiMzNDtyZWFkZGlyLmMmIzM0OywKICAgICYjMzQ7cmVtYXBfcmFuZ2UuYyYjMzQ7LAogICAgJiMzNDtzZWxlY3QuYyYjMzQ7LAogICAgJiMzNDtzZXFfZmlsZS5jJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkLmMmIzM0OywKICAgICYjMzQ7c3BsaWNlLmMmIzM0OywKICAgICYjMzQ7c3RhY2suYyYjMzQ7LAogICAgJiMzNDtzdGF0LmMmIzM0OywKICAgICYjMzQ7c3RhdGZzLmMmIzM0OywKICAgICYjMzQ7c3VwZXIuYyYjMzQ7LAogICAgJiMzNDtzeW5jLmMmIzM0OywKICAgICYjMzQ7c3lzY3Rscy5jJiMzNDssCiAgICAmIzM0O3RpbWVyZmQuYyYjMzQ7LAogICAgJiMzNDt1dGltZXMuYyYjMzQ7LAogICAgJiMzNDt4YXR0ci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0OzlwJiMzNDssCiAgICAmIzM0O2FkZnMmIzM0OywKICAgICYjMzQ7YWZmcyYjMzQ7LAogICAgJiMzNDthZnMmIzM0OywKICAgICYjMzQ7YXV0b2ZzJiMzNDssCiAgICAmIzM0O2JlZnMmIzM0OywKICAgICYjMzQ7YmZzJiMzNDssCiAgICAmIzM0O2J0cmZzJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXMmIzM0OywKICAgICYjMzQ7Y2VwaCYjMzQ7LAogICAgJiMzNDtjb2RhJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzJiMzNDssCiAgICAmIzM0O2NyYW1mcyYjMzQ7LAogICAgJiMzNDtjcnlwdG8mIzM0OywKICAgICYjMzQ7ZGVidWdmcyYjMzQ7LAogICAgJiMzNDtkZXZwdHMmIzM0OywKICAgICYjMzQ7ZGxtJiMzNDssCiAgICAmIzM0O2VjcnlwdGZzJiMzNDssCiAgICAmIzM0O2VmaXZhcmZzJiMzNDssCiAgICAmIzM0O2VmcyYjMzQ7LAogICAgJiMzNDtlcm9mcyYjMzQ7LAogICAgJiMzNDtleGZhdCYjMzQ7LAogICAgJiMzNDtleHBvcnRmcyYjMzQ7LAogICAgJiMzNDtleHQyJiMzNDssCiAgICAmIzM0O2V4dDQmIzM0OywKICAgICYjMzQ7ZjJmcyYjMzQ7LAogICAgJiMzNDtmYXQmIzM0OywKICAgICYjMzQ7ZnJlZXZ4ZnMmIzM0OywKICAgICYjMzQ7ZnVzZSYjMzQ7LAogICAgJiMzNDtnZnMyJiMzNDssCiAgICAmIzM0O2hmcyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzJiMzNDssCiAgICAmIzM0O2hvc3RmcyYjMzQ7LAogICAgJiMzNDtocGZzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmcyYjMzQ7LAogICAgJiMzNDtpb21hcCYjMzQ7LAogICAgJiMzNDtpc29mcyYjMzQ7LAogICAgJiMzNDtqYmQyJiMzNDssCiAgICAmIzM0O2pmZnMyJiMzNDssCiAgICAmIzM0O2pmcyYjMzQ7LAogICAgJiMzNDtrZXJuZnMmIzM0OywKICAgICYjMzQ7bG9ja2QmIzM0OywKICAgICYjMzQ7bWluaXgmIzM0OywKICAgICYjMzQ7bmV0ZnMmIzM0OywKICAgICYjMzQ7bmZzJiMzNDssCiAgICAmIzM0O25mc19jb21tb24mIzM0OywKICAgICYjMzQ7bmZzZCYjMzQ7LAogICAgJiMzNDtuaWxmczImIzM0OywKICAgICYjMzQ7bmxzJiMzNDssCiAgICAmIzM0O25vdGlmeSYjMzQ7LAogICAgJiMzNDtudGZzJiMzNDssCiAgICAmIzM0O250ZnMzJiMzNDssCiAgICAmIzM0O29jZnMyJiMzNDssCiAgICAmIzM0O29tZnMmIzM0OywKICAgICYjMzQ7b3BlbnByb21mcyYjMzQ7LAogICAgJiMzNDtvcmFuZ2VmcyYjMzQ7LAogICAgJiMzNDtvdmVybGF5ZnMmIzM0OywKICAgICYjMzQ7cHJvYyYjMzQ7LAogICAgJiMzNDtwc3RvcmUmIzM0OywKICAgICYjMzQ7cW54NCYjMzQ7LAogICAgJiMzNDtxbng2JiMzNDssCiAgICAmIzM0O3F1b3RhJiMzNDssCiAgICAmIzM0O3JhbWZzJiMzNDssCiAgICAmIzM0O3Jlc2N0cmwmIzM0OywKICAgICYjMzQ7cm9tZnMmIzM0OywKICAgICYjMzQ7c21iJiMzNDssCiAgICAmIzM0O3NxdWFzaGZzJiMzNDssCiAgICAmIzM0O3N5c2ZzJiMzNDssCiAgICAmIzM0O3Rlc3RzJiMzNDssCiAgICAmIzM0O3RyYWNlZnMmIzM0OywKICAgICYjMzQ7dWJpZnMmIzM0OywKICAgICYjMzQ7dWRmJiMzNDssCiAgICAmIzM0O3VmcyYjMzQ7LAogICAgJiMzNDt1bmljb2RlJiMzNDssCiAgICAmIzM0O3Zib3hzZiYjMzQ7LAogICAgJiMzNDt2ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzJiMzNDssCiAgICAmIzM0O3pvbmVmcyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBGaWxlIFN5c3RlbSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBib3RoIGBmcy9udGZzYCBhbmQgYGZzL250ZnMzYCBwb3BzIHVwLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL250ZnMvaW5kZXguY2AuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHdhbnQgdG8gY29uZmlybSBhIHNldHRpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb3Igc3RhdHVzIG9mIGBOVEZTX1JXYC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBteSBleHBlY3RhdGlvbnMgb2YgdGhlIGFmZmVjdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5URlMgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWRuJiMzOTt0IEkganVzdCB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlRGUyBhbHJlYWR5PyBJJiMzOTttIHByZXR0eSBzdXJlIEkgZGlkLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYmVmb3JlIGRpdmluZyBpbiBmdXJ0aGVyLiBZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIEkgaGFkIHRoYXQgZGF0YS4gT2theSwgbmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5LCBgZnMvbnRmcy9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgZW50cnkgcmVsYXRlZCB0byBgY29uZmlnIE5URlNgIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUga2V5IGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0xMi1cbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjc4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBOVEZTIFdyaXRlIFN1cHBvcnQgQ2hhbmdlcyoqCgpIbW0sIGludGVyZXN0aW5nLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkcm9wcGVkIGZyb20gYGZzL250ZnMvS2NvbmZpZ2Agc29tZXRpbWUgYXJvdW5kIDIwMjQuIFRoYXQgZGVmaW5pdGVseSBjYXVnaHQgbXkgZXllLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3cml0ZSBzdXBwb3J0IG1pZ2h0IGJlIGVuYWJsZWQgZGlmZmVyZW50bHkgbm93LCBwb3RlbnRpYWxseSB1bmNvbmRpdGlvbmFsbHkuIFRvIGNvbmZpcm0gdGhpcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmcy9udGZzL01ha2VmaWxlYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYG50ZnMteWAgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaWYgaXQgaW50cmluc2ljYWxseSBpbmNvcnBvcmF0ZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSwgcmVnYXJkbGVzcyBvZiBhIEtjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgYE1ha2VmaWxlYCBlbnRyeSBwb2ludCB3aWxsIGNsYXJpZnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgTlRGUyB3cml0ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYW5kIHdoZXRoZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZSBpcyBuZWNlc3Nhcnkgb3Igbm90LCBhbmQgd2hlcmUgdGhhdCBjaGFuZ2Ugd291bGQgYmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfTlRGU19GUykgJiM0Mzs9IG50ZnMub1xuICAgNDpcdFxuICAgNTpcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcbiAgIDY6XHRcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcbiAgIDc6XHRcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcbiAgIDg6XHRcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xuICAgOTpcdFxuICAxMDpcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgJiM0Mzs9IC1EREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBmaWxlIHN5c3RlbSBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBOVEZTIFdyaXRlIFN1cHBvcnQgSW5xdWlyeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRyb3BwZWQsIG9yIG1heWJlIHdyaXRlIHN1cHBvcnQgYmVpbmcgKmFsd2F5cyogb24gbm93PyBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgTlRGUyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGNoZWNrIHRoZSBjb3JlLCB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBkZXRlcm1pbmUgdGhlIG1vdW50IGJlaGF2aW9yLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBob3cgcmVhZC1vbmx5IG1vdW50aW5nIGlzIGhhbmRsZWQsIG9yIGlmIGl0JiMzOTtzIGV2ZW4gYW4gb3B0aW9uIGFueW1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NCX1JET05MWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNjU9c3RhdGljIGludCBudGZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjg0LVx0ICovXG5mcy9udGZzL3N1cGVyLmM6Mjg1Olx0aWYgKHNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2ICEoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSkpIHtcbmZzL250ZnMvc3VwZXIuYy0yODYtXHRcdHN0YXRpYyBjb25zdCBjaGFyICplcyA9IFwmIzM0Oy4gIENhbm5vdCByZW1vdW50IHJlYWQtd3JpdGUuXCYjMzQ7O1xuLS1cbmZzL250ZnMvc3VwZXIuYy0zMTItXHRcdH1cbmZzL250ZnMvc3VwZXIuYzozMTM6XHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiAoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSkpIHtcbmZzL250ZnMvc3VwZXIuYy0zMTQtXHRcdC8qIFJlbW91bnRpbmcgcmVhZC1vbmx5LiAqL1xuLS1cbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0zNDAtXHRpZiAodm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjM0MTpcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMzQyLVx0XHRwcl9jcml0KFwmIzM0OyhkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXG5cJiMzNDssXG4tLVxuZnMvbnRmcy9zdXBlci5jPTEzOTk9c3RhdGljIGJvb2wgbG9hZF9zeXN0ZW1fZmlsZXMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE0MTYtXG5mcy9udGZzL3N1cGVyLmM6MTQxNzpcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNDE4LVx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1NDItXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1NDM6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU0NC1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LCBlczEsIGVzMik7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1NTktXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1NjA6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU2MS1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gbG9hZCBMb2dGaWxlLiBNb3VudGluZyByZWFkLW9ubHkuXCYjMzQ7KTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTU5MS1cdFx0aWYgKCFzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiB2b2wtXHUwMDNlb25fZXJyb3JzID09IE9OX0VSUk9SU19SRU1PVU5UX1JPKSB7XG5mcy9udGZzL3N1cGVyLmM6MTU5MjpcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNTkzLVx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssIGVzMSwgZXMyKTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTYwNi1cdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXMuICBNb3VudGluZyByZWFkLW9ubHklc1wmIzM0OywgZXMxLCBlczIpO1xuZnMvbnRmcy9zdXBlci5jOjE2MDc6XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE2MDgtXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byBhIFJlYWQtT25seSBGaWxlIFN5c3RlbSBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgYW5kIG15IG1lbnRhbCBicmVhZGNydW1iIHRyYWlsIGxlYWRzIG1lIHRvIGBmcy9udGZzL3N1cGVyLmNgLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtb25seSBzdGF0ZXMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSB0aGlzIGNvbmRpdGlvbjogYHNiX3Jkb25seShzYikgJmFtcDsmYW1wOyAhKGZjLSZndDtzYl9mbGFncyAmYW1wOyBTQl9SRE9OTFkpYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBpc3N1ZSB3aXRoIGEgc3VwZXIgYmxvY2sgZmxhZyBhbmQgYW5vdGhlciBmbGFncy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFuZCBmaWd1cmUgb3V0IHRoZSBpbXBhY3QuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoYXQgY29kZSBibG9jayBhcm91bmQgbGluZSAyODUgaW4gYGZzL250ZnMvc3VwZXIuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgY2hlY2tzIG1lYW4sIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2h5IHRoZXkgbWlnaHQgYmUgY2F1c2luZyBhIHByb2JsZW0gb3IgYSBjb25jZXJuIHRoYXQgSSBuZWVkIHRvIGFkZHJlc3MuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0bnRmc19kZWJ1ZyhcJiMzNDtFbnRlcmluZyB3aXRoIHJlbW91bnRcJiMzNDspO1xuIDI3MTpcdFxuIDI3MjpcdFx0c3luY19maWxlc3lzdGVtKHNiKTtcbiAyNzM6XHRcbiAyNzQ6XHRcdC8qXG4gMjc1Olx0XHQgKiBGb3IgdGhlIHJlYWQtd3JpdGUgY29tcGlsZWQgZHJpdmVyLCBpZiB3ZSBhcmUgcmVtb3VudGluZyByZWFkLXdyaXRlLFxuIDI3NjpcdFx0ICogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB2b2x1bWUgZXJyb3JzIGFuZCB0aGF0IG5vIHVuc3VwcG9ydGVkIHZvbHVtZVxuIDI3NzpcdFx0ICogZmxhZ3MgYXJlIHNldC4gIEFsc28sIGVtcHR5IHRoZSBsb2dmaWxlIGpvdXJuYWwgYXMgaXQgd291bGQgYmVjb21lXG4gMjc4Olx0XHQgKiBzdGFsZSBhcyBzb29uIGFzIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSB2b2x1bWUgYW5kIG1hcmsgdGhlXG4gMjc5Olx0XHQgKiB2b2x1bWUgZGlydHkgc28gdGhhdCBjaGtkc2sgaXMgcnVuIGlmIHRoZSB2b2x1bWUgaXMgbm90IHVtb3VudGVkXG4gMjgwOlx0XHQgKiBjbGVhbmx5LlxuIDI4MTpcdFx0ICpcbiAyODI6XHRcdCAqIFdoZW4gcmVtb3VudGluZyByZWFkLW9ubHksIG1hcmsgdGhlIHZvbHVtZSBjbGVhbiBpZiBubyB2b2x1bWUgZXJyb3JzXG4gMjgzOlx0XHQgKiBoYXZlIG9jY3VycmVkLlxuIDI4NDpcdFx0ICovXG4gMjg1Olx0XHRpZiAoc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgIShmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfUkRPTkxZKSkge1xuIDI4NjpcdFx0XHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcJiMzNDsuICBDYW5ub3QgcmVtb3VudCByZWFkLXdyaXRlLlwmIzM0OztcbiAyODc6XHRcbiAyODg6XHRcdFx0LyogUmVtb3VudGluZyByZWFkLXdyaXRlLiAqL1xuIDI4OTpcdFx0XHRpZiAoTlZvbEVycm9ycyh2b2wpKSB7XG4gMjkwOlx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Vm9sdW1lIGhhcyBlcnJvcnMgYW5kIGlzIHJlYWQtb25seSVzXCYjMzQ7LFxuIDI5MTpcdFx0XHRcdFx0XHRlcyk7XG4gMjkyOlx0XHRcdFx0cmV0dXJuIC1FUk9GUztcbiAyOTM6XHRcdFx0fVxuIDI5NDpcdFx0XHRpZiAodm9sLVx1MDAzZXZvbF9mbGFncyBcdTAwMjYgVk9MVU1FX0lTX0RJUlRZKSB7XG4gMjk1Olx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Vm9sdW1lIGlzIGRpcnR5IGFuZCByZWFkLW9ubHklc1wmIzM0OywgZXMpO1xuIDI5NjpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMjk3Olx0XHRcdH1cbiAyOTg6XHRcdFx0aWYgKHZvbC1cdTAwM2V2b2xfZmxhZ3MgXHUwMDI2IFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0spIHtcbiAyOTk6XHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtWb2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQgYnkgY2hrZHNrIGFuZCBpcyByZWFkLW9ubHklc1wmIzM0OywgZXMpO1xuIDMwMDpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzAxOlx0XHRcdH1cbiAzMDI6XHRcdFx0aWYgKHZvbC1cdTAwM2V2b2xfZmxhZ3MgXHUwMDI2IFZPTFVNRV9NVVNUX01PVU5UX1JPX01BU0spIHtcbiAzMDM6XHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtWb2x1bWUgaGFzIHVuc3VwcG9ydGVkIGZsYWdzIHNldCAoMHgleCkgYW5kIGlzIHJlYWQtb25seSVzXCYjMzQ7LFxuIDMwNDpcdFx0XHRcdFx0XHRsZTE2X3RvX2NwdSh2b2wtXHUwMDNldm9sX2ZsYWdzKSwgZXMpO1xuIDMwNTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzA2Olx0XHRcdH1cbiAzMDc6XHRcdFx0aWYgKHZvbC1cdTAwM2Vsb2dmaWxlX2lubyBcdTAwMjZcdTAwMjYgIW50ZnNfZW1wdHlfbG9nZmlsZSh2b2wtXHUwMDNlbG9nZmlsZV9pbm8pKSB7XG4gMzA4Olx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIGVtcHR5IGpvdXJuYWwgTG9nRmlsZSVzXCYjMzQ7LFxuIDMwOTpcdFx0XHRcdFx0XHRlcyk7XG4gMzEwOlx0XHRcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuIDMxMTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzEyOlx0XHRcdH1cbiAzMTM6XHRcdH0gZWxzZSBpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IChmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfUkRPTkxZKSkge1xuIDMxNDpcdFx0XHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cbiAzMTU6XHRcdFx0aWYgKCFOVm9sRXJyb3JzKHZvbCkpIHtcbiAzMTY6XHRcdFx0XHRpZiAobnRmc19jbGVhcl92b2x1bWVfZmxhZ3Modm9sLCBWT0xVTUVfSVNfRElSVFkpKVxuIDMxNzpcdFx0XHRcdFx0bnRmc193YXJuaW5nKHNiLFxuIDMxODpcdFx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gY2xlYXIgZGlydHkgYml0IGluIHZvbHVtZSBpbmZvcm1hdGlvbiBmbGFncy4gIFJ1biBjaGtkc2suXCYjMzQ7KTtcbiAzMTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOVEZTIFJlYWQvV3JpdGUgQ2FwYWJpbGl0aWVzKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG1lbnRpb24gb2YgJiMzNDtGb3IgdGhlIHJlYWQtd3JpdGUgY29tcGlsZWQgZHJpdmVyJiMzNDsuIEhtbSwgaXMgdGhpcyBzdWdnZXN0aW5nIHNvbWV0aGluZyBzaWduaWZpY2FudD8gRG9lcyB0aGlzIG1lYW4gYGZzL250ZnNgIGlzICphbHdheXMqIGNvbXBpbGVkIHdpdGggcmVhZC13cml0ZSBzdXBwb3J0IG5vdz8gVGhhdCB3b3VsZCBiZSBhIG1ham9yIHNoaWZ0LCBhc3N1bWluZyBpdCBpcyBpbmRlZWQgdGFsa2luZyBhYm91dCBudGZzLTNnLgoKT2theSwgYmVzdCB0byB2ZXJpZnkuIEkgbmVlZCB0byBnZXQgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgc2VlIGlmIHRoaXMgaXMgdHJ1ZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSYjMzk7bGwgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgYW55IGluc3RhbmNlIG9mIGBDT05GSUdfTlRGU19SV2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGNhbiBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGZpbGVzeXN0ZW0gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZz0xNDE9Q09ORklHX05URlNfRlM9eVxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZzoxNDI6Q09ORklHX05URlNfUlc9eVxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZy0xNDMtQ09ORklHX1RNUEZTPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTE1Mz1DT05GSUdfTlRGU19GUz1tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjE1NDpDT05GSUdfTlRGU19SVz15XG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnLTE1NS1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZz0xODg9Q09ORklHX05URlNfRlM9bVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZzoxODk6Q09ORklHX05URlNfUlc9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZy0xOTAtQ09ORklHX1BST0NfS0NPUkU9eVxuLS1cbmFyY2gvc2gvY29uZmlncy9hcHNoNGEzYV9kZWZjb25maWc9NjY9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZzo2NzpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhM2FfZGVmY29uZmlnLTY4LUNPTkZJR19QUk9DX0tDT1JFPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz05ND1DT05GSUdfTlRGU19GUz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZzo5NTpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZy05Ni1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnPTk5PUNPTkZJR19OVEZTX0ZTPW1cbmFyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZzoxMDA6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnLTEwMS1DT05GSUdfVE1QRlM9eVxuLS1cbmFyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZz04MT1DT05GSUdfTlRGU19GUz15XG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWc6ODI6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnLTgzLUNPTkZJR19QUk9DX0tDT1JFPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9NzY9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnOjc3OkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZy03OC1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnPTExMj1DT05GSUdfTlRGU19ERUJVRz15XG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWc6MTEzOkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZy0xMTQtQ09ORklHX1RNUEZTPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZz0xMTg9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWc6MTE5OkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnLTEyMC1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc9OTM9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc6OTQ6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWctOTUtQ09ORklHX1BST0NfS0NPUkU9eVxuLS1cbmFyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZz0xMTk9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnOjEyMDpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWctMTIxLUNPTkZJR19QUk9DX0tDT1JFPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTlRGU19SV2AmIzM5O3MgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KioKCkhtbSwgSSYjMzk7bSBzZWVpbmcgdGhhdCBgQ09ORklHX05URlNfUldgIGlzIGFwcGFyZW50bHkgcHJlc2VudCBpbiBzb21lIGRlZmNvbmZpZyBmaWxlcywgYnV0IGl0JiMzOTtzIGNvbnNwaWN1b3VzbHkgYWJzZW50IGZyb20gYGZzL250ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgbGVnYWN5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwZXJoYXBzIGludHJvZHVjZWQgYW5kIHRoZW4gZWl0aGVyIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIGJ1dCB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2AgZmlsZSB3YXNuJiMzOTt0IHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZXN0YWJsaXNoIGl0cyB0cnVlIHByb3ZlbmFuY2UuIEEgcXVpY2sgZGl2ZSBpbnRvIHRoZSBoaXN0b3J5IG9mIGBmcy9udGZzL0tjb25maWdgIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIg4oCTIGdpdCBibGFtZSBzaG91bGQgcmV2ZWFsIHdoZW4gYW5kIGlmIGl0IHdhcyBldmVyIGRlY2xhcmVkIHRoZXJlLiBJdCYjMzk7cyBwb3NzaWJsZSBpdCBsaXZlZCBpbiBhIGRpZmZlcmVudCBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcGFzdCwgb3IgbWF5YmUgd2FzIGludHJvZHVjZWQgdmlhIHNvbWUgbW9yZSBpbmRpcmVjdCBtZXRob2QuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhlcmUmIzM5O3MgYW4gaW5jbHVkZSBzb21ld2hlcmUgdGhhdCBpbmNsdWRlcyBhIGZpbGUgdGhhdCBkZWZpbmVzIGl0LgoKQWx0ZXJuYXRpdmVseSwgYmVmb3JlIGRpZ2dpbmcgaW50byBnaXQgaGlzdG9yeSwgYSBicm9hZGVyIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbWlnaHQgcXVpY2tseSB1bmNvdmVyIHdoZXRoZXIgYENPTkZJR19OVEZTX1JXYCBpcyAqYWN0dWFsbHkqIGRlZmluZWQgYW55d2hlcmUuIEEgc2ltcGxlIGBncmVwYCBvciBgZmluZGAgb24gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB3aGF0IEkgc3VzcGVjdCBpcyBhIGRlcHJlY2F0ZWQgb3Igb3JwaGFuZWQgY29uZmlndXJhdGlvbi4gTWlnaHQgdHVybiB1cCBhIHVzZSBjYXNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiBpdCYjMzk7cyByZWZlcmVuY2VkIG9yIHVzZWQg4oCTIGlmIG5vdCwgdGhlbiBpdCBwcm9iYWJseSBpc24mIzM5O3QgYSBjdXJyZW50IGZhY3Rvci4gSWYgdGhlIHN5bWJvbCAqaXMqIGRlZmluZWQsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXRzIGFjdHVhbCBkZWZpbml0aW9uIGlzIGxvY2F0ZWQuIFRoaXMgd2lsbCBwb2ludCBtZSB0b3dhcmRzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIE5URlMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKSG1tLCBzb21ldGhpbmcmIzM5O3MgYmVlbiByZW1vdmVkLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2Ugb2NjdXJyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgQ09ORklHX05URlNfUldgIHNldHRpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW55IGAjaWZkZWYgQ09ORklHX05URlNfUldgIGRpcmVjdGl2ZXMsIGFueXdoZXJlIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeT8gVGhpcyBjb3VsZCBiZSBhIGNsdWUuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgcmVhZC93cml0ZSBzdXBwb3J0IGhhcyBiZWVuIGNvbmRpdGlvbmFsbHkgZGlzYWJsZWQsIG9yIHBlcmhhcHMgcmVtb3ZlZCBlbnRpcmVseS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19OVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE5URlMgV3JpdGUgU3VwcG9ydCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyB3cml0ZSBzdXBwb3J0IGZvciBOVEZTIGlzIG5vdyAqdW5jb25kaXRpb25hbGx5KiBjb21waWxlZCB3aXRoaW4gYGZzL250ZnNgIOKAkyBpbnRlcmVzdGluZyEgVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byB2ZXJpZnkgYSBwYXJ0aWN1bGFyIGRldGFpbC4gTGV0JiMzOTtzIGRpdmUgaW50byBgZnMvbnRmcy9pbmRleC5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFsc28gYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEga2V5IGRhdGEgcG9pbnQgdG8ga25vdyBhcyBJIGZ1cnRoZXIgZGV2ZWxvcCB0aGUgbW9kdWxlLiBUaGlzIGNvbXBpbGF0aW9uIGNoYW5nZSBjb3VsZCBoYXZlIGEgd2lkZXNwcmVhZCBlZmZlY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQxMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZSBDcmVhdGlvbiBQYXRoKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24sIGNvbmZpcm1lZC4gVGhlIGNvcmUgZHJpdmVyIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBmcy9udGZzYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgbnRmc2AuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBudGZzX2lyX3RvX2liYCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBgbnRmc19pcl90b19pYmAgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX3JlcGFyZW50YC4gVGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGlzIGV2ZW50dWFsbHkgbGVhZHMgdXAgdG8gYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAuIEZpbmFsbHksIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYm90aCBgX19udGZzX2NyZWF0ZWAgYW5kIGBfX250ZnNfbGlua2AuCgpTbywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBib3RoIGZpbGUgKmNyZWF0aW9uKiBhbmQgdGhlICpsaW5raW5nKiBvZiBmaWxlcyBvbiBhbiBOVEZTIHZvbHVtZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgX19udGZzX2NyZWF0ZWAgaXMgYWN0dWFsbHkgY2FsbGFibGUuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSBvZiB0aGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHdoZXJlIHRoZSBwYXRjaCBpcyBsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX250ZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL25hbWVpLmMtMzkzLVxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbnRmcy9uYW1laS5jLTM5NS1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcbi0tXG5mcy9udGZzL25hbWVpLmM9NzM4PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy03NjUtXG5mcy9udGZzL25hbWVpLmM6NzY2Olx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcbmZzL250ZnMvbmFtZWkuYy03NjctXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxuZnMvbnRmcy9uYW1laS5jOjEwODU6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTEwODYtXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdXNyYywgdXNyY19sZW4sIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXHRcdFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTQ1Mz1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDg1LVx0Y2FzZSBTX0lGQkxLOlxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XHRcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXHRcdFx0XHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cdGRlZmF1bHQ6XG5mcy9udGZzL25hbWVpLmM6MTQ5MDpcdFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXG5mcy9udGZzL25hbWVpLmMtMTQ5MS1cdFx0XHRcdG1vZGUsIDAsIE5VTEwsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipGaWxlIFN5c3RlbSBPcGVyYXRpb24gUmVnaXN0cmF0aW9uKioKCkhtbSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEkgc2VlIHRoYXQgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rbm9kYCBhcmUgYWxsIGRlZmluZWQgaW4gYGZzL250ZnMvbmFtZWkuY2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgbGlua2VkIGludG8gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zPyBBcmUgdGhleSBjb3JyZWN0bHkgYXNzb2NpYXRlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlIGBpbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmU/IFRoYXQmIzM5O3MgdGhlIGtleTogYXJlIHRoZXkgY29ycmVjdGx5IGhvb2tlZCBpbj8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBhdmFpbGFibGUgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBvcGVyYXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBvcGVyYXRpb25zIGFyZSBwcm9wZXJseSBhc3NpZ25lZCB3aXRoaW4gdGhlIE5URlMgZHJpdmVyJiMzOTtzIGlub2RlIG9wZXJhdGlvbnMgc3RydWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTY4My1cdCAqIFRoaXMgY29uZGl0aW9uIGNhbiBwcmV2ZW50IG50ZnNfd3JpdGVfbXN0X2Jsb2NrKClcbmZzL250ZnMvbWZ0LmM6Njg0Olx0ICogZnJvbSBhcHBseWluZy91bmRvIGZpeHVwcyB3aGlsZSBudGZzX2NyZWF0ZSgpIGJlaW5nXG5mcy9udGZzL21mdC5jLTY4NS1cdCAqIGNhbGxlZFxuLS1cbmZzL250ZnMvbmFtZWkuYz0zMzA9c3RhdGljIGludCBudGZzX3NkX2FkZF9ldmVyeW9uZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9uYW1laS5jLTM5My1cbmZzL250ZnMvbmFtZWkuYzozOTQ6c3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMvbmFtZWkuYy0zOTUtXHRcdF9fbGUxNiAqbmFtZSwgdTggbmFtZV9sZW4sIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsXG4tLVxuZnMvbnRmcy9uYW1laS5jLTcxMC1cdCAqIEZyZWUgZXh0ZW50IE1GVCByZWNvcmRzIChzaG91bGQgbm90IGV4aXN0IGFueSB3aXRoIGN1cnJlbnRcbmZzL250ZnMvbmFtZWkuYzo3MTE6XHQgKiBudGZzX2NyZWF0ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGZvciBhbnkgY2FzZSBpZiBzb21ldGhpbmcgd2lsbCBiZVxuZnMvbnRmcy9uYW1laS5jLTcxMi1cdCAqIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkuXG4tLVxuZnMvbnRmcy9uYW1laS5jLTczNy1cbmZzL250ZnMvbmFtZWkuYzo3Mzg6c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzL25hbWVpLmMtNzM5LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuLS1cbmZzL250ZnMvbmFtZWkuYy03NjUtXG5mcy9udGZzL25hbWVpLmM6NzY2Olx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcbmZzL250ZnMvbmFtZWkuYy03NjctXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxuZnMvbnRmcy9uYW1laS5jOjEwODU6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTEwODYtXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdXNyYywgdXNyY19sZW4sIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXHRcdFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTQ1Mz1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDg1LVx0Y2FzZSBTX0lGQkxLOlxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XHRcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXHRcdFx0XHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cdGRlZmF1bHQ6XG5mcy9udGZzL25hbWVpLmM6MTQ5MDpcdFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXG5mcy9udGZzL25hbWVpLmMtMTQ5MS1cdFx0XHRcdG1vZGUsIDAsIE5VTEwsIDApO1xuLS1cbmZzL250ZnMvbmFtZWkuYz0xNTYxPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wcyA9IHtcbmZzL250ZnMvbmFtZWkuYy0xNTYyLVx0Lmxvb2t1cFx0XHQ9IG50ZnNfbG9va3VwLFx0LyogVkZTOiBMb29rdXAgZGlyZWN0b3J5LiAqL1xuZnMvbnRmcy9uYW1laS5jOjE1NjM6XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG5mcy9udGZzL25hbWVpLmMtMTU2NC1cdC51bmxpbmtcdFx0PSBudGZzX3VubGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBXcml0ZSBTdXBwb3J0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbnRmc19jcmVhdGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG50ZnNfZGlyX2lub2RlX29wc2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIE5URlMgZHJpdmVyIG5vdyBoYXMgd3JpdGUgY2FwYWJpbGl0eS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gQSBxdWljayBtZW50YWwgY2hlY2s6IGlzIGBmcy9udGZzYCBhY3R1YWxseSB0aGUgb2xkZXIgYG50ZnNgIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gQWgsIHJpZ2h0LCBgZnMvbnRmc2AgaXMgdGhlIGxlZ2FjeSBkcml2ZXIsIGFuZCBgZnMvbnRmczNgIGlzIHRoZSBhY3RpdmVseSBkZXZlbG9wZWQgb25lLiBEaWQgd3JpdGUgc3VwcG9ydCBnZXQgYmFja3BvcnRlZD8gSSBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBMZXQgbWUgdmVyaWZ5IHRoZSBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgbGluZSAxNTYxIGluIGBmcy9udGZzL25hbWVpLmNgLiBUaGF0IHNob3VsZCBjbGVhciB0aGlzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpcl9uaS1cdTAwM2VtcmVjX2xvY2spO1xuMTU1MTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4xNTUyOlx0XG4xNTUzOlx0b3V0OlxuMTU1NDpcdFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xuMTU1NTpcdFx0cmV0dXJuIGVycjtcbjE1NTY6XHR9XG4xNTU3Olx0XG4xNTU4Olx0LypcbjE1NTk6XHQgKiBJbm9kZSBvcGVyYXRpb25zIGZvciBkaXJlY3Rvcmllcy5cbjE1NjA6XHQgKi9cbjE1NjE6XHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4xNTYyOlx0XHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXHQvKiBWRlM6IExvb2t1cCBkaXJlY3RvcnkuICovXG4xNTYzOlx0XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG4xNTY0Olx0XHQudW5saW5rXHRcdD0gbnRmc191bmxpbmssXG4xNTY1Olx0XHQubWtkaXJcdFx0PSBudGZzX21rZGlyLFxuMTU2NjpcdFx0LnJtZGlyXHRcdD0gbnRmc19ybWRpcixcbjE1Njc6XHRcdC5yZW5hbWVcdFx0PSBudGZzX3JlbmFtZSxcbjE1Njg6XHRcdC5nZXRfYWNsXHQ9IG50ZnNfZ2V0X2FjbCxcbjE1Njk6XHRcdC5zZXRfYWNsXHQ9IG50ZnNfc2V0X2FjbCxcbjE1NzA6XHRcdC5saXN0eGF0dHJcdD0gbnRmc19saXN0eGF0dHIsXG4xNTcxOlx0XHQuc2V0YXR0clx0PSBudGZzX3NldGF0dHIsXG4xNTcyOlx0XHQuZ2V0YXR0clx0PSBudGZzX2dldGF0dHIsXG4xNTczOlx0XHQuc3ltbGlua1x0PSBudGZzX3N5bWxpbmssXG4xNTc0Olx0XHQubWtub2RcdFx0PSBudGZzX21rbm9kLFxuMTU3NTpcdFx0LmxpbmtcdFx0PSBudGZzX2xpbmssXG4xNTc2Olx0fTtcbjE1Nzc6XHRcbjE1Nzg6XHQvKlxuMTU3OTpcdCAqIG50ZnNfZ2V0X3BhcmVudCAtIGZpbmQgdGhlIGRlbnRyeSBvZiB0aGUgcGFyZW50IG9mIGEgZ2l2ZW4gZGlyZWN0b3J5IGRlbnRyeVxuMTU4MDpcdCAqIEBjaGlsZF9kZW50Olx0XHRkZW50cnkgb2YgdGhlIGRpcmVjdG9yeSB3aG9zZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGZpbmRcbjE1ODE6XHQgKlxuMTU4MjpcdCAqIEZpbmQgdGhlIGRlbnRyeSBmb3IgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlXG4xNTgzOlx0ICogZGVudHJ5IEBjaGlsZF9kZW50LiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuMTU4NDpcdCAqIGZzL2V4cG9ydGZzL2V4cGZzLmM6OmZpbmRfZXhwb3J0ZWRfZGVudHJ5KCkgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSB0aGVcbjE1ODU6XHQgKiBkZWZhdWx0IC1cdTAwM2VkZWNvZGVfZmgoKSB3aGljaCBpcyBleHBvcnRfZGVjb2RlX2ZoKCkgaW4gdGhlIHNhbWUgZmlsZS5cbjE1ODY6XHQgKlxuMTU4NzpcdCAqIE5vdGU6IG50ZnNfZ2V0X3BhcmVudCgpIGlzIGNhbGxlZCB3aXRoIEBkX2lub2RlKGNoaWxkX2RlbnQpLVx1MDAzZWlfbXV0ZXggZG93bi5cbjE1ODg6XHQgKlxuMTU4OTpcdCAqIFJldHVybiB0aGUgZGVudHJ5IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3Mgb3IgdGhlIGVycm9yIGNvZGUgb25cbjE1OTA6XHQgKiBlcnJvciAoSVNfRVJSKCkgaXMgdHJ1ZSkuXG4xNTkxOlx0ICovXG4xNTkyOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZF9kZW50KVxuMTU5MzpcdHtcbjE1OTQ6XHRcdHN0cnVjdCBpbm9kZSAqdmkgPSBkX2lub2RlKGNoaWxkX2RlbnQpO1xuMTU5NTpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcbjE1OTY6XHRcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xuMTU5NzpcdFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4xNTk4Olx0XHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHI7XG4xNTk5Olx0XHRzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHNlZWluZyB0aG9zZSBgZnMvbnRmc2AgZnVuY3Rpb25zIGxpa2UgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBhbmQgc28gb24sIGl0JiMzOTtzIGNsZWFyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgKmZ1bGx5IGZ1bmN0aW9uYWwqIGFuZCByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIEdvb2QuIE5vdywgdGhhdCBwYXRjaOKApiBsZXQmIzM5O3Mgc2VlLCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBpZiAoKHUzMilpICZndDsgaWJfY2FwKWAgd2l0aGluIGBudGZzX2lyX3RvX2liYC4gUmlnaHQsIHNvIGlmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGl0IGZyZWVzIGBpYmAgYW5kIHJldHVybnMgYE5VTExgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLCBpbXBhY3RpbmcgaG93IHRoZSBjb2RlIGhhbmRsZXMgaW50ZXJuYWwgYnVmZmVyIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgTlRGU19GU2AgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQ7IGl0JiMzOTtzIHRoZSBtYWluIGNvbmZpZyBmb3IgdGhlIHdob2xlIGZpbGVzeXN0ZW0uIEhtbSwgaXMgdGhhdCAqYWxsKiB0aG91Z2g/IEp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmV2aXNpdCBgZnMvbnRmcy9LY29uZmlnYC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBOTFNcbiAgIDU6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXG4gICA4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxuICAgOTpcdFxuICAxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgbnRmcy5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTlRGU19ERUJVR1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAxODpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDE5Olx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMjA6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDIxOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDIyOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAyMzpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDI0Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDI1Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMjY6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDI5Olx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDMwOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgMzM6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDM4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0MTpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XG4gIDQ0Olx0XHQgIHdpdGggbnRmczMgZHJpdmllci5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5URlMgSW5kZXhpbmcgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYE5URlNfRlNgLiBSaWdodCwgYE5URlNfRlNgICppcyogdGhlIGNvbmZpZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBudGZzX2lyX3RvX2liYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gYSBzeXNjYWxsLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJdCBsb29rcyBsaWtlIGBudGZzX2lyX3RvX2liYCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfcmVwYXJlbnRgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgbnRmc19pcl9tYWtlX3NwYWNlYC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYW5kIGZpbmFsbHkgdG8gYF9fbnRmc19jcmVhdGVgLCB3aGljaCBnZXRzIGNhbGxlZCBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtub2RgLiBTbywgdGhlcmUmIzM5O3MgYSBjbGVhciBwYXRoIGZyb20gZmlsZSBjcmVhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIGNoYWluIHRvIHRoZSBtYWluIGZ1bmN0aW9uLgoKSGFuZyBvbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRoISBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBhbHNvIGNhbGxlZCBieSBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgd2hpY2ggaXRzZWxmIGZlZWRzIGludG8gYG50ZnNfaWJfc3BsaXRgLCBhbmQgdGhlbiBmaW5hbGx5IHRvIGBudGZzX2llX2FkZGAuIEFuZCB0aGVyZSYjMzk7cyBtb3JlISBgbnRmc19pcl9tYWtlX3NwYWNlYCBnZXRzIGNhbGxlZCBieSBgbnRmc19pbmRleF9ybV9ub2RlYCwgdGhlbiBgbnRmc19paF90YWtlb3V0YCwgYW5kIGZpbmFsbHkgYnkgYG50ZnNfaW5kZXhfcmVtb3ZlYCwgd2hpY2ggaXMgbGlua2VkIHRvIGBudGZzX3VubGlua2AsIGBudGZzX3JtZGlyYCwgYW5kIGBudGZzX3JlbmFtZWAuCgpPa2F5LCBzbyB0aGlzIGBudGZzX2lyX3RvX2liYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIGJvdGggZmlsZSBjcmVhdGlvbiAqYW5kKiBmaWxlIGRlbGV0aW9uIHBhdGhzLiBUaGF0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgZW50cnlwb2ludCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBzcGVuZGluZyBzb21lIHRpbWUgb24gdGhpcy4KCkhlcmUgYXJlIHRoZSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGFuIGV5ZSBvbjogYG50ZnNfaXJfdG9faWJgLCBgbnRmc19pcl9yZXBhcmVudGAsIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBgbnRmc19pZV9hZGRgLCBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLCBgbnRmc19pbmRleF9ybV9ub2RlYCwgYG50ZnNfaWhfdGFrZW91dGAsIGFuZCBgbnRmc19pbmRleF9yZW1vdmVgLgoKTm93LCBsZXQmIzM5O3MgcGljayBhIGZldyBvZiB0aGVzZSB0byBmb2N1cyBvbiBmb3Igbm93LiBgbnRmc19pcl90b19pYmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCBgbnRmc19pcl9yZXBhcmVudGAgY2FsbHMgdGhlIGZ1bmN0aW9uLiBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyB0aGUgY2FsbGVyIG9mIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgbG9va3MgbGlrZSBgbnRmc19pZV9hZGRgIGFsc28gY2FsbHMgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIEFuZCBoZXksIGBudGZzX2luZGV4X3JtX25vZGVgIGlzIGFub3RoZXIgY2FsbGVyIG9mIGBudGZzX2lyX21ha2Vfc3BhY2VgLgoKTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYG50ZnNfaXJfdG9faWJgIGRvZXNuJiMzOTt0IGhhdmUgb3RoZXIgZGlyZWN0IGNhbGxlcnMgdG8gY29uZmlybSB0aGUgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pcl90b19pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5kZXguYz0xMDczPXN0YXRpYyBzNjQgbnRmc19pYm1fZ2V0X2ZyZWUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMTA4LVxuZnMvbnRmcy9pbmRleC5jOjExMDk6c3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG5mcy9udGZzL2luZGV4LmMtMTExMC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNDk9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI4Ni1cbmZzL250ZnMvaW5kZXguYzoxMjg3Olx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcbmZzL250ZnMvaW5kZXguYy0xMjg4LVx0aWYgKGliID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRm9jdXNpbmcgb24gTlRGUyBSZXBhcmVudGluZyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY29wZSBpcyBjbGVhcjogSSYjMzk7bSBzb2xlbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG50ZnNfaXJfcmVwYXJlbnRgIGZ1bmN0aW9uLiBObyBuZWVkIHRvIGdldCBkaXN0cmFjdGVkIGJ5IG90aGVyIHBvdGVudGlhbCBhcmVhcyBmb3Igbm93LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBTbywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbGwgdGhlICpjYWxsZXJzKiBvZiBgbnRmc19pcl9yZXBhcmVudGAuIFRoaXMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIGFuZCB0aGUgc3Vycm91bmRpbmcgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3NQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGEgYm91bmRzIGNoZWNrIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgYG50ZnNfaXJfdG9faWJgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnZlcnNpb24gb2YgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jayB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLgoKVGhpbmtpbmcgYWJvdXQgdGhlIGZpbGVzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uYWwgZmxvdywgSSBpbW1lZGlhdGVseSBzZWUgaG93IHRoaXMgaXMgcmVsZXZhbnQuIFRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBpbmRleCBibG9ja3MgYW5kIHRyaWdnZXIgdGhlIG5lZWQgdG8gbWFrZSBzcGFjZSBhcmUgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc191bmxpbmtgLCBhbmQgYG50ZnNfcm1kaXJgLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbnMsIGxpa2UgZmlsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24uIFRoZXNlIG1hbmlwdWxhdGlvbnMgdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgIOKAkyBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIGZvY3VzIHN5bWJvbHMuCgpDb25zaWRlcmluZyB0aGlzIGNvbnRleHQsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgYG50ZnNfaXJfdG9faWJgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdl4oCUYm91bmRzIGNoZWNraW5n4oCUaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoaXMgaXMgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkLiBUaGUgY29uZmlndXJhdGlvbiBgTlRGU19GU2Agc2hvdWxkIGJlIGluIGZvY3VzIGR1cmluZyB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaXJfdG9faWImIzM0OywKICAgICYjMzQ7bnRmc19pcl9yZXBhcmVudCYjMzQ7LAogICAgJiMzNDtudGZzX2lyX21ha2Vfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgbnRmc19pcl90b19pYmAgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24gd2hlbiBjb252ZXJ0aW5nIGFuIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYmxvY2suIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGR1cmluZyBkaXJlY3RvcnkgaW5kZXggbWFuaXB1bGF0aW9ucywgc3VjaCBhcyBmaWxlIGNyZWF0aW9uIChgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmApIG9yIGRlbGV0aW9uIChgbnRmc191bmxpbmtgLCBgbnRmc19ybWRpcmApLCB3aGljaCB0cmlnZ2VyIGBudGZzX2lyX21ha2Vfc3BhY2VgIGFuZCBgbnRmc19pcl9yZXBhcmVudGAuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDYuNDc2NTYyOTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDQxODM0MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2lyX3RvX2liXCIsXG4gICAgXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gICAgXCJudGZzX2lyX21ha2Vfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBudGZzX2lyX3RvX2liYCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciwgcHJldmVudGluZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Mgb3IgY29ycnVwdGlvbiB3aGVuIGNvbnZlcnRpbmcgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jay4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIGRpcmVjdG9yeSBpbmRleCBtYW5pcHVsYXRpb25zLCBzdWNoIGFzIGZpbGUgY3JlYXRpb24gKGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCkgb3IgZGVsZXRpb24gKGBudGZzX3VubGlua2AsIGBudGZzX3JtZGlyYCksIHdoaWNoIHRyaWdnZXIgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYW5kIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDYuNDc2NTY4NDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI5OTcyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjU1NDg0ZDA5MjBlYzFiODU5NjgzYjFjMzM3OWM2ODU3YTNmNzUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjA1OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xcbmluZGV4IGZhYTdlZTkyMGEzYWQwLi41Mjk2OTdiNTg5MWU1MCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2luZGV4LmNcXG4rKysgYi9mcy9udGZzL2luZGV4LmNcXG5AQCAtMTExMiw2ICsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXFxuIFxcdHN0cnVjdCBpbmRleF9lbnRyeSAqaWVfbGFzdDtcXG4gXFx0Y2hhciAqaWVzX3N0YXJ0LCAqaWVzX2VuZDtcXG4gXFx0aW50IGk7XFxuK1xcdHUzMiBpYl9jYXA7XFxuIFxcbiBcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZ1xcXFxuXFxcIik7XFxuIFxcbkBAIC0xMTI3LDYgKzExMjgsMTUgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXFxuIFxcdCAqIGFzIHdlbGwsIHdoaWNoIGNhbiBuZXZlciBoYXZlIGFueSBkYXRhLlxcbiBcXHQgKi9cXG4gXFx0aSA9IChjaGFyICopaWVfbGFzdCAtIGllc19zdGFydCArIGxlMTZfdG9fY3B1KGllX2xhc3QtXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHQvKiBFbnRyaWVzIG11c3QgZml0IGluIHRoZSBhbGxvY2F0ZWQgaW5kZXggYmxvY2sgKi9cXG4rXFx0aWJfY2FwID0gbGUzMl90b19jcHUoaWItXFx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxcbitcXHRcXHQtIGxlMzJfdG9fY3B1KGliLVxcdTAwM2VpbmRleC5lbnRyaWVzX29mZnNldCk7XFxuK1xcdGlmICgodTMyKWkgXFx1MDAzZSBpYl9jYXApIHtcXG4rXFx0XFx0a3ZmcmVlKGliKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcXHUwMDI2aWItXFx1MDAzZWluZGV4KSwgaWVzX3N0YXJ0LCBpKTtcXG4gXFxuIFxcdGliLVxcdTAwM2VpbmRleC5mbGFncyA9IGlyLVxcdTAwM2VpbmRleC5mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDcuMDMwMjc0ODA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTE4ODgxMTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaXJfdG9faWJcIixcbiAgICBcIm50ZnNfaXJfcmVwYXJlbnRcIixcbiAgICBcIm50ZnNfaXJfbWFrZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmNTU0ODRkMDkyMGVjMWI4NTk2ODNiMWMzMzc5YzY4NTdhM2Y3NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNDowNTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xuaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbmRleC5jXG4rKysgYi9mcy9udGZzL2luZGV4LmNcbkBAIC0xMTEyLDYgKzExMTIsNyBAQCBzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcbiBcdHN0cnVjdCBpbmRleF9lbnRyeSAqaWVfbGFzdDtcbiBcdGNoYXIgKmllc19zdGFydCwgKmllc19lbmQ7XG4gXHRpbnQgaTtcbitcdHUzMiBpYl9jYXA7XG4gXG4gXHRudGZzX2RlYnVnKFwiRW50ZXJpbmdcXG5cIik7XG4gXG5AQCAtMTEyNyw2ICsxMTI4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgaW5kZXhfYmxvY2sgKm50ZnNfaXJfdG9faWIoc3RydWN0IGluZGV4X3Jvb3QgKmlyLCBzNjQgaWJfdmNuKVxuIFx0ICogYXMgd2VsbCwgd2hpY2ggY2FuIG5ldmVyIGhhdmUgYW55IGRhdGEuXG4gXHQgKi9cbiBcdGkgPSAoY2hhciAqKWllX2xhc3QgLSBpZXNfc3RhcnQgKyBsZTE2X3RvX2NwdShpZV9sYXN0LVx1MDAzZWxlbmd0aCk7XG4rXG4rXHQvKiBFbnRyaWVzIG11c3QgZml0IGluIHRoZSBhbGxvY2F0ZWQgaW5kZXggYmxvY2sgKi9cbitcdGliX2NhcCA9IGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxuK1x0XHQtIGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmVudHJpZXNfb2Zmc2V0KTtcbitcdGlmICgodTMyKWkgXHUwMDNlIGliX2NhcCkge1xuK1x0XHRrdmZyZWUoaWIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcdTAwMjZpYi1cdTAwM2VpbmRleCksIGllc19zdGFydCwgaSk7XG4gXG4gXHRpYi1cdTAwM2VpbmRleC5mbGFncyA9IGlyLVx1MDAzZWluZGV4LmZsYWdzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDcuMDMwMjc2MzM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxMTk2MDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOVEZTIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL2luZGV4LmNgIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIGBudGZzX2lyX3RvX2liYDogYGlmICgodTMyKWkgXHUwMDNlIGliX2NhcClgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBgaWJgIGdldHMgZnJlZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOVUxMYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKj8gQW5kIHdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGU/XCJcblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG50ZnNfaXJfdG9faWJgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSBpdCdzIGNhbGxlZCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AgYW5kIHBvdGVudGlhbGx5IGJleW9uZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgY2hlY2sgaXMgYSBsZWdpdGltYXRlIGltcHJvdmVtZW50IG9yIHBvdGVudGlhbGx5IGludHJvZHVjZXMgYSBuZXcgZWRnZSBjYXNlLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaGFuZGxlIHRoZSBwb3RlbnRpYWwgYE5VTExgIHJldHVybiB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NTEuNDQyMjM4OTM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU1NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaXJfdG9faWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTEwNzM9c3RhdGljIHM2NCBudGZzX2libV9nZXRfZnJlZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTEwOC1cXG5mcy9udGZzL2luZGV4LmM6MTEwOTpzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcXG5mcy9udGZzL2luZGV4LmMtMTExMC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTI0OT1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyODYtXFxuZnMvbnRmcy9pbmRleC5jOjEyODc6XFx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcXG5mcy9udGZzL2luZGV4LmMtMTI4OC1cXHRpZiAoaWIgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNTo1MS41MDE4OTk1ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAzNzMyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEluZGV4IFJvb3QgdG8gSW5kZXggQnVmZmVyIFJlcGFyZW50aW5nIExvZ2ljKipcblxuUmlnaHQsIGBudGZzX2lyX3RvX2liYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX3JlcGFyZW50YC4gT2theSwgbWFrZXMgc2Vuc2UuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGEgcmVwYXJlbnRpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBOVEZTIGluZGV4IHN0cnVjdHVyZSBhbmQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgb3IgbWlncmF0aW5nIGRhdGEgZnJvbSB0aGUgaW5kZXggcm9vdCB0byBhbiBpbmRleCBidWZmZXIuIFNvLCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBXaGVyZSAqZXhhY3RseSogaXMgYG50ZnNfaXJfcmVwYXJlbnRgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIGNhbGwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHRyaWdnZXJzIHRoYXQgbGVhZCB0byB0aGlzIHNwZWNpZmljIGluZGV4IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA1OjU0LjgwNTYzNDQxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM2NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA1OjU0Ljg2NDAwNjI2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDE4MjM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgbWluZCdzIHdvcmtpbmcgdGhyb3VnaCB0aGlzLi4uXG5cbioqVHJhY2luZyB0aGUgTlRGUyBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKipcblxuUmlnaHQsIGBudGZzX2lyX3JlcGFyZW50YCBpcyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGF0J3MgYSBrZXkgcmVsYXRpb25zaGlwIHRvIHVuZGVyc3RhbmQuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSBpcyBgbnRmc19pcl9tYWtlX3NwYWNlYCBiZWluZyBpbnZva2VkPyBGaW5kaW5nIHRoZSB1cHN0cmVhbSBjYWxscyB0byBgbnRmc19pcl9tYWtlX3NwYWNlYCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgcmVwYXJlbnRpbmcgb3BlcmF0aW9uIGlzIGhhcHBlbmluZy4gSXQncyBhbGwgYWJvdXQgZm9sbG93aW5nIHRoZSBkYXRhIGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdG8gZmlndXJlIG91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgZ2l2ZXMgbWUgdGhlIGJlc3QgY29udGV4dCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNTo1Ny45NjU4MzI1MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3MjU4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pcl9tYWtlX3NwYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMzc4PXN0YXRpYyBpbnQgbnRmc19pcl90cnVuY2F0ZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQxNC0vKlxcbmZzL250ZnMvaW5kZXguYzoxNDE1OiAqIG50ZnNfaXJfbWFrZV9zcGFjZSAtIE1ha2UgbW9yZSBzcGFjZSBmb3IgdGhlIGluZGV4IHJvb3QgYXR0cmlidXRlXFxuZnMvbnRmcy9pbmRleC5jLTE0MTYtICogQGljeDogaW5kZXggY29udGV4dFxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MTgtICovXFxuZnMvbnRmcy9pbmRleC5jOjE0MTk6c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbmZzL250ZnMvaW5kZXguYy0xNDIwLXtcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNDkzPXN0YXRpYyBpbnQgbnRmc19pcl9pbnNlcnRfbWVkaWFuKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICptZWRpYW4sXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTUwOS1cXG5mcy9udGZzL2luZGV4LmM6MTUxMDpcXHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE1MTEtXFx0aWYgKHJldClcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNjQ2PWludCBudGZzX2llX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9lbnRyeSAqaWUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTY3OS1cXHRcXHRpZiAoaWN4LVxcdTAwM2Vpc19pbl9yb290KVxcbmZzL250ZnMvaW5kZXguYzoxNjgwOlxcdFxcdFxcdHJldCA9IG50ZnNfaXJfbWFrZV9zcGFjZShpY3gsIG5ld19zaXplKTtcXG5mcy9udGZzL2luZGV4LmMtMTY4MS1cXHRcXHRlbHNlXFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTg4Mj1zdGF0aWMgaW50IG50ZnNfaW5kZXhfcm1fbm9kZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTk1MS1cXHRcXHRpZiAoaWN4LVxcdTAwM2Vpc19pbl9yb290KSB7XFxuZnMvbnRmcy9pbmRleC5jOjE5NTI6XFx0XFx0XFx0cmV0ID0gbnRmc19pcl9tYWtlX3NwYWNlKGljeCwgbmV3X3NpemUpO1xcbmZzL250ZnMvaW5kZXguYy0xOTUzLVxcdFxcdFxcdGlmIChyZXQgIT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NTguMDI0NTY0ODc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NjEwNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBJbmRleCBPcGVyYXRpb25zKipcblxuT2theSwgc28gYG50ZnNfaXJfbWFrZV9zcGFjZWAgaXMgdXNlZCBpbiBhIGZldyBrZXkgTlRGUyBpbmRleCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgYG50ZnNfaWVfYWRkYCwgYW5kIGBudGZzX2luZGV4X3JtX25vZGVgLiBUaGF0J3MgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgaW5kZXggaW1wbGVtZW50YXRpb24sIGNhcnZpbmcgb3V0IHNwYWNlIGZvciBuZXcgZW50cmllcywgcmlnaHQ/IEdpdmVuIHRoZSBuYW1lcywgdGhlc2Ugc2VlbSBsaWtlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgZm9yIG1haW50YWluaW5nIHRoZSBpbmRleCBzdHJ1Y3R1cmUgd2l0aGluIE5URlMuIElmIHRoZSBjb2RlJ3MgdGhlcmUsIHRoZW4gaXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGlmIE5URlMgaXMgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIE5URlMgaXMgZW5hYmxlZCwgcmlnaHQ/IFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgYW5kIGNvbmZpcm0gTlRGUyBpcyBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjAzLjQ3MDY3MjUwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5OTY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXFxuLS1cXG5mcy9udGZzL0tjb25maWctMzQtXFxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjowMy41Mjk2NzQ5OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk4ODc1Nzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IEJ1dCBJIG5lZWQgdG8gbmFpbCBkb3duIHdoZXRoZXIgdGhpcyBzaW5nbGUgb3B0aW9uIGVuY29tcGFzc2VzIHRoZSB3aG9sZSBmaWxlIHN5c3RlbSBzZXR1cCwgb3IgaWYgdGhlcmUncyBhIHNlcGFyYXRlIGZsYWcgc3BlY2lmaWNhbGx5IGZvciBlbmFibGluZyB3cml0ZSBzdXBwb3J0LiBJdCdzIGEga2V5IGRpc3RpbmN0aW9uLlxuXG5UaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGF0ZWQgYnVpbGQgZmxhZ3MsIGFuZCB0aGUgYW5zd2VyIHRvIG15IGNydWNpYWwgcXVlc3Rpb24uIERpZ2dpbmcgaW4gdGhlcmUgc2hvdWxkIGNsYXJpZnkgaWYgYE5URlNfRlNgIGNvbnRyb2xzIHJlYWQtb25seSAqYW5kKiB3cml0ZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCdzIG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoxMi41MTg0MzUwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5URlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNTpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxcbiAgIDg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDExOlxcdFxcdCAgbnRmcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5URlNfREVCVUdcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5URlMgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxcbiAgMTg6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXFxuICAxOTpcXHRcXHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cXG4gIDIwOlxcdFxcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXFxuICAyMTpcXHRcXHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXFxuICAyMjpcXHRcXHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxcbiAgMjM6XFx0XFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXFxuICAyNDpcXHRcXHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XFxuICAyNTpcXHRcXHQgIGVjaG8gMSBcXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXFxuICAyNjpcXHRcXHQgIFJlcGxhY2luZyB0aGUgXFxcIjFcXFwiIHdpdGggXFxcIjBcXFwiIHdvdWxkIGRpc2FibGUgZGVidWcgbWVzc2FnZXMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxcbiAgMjk6XFx0XFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxcbiAgMzA6XFx0XFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcXG4gIDMzOlxcdFxcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuICAzNjpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAzODpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xcbiAgNDE6XFx0XFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIEFDTCBzdXBwb3J0IGZvciBudGZzLCBwcm92aWRpbmcgZnVuY3Rpb25hbCBwYXJpdHlcXG4gIDQ0OlxcdFxcdCAgd2l0aCBudGZzMyBkcml2aWVyLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoxMi41MTg1MDI4MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzA5ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDaGVja2luZyBmb3IgTlRGU19SVyBDb25maWd1cmF0aW9uKipcblxuSG1tLCBub3cgdGhhdCBJJ20gY29uc2lkZXJpbmcgdGhpcywgYSBkZXRhaWwgaXMgbmFnZ2luZyBhdCBtZS4gV2Fzbid0IHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZvciBOVEZTIHJlYWQvd3JpdGUgZnVuY3Rpb25hbGl0eSB0aGF0IEkgbmVlZCB0byBjaGVjaz8gWWVzLCBub3cgSSByZW1lbWJlciwgSSB0aGluayBpdCdzIGNhbGxlZCBgTlRGU19SV2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV4aXN0cyBhbmQgaXMgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiBpcyBpbnRlbmRlZCB0byBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MTYuNTQxNjAzNDQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE1NzUwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MTYuNjAyNzcxNTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzQzMDY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gRGlkIEkganVzdCByZWFkIHRoYXQgYE5URlNfUldgIHdhcyByZW1vdmVkPyBUaGF0IGRvZXNuJ3Qgc291bmQgcmlnaHQuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYGZzL250ZnMvS2NvbmZpZ2AuIFJpZ2h0LCBoZXJlIHdlIGdvLi4uIEhtbSwgaXQgZG9lcyBzZWVtIHRvIGJlIG1pc3NpbmcuIE9rYXksIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgaXQuIExldCdzIG5vdCBhc3N1bWUgSSBrbm93IHRoZSBmaWxlIGNvbnRlbnRzLCBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBlbnRpcmUgYGZzL250ZnMvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHN1YnRsZXR5IG9yIHJlbG9jYXRpb24gSSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoyNC4wMzcwODA3MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMzAsIkVycm9yIjoiZmlsZSBmcy9udGZzL0tjb25maWcgZG9lcyBub3QgaGF2ZSBsaW5lIDQ5LCBpdCBoYXMgb25seSA0OCBsaW5lcyIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgZnMvbnRmcy9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA0OSwgaXQgaGFzIG9ubHkgNDggbGluZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MjQuMDM3MTUzMjUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc0Nzc3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKlxuXG5SaWdodCwgc28gSSByZW1lbWJlciBoZWFyaW5nIHNvbWV0aGluZyBhYm91dCBgTlRGU19SV2AgYmVpbmcgZGVwcmVjYXRlZCBvciByZW1vdmVkIHJlY2VudGx5LCBtYXliZSBhcm91bmQgMjAyND8gSSBjYW4ndCBxdWl0ZSByZWNhbGwgdGhlIGV4YWN0IGRldGFpbHMuIFdhcyBpdCBiZWNhdXNlIGBudGZzM2AgYmVjYW1lIHRoZSBuZXcgZGVmYXVsdD8gT3IgbWF5YmUgYG50ZnNgIGl0c2VsZiBpcyBub3cgcmVhZC1vbmx5IGJ5IGRlZmF1bHQsIGFuZCB0aGV5IHNwZWNpZmljYWxseSBwdWxsZWQgb3V0IHRoZSB3cml0ZSBzdXBwb3J0PyBJdCdzIGFsbCBhIGJpdCBoYXp5LiBIb2xkIG9uLCB3YXNuJ3QgSSBsb29raW5nIGF0IHNvbWUgYG50ZnNfaXJfcmVwYXJlbnRgIGNhbGxzIHJlY2VudGx5PyBBaCB5ZXMsIHRoYXTigJlzIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBudGZzX2llX2FkZGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdyaXRlIG9wZXJhdGlvbnMhIElmIHRoZXnigJlyZSBzdGlsbCB0aGVyZSB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhlIHdyaXRlIGNvZGUgaGFzbid0IGJlZW4gcmVtb3ZlZCwgYnV0IGhhcyBqdXN0IGNoYW5nZWQuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgb3V0IG1vcmUgaXMgcHJvYmFibHkgaW4gYGZzL250ZnMvaW5kZXguY2AuIFRpbWUgdG8gc2VlIGlmIHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBwcmVzZW50IHdpdGhpbiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoyOC4yMjQ2MzI5MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzMxMTk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MjguMjkxOTcxNzU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDQxODE1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQ2hlY2tpbmcgdGhlIEJ1aWxkIFN0YXR1cyBvZiBgbnRmc19pcl9yZXBhcmVudGAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCByZWFkeSB0byBnby4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGVsc2UsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyB3aXNlLiBJIHdhbnQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzaW1wbHkgc3RlbSBmcm9tIGEgbWlzc2luZyBvciBvdXRkYXRlZCBjb21waWxhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBsaW5rZXIgd2lsbCBmaW5kIGl0LCBvciB3aGV0aGVyIEkgbmVlZCB0byByZXZpc2l0IHRoZSBidWlsZCBzY3JpcHRzLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBJIG9mdGVuIG92ZXJsb29rIGluIHRoZSBoZWF0IG9mIGNvZGluZywgc28gSSdtIG1ha2luZyBpdCBhIHByaW9yaXR5IHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjMxLjIzNjE1NTQ5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3MjM3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pcl9yZXBhcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xMjQ4LVxcbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuZnMvbnRmcy9pbmRleC5jLTEyNTAte1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MjYtXFx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XFxuZnMvbnRmcy9pbmRleC5jOjE0Mjc6XFx0XFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xcbmZzL250ZnMvaW5kZXguYy0xNDI4LVxcdFxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjozMS4zMzM4ODQ4NDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDAzNzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBmcy9udGZzL2luZGV4LmNgKipcblxuUmlnaHQsIHNvIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhcHBhcmVudGx5IGRlZmluZWQgd2l0aGluIGBmcy9udGZzL2luZGV4LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBpcyB0aGlzIGZpbGUgZXZlbiBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlIG9yIGltYWdlIEknbSB3b3JraW5nIHdpdGg/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgaW5jbHVkZWQgYW5kIGF2YWlsYWJsZS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGlmIHRoYXQgc3BlY2lmaWMgZmlsZSwgYGZzL250ZnMvaW5kZXguY2AsIGlzIGFjdHVhbGx5IHBhcnQgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgbmV4dCBzdGVwOyBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MzQuNzczOTI0OTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NzM1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5kZXhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG5mcy9udGZzL01ha2VmaWxlLTQtXFxuZnMvbnRmcy9NYWtlZmlsZTo1Om50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGUtNi1cXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MzUuMDEyNzA0MzQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDgzODI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyBgaW5kZXgub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIHN0cnVjdHVyZXMuIExldCdzIHNlZS4uLiBJcyB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGFjY2Vzc2libGU/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBSaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgbnRmc19pcl9yZXBhcmVudGAuIEFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG50ZnNfaXJfbWFrZV9zcGFjZWAuIE9rYXksIHRoYXQncyBzdGFydGluZyB0byBwYWludCB0aGUgb3V0bGluZSBvZiB0aGUgY2FsbCBzdGFjay4uLiBBbmQsIGZpbmFsbHksIGBudGZzX2lyX21ha2Vfc3BhY2VgIGlzIGNhbGxlZCBmcm9tIGBudGZzX2llX2FkZGAuIFxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBudGZzX2llX2FkZGAgaXMgdXNlZC4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGl0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjQyLjE2MTA4OTI5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMzM1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MzktICovXFxuZnMvbnRmcy9pbmRleC5jOjE0NDA6c3RhdGljIGludCBudGZzX2llX2FkZF92Y24oc3RydWN0IGluZGV4X2VudHJ5ICoqaWUpXFxuZnMvbnRmcy9pbmRleC5jLTE0NDEte1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTE0NTQ9c3RhdGljIGludCBudGZzX2loX2luc2VydChzdHJ1Y3QgaW5kZXhfaGVhZGVyICppaCwgc3RydWN0IGluZGV4X2VudHJ5ICpvcmlnX2llLCBzNjQgbmV3X3ZjbixcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xNDY2LVxcdGlmICghKGllLVxcdTAwM2VmbGFncyBcXHUwMDI2IElOREVYX0VOVFJZX05PREUpKSB7XFxuZnMvbnRmcy9pbmRleC5jOjE0Njc6XFx0XFx0cmV0ID0gbnRmc19pZV9hZGRfdmNuKFxcdTAwMjZpZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE0NjgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNTc0PXN0YXRpYyBpbnQgbnRmc19pYl9zcGxpdChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9ibG9jayAqaWIpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTY0NS1cXG5mcy9udGZzL2luZGV4LmM6MTY0NjppbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxcbmZzL250ZnMvaW5kZXguYy0xNjQ3LXtcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNzA0PWludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE3MzUtXFxuZnMvbnRmcy9pbmRleC5jOjE3MzY6XFx0ZXJyID0gbnRmc19pZV9hZGQoaWN4LCBpZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE3MzctXFx0bnRmc19pbmRleF9jdHhfcHV0KGljeCk7XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTc0Mz1zdGF0aWMgaW50IG50ZnNfaWhfdGFrZW91dChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9oZWFkZXIgKmloLFxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE3ODAtXFxuZnMvbnRmcy9pbmRleC5jOjE3ODE6XFx0cmV0ID0gbnRmc19pZV9hZGQoaWN4LCBpZV9yb2FtKTtcXG5mcy9udGZzL2luZGV4LmMtMTc4Mi1vdXQ6XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTg4Mj1zdGF0aWMgaW50IG50ZnNfaW5kZXhfcm1fbm9kZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTkzNi1cXG5mcy9udGZzL2luZGV4LmM6MTkzNzpcXHRyZXQgPSBudGZzX2llX2FkZF92Y24oXFx1MDAyNmllKTtcXG5mcy9udGZzL2luZGV4LmMtMTkzOC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5oPTExNT12b2lkIG50ZnNfaW5kZXhfY3R4X3JlaW5pdChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpO1xcbmZzL250ZnMvaW5kZXguaDoxMTY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSk7XFxuZnMvbnRmcy9pbmRleC5oLTExNy1pbnQgbnRmc19pY3hfaWJfc3luY193cml0ZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpO1xcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmM9NDgwPXN0YXRpYyBpbnQgc2V0X3JlcGFyc2VfaW5kZXgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcXG4tLVxcbmZzL250ZnMvcmVwYXJzZS5jLTUwMi1cXG5mcy9udGZzL3JlcGFyc2UuYzo1MDM6XFx0cmV0dXJuIG50ZnNfaWVfYWRkKHhyLCAoc3RydWN0IGluZGV4X2VudHJ5ICopXFx1MDAyNmluZHgpO1xcbmZzL250ZnMvcmVwYXJzZS5jLTUwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjQyLjIyODIzMDIxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMzNjAxODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB3aGVuIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgZXZlbiBqdXN0IHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHN0YXRpYyBhbmFseXNpcywgdXNpbmcgYGdyZXBgIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYnJvd3NlciwgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgIGlzIHJlZmVyZW5jZWQuXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBzb3J0IHRocm91Z2ggdGhlIHJlc3VsdHMuIEknbSBsb29raW5nIGZvciB0aGUgKmRpcmVjdCogY2FsbGVycywgbm90IGp1c3QgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZXZlbnR1YWxseSBjYWxsIGl0LiBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQ7IGlzIGl0IGNhbGxlZCB3aXRoaW4gYW4gYGlmYCBibG9jaywgYSBsb29wLCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBpbiBwbGF5PyBLbm93aW5nIHRoZSBjb25kaXRpb25zIGFyb3VuZCB0aGUgY2FsbCB3aWxsIGJlIGp1c3QgYXMgaW1wb3J0YW50IGFzIGtub3dpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsIGl0c2VsZi5cblxuSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnB1cnBvc2UqIG9mIHRoZSBjYWxsZXIuIFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBpbnZva2VzIHRoaXMgZnVuY3Rpb24/IElzIGl0IGFkZGluZyBhIG5ldyBmaWxlLCByZW5hbWluZyBhbiBleGlzdGluZyBvbmUsIG9yIHVwZGF0aW5nIGFuIGluZGV4IGVudHJ5PyBUaGUgY2FsbGVyJ3MgaW50ZW50IHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBiZWhhdmlvciBvZiBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLiBBcmUgd2UgaW4gdGhlIG1ldGFkYXRhIHVwZGF0ZXMgb3IgYXJlIHdlIHN0aWxsIGluIHRoZSBpbmRleGluZyBpdHNlbGY/XG5cbklmIHN0YXRpYyBhbmFseXNpcyBkb2Vzbid0IGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIGRlYnVnZ2VyIHdpbGwgYmUgbmV4dC4gSSdsbCBzZXQgYSBicmVha3BvaW50IGF0IHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgZnVuY3Rpb24gYW5kIHN0ZXAgYmFja3dhcmQgdGhyb3VnaCB0aGUgY2FsbCBzdGFjay4gVGhpcyB3aWxsIHJldmVhbCB0aGUgZHluYW1pYyBleGVjdXRpb24gcGF0aCwgc2hvd2luZyBtZSBleGFjdGx5IHdoaWNoIGZ1bmN0aW9uIHNlcXVlbmNlcyBsZWFkIHRvIHRoZSBjYWxsIGFuZCB0aGUgdmFsdWVzIG9mIGFueSBjcml0aWNhbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgcmV2ZWFsaW5nIHRoZSBjb250ZXh0LiBJ4oCZbGwgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWVzLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGluZm9ybWF0aW9uLlxuXG5UaGUgZW5kIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGVjdXRpb24gcGF0aCwgZnJvbSB0aGUgb3JpZ2luYXRpbmcgZnVuY3Rpb24gYWxsIHRoZSB3YXkgdG8gYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQgZXhhY3RseSBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo0Ni43NjE4MzQ0MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjMzNTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luZGV4X2FkZF9maWxlbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE2OTgtLypcXG5mcy9udGZzL2luZGV4LmM6MTY5OTogKiBudGZzX2luZGV4X2FkZF9maWxlbmFtZSAtIGFkZCBmaWxlbmFtZSB0byBkaXJlY3RvcnkgaW5kZXhcXG5mcy9udGZzL2luZGV4LmMtMTcwMC0gKiBAbmk6XFx0XFx0bnRmcyBpbm9kZSBkZXNjcmliaW5nIGRpcmVjdG9yeSB0byB3aGljaCBpbmRleCBhZGQgZmlsZW5hbWVcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xNzAzLSAqL1xcbmZzL250ZnMvaW5kZXguYzoxNzA0OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxcbmZzL250ZnMvaW5kZXguYy0xNzA1LXtcXG4tLVxcbmZzL250ZnMvaW5kZXguaD0xMDg9dm9pZCBudGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN0eCk7XFxuZnMvbnRmcy9pbmRleC5oOjEwOTppbnQgbnRmc19pbmRleF9hZGRfZmlsZW5hbWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuLCB1NjQgbXJlZik7XFxuZnMvbnRmcy9pbmRleC5oLTExMC1pbnQgbnRmc19pbmRleF9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB2b2lkICprZXksIGNvbnN0IHUzMiBrZXlsZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTY3Ny1cXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbmRleC4gKi9cXG5mcy9udGZzL25hbWVpLmM6Njc4OlxcdGVyciA9IG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lKGRpcl9uaSwgZm4sIGNoaWxkX21mdF9yZWYpO1xcbmZzL250ZnMvbmFtZWkuYy02NzktXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTExNDk9c3RhdGljIGludCBfX250ZnNfbGluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTIxNi1cXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbmRleC4gKi9cXG5mcy9udGZzL25hbWVpLmM6MTIxNzpcXHRlcnIgPSBudGZzX2luZGV4X2FkZF9maWxlbmFtZShkaXJfbmksIGZuLCBNS19NUkVGKG5pLVxcdTAwM2VtZnRfbm8sXFxuZnMvbnRmcy9uYW1laS5jLTEyMTgtXFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUobmlfbXJlYy1cXHUwMDNlc2VxdWVuY2VfbnVtYmVyKSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo0Ni45NzgxNzU4NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NTU5MDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVEZTIE1vZHVsZSBDb21waWxhdGlvbiBhbmQgV3JpdGUgU3VwcG9ydCAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgX19udGZzX2NyZWF0ZWAgYW5kIGBfX250ZnNfbGlua2AgYXJlIGRlZmluaXRlbHkgZGVmaW5lZCB3aXRoaW4gYGZzL250ZnMvbmFtZWkuY2AuXCIgVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBmcy9udGZzL25hbWVpLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBzY2FuIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJldmVhbHMgdGhhdCwgeWVzLCBpdCdzIGluY2x1ZGVkIHVuZGVyIHRoZSBgbnRmcy15YCBkaXJlY3RpdmUuIEV4Y2VsbGVudCwgc28gZmFyIHNvIGdvb2QuXG5cbk5vdywgdGhpcyByYWlzZXMgYSBxdWVzdGlvbjogZG9lcyB0aGUgYGZzL250ZnNgIG1vZHVsZSAqc3VwcG9ydCogd3JpdGUgb3BlcmF0aW9ucz8gSSBoYWQgYSBmbGVldGluZyBtZW1vcnkgb2YgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IEkgY291bGRuJ3QgcXVpdGUgcGxhY2UgaXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBBaCwgeWVzLCBJIHJlY2FsbCBub3c6IGBOVEZTX1JXYC4gSXQncyBhbGwgY29taW5nIGJhY2sgdG8gbWUuIExldCBtZSBnbyBiYWNrIGFuZCBnaXZlIGl0IGFub3RoZXIgb25jZS1vdmVyLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6NTYuNDYzNzY5MTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU1ODczOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjU2LjUzNzMzOTI5MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MDIyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipIdW50aW5nIERvd24gUmVhZC9Xcml0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHJlYWQvd3JpdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIE5URlMgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QgdGhlcmUuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgYGNvbmZpZ2Agb3B0aW9uIG9yIHNvbWUgb3RoZXIgdmFyaWFibGUgdGhhdCBJIGNhbiB0d2VhaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19OVEZTX1JXYCwgb3IgYSByZWxhdGVkIHN5bWJvbC4gVGltZSB0byBjaGVjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgxNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjU5LjUyNjM2NDA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDkzNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2xheW91dC5oPTE3NTI9c3RydWN0IHNkaF9pbmRleF9rZXkge1xcbi0tXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzY2LSAqIFZPTFVNRV9NT1VOVEVEX09OX05UNDogICAgICAgICAgTW91bnRlZCBvbiBOVDQgKGNvbXBhdGliaWxpdHkgZmxhZykuXFxuZnMvbnRmcy9sYXlvdXQuaDoxNzY3OiAqIFZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZOiAgICAgVVNOIGpvdXJuYWwgZGVsZXRpb24gaW4gcHJvZ3Jlc3MuXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzY4LSAqIFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEOiAgICAgICAgUmVwYWlyICRPYmpJZCBvbiBuZXh0IG1vdW50LlxcbmZzL250ZnMvbGF5b3V0Lmg6MTc2OTogKiBWT0xVTUVfQ0hLRFNLX1VOREVSV0FZOiAgICAgICAgIENoa2RzayBpcyBydW5uaW5nLlxcbmZzL250ZnMvbGF5b3V0LmgtMTc3MC0gKiBWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLOiAgICAgIE1vZGlmaWVkIGJ5IGNoa2Rzay5cXG4tLVxcbmZzL250ZnMvbGF5b3V0Lmg9MTc3NT1lbnVtIHtcXG4tLVxcbmZzL250ZnMvbGF5b3V0LmgtMTc4MC1cXG5mcy9udGZzL2xheW91dC5oOjE3ODE6XFx0Vk9MVU1FX0RFTEVURV9VU05fVU5ERVJXQVlcXHQ9IGNwdV90b19sZTE2KDB4MDAxMCksXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzgyLVxcdFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEXFx0XFx0PSBjcHVfdG9fbGUxNigweDAwMjApLFxcbmZzL250ZnMvbGF5b3V0LmgtMTc4My1cXG5mcy9udGZzL2xheW91dC5oOjE3ODQ6XFx0Vk9MVU1FX0NIS0RTS19VTkRFUldBWVxcdFxcdD0gY3B1X3RvX2xlMTYoMHg0MDAwKSxcXG5mcy9udGZzL2xheW91dC5oLTE3ODUtXFx0Vk9MVU1FX01PRElGSUVEX0JZX0NIS0RTS1xcdD0gY3B1X3RvX2xlMTYoMHg4MDAwKSxcXG4tLVxcbmZzL250ZnMvbGF5b3V0LmgtMTc5Ny0gKiBAbWlub3JfdmVyOiAgICAgIE1pbm9yIE5URlMgdmVyc2lvbiBudW1iZXIgKGUuZy4sIDEgZm9yIE5URlMgMy4xKS5cXG5mcy9udGZzL2xheW91dC5oOjE3OTg6ICogQGZsYWdzOiAgICAgICAgICBWb2x1bWUgZmxhZ3MgKFZPTFVNRV9JU19ESVJUWSwgVk9MVU1FX0NIS0RTS19VTkRFUldBWSwgZXRjLikuXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzk5LSAqICAgICAgICAgICAgICAgICAgU2VlIHZvbHVtZSBmbGFncyBlbnVtIGZvciBkZXRhaWxzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo1OS41OTEzMDU1NTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDI3ODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkZpbGUgU3lzdGVtIElucXVpcnkqKlxuXG5IbW0sIEknbSBjdXJyZW50bHkgbG9va2luZyBpbnRvIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeSwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEFtIEkgb3Zlcmxvb2tpbmcgYSBwb3RlbnRpYWxseSBtb3JlIHJlY2VudCwgaW1wcm92ZWQgdmVyc2lvbj8gTXkgaW50dWl0aW9uIGlzIHByb2RkaW5nIG1lIHRvIGNvbnNpZGVyLi4uIGlzIHRoZXJlIGEgYGZzL250ZnMzL2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhhdCBzbGlnaHQgdW5jZXJ0YWludHkgaXMgbmFnZ2luZyBhdCBtZS4gUGVyaGFwcyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoYXQgbW9yZSByZWNlbnQgdmVyc2lvbiBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDMuMjI1NTg2NzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFpby5jXCIsXG4gICAgXCJhbm9uX2lub2Rlcy5jXCIsXG4gICAgXCJhdHRyLmNcIixcbiAgICBcImJhY2tpbmctZmlsZS5jXCIsXG4gICAgXCJiYWRfaW5vZGUuY1wiLFxuICAgIFwiYmluZm10X2VsZi5jXCIsXG4gICAgXCJiaW5mbXRfZWxmX2ZkcGljLmNcIixcbiAgICBcImJpbmZtdF9mbGF0LmNcIixcbiAgICBcImJpbmZtdF9taXNjLmNcIixcbiAgICBcImJpbmZtdF9zY3JpcHQuY1wiLFxuICAgIFwiYnBmX2ZzX2tmdW5jcy5jXCIsXG4gICAgXCJidWZmZXIuY1wiLFxuICAgIFwiY2hhcl9kZXYuY1wiLFxuICAgIFwiY29tcGF0X2JpbmZtdF9lbGYuY1wiLFxuICAgIFwiY29yZWR1bXAuY1wiLFxuICAgIFwiZF9wYXRoLmNcIixcbiAgICBcImRheC5jXCIsXG4gICAgXCJkY2FjaGUuY1wiLFxuICAgIFwiZGlyZWN0LWlvLmNcIixcbiAgICBcImRyb3BfY2FjaGVzLmNcIixcbiAgICBcImV2ZW50ZmQuY1wiLFxuICAgIFwiZXZlbnRwb2xsLmNcIixcbiAgICBcImV4ZWMuY1wiLFxuICAgIFwiZmNudGwuY1wiLFxuICAgIFwiZmhhbmRsZS5jXCIsXG4gICAgXCJmaWxlLmNcIixcbiAgICBcImZpbGVfYXR0ci5jXCIsXG4gICAgXCJmaWxlX3RhYmxlLmNcIixcbiAgICBcImZpbGVzeXN0ZW1zLmNcIixcbiAgICBcImZzLXdyaXRlYmFjay5jXCIsXG4gICAgXCJmc19jb250ZXh0LmNcIixcbiAgICBcImZzX2RpcmVudC5jXCIsXG4gICAgXCJmc19wYXJzZXIuY1wiLFxuICAgIFwiZnNfcGluLmNcIixcbiAgICBcImZzX3N0cnVjdC5jXCIsXG4gICAgXCJmc2Vycm9yLmNcIixcbiAgICBcImZzb3Blbi5jXCIsXG4gICAgXCJpbml0LmNcIixcbiAgICBcImlub2RlLmNcIixcbiAgICBcImludGVybmFsLmhcIixcbiAgICBcImlvY3RsLmNcIixcbiAgICBcImtlcm5lbF9yZWFkX2ZpbGUuY1wiLFxuICAgIFwibGliZnMuY1wiLFxuICAgIFwibG9ja3MuY1wiLFxuICAgIFwibWJjYWNoZS5jXCIsXG4gICAgXCJtbnRfaWRtYXBwaW5nLmNcIixcbiAgICBcIm1vdW50LmhcIixcbiAgICBcIm1wYWdlLmNcIixcbiAgICBcIm5hbWVpLmNcIixcbiAgICBcIm5hbWVzcGFjZS5jXCIsXG4gICAgXCJuc2ZzLmNcIixcbiAgICBcIm51bGxmcy5jXCIsXG4gICAgXCJvcGVuLmNcIixcbiAgICBcInBpZGZzLmNcIixcbiAgICBcInBpcGUuY1wiLFxuICAgIFwicG5vZGUuY1wiLFxuICAgIFwicG5vZGUuaFwiLFxuICAgIFwicG9zaXhfYWNsLmNcIixcbiAgICBcInByb2NfbmFtZXNwYWNlLmNcIixcbiAgICBcInJlYWRfd3JpdGUuY1wiLFxuICAgIFwicmVhZGRpci5jXCIsXG4gICAgXCJyZW1hcF9yYW5nZS5jXCIsXG4gICAgXCJzZWxlY3QuY1wiLFxuICAgIFwic2VxX2ZpbGUuY1wiLFxuICAgIFwic2lnbmFsZmQuY1wiLFxuICAgIFwic3BsaWNlLmNcIixcbiAgICBcInN0YWNrLmNcIixcbiAgICBcInN0YXQuY1wiLFxuICAgIFwic3RhdGZzLmNcIixcbiAgICBcInN1cGVyLmNcIixcbiAgICBcInN5bmMuY1wiLFxuICAgIFwic3lzY3Rscy5jXCIsXG4gICAgXCJ0aW1lcmZkLmNcIixcbiAgICBcInV0aW1lcy5jXCIsXG4gICAgXCJ4YXR0ci5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIjlwXCIsXG4gICAgXCJhZGZzXCIsXG4gICAgXCJhZmZzXCIsXG4gICAgXCJhZnNcIixcbiAgICBcImF1dG9mc1wiLFxuICAgIFwiYmVmc1wiLFxuICAgIFwiYmZzXCIsXG4gICAgXCJidHJmc1wiLFxuICAgIFwiY2FjaGVmaWxlc1wiLFxuICAgIFwiY2VwaFwiLFxuICAgIFwiY29kYVwiLFxuICAgIFwiY29uZmlnZnNcIixcbiAgICBcImNyYW1mc1wiLFxuICAgIFwiY3J5cHRvXCIsXG4gICAgXCJkZWJ1Z2ZzXCIsXG4gICAgXCJkZXZwdHNcIixcbiAgICBcImRsbVwiLFxuICAgIFwiZWNyeXB0ZnNcIixcbiAgICBcImVmaXZhcmZzXCIsXG4gICAgXCJlZnNcIixcbiAgICBcImVyb2ZzXCIsXG4gICAgXCJleGZhdFwiLFxuICAgIFwiZXhwb3J0ZnNcIixcbiAgICBcImV4dDJcIixcbiAgICBcImV4dDRcIixcbiAgICBcImYyZnNcIixcbiAgICBcImZhdFwiLFxuICAgIFwiZnJlZXZ4ZnNcIixcbiAgICBcImZ1c2VcIixcbiAgICBcImdmczJcIixcbiAgICBcImhmc1wiLFxuICAgIFwiaGZzcGx1c1wiLFxuICAgIFwiaG9zdGZzXCIsXG4gICAgXCJocGZzXCIsXG4gICAgXCJodWdldGxiZnNcIixcbiAgICBcImlvbWFwXCIsXG4gICAgXCJpc29mc1wiLFxuICAgIFwiamJkMlwiLFxuICAgIFwiamZmczJcIixcbiAgICBcImpmc1wiLFxuICAgIFwia2VybmZzXCIsXG4gICAgXCJsb2NrZFwiLFxuICAgIFwibWluaXhcIixcbiAgICBcIm5ldGZzXCIsXG4gICAgXCJuZnNcIixcbiAgICBcIm5mc19jb21tb25cIixcbiAgICBcIm5mc2RcIixcbiAgICBcIm5pbGZzMlwiLFxuICAgIFwibmxzXCIsXG4gICAgXCJub3RpZnlcIixcbiAgICBcIm50ZnNcIixcbiAgICBcIm50ZnMzXCIsXG4gICAgXCJvY2ZzMlwiLFxuICAgIFwib21mc1wiLFxuICAgIFwib3BlbnByb21mc1wiLFxuICAgIFwib3JhbmdlZnNcIixcbiAgICBcIm92ZXJsYXlmc1wiLFxuICAgIFwicHJvY1wiLFxuICAgIFwicHN0b3JlXCIsXG4gICAgXCJxbng0XCIsXG4gICAgXCJxbng2XCIsXG4gICAgXCJxdW90YVwiLFxuICAgIFwicmFtZnNcIixcbiAgICBcInJlc2N0cmxcIixcbiAgICBcInJvbWZzXCIsXG4gICAgXCJzbWJcIixcbiAgICBcInNxdWFzaGZzXCIsXG4gICAgXCJzeXNmc1wiLFxuICAgIFwidGVzdHNcIixcbiAgICBcInRyYWNlZnNcIixcbiAgICBcInViaWZzXCIsXG4gICAgXCJ1ZGZcIixcbiAgICBcInVmc1wiLFxuICAgIFwidW5pY29kZVwiLFxuICAgIFwidmJveHNmXCIsXG4gICAgXCJ2ZXJpdHlcIixcbiAgICBcInhmc1wiLFxuICAgIFwiem9uZWZzXCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDMuMjI1NzU5ODU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjE2MjIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBGaWxlIFN5c3RlbSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBib3RoIGBmcy9udGZzYCBhbmQgYGZzL250ZnMzYCBwb3BzIHVwLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL250ZnMvaW5kZXguY2AuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHdhbnQgdG8gY29uZmlybSBhIHNldHRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvciBzdGF0dXMgb2YgYE5URlNfUldgLiBUaGF0IHdpbGwgaW5mbHVlbmNlIG15IGV4cGVjdGF0aW9ucyBvZiB0aGUgYWZmZWN0ZWQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDYuOTg3Mzg0NDI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzODE5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjA3LjA1NzkzMjQ4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA0ODI0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTlRGUyBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gRGlkbid0IEkganVzdCB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlRGUyBhbHJlYWR5PyBJJ20gcHJldHR5IHN1cmUgSSBkaWQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBiZWZvcmUgZGl2aW5nIGluIGZ1cnRoZXIuIFllcywgdGhhdCdzIHJpZ2h0LCBJIGhhZCB0aGF0IGRhdGEuIE9rYXksIG5leHQgdXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZWxzZS4gTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5LCBgZnMvbnRmcy9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBlbnRyeSByZWxhdGVkIHRvIGBjb25maWcgTlRGU2Agc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBrZXkgaW5mb3JtYXRpb24gSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjEwLjk2Mjc1OTE0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NzU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MTEuMDIyNDQxODAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMzMDA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkcm9wcGVkIGZyb20gYGZzL250ZnMvS2NvbmZpZ2Agc29tZXRpbWUgYXJvdW5kIDIwMjQuIFRoYXQgZGVmaW5pdGVseSBjYXVnaHQgbXkgZXllLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3cml0ZSBzdXBwb3J0IG1pZ2h0IGJlIGVuYWJsZWQgZGlmZmVyZW50bHkgbm93LCBwb3RlbnRpYWxseSB1bmNvbmRpdGlvbmFsbHkuIFRvIGNvbmZpcm0gdGhpcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmcy9udGZzL01ha2VmaWxlYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYG50ZnMteWAgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaWYgaXQgaW50cmluc2ljYWxseSBpbmNvcnBvcmF0ZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSwgcmVnYXJkbGVzcyBvZiBhIEtjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgYE1ha2VmaWxlYCBlbnRyeSBwb2ludCB3aWxsIGNsYXJpZnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgTlRGUyB3cml0ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYW5kIHdoZXRoZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZSBpcyBuZWNlc3Nhcnkgb3Igbm90LCBhbmQgd2hlcmUgdGhhdCBjaGFuZ2Ugd291bGQgYmUgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNzoxNC45NDU3NDYzMzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTlRGU19GUykgKz0gbnRmcy5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbiAgIDY6XFx0XFx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxcXFxuICAgNzpcXHRcXHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRjY2ZsYWdzLSQoQ09ORklHX05URlNfREVCVUcpICs9IC1EREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MTQuOTQ1ODU3MzgyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTY3MTk1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBmaWxlIHN5c3RlbSBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIE5URlMgV3JpdGUgU3VwcG9ydCBJbnF1aXJ5KipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRyb3BwZWQsIG9yIG1heWJlIHdyaXRlIHN1cHBvcnQgYmVpbmcgKmFsd2F5cyogb24gbm93PyBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBOVEZTIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gY2hlY2sgdGhlIGNvcmUsIHRoZSBgZnMvbnRmcy9zdXBlci5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudCBiZWhhdmlvci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBob3cgcmVhZC1vbmx5IG1vdW50aW5nIGlzIGhhbmRsZWQsIG9yIGlmIGl0J3MgZXZlbiBhbiBvcHRpb24gYW55bW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjE5LjY0MjU4MTUzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5ODU5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNCX1JET05MWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjg0LVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoyODU6XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTI4Ni1cXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTMxMi1cXHRcXHR9XFxuZnMvbnRmcy9zdXBlci5jOjMxMzpcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTMxNC1cXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTM0MC1cXHRpZiAodm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MzQxOlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMzQyLVxcdFxcdHByX2NyaXQoXFxcIihkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTM5OT1zdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxcbmZzL250ZnMvc3VwZXIuYzoxNDE3OlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU0Mi1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU0MzpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NDQtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcXFwiLCBlczEsIGVzMik7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU1OS1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU2MDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NjEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byBsb2FkIExvZ0ZpbGUuIE1vdW50aW5nIHJlYWQtb25seS5cXFwiKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNTkxLVxcdFxcdGlmICghc2JfcmRvbmx5KHNiKSBcXHUwMDI2XFx1MDAyNiB2b2wtXFx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xcbmZzL250ZnMvc3VwZXIuYzoxNTkyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTU5My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsIGVzMSwgZXMyKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNjA2LVxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCIlcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXFxcIiwgZXMxLCBlczIpO1xcbmZzL250ZnMvc3VwZXIuYzoxNjA3OlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTYwOC1cXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjE5Ljg5MjQ0NjY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzQ1NDMxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIGEgUmVhZC1Pbmx5IEZpbGUgU3lzdGVtIElzc3VlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgYW5kIG15IG1lbnRhbCBicmVhZGNydW1iIHRyYWlsIGxlYWRzIG1lIHRvIGBmcy9udGZzL3N1cGVyLmNgLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtb25seSBzdGF0ZXMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSB0aGlzIGNvbmRpdGlvbjogYHNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2ICEoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSlgLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgaXNzdWUgd2l0aCBhIHN1cGVyIGJsb2NrIGZsYWcgYW5kIGFub3RoZXIgZmxhZ3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGFjdC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGF0IGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgMjg1IGluIGBmcy9udGZzL3N1cGVyLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGNoZWNrcyBtZWFuLCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoeSB0aGV5IG1pZ2h0IGJlIGNhdXNpbmcgYSBwcm9ibGVtIG9yIGEgY29uY2VybiB0aGF0IEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MjQuMjI2OTkzNTMxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdG50ZnNfZGVidWcoXFxcIkVudGVyaW5nIHdpdGggcmVtb3VudFxcXCIpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRzeW5jX2ZpbGVzeXN0ZW0oc2IpO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHQvKlxcbiAyNzU6XFx0XFx0ICogRm9yIHRoZSByZWFkLXdyaXRlIGNvbXBpbGVkIGRyaXZlciwgaWYgd2UgYXJlIHJlbW91bnRpbmcgcmVhZC13cml0ZSxcXG4gMjc2OlxcdFxcdCAqIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdm9sdW1lIGVycm9ycyBhbmQgdGhhdCBubyB1bnN1cHBvcnRlZCB2b2x1bWVcXG4gMjc3OlxcdFxcdCAqIGZsYWdzIGFyZSBzZXQuICBBbHNvLCBlbXB0eSB0aGUgbG9nZmlsZSBqb3VybmFsIGFzIGl0IHdvdWxkIGJlY29tZVxcbiAyNzg6XFx0XFx0ICogc3RhbGUgYXMgc29vbiBhcyBzb21ldGhpbmcgaXMgd3JpdHRlbiB0byB0aGUgdm9sdW1lIGFuZCBtYXJrIHRoZVxcbiAyNzk6XFx0XFx0ICogdm9sdW1lIGRpcnR5IHNvIHRoYXQgY2hrZHNrIGlzIHJ1biBpZiB0aGUgdm9sdW1lIGlzIG5vdCB1bW91bnRlZFxcbiAyODA6XFx0XFx0ICogY2xlYW5seS5cXG4gMjgxOlxcdFxcdCAqXFxuIDI4MjpcXHRcXHQgKiBXaGVuIHJlbW91bnRpbmcgcmVhZC1vbmx5LCBtYXJrIHRoZSB2b2x1bWUgY2xlYW4gaWYgbm8gdm9sdW1lIGVycm9yc1xcbiAyODM6XFx0XFx0ICogaGF2ZSBvY2N1cnJlZC5cXG4gMjg0OlxcdFxcdCAqL1xcbiAyODU6XFx0XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuIDI4NjpcXHRcXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtd3JpdGUuICovXFxuIDI4OTpcXHRcXHRcXHRpZiAoTlZvbEVycm9ycyh2b2wpKSB7XFxuIDI5MDpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiVm9sdW1lIGhhcyBlcnJvcnMgYW5kIGlzIHJlYWQtb25seSVzXFxcIixcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdGVzKTtcXG4gMjkyOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDI5MzpcXHRcXHRcXHR9XFxuIDI5NDpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2V2b2xfZmxhZ3MgXFx1MDAyNiBWT0xVTUVfSVNfRElSVFkpIHtcXG4gMjk1OlxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJWb2x1bWUgaXMgZGlydHkgYW5kIHJlYWQtb25seSVzXFxcIiwgZXMpO1xcbiAyOTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUk9GUztcXG4gMjk3OlxcdFxcdFxcdH1cXG4gMjk4OlxcdFxcdFxcdGlmICh2b2wtXFx1MDAzZXZvbF9mbGFncyBcXHUwMDI2IFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0spIHtcXG4gMjk5OlxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJWb2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQgYnkgY2hrZHNrIGFuZCBpcyByZWFkLW9ubHklc1xcXCIsIGVzKTtcXG4gMzAwOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMwMTpcXHRcXHRcXHR9XFxuIDMwMjpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2V2b2xfZmxhZ3MgXFx1MDAyNiBWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiVm9sdW1lIGhhcyB1bnN1cHBvcnRlZCBmbGFncyBzZXQgKDB4JXgpIGFuZCBpcyByZWFkLW9ubHklc1xcXCIsXFxuIDMwNDpcXHRcXHRcXHRcXHRcXHRcXHRsZTE2X3RvX2NwdSh2b2wtXFx1MDAzZXZvbF9mbGFncyksIGVzKTtcXG4gMzA1OlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMwNjpcXHRcXHRcXHR9XFxuIDMwNzpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2Vsb2dmaWxlX2lubyBcXHUwMDI2XFx1MDAyNiAhbnRmc19lbXB0eV9sb2dmaWxlKHZvbC1cXHUwMDNlbG9nZmlsZV9pbm8pKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGVtcHR5IGpvdXJuYWwgTG9nRmlsZSVzXFxcIixcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdFxcdGVzKTtcXG4gMzEwOlxcdFxcdFxcdFxcdE5Wb2xTZXRFcnJvcnModm9sKTtcXG4gMzExOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMxMjpcXHRcXHRcXHR9XFxuIDMxMzpcXHRcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuIDMxNDpcXHRcXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4gMzE1OlxcdFxcdFxcdGlmICghTlZvbEVycm9ycyh2b2wpKSB7XFxuIDMxNjpcXHRcXHRcXHRcXHRpZiAobnRmc19jbGVhcl92b2x1bWVfZmxhZ3Modm9sLCBWT0xVTUVfSVNfRElSVFkpKVxcbiAzMTc6XFx0XFx0XFx0XFx0XFx0bnRmc193YXJuaW5nKHNiLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBjbGVhciBkaXJ0eSBiaXQgaW4gdm9sdW1lIGluZm9ybWF0aW9uIGZsYWdzLiAgUnVuIGNoa2Rzay5cXFwiKTtcXG4gMzE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MjQuMjI3MTQxMDExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NjI0MTI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOVEZTIFJlYWQvV3JpdGUgQ2FwYWJpbGl0aWVzKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoaXMgbWVudGlvbiBvZiBcIkZvciB0aGUgcmVhZC13cml0ZSBjb21waWxlZCBkcml2ZXJcIi4gSG1tLCBpcyB0aGlzIHN1Z2dlc3Rpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50PyBEb2VzIHRoaXMgbWVhbiBgZnMvbnRmc2AgaXMgKmFsd2F5cyogY29tcGlsZWQgd2l0aCByZWFkLXdyaXRlIHN1cHBvcnQgbm93PyBUaGF0IHdvdWxkIGJlIGEgbWFqb3Igc2hpZnQsIGFzc3VtaW5nIGl0IGlzIGluZGVlZCB0YWxraW5nIGFib3V0IG50ZnMtM2cuXG5cbk9rYXksIGJlc3QgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSBpZiB0aGlzIGlzIHRydWUuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCB0cmVlIGZvciBhbnkgaW5zdGFuY2Ugb2YgYENPTkZJR19OVEZTX1JXYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgY2FuIGltbWVkaWF0ZWx5IGNyb3NzLXJlZmVyZW5jZSB3aXRoIGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgZmlsZXN5c3RlbSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MzMuMTg5NTU2NTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyNzYwNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19OVEZTX1JXXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL3NvY2ZwZ2FfZGVmY29uZmlnPTE0MT1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZzoxNDI6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mvc29jZnBnYV9kZWZjb25maWctMTQzLUNPTkZJR19UTVBGUz15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTE1Mz1DT05GSUdfTlRGU19GUz1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzoxNTQ6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctMTU1LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWc9MTg4PUNPTkZJR19OVEZTX0ZTPW1cXG5hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnOjE4OTpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZy0xOTAtQ09ORklHX1BST0NfS0NPUkU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZz02Nj1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZzo2NzpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZy02OC1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz05ND1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6OTU6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnLTk2LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZz05OT1DT05GSUdfTlRGU19GUz1tXFxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnOjEwMDpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnLTEwMS1DT05GSUdfVE1QRlM9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnPTgxPUNPTkZJR19OVEZTX0ZTPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWc6ODI6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZy04My1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9NzY9Q09ORklHX05URlNfRlM9eVxcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZzo3NzpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnLTc4LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZz0xMTI9Q09ORklHX05URlNfREVCVUc9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZzoxMTM6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZy0xMTQtQ09ORklHX1RNUEZTPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnPTExOD1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWc6MTE5OkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZy0xMjAtQ09ORklHX1BST0NfS0NPUkU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc9OTM9Q09ORklHX05URlNfRlM9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnOjk0OkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZy05NS1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWc9MTE5PUNPTkZJR19OVEZTX0ZTPXlcXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWc6MTIwOkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWctMTIxLUNPTkZJR19QUk9DX0tDT1JFPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MzYuODIyMzI1MjkxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjgzMzk2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19OVEZTX1JXYCdzIENvbmZpZ3VyYXRpb24gTXlzdGVyeSoqXG5cbkhtbSwgSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfTlRGU19SV2AgaXMgYXBwYXJlbnRseSBwcmVzZW50IGluIHNvbWUgZGVmY29uZmlnIGZpbGVzLCBidXQgaXQncyBjb25zcGljdW91c2x5IGFic2VudCBmcm9tIGBmcy9udGZzL0tjb25maWdgLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl0J3MgYSBsZWdhY3kgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgaW50cm9kdWNlZCBhbmQgdGhlbiBlaXRoZXIgZGVwcmVjYXRlZCBvciBtb3ZlZCwgYnV0IHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlIHdhc24ndCB1cGRhdGVkIGFjY29yZGluZ2x5LlxuXG5TbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBlc3RhYmxpc2ggaXRzIHRydWUgcHJvdmVuYW5jZS4gQSBxdWljayBkaXZlIGludG8gdGhlIGhpc3Rvcnkgb2YgYGZzL250ZnMvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlciDigJMgZ2l0IGJsYW1lIHNob3VsZCByZXZlYWwgd2hlbiBhbmQgaWYgaXQgd2FzIGV2ZXIgZGVjbGFyZWQgdGhlcmUuIEl0J3MgcG9zc2libGUgaXQgbGl2ZWQgaW4gYSBkaWZmZXJlbnQgYEtjb25maWdgIGZpbGUgaW4gdGhlIHBhc3QsIG9yIG1heWJlIHdhcyBpbnRyb2R1Y2VkIHZpYSBzb21lIG1vcmUgaW5kaXJlY3QgbWV0aG9kLiBJdCdzIGFsc28gcG9zc2libGUgdGhlcmUncyBhbiBpbmNsdWRlIHNvbWV3aGVyZSB0aGF0IGluY2x1ZGVzIGEgZmlsZSB0aGF0IGRlZmluZXMgaXQuXG5cbkFsdGVybmF0aXZlbHksIGJlZm9yZSBkaWdnaW5nIGludG8gZ2l0IGhpc3RvcnksIGEgYnJvYWRlciBzZWFyY2ggd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG1pZ2h0IHF1aWNrbHkgdW5jb3ZlciB3aGV0aGVyIGBDT05GSUdfTlRGU19SV2AgaXMgKmFjdHVhbGx5KiBkZWZpbmVkIGFueXdoZXJlLiBBIHNpbXBsZSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gd2hhdCBJIHN1c3BlY3QgaXMgYSBkZXByZWNhdGVkIG9yIG9ycGhhbmVkIGNvbmZpZ3VyYXRpb24uIE1pZ2h0IHR1cm4gdXAgYSB1c2UgY2FzZS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgaWYgaXQncyByZWZlcmVuY2VkIG9yIHVzZWQg4oCTIGlmIG5vdCwgdGhlbiBpdCBwcm9iYWJseSBpc24ndCBhIGN1cnJlbnQgZmFjdG9yLiBJZiB0aGUgc3ltYm9sICppcyogZGVmaW5lZCwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdHMgYWN0dWFsIGRlZmluaXRpb24gaXMgbG9jYXRlZC4gVGhpcyB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzA5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6NDQuMzkwNjY2ODY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzExNzg4NjAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjQ2LjcwMjQ2MzIzOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2OTUzODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIE5URlMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIHNvbWV0aGluZydzIGJlZW4gcmVtb3ZlZC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIG9jY3VycmVkLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgQ09ORklHX05URlNfUldgIHNldHRpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW55IGAjaWZkZWYgQ09ORklHX05URlNfUldgIGRpcmVjdGl2ZXMsIGFueXdoZXJlIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeT8gVGhpcyBjb3VsZCBiZSBhIGNsdWUuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiByZWFkL3dyaXRlIHN1cHBvcnQgaGFzIGJlZW4gY29uZGl0aW9uYWxseSBkaXNhYmxlZCwgb3IgcGVyaGFwcyByZW1vdmVkIGVudGlyZWx5LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNzo1MC4zMDk0MTk1MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE2NTg3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjUwLjUxOTU5MzkwOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzcyNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE5URlMgV3JpdGUgU3VwcG9ydCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIHdyaXRlIHN1cHBvcnQgZm9yIE5URlMgaXMgbm93ICp1bmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkIHdpdGhpbiBgZnMvbnRmc2Ag4oCTIGludGVyZXN0aW5nISBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgZGV0YWlsLiBMZXQncyBkaXZlIGludG8gYGZzL250ZnMvaW5kZXguY2AgcmlnaHQgYXdheS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpcyBhIGtleSBkYXRhIHBvaW50IHRvIGtub3cgYXMgSSBmdXJ0aGVyIGRldmVsb3AgdGhlIG1vZHVsZS4gVGhpcyBjb21waWxhdGlvbiBjaGFuZ2UgY291bGQgaGF2ZSBhIHdpZGVzcHJlYWQgZWZmZWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjU0LjgxMzk2OTM2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMwNjExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjU0Ljg3NjI4MjIxOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI2NzYxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlIENyZWF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uLCBjb25maXJtZWQuIFRoZSBjb3JlIGRyaXZlciB3ZSdyZSBsb29raW5nIGF0IGlzIGBmcy9udGZzYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgbnRmc2AuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBudGZzX2lyX3RvX2liYCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE5vdywgbGV0J3MgdHJhY2UgdGhlIGNhbGwgY2hhaW4uIGBudGZzX2lyX3RvX2liYCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfcmVwYXJlbnRgLiBUaGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIFRoaXMgZXZlbnR1YWxseSBsZWFkcyB1cCB0byBgbnRmc19pZV9hZGRgLCB3aGljaCB0aGVuIGZlZWRzIGludG8gYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gRmluYWxseSwgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBieSBib3RoIGBfX250ZnNfY3JlYXRlYCBhbmQgYF9fbnRmc19saW5rYC5cblxuU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBib3RoIGZpbGUgKmNyZWF0aW9uKiBhbmQgdGhlICpsaW5raW5nKiBvZiBmaWxlcyBvbiBhbiBOVEZTIHZvbHVtZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYF9fbnRmc19jcmVhdGVgIGlzIGFjdHVhbGx5IGNhbGxhYmxlLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgb2YgdGhlIGNvZGUgdGhhdCdzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHdoZXJlIHRoZSBwYXRjaCBpcyBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODowNC4zMDMwNDcyNjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzI3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbnRmc19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL250ZnMvbmFtZWkuYy0zOTUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz03Mzg9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzY1LVxcbmZzL250ZnMvbmFtZWkuYzo3NjY6XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcXG5mcy9udGZzL25hbWVpLmMtNzY3LVxcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xMDU1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxcbmZzL250ZnMvbmFtZWkuYzoxMDg1OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTEwODYtXFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0MzctXFxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVzcmMsIHVzcmNfbGVuLCBTX0lGTE5LIHwgMDc3NywgMCxcXG5mcy9udGZzL25hbWVpLmMtMTQzOS1cXHRcXHRcXHQgICBzeW1uYW1lLCBzeW1sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0NTM9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDg1LVxcdGNhc2UgU19JRkJMSzpcXG5mcy9udGZzL25hbWVpLmM6MTQ4NjpcXHRcXHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbixcXG5mcy9udGZzL25hbWVpLmMtMTQ4Ny1cXHRcXHRcXHRcXHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDg5LVxcdGRlZmF1bHQ6XFxuZnMvbnRmcy9uYW1laS5jOjE0OTA6XFx0XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXFxuZnMvbnRmcy9uYW1laS5jLTE0OTEtXFx0XFx0XFx0XFx0bW9kZSwgMCwgTlVMTCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjA0LjM2MjM4MTMwM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjU4OTQxNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkZpbGUgU3lzdGVtIE9wZXJhdGlvbiBSZWdpc3RyYXRpb24qKlxuXG5IbW0sIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEkgc2VlIHRoYXQgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rbm9kYCBhcmUgYWxsIGRlZmluZWQgaW4gYGZzL250ZnMvbmFtZWkuY2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgbGlua2VkIGludG8gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zPyBBcmUgdGhleSBjb3JyZWN0bHkgYXNzb2NpYXRlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlIGBpbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmU/IFRoYXQncyB0aGUga2V5OiBhcmUgdGhleSBjb3JyZWN0bHkgaG9va2VkIGluPyBJdCdzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSdyZSBhdmFpbGFibGUgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSdzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIG9wZXJhdGlvbnMgYXJlIHByb3Blcmx5IGFzc2lnbmVkIHdpdGhpbiB0aGUgTlRGUyBkcml2ZXIncyBpbm9kZSBvcGVyYXRpb25zIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjM2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MTEuMDIxMzI0ODE2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUxMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL21mdC5jPTY2NT1zdGF0aWMgaW50IG50ZnNfdGVzdF9pbm9kZV93YihzdHJ1Y3QgaW5vZGUgKnZpLCB1NjQgaW5vLCB2b2lkICpkYXRhKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy02ODMtXFx0ICogVGhpcyBjb25kaXRpb24gY2FuIHByZXZlbnQgbnRmc193cml0ZV9tc3RfYmxvY2soKVxcbmZzL250ZnMvbWZ0LmM6Njg0OlxcdCAqIGZyb20gYXBwbHlpbmcvdW5kbyBmaXh1cHMgd2hpbGUgbnRmc19jcmVhdGUoKSBiZWluZ1xcbmZzL250ZnMvbWZ0LmMtNjg1LVxcdCAqIGNhbGxlZFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL250ZnMvbmFtZWkuYy0zOTUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy03MTAtXFx0ICogRnJlZSBleHRlbnQgTUZUIHJlY29yZHMgKHNob3VsZCBub3QgZXhpc3QgYW55IHdpdGggY3VycmVudFxcbmZzL250ZnMvbmFtZWkuYzo3MTE6XFx0ICogbnRmc19jcmVhdGUgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3IgYW55IGNhc2UgaWYgc29tZXRoaW5nIHdpbGwgYmVcXG5mcy9udGZzL25hbWVpLmMtNzEyLVxcdCAqIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkuXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzM3LVxcbmZzL250ZnMvbmFtZWkuYzo3Mzg6c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbnRmcy9uYW1laS5jLTczOS1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTc2NS1cXG5mcy9udGZzL25hbWVpLmM6NzY2OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTc2Ny1cXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9MTA1NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTA4NC1cXG5mcy9udGZzL25hbWVpLmM6MTA4NTpcXHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xcbmZzL250ZnMvbmFtZWkuYy0xMDg2LVxcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNDA1PXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxcbmZzL250ZnMvbmFtZWkuYzoxNDM4OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1c3JjLCB1c3JjX2xlbiwgU19JRkxOSyB8IDA3NzcsIDAsXFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXFx0XFx0XFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNDUzPXN0YXRpYyBpbnQgbnRmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTQ4NS1cXHRjYXNlIFNfSUZCTEs6XFxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XFx0XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXFx0XFx0XFx0XFx0bW9kZSwgcmRldiwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cXHRkZWZhdWx0OlxcbmZzL250ZnMvbmFtZWkuYzoxNDkwOlxcdFxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxcbmZzL250ZnMvbmFtZWkuYy0xNDkxLVxcdFxcdFxcdFxcdG1vZGUsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE1NjE9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19kaXJfaW5vZGVfb3BzID0ge1xcbmZzL250ZnMvbmFtZWkuYy0xNTYyLVxcdC5sb29rdXBcXHRcXHQ9IG50ZnNfbG9va3VwLFxcdC8qIFZGUzogTG9va3VwIGRpcmVjdG9yeS4gKi9cXG5mcy9udGZzL25hbWVpLmM6MTU2MzpcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG5mcy9udGZzL25hbWVpLmMtMTU2NC1cXHQudW5saW5rXFx0XFx0PSBudGZzX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MTEuMDgxODQxNjE1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTg3NjQ4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5URlMgV3JpdGUgU3VwcG9ydCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbnRmc19jcmVhdGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG50ZnNfZGlyX2lub2RlX29wc2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIE5URlMgZHJpdmVyIG5vdyBoYXMgd3JpdGUgY2FwYWJpbGl0eS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLiBBIHF1aWNrIG1lbnRhbCBjaGVjazogaXMgYGZzL250ZnNgIGFjdHVhbGx5IHRoZSBvbGRlciBgbnRmc2AgZHJpdmVyIG9yIHRoZSBuZXdlciBgbnRmczNgPyBBaCwgcmlnaHQsIGBmcy9udGZzYCBpcyB0aGUgbGVnYWN5IGRyaXZlciwgYW5kIGBmcy9udGZzM2AgaXMgdGhlIGFjdGl2ZWx5IGRldmVsb3BlZCBvbmUuIERpZCB3cml0ZSBzdXBwb3J0IGdldCBiYWNrcG9ydGVkPyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gTGV0IG1lIHZlcmlmeSB0aGUgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmUgMTU2MSBpbiBgZnMvbnRmcy9uYW1laS5jYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MjkuMjY5NDkzMTdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTUwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlyX25pLVxcdTAwM2VtcmVjX2xvY2spO1xcbjE1NTE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4xNTUyOlxcdFxcbjE1NTM6XFx0b3V0OlxcbjE1NTQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xcbjE1NTU6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTU2OlxcdH1cXG4xNTU3OlxcdFxcbjE1NTg6XFx0LypcXG4xNTU5OlxcdCAqIElub2RlIG9wZXJhdGlvbnMgZm9yIGRpcmVjdG9yaWVzLlxcbjE1NjA6XFx0ICovXFxuMTU2MTpcXHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuMTU2MjpcXHRcXHQubG9va3VwXFx0XFx0PSBudGZzX2xvb2t1cCxcXHQvKiBWRlM6IExvb2t1cCBkaXJlY3RvcnkuICovXFxuMTU2MzpcXHRcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG4xNTY0OlxcdFxcdC51bmxpbmtcXHRcXHQ9IG50ZnNfdW5saW5rLFxcbjE1NjU6XFx0XFx0Lm1rZGlyXFx0XFx0PSBudGZzX21rZGlyLFxcbjE1NjY6XFx0XFx0LnJtZGlyXFx0XFx0PSBudGZzX3JtZGlyLFxcbjE1Njc6XFx0XFx0LnJlbmFtZVxcdFxcdD0gbnRmc19yZW5hbWUsXFxuMTU2ODpcXHRcXHQuZ2V0X2FjbFxcdD0gbnRmc19nZXRfYWNsLFxcbjE1Njk6XFx0XFx0LnNldF9hY2xcXHQ9IG50ZnNfc2V0X2FjbCxcXG4xNTcwOlxcdFxcdC5saXN0eGF0dHJcXHQ9IG50ZnNfbGlzdHhhdHRyLFxcbjE1NzE6XFx0XFx0LnNldGF0dHJcXHQ9IG50ZnNfc2V0YXR0cixcXG4xNTcyOlxcdFxcdC5nZXRhdHRyXFx0PSBudGZzX2dldGF0dHIsXFxuMTU3MzpcXHRcXHQuc3ltbGlua1xcdD0gbnRmc19zeW1saW5rLFxcbjE1NzQ6XFx0XFx0Lm1rbm9kXFx0XFx0PSBudGZzX21rbm9kLFxcbjE1NzU6XFx0XFx0LmxpbmtcXHRcXHQ9IG50ZnNfbGluayxcXG4xNTc2OlxcdH07XFxuMTU3NzpcXHRcXG4xNTc4OlxcdC8qXFxuMTU3OTpcXHQgKiBudGZzX2dldF9wYXJlbnQgLSBmaW5kIHRoZSBkZW50cnkgb2YgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeSBkZW50cnlcXG4xNTgwOlxcdCAqIEBjaGlsZF9kZW50OlxcdFxcdGRlbnRyeSBvZiB0aGUgZGlyZWN0b3J5IHdob3NlIHBhcmVudCBkaXJlY3RvcnkgdG8gZmluZFxcbjE1ODE6XFx0ICpcXG4xNTgyOlxcdCAqIEZpbmQgdGhlIGRlbnRyeSBmb3IgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlXFxuMTU4MzpcXHQgKiBkZW50cnkgQGNoaWxkX2RlbnQuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tXFxuMTU4NDpcXHQgKiBmcy9leHBvcnRmcy9leHBmcy5jOjpmaW5kX2V4cG9ydGVkX2RlbnRyeSgpIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gdGhlXFxuMTU4NTpcXHQgKiBkZWZhdWx0IC1cXHUwMDNlZGVjb2RlX2ZoKCkgd2hpY2ggaXMgZXhwb3J0X2RlY29kZV9maCgpIGluIHRoZSBzYW1lIGZpbGUuXFxuMTU4NjpcXHQgKlxcbjE1ODc6XFx0ICogTm90ZTogbnRmc19nZXRfcGFyZW50KCkgaXMgY2FsbGVkIHdpdGggQGRfaW5vZGUoY2hpbGRfZGVudCktXFx1MDAzZWlfbXV0ZXggZG93bi5cXG4xNTg4OlxcdCAqXFxuMTU4OTpcXHQgKiBSZXR1cm4gdGhlIGRlbnRyeSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvbiBzdWNjZXNzIG9yIHRoZSBlcnJvciBjb2RlIG9uXFxuMTU5MDpcXHQgKiBlcnJvciAoSVNfRVJSKCkgaXMgdHJ1ZSkuXFxuMTU5MTpcXHQgKi9cXG4xNTkyOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcXG4xNTkzOlxcdHtcXG4xNTk0OlxcdFxcdHN0cnVjdCBpbm9kZSAqdmkgPSBkX2lub2RlKGNoaWxkX2RlbnQpO1xcbjE1OTU6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcXG4xNTk2OlxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xcbjE1OTc6XFx0XFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XFxuMTU5ODpcXHRcXHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHI7XFxuMTU5OTpcXHRcXHRzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODoyOS4yNjk2MTEyMloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYxMjAzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBzZWVpbmcgdGhvc2UgYGZzL250ZnNgIGZ1bmN0aW9ucyBsaWtlIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCwgYW5kIHNvIG9uLCBpdCdzIGNsZWFyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgKmZ1bGx5IGZ1bmN0aW9uYWwqIGFuZCByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIEdvb2QuIE5vdywgdGhhdCBwYXRjaOKApiBsZXQncyBzZWUsIGl0IGludHJvZHVjZXMgYSBjaGVjazogYGlmICgodTMyKWkgXHUwMDNlIGliX2NhcClgIHdpdGhpbiBgbnRmc19pcl90b19pYmAuIFJpZ2h0LCBzbyBpZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCBmcmVlcyBgaWJgIGFuZCByZXR1cm5zIGBOVUxMYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiwgaW1wYWN0aW5nIGhvdyB0aGUgY29kZSBoYW5kbGVzIGludGVybmFsIGJ1ZmZlciBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBOVEZTX0ZTYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludDsgaXQncyB0aGUgbWFpbiBjb25maWcgZm9yIHRoZSB3aG9sZSBmaWxlc3lzdGVtLiBIbW0sIGlzIHRoYXQgKmFsbCogdGhvdWdoPyBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIHJldmlzaXQgYGZzL250ZnMvS2NvbmZpZ2AuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjM0LjQzMDgxNzU1NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlRGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXFxuICAgODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTE6XFx0XFx0ICBudGZzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTlRGU19ERUJVR1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XFxuICAxODpcXHRcXHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcXG4gIDE5OlxcdFxcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xcbiAgMjA6XFx0XFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcXG4gIDIxOlxcdFxcdCAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLCBzdXBwbHkgdGhlIG9wdGlvbiBkZWJ1Z19tc2dzPTFcXG4gIDIyOlxcdFxcdCAgYXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgd2hlbiBib290aW5nIHRoZSBrZXJuZWwgb3IgYXMgYW4gb3B0aW9uXFxuICAyMzpcXHRcXHQgIHRvIGluc21vZCB3aGVuIGxvYWRpbmcgdGhlIG50ZnMgbW9kdWxlLiAgT25jZSB0aGUgZHJpdmVyIGlzIGFjdGl2ZSxcXG4gIDI0OlxcdFxcdCAgeW91IGNhbiBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGJ5IGRvaW5nIChhcyByb290KTpcXG4gIDI1OlxcdFxcdCAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcXG4gIDI2OlxcdFxcdCAgUmVwbGFjaW5nIHRoZSBcXFwiMVxcXCIgd2l0aCBcXFwiMFxcXCIgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXFxuICAyOTpcXHRcXHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XFxuICAzMDpcXHRcXHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgV2hlbiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZlxcbiAgMzM6XFx0XFx0ICBkZWJ1Z2dpbmcgbWVzc2FnZXMgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDM4OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgYWRkaXRpb25hbCBhY2Nlc3MgcmlnaHRzXFxuICA0MTpcXHRcXHQgIGZvciB1c2VycyBhbmQgZ3JvdXBzIGJleW9uZCB0aGUgc3RhbmRhcmQgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxcbiAgNDQ6XFx0XFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjM0LjQzMDkwMjUwNloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxMzYxMjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBJbmRleGluZyBGdW5jdGlvbmFsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYE5URlNfRlNgLiBSaWdodCwgYE5URlNfRlNgICppcyogdGhlIGNvbmZpZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBudGZzX2lyX3RvX2liYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gYSBzeXNjYWxsLlxuXG5MZXQncyB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSXQgbG9va3MgbGlrZSBgbnRmc19pcl90b19pYmAgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX3JlcGFyZW50YCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIFRoYXQncyBjYWxsZWQgYnkgYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYW5kIGZpbmFsbHkgdG8gYF9fbnRmc19jcmVhdGVgLCB3aGljaCBnZXRzIGNhbGxlZCBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtub2RgLiBTbywgdGhlcmUncyBhIGNsZWFyIHBhdGggZnJvbSBmaWxlIGNyZWF0aW9uIHRocm91Z2ggdGhlIGNhbGwgY2hhaW4gdG8gdGhlIG1haW4gZnVuY3Rpb24uXG5cbkhhbmcgb24sIHRoZXJlJ3MgYW5vdGhlciBwYXRoISBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBhbHNvIGNhbGxlZCBieSBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgd2hpY2ggaXRzZWxmIGZlZWRzIGludG8gYG50ZnNfaWJfc3BsaXRgLCBhbmQgdGhlbiBmaW5hbGx5IHRvIGBudGZzX2llX2FkZGAuIEFuZCB0aGVyZSdzIG1vcmUhIGBudGZzX2lyX21ha2Vfc3BhY2VgIGdldHMgY2FsbGVkIGJ5IGBudGZzX2luZGV4X3JtX25vZGVgLCB0aGVuIGBudGZzX2loX3Rha2VvdXRgLCBhbmQgZmluYWxseSBieSBgbnRmc19pbmRleF9yZW1vdmVgLCB3aGljaCBpcyBsaW5rZWQgdG8gYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgLCBhbmQgYG50ZnNfcmVuYW1lYC5cblxuT2theSwgc28gdGhpcyBgbnRmc19pcl90b19pYmAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBib3RoIGZpbGUgY3JlYXRpb24gKmFuZCogZmlsZSBkZWxldGlvbiBwYXRocy4gVGhhdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IGVudHJ5cG9pbnQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuXG5cbkhlcmUgYXJlIHRoZSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGFuIGV5ZSBvbjogYG50ZnNfaXJfdG9faWJgLCBgbnRmc19pcl9yZXBhcmVudGAsIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBgbnRmc19pZV9hZGRgLCBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLCBgbnRmc19pbmRleF9ybV9ub2RlYCwgYG50ZnNfaWhfdGFrZW91dGAsIGFuZCBgbnRmc19pbmRleF9yZW1vdmVgLlxuXG5Ob3csIGxldCdzIHBpY2sgYSBmZXcgb2YgdGhlc2UgdG8gZm9jdXMgb24gZm9yIG5vdy4gYG50ZnNfaXJfdG9faWJgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0IEknbSBpbnRlcmVzdGVkIGluIGFuZCBgbnRmc19pcl9yZXBhcmVudGAgY2FsbHMgdGhlIGZ1bmN0aW9uLiBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyB0aGUgY2FsbGVyIG9mIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgbG9va3MgbGlrZSBgbnRmc19pZV9hZGRgIGFsc28gY2FsbHMgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIEFuZCBoZXksIGBudGZzX2luZGV4X3JtX25vZGVgIGlzIGFub3RoZXIgY2FsbGVyIG9mIGBudGZzX2lyX21ha2Vfc3BhY2VgLlxuXG5MZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBudGZzX2lyX3RvX2liYCBkb2Vzbid0IGhhdmUgb3RoZXIgZGlyZWN0IGNhbGxlcnMgdG8gY29uZmlybSB0aGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODo0NS40NDQ1MTcyNjNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDg4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaXJfdG9faWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTEwNzM9c3RhdGljIHM2NCBudGZzX2libV9nZXRfZnJlZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTEwOC1cXG5mcy9udGZzL2luZGV4LmM6MTEwOTpzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcXG5mcy9udGZzL2luZGV4LmMtMTExMC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTI0OT1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyODYtXFxuZnMvbnRmcy9pbmRleC5jOjEyODc6XFx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcXG5mcy9udGZzL2luZGV4LmMtMTI4OC1cXHRpZiAoaWIgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODo0NS41MDIwMTA5MjJaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0OTA3NDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzaW5nIG9uIE5URlMgUmVwYXJlbnRpbmcqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY29wZSBpcyBjbGVhcjogSSdtIHNvbGVseSBpbnRlcmVzdGVkIGluIHRoZSBgbnRmc19pcl9yZXBhcmVudGAgZnVuY3Rpb24uIE5vIG5lZWQgdG8gZ2V0IGRpc3RyYWN0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGFyZWFzIGZvciBub3cuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgKmhvdyogaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgYWxsIHRoZSAqY2FsbGVycyogb2YgYG50ZnNfaXJfcmVwYXJlbnRgLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSBhbmQgdGhlIHN1cnJvdW5kaW5nIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6NTEuNzUxMDg4ODYyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5Mzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjUxLjgwOTU5MTM4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzE5MDEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGEgYm91bmRzIGNoZWNrIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgYG50ZnNfaXJfdG9faWJgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnZlcnNpb24gb2YgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jayB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLlxuXG5UaGlua2luZyBhYm91dCB0aGUgZmlsZXN5c3RlbSdzIG9wZXJhdGlvbmFsIGZsb3csIEkgaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGlzIGlzIHJlbGV2YW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgaW5kZXggYmxvY2tzIGFuZCB0cmlnZ2VyIHRoZSBuZWVkIHRvIG1ha2Ugc3BhY2UgYXJlIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCwgYG50ZnNfdW5saW5rYCwgYW5kIGBudGZzX3JtZGlyYC4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGRpcmVjdG9yeSBtYW5pcHVsYXRpb25zLCBsaWtlIGZpbGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uLiBUaGVzZSBtYW5pcHVsYXRpb25zIHRyaWdnZXIgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYW5kIGBudGZzX2lyX3JlcGFyZW50YCDigJMgSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5Db25zaWRlcmluZyB0aGlzIGNvbnRleHQsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgYG50ZnNfaXJfdG9faWJgLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2XigJRib3VuZHMgY2hlY2tpbmfigJRpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZC4gVGhlIGNvbmZpZ3VyYXRpb24gYE5URlNfRlNgIHNob3VsZCBiZSBpbiBmb2N1cyBkdXJpbmcgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNzUsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjU4Ljg0MTQ5NjA2NVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODg0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pcl90b19pYlwiLFxuICAgIFwibnRmc19pcl9yZXBhcmVudFwiLFxuICAgIFwibnRmc19pcl9tYWtlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgbnRmc19pcl90b19pYmAgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24gd2hlbiBjb252ZXJ0aW5nIGFuIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYmxvY2suIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGR1cmluZyBkaXJlY3RvcnkgaW5kZXggbWFuaXB1bGF0aW9ucywgc3VjaCBhcyBmaWxlIGNyZWF0aW9uIChgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmApIG9yIGRlbGV0aW9uIChgbnRmc191bmxpbmtgLCBgbnRmc19ybWRpcmApLCB3aGljaCB0cmlnZ2VyIGBudGZzX2lyX21ha2Vfc3BhY2VgIGFuZCBgbnRmc19pcl9yZXBhcmVudGAuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaXJfdG9faWJcIixcbiAgICBcIm50ZnNfaXJfcmVwYXJlbnRcIixcbiAgICBcIm50ZnNfaXJfbWFrZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowwq5pr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 13:50:36 +0000 UTC FinishedAt: 2026-07-16 14:09:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "37e2f878a7a660a216cc7a60459995fefd150f25", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "b2d2ec66-3bb5-4734-88b4-83d7f62ca084" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_ir_to_ib", "ntfs_ir_reparent", "ntfs_ir_make_space" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2Y1NTQ4NGQwOTIwZWMxYjg1OTY4M2IxYzMzNzljNjg1N2EzZjc1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjA1OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xuaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbmRleC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2luZGV4LmNcbkBAIC0xMTEyLDYgJiM0MzsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG4gXHRzdHJ1Y3QgaW5kZXhfZW50cnkgKmllX2xhc3Q7XG4gXHRjaGFyICppZXNfc3RhcnQsICppZXNfZW5kO1xuIFx0aW50IGk7XG4mIzQzO1x0dTMyIGliX2NhcDtcbiBcbiBcdG50ZnNfZGVidWcoXCYjMzQ7RW50ZXJpbmdcXG5cJiMzNDspO1xuIFxuQEAgLTExMjcsNiAmIzQzOzExMjgsMTUgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG4gXHQgKiBhcyB3ZWxsLCB3aGljaCBjYW4gbmV2ZXIgaGF2ZSBhbnkgZGF0YS5cbiBcdCAqL1xuIFx0aSA9IChjaGFyICopaWVfbGFzdCAtIGllc19zdGFydCAmIzQzOyBsZTE2X3RvX2NwdShpZV9sYXN0LVx1MDAzZWxlbmd0aCk7XG4mIzQzO1xuJiM0MztcdC8qIEVudHJpZXMgbXVzdCBmaXQgaW4gdGhlIGFsbG9jYXRlZCBpbmRleCBibG9jayAqL1xuJiM0MztcdGliX2NhcCA9IGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxuJiM0MztcdFx0LSBsZTMyX3RvX2NwdShpYi1cdTAwM2VpbmRleC5lbnRyaWVzX29mZnNldCk7XG4mIzQzO1x0aWYgKCh1MzIpaSBcdTAwM2UgaWJfY2FwKSB7XG4mIzQzO1x0XHRrdmZyZWUoaWIpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcdTAwMjZpYi1cdTAwM2VpbmRleCksIGllc19zdGFydCwgaSk7XG4gXG4gXHRpYi1cdTAwM2VpbmRleC5mbGFncyA9IGlyLVx1MDAzZWluZGV4LmZsYWdzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzZjU1NDg0ZDA5MjBlYzFiODU5NjgzYjFjMzM3OWM2ODU3YTNmNzUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMTQ6MDU6NDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9udGZzL2luZGV4LmMgYi9mcy9udGZzL2luZGV4LmMKaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NAotLS0gYS9mcy9udGZzL2luZGV4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9pbmRleC5jCkBAIC0xMTEyLDYgJiM0MzsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pCiAJc3RydWN0IGluZGV4X2VudHJ5ICppZV9sYXN0OwogCWNoYXIgKmllc19zdGFydCwgKmllc19lbmQ7CiAJaW50IGk7CiYjNDM7CXUzMiBpYl9jYXA7CiAKIAludGZzX2RlYnVnKCYjMzQ7RW50ZXJpbmdcbiYjMzQ7KTsKIApAQCAtMTEyNyw2ICYjNDM7MTEyOCwxNSBAQCBzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbikKIAkgKiBhcyB3ZWxsLCB3aGljaCBjYW4gbmV2ZXIgaGF2ZSBhbnkgZGF0YS4KIAkgKi8KIAlpID0gKGNoYXIgKilpZV9sYXN0IC0gaWVzX3N0YXJ0ICYjNDM7IGxlMTZfdG9fY3B1KGllX2xhc3QtJmd0O2xlbmd0aCk7CiYjNDM7CiYjNDM7CS8qIEVudHJpZXMgbXVzdCBmaXQgaW4gdGhlIGFsbG9jYXRlZCBpbmRleCBibG9jayAqLwomIzQzOwlpYl9jYXAgPSBsZTMyX3RvX2NwdShpYi0mZ3Q7aW5kZXguYWxsb2NhdGVkX3NpemUpCiYjNDM7CQktIGxlMzJfdG9fY3B1KGliLSZndDtpbmRleC5lbnRyaWVzX29mZnNldCk7CiYjNDM7CWlmICgodTMyKWkgJmd0OyBpYl9jYXApIHsKJiM0MzsJCWt2ZnJlZShpYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCW1lbWNweShudGZzX2llX2dldF9maXJzdCgmYW1wO2liLSZndDtpbmRleCksIGllc19zdGFydCwgaSk7CiAKIAlpYi0mZ3Q7aW5kZXguZmxhZ3MgPSBpci0mZ3Q7aW5kZXguZmxhZ3M7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL2luZGV4LmNgIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNoZWNrIHdpdGhpbiBgbnRmc19pcl90b19pYmA6IGBpZiAoKHUzMilpICZndDsgaWJfY2FwKWAuIElmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGBpYmAgZ2V0cyBmcmVlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYE5VTExgLiBSaWdodCwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBpcyB0aGlzIGNvZGUgcGF0aCBldmVuICpyZWFjaGFibGUqPyBBbmQgd2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IFdoYXQgY29uZmlndXJhdGlvbnMgYXJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8mIzM0OwoKRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG50ZnNfaXJfdG9faWJgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBmcy9udGZzL2luZGV4LmNgIGFuZCBwb3RlbnRpYWxseSBiZXlvbmQuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgYW5kIGRldGVybWluZSBpZiB0aGlzIGNoZWNrIGlzIGEgbGVnaXRpbWF0ZSBpbXByb3ZlbWVudCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2VzIGEgbmV3IGVkZ2UgY2FzZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHBvdGVudGlhbCBgTlVMTGAgcmV0dXJuIHRvIGVuc3VyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pcl90b19pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5kZXguYz0xMDczPXN0YXRpYyBzNjQgbnRmc19pYm1fZ2V0X2ZyZWUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMTA4LVxuZnMvbnRmcy9pbmRleC5jOjExMDk6c3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG5mcy9udGZzL2luZGV4LmMtMTExMC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNDk9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI4Ni1cbmZzL250ZnMvaW5kZXguYzoxMjg3Olx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcbmZzL250ZnMvaW5kZXguYy0xMjg4LVx0aWYgKGliID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIE5URlMgSW5kZXggUm9vdCB0byBJbmRleCBCdWZmZXIgUmVwYXJlbnRpbmcgTG9naWMqKgoKUmlnaHQsIGBudGZzX2lyX3RvX2liYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX3JlcGFyZW50YC4gT2theSwgbWFrZXMgc2Vuc2UuIFdlJiMzOTtyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBhIHJlcGFyZW50aW5nIHNjZW5hcmlvIHdpdGhpbiB0aGUgTlRGUyBpbmRleCBzdHJ1Y3R1cmUgYW5kIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIG9yIG1pZ3JhdGluZyBkYXRhIGZyb20gdGhlIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYnVmZmVyLiBTbywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gVGhlIG1vcmUgcHJlc3NpbmcgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoZXJlICpleGFjdGx5KiBpcyBgbnRmc19pcl9yZXBhcmVudGAgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2FsbCB0byByZWFsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgdHJpZ2dlcnMgdGhhdCBsZWFkIHRvIHRoaXMgc3BlY2lmaWMgaW5kZXggb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCYjMzk7cyB3b3JraW5nIHRocm91Z2ggdGhpcy4uLgoKKipUcmFjaW5nIHRoZSBOVEZTIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKgoKUmlnaHQsIGBudGZzX2lyX3JlcGFyZW50YCBpcyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGF0JiMzOTtzIGEga2V5IHJlbGF0aW9uc2hpcCB0byB1bmRlcnN0YW5kLiBOb3csIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gV2hlcmUgaXMgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYmVpbmcgaW52b2tlZD8gRmluZGluZyB0aGUgdXBzdHJlYW0gY2FsbHMgdG8gYG50ZnNfaXJfbWFrZV9zcGFjZWAgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIHJlcGFyZW50aW5nIG9wZXJhdGlvbiBpcyBoYXBwZW5pbmcuIEl0JiMzOTtzIGFsbCBhYm91dCBmb2xsb3dpbmcgdGhlIGRhdGEgYW5kIHRoZSBleGVjdXRpb24gcGF0aCB0byBmaWd1cmUgb3V0IHRoZSBiaWdnZXIgcGljdHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBnaXZlcyBtZSB0aGUgYmVzdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lyX21ha2Vfc3BhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTM3OD1zdGF0aWMgaW50IG50ZnNfaXJfdHJ1bmNhdGUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDE0LS8qXG5mcy9udGZzL2luZGV4LmM6MTQxNTogKiBudGZzX2lyX21ha2Vfc3BhY2UgLSBNYWtlIG1vcmUgc3BhY2UgZm9yIHRoZSBpbmRleCByb290IGF0dHJpYnV0ZVxuZnMvbnRmcy9pbmRleC5jLTE0MTYtICogQGljeDogaW5kZXggY29udGV4dFxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDE4LSAqL1xuZnMvbnRmcy9pbmRleC5jOjE0MTk6c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuZnMvbnRmcy9pbmRleC5jLTE0MjAte1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNDkzPXN0YXRpYyBpbnQgbnRmc19pcl9pbnNlcnRfbWVkaWFuKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICptZWRpYW4sXG4tLVxuZnMvbnRmcy9pbmRleC5jLTE1MDktXG5mcy9udGZzL2luZGV4LmM6MTUxMDpcdHJldCA9IG50ZnNfaXJfbWFrZV9zcGFjZShpY3gsIG5ld19zaXplKTtcbmZzL250ZnMvaW5kZXguYy0xNTExLVx0aWYgKHJldClcbi0tXG5mcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjc5LVx0XHRpZiAoaWN4LVx1MDAzZWlzX2luX3Jvb3QpXG5mcy9udGZzL2luZGV4LmM6MTY4MDpcdFx0XHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XG5mcy9udGZzL2luZGV4LmMtMTY4MS1cdFx0ZWxzZVxuLS1cbmZzL250ZnMvaW5kZXguYz0xODgyPXN0YXRpYyBpbnQgbnRmc19pbmRleF9ybV9ub2RlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTk1MS1cdFx0aWYgKGljeC1cdTAwM2Vpc19pbl9yb290KSB7XG5mcy9udGZzL2luZGV4LmM6MTk1MjpcdFx0XHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XG5mcy9udGZzL2luZGV4LmMtMTk1My1cdFx0XHRpZiAocmV0ICE9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOVEZTIEluZGV4IE9wZXJhdGlvbnMqKgoKT2theSwgc28gYG50ZnNfaXJfbWFrZV9zcGFjZWAgaXMgdXNlZCBpbiBhIGZldyBrZXkgTlRGUyBpbmRleCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgYG50ZnNfaWVfYWRkYCwgYW5kIGBudGZzX2luZGV4X3JtX25vZGVgLiBUaGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCBmb3IgYW55IGluZGV4IGltcGxlbWVudGF0aW9uLCBjYXJ2aW5nIG91dCBzcGFjZSBmb3IgbmV3IGVudHJpZXMsIHJpZ2h0PyBHaXZlbiB0aGUgbmFtZXMsIHRoZXNlIHNlZW0gbGlrZSBmdW5kYW1lbnRhbCBvcGVyYXRpb25zIGZvciBtYWludGFpbmluZyB0aGUgaW5kZXggc3RydWN0dXJlIHdpdGhpbiBOVEZTLiBJZiB0aGUgY29kZSYjMzk7cyB0aGVyZSwgdGhlbiBpdCYjMzk7cyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGlmIE5URlMgaXMgZW5hYmxlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBOVEZTIGlzIGVuYWJsZWQsIHJpZ2h0PyBUaW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb25maXJtIE5URlMgaXMgY29tcGlsZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xuZnMvbnRmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcbi0tXG5mcy9udGZzL0tjb25maWctMzQtXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG5mcy9udGZzL0tjb25maWctMzYtXHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byBOVEZTIFdyaXRlIFN1cHBvcnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgTlRGU19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24sIHJpZ2h0PyBCdXQgSSBuZWVkIHRvIG5haWwgZG93biB3aGV0aGVyIHRoaXMgc2luZ2xlIG9wdGlvbiBlbmNvbXBhc3NlcyB0aGUgd2hvbGUgZmlsZSBzeXN0ZW0gc2V0dXAsIG9yIGlmIHRoZXJlJiMzOTtzIGEgc2VwYXJhdGUgZmxhZyBzcGVjaWZpY2FsbHkgZm9yIGVuYWJsaW5nIHdyaXRlIHN1cHBvcnQuIEl0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLgoKVGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBnb2luZyB0byBmaW5kIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGF0ZWQgYnVpbGQgZmxhZ3MsIGFuZCB0aGUgYW5zd2VyIHRvIG15IGNydWNpYWwgcXVlc3Rpb24uIERpZ2dpbmcgaW4gdGhlcmUgc2hvdWxkIGNsYXJpZnkgaWYgYE5URlNfRlNgIGNvbnRyb2xzIHJlYWQtb25seSAqYW5kKiB3cml0ZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCYjMzk7cyBtb3JlIG51YW5jZWQgdGhhbiB0aGF0LiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgTlRGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgTkxTXG4gICA1Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxuICAgODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXG4gIDExOlx0XHQgIG50ZnMuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5URlNfREVCVUdcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGFueSBwcm9ibGVtcyB3aXRoIHRoZSBOVEZTIGZpbGUgc3lzdGVtLCBzYXlcbiAgMTg6XHRcdCAgWSBoZXJlLiAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyB0byBiZVxuICAxOTpcdFx0ICBwZXJmb3JtZWQgYnkgdGhlIGRyaXZlciBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgZGVidWdnaW5nIG1lc3NhZ2VzIHRvXG4gIDIwOlx0XHQgIGJlIHdyaXR0ZW4gdG8gdGhlIHN5c3RlbSBsb2cuICBOb3RlIHRoYXQgZGVidWdnaW5nIG1lc3NhZ2VzIGFyZVxuICAyMTpcdFx0ICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgVG8gZW5hYmxlIHRoZW0sIHN1cHBseSB0aGUgb3B0aW9uIGRlYnVnX21zZ3M9MVxuICAyMjpcdFx0ICBhdCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB3aGVuIGJvb3RpbmcgdGhlIGtlcm5lbCBvciBhcyBhbiBvcHRpb25cbiAgMjM6XHRcdCAgdG8gaW5zbW9kIHdoZW4gbG9hZGluZyB0aGUgbnRmcyBtb2R1bGUuICBPbmNlIHRoZSBkcml2ZXIgaXMgYWN0aXZlLFxuICAyNDpcdFx0ICB5b3UgY2FuIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgYnkgZG9pbmcgKGFzIHJvb3QpOlxuICAyNTpcdFx0ICBlY2hvIDEgXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXG4gIDI2Olx0XHQgIFJlcGxhY2luZyB0aGUgXCYjMzQ7MVwmIzM0OyB3aXRoIFwmIzM0OzBcJiMzNDsgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cbiAgMjc6XHRcbiAgMjg6XHRcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxuICAyOTpcdFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxuICAzMDpcdFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxuICAzMTpcdFxuICAzMjpcdFx0ICBXaGVuIHJlcG9ydGluZyBidWdzLCBwbGVhc2UgdHJ5IHRvIGhhdmUgYXZhaWxhYmxlIGEgZnVsbCBkdW1wIG9mXG4gIDMzOlx0XHQgIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSB0aGUgbWlzYmVoYXZpb3VyIHdhcyBvY2N1cnJpbmcuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXG4gIDM2Olx0XHRib29sIFwmIzM0O05URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gTlRGU19GU1xuICAzODpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICAzOTpcdFx0aGVscFxuICA0MDpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBhZGRpdGlvbmFsIGFjY2VzcyByaWdodHNcbiAgNDE6XHRcdCAgZm9yIHVzZXJzIGFuZCBncm91cHMgYmV5b25kIHRoZSBzdGFuZGFyZCBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuXG4gIDQyOlx0XG4gIDQzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxuICA0NDpcdFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXG4gIDQ1Olx0XG4gIDQ2Olx0XHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXG4gIDQ3Olx0XG4gIDQ4Olx0XHQgIElmIHlvdSBkb24mIzM5O3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNoZWNraW5nIGZvciBOVEZTX1JXIENvbmZpZ3VyYXRpb24qKgoKSG1tLCBub3cgdGhhdCBJJiMzOTttIGNvbnNpZGVyaW5nIHRoaXMsIGEgZGV0YWlsIGlzIG5hZ2dpbmcgYXQgbWUuIFdhc24mIzM5O3QgdGhlcmUgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIE5URlMgcmVhZC93cml0ZSBmdW5jdGlvbmFsaXR5IHRoYXQgSSBuZWVkIHRvIGNoZWNrPyBZZXMsIG5vdyBJIHJlbWVtYmVyLCBJIHRoaW5rIGl0JiMzOTtzIGNhbGxlZCBgTlRGU19SV2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV4aXN0cyBhbmQgaXMgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG92ZXJsb29rZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGhvdyB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gaXMgaW50ZW5kZWQgdG8gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TlRGU19SVyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5URlMgRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uIENvbmZ1c2lvbioqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgTlRGU19SV2Agd2FzIHJlbW92ZWQ/IFRoYXQgZG9lc24mIzM5O3Qgc291bmQgcmlnaHQuIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBmcy9udGZzL0tjb25maWdgLiBSaWdodCwgaGVyZSB3ZSBnby4uLiBIbW0sIGl0IGRvZXMgc2VlbSB0byBiZSBtaXNzaW5nLiBPa2F5LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBpdC4gTGV0JiMzOTtzIG5vdCBhc3N1bWUgSSBrbm93IHRoZSBmaWxlIGNvbnRlbnRzLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IHJldmlldyB0aGUgZW50aXJlIGBmcy9udGZzL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgc3VidGxldHkgb3IgcmVsb2NhdGlvbiBJIG1pc3NlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5maWxlIGZzL250ZnMvS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgNDksIGl0IGhhcyBvbmx5IDQ4IGxpbmVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIGZzL250ZnMvS2NvbmZpZyBkb2VzIG5vdCBoYXZlIGxpbmUgNDksIGl0IGhhcyBvbmx5IDQ4IGxpbmVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKgoKUmlnaHQsIHNvIEkgcmVtZW1iZXIgaGVhcmluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRlcHJlY2F0ZWQgb3IgcmVtb3ZlZCByZWNlbnRseSwgbWF5YmUgYXJvdW5kIDIwMjQ/IEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCB0aGUgZXhhY3QgZGV0YWlscy4gV2FzIGl0IGJlY2F1c2UgYG50ZnMzYCBiZWNhbWUgdGhlIG5ldyBkZWZhdWx0PyBPciBtYXliZSBgbnRmc2AgaXRzZWxmIGlzIG5vdyByZWFkLW9ubHkgYnkgZGVmYXVsdCwgYW5kIHRoZXkgc3BlY2lmaWNhbGx5IHB1bGxlZCBvdXQgdGhlIHdyaXRlIHN1cHBvcnQ/IEl0JiMzOTtzIGFsbCBhIGJpdCBoYXp5LiBIb2xkIG9uLCB3YXNuJiMzOTt0IEkgbG9va2luZyBhdCBzb21lIGBudGZzX2lyX3JlcGFyZW50YCBjYWxscyByZWNlbnRseT8gQWggeWVzLCB0aGF04oCZcyBjYWxsZWQgZnJvbSBgbnRmc19pcl9tYWtlX3NwYWNlYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgbnRmc19pZV9hZGRgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB3cml0ZSBvcGVyYXRpb25zISBJZiB0aGV54oCZcmUgc3RpbGwgdGhlcmUgdGhhdCBzdWdnZXN0cyB0aGF0IHRoZSB3cml0ZSBjb2RlIGhhc24mIzM5O3QgYmVlbiByZW1vdmVkLCBidXQgaGFzIGp1c3QgY2hhbmdlZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgb3V0IG1vcmUgaXMgcHJvYmFibHkgaW4gYGZzL250ZnMvaW5kZXguY2AuIFRpbWUgdG8gc2VlIGlmIHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBwcmVzZW50IHdpdGhpbiB0aGUgY29kZWJhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzOgoKKipDaGVja2luZyB0aGUgQnVpbGQgU3RhdHVzIG9mIGBudGZzX2lyX3JlcGFyZW50YCoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgcmVhZHkgdG8gZ28uIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGl0JiMzOTtzIHBhcnQgb2YgdGhlIGN1cnJlbnQgYnVpbGQgY29uZmlndXJhdGlvbi4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gYW55dGhpbmcgZWxzZSwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgd2FudCB0byBhdm9pZCB3YXN0aW5nIHRpbWUgZGVidWdnaW5nIGlzc3VlcyB0aGF0IHNpbXBseSBzdGVtIGZyb20gYSBtaXNzaW5nIG9yIG91dGRhdGVkIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBsaW5rZXIgd2lsbCBmaW5kIGl0LCBvciB3aGV0aGVyIEkgbmVlZCB0byByZXZpc2l0IHRoZSBidWlsZCBzY3JpcHRzLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgSSBvZnRlbiBvdmVybG9vayBpbiB0aGUgaGVhdCBvZiBjb2RpbmcsIHNvIEkmIzM5O20gbWFraW5nIGl0IGEgcHJpb3JpdHkgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudGZzX2lyX3JlcGFyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbmRleC5jPTEyMjM9c3RhdGljIGludCBudGZzX2lhX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG4tLVxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXG5mcy9udGZzL2luZGV4LmM6MTI0OTpzdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuZnMvbnRmcy9pbmRleC5jLTEyNTAte1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNDE5PXN0YXRpYyBpbnQgbnRmc19pcl9tYWtlX3NwYWNlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgaW50IGRhdGFfc2l6ZSlcbi0tXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cdGlmIChyZXQgPT0gLUVOT1NQQykge1xuZnMvbnRmcy9pbmRleC5jOjE0Mjc6XHRcdHJldCA9IG50ZnNfaXJfcmVwYXJlbnQoaWN4KTtcbmZzL250ZnMvaW5kZXguYy0xNDI4LVx0XHRpZiAoIXJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgZnMvbnRmcy9pbmRleC5jYCoqCgpSaWdodCwgc28gYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFwcGFyZW50bHkgZGVmaW5lZCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGlzIHRoaXMgZmlsZSBldmVuIGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBtb2R1bGUgb3IgaW1hZ2UgSSYjMzk7bSB3b3JraW5nIHdpdGg/JiMzNDsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBpdCYjMzk7cyBpbmNsdWRlZCBhbmQgYXZhaWxhYmxlLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgcHJvY2VzcyB0byBzZWUgaWYgdGhhdCBzcGVjaWZpYyBmaWxlLCBgZnMvbnRmcy9pbmRleC5jYCwgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwOyBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmRleFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX05URlNfRlMpICYjNDM7PSBudGZzLm9cbmZzL250ZnMvTWFrZWZpbGUtNC1cbmZzL250ZnMvTWFrZWZpbGU6NTpudGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTYtXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QgaGVyZS4KCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKQWxyaWdodCwgY29uZmlybWVkIOKAkyBgaW5kZXgub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBzdHJ1Y3R1cmVzLiBMZXQmIzM5O3Mgc2VlLi4uIElzIHRoaXMgZnVuY3Rpb24sIGBudGZzX2lyX3RvX2liYCwgYWNjZXNzaWJsZT8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgbnRmc19pcl9yZXBhcmVudGAuIEFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG50ZnNfaXJfbWFrZV9zcGFjZWAuIE9rYXksIHRoYXQmIzM5O3Mgc3RhcnRpbmcgdG8gcGFpbnQgdGhlIG91dGxpbmUgb2YgdGhlIGNhbGwgc3RhY2suLi4gQW5kLCBmaW5hbGx5LCBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBjYWxsZWQgZnJvbSBgbnRmc19pZV9hZGRgLiAKCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG50ZnNfaWVfYWRkYCBpcyB1c2VkLiBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGl0LiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGF0IHBhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaWVfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDM5LSAqL1xuZnMvbnRmcy9pbmRleC5jOjE0NDA6c3RhdGljIGludCBudGZzX2llX2FkZF92Y24oc3RydWN0IGluZGV4X2VudHJ5ICoqaWUpXG5mcy9udGZzL2luZGV4LmMtMTQ0MS17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0NTQ9c3RhdGljIGludCBudGZzX2loX2luc2VydChzdHJ1Y3QgaW5kZXhfaGVhZGVyICppaCwgc3RydWN0IGluZGV4X2VudHJ5ICpvcmlnX2llLCBzNjQgbmV3X3Zjbixcbi0tXG5mcy9udGZzL2luZGV4LmMtMTQ2Ni1cdGlmICghKGllLVx1MDAzZWZsYWdzIFx1MDAyNiBJTkRFWF9FTlRSWV9OT0RFKSkge1xuZnMvbnRmcy9pbmRleC5jOjE0Njc6XHRcdHJldCA9IG50ZnNfaWVfYWRkX3ZjbihcdTAwMjZpZSk7XG5mcy9udGZzL2luZGV4LmMtMTQ2OC1cdFx0aWYgKHJldClcbi0tXG5mcy9udGZzL2luZGV4LmM9MTU3ND1zdGF0aWMgaW50IG50ZnNfaWJfc3BsaXQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfYmxvY2sgKmliKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjQ1LVxuZnMvbnRmcy9pbmRleC5jOjE2NDY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSlcbmZzL250ZnMvaW5kZXguYy0xNjQ3LXtcbi0tXG5mcy9udGZzL2luZGV4LmM9MTcwND1pbnQgbnRmc19pbmRleF9hZGRfZmlsZW5hbWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuLCB1NjQgbXJlZilcbi0tXG5mcy9udGZzL2luZGV4LmMtMTczNS1cbmZzL250ZnMvaW5kZXguYzoxNzM2Olx0ZXJyID0gbnRmc19pZV9hZGQoaWN4LCBpZSk7XG5mcy9udGZzL2luZGV4LmMtMTczNy1cdG50ZnNfaW5kZXhfY3R4X3B1dChpY3gpO1xuLS1cbmZzL250ZnMvaW5kZXguYz0xNzQzPXN0YXRpYyBpbnQgbnRmc19paF90YWtlb3V0KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2hlYWRlciAqaWgsXG4tLVxuZnMvbnRmcy9pbmRleC5jLTE3ODAtXG5mcy9udGZzL2luZGV4LmM6MTc4MTpcdHJldCA9IG50ZnNfaWVfYWRkKGljeCwgaWVfcm9hbSk7XG5mcy9udGZzL2luZGV4LmMtMTc4Mi1vdXQ6XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE4ODI9c3RhdGljIGludCBudGZzX2luZGV4X3JtX25vZGUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xOTM2LVxuZnMvbnRmcy9pbmRleC5jOjE5Mzc6XHRyZXQgPSBudGZzX2llX2FkZF92Y24oXHUwMDI2aWUpO1xuZnMvbnRmcy9pbmRleC5jLTE5MzgtXHRpZiAocmV0KVxuLS1cbmZzL250ZnMvaW5kZXguaD0xMTU9dm9pZCBudGZzX2luZGV4X2N0eF9yZWluaXQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KTtcbmZzL250ZnMvaW5kZXguaDoxMTY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSk7XG5mcy9udGZzL2luZGV4LmgtMTE3LWludCBudGZzX2ljeF9pYl9zeW5jX3dyaXRlKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCk7XG4tLVxuZnMvbnRmcy9yZXBhcnNlLmM9NDgwPXN0YXRpYyBpbnQgc2V0X3JlcGFyc2VfaW5kZXgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcbi0tXG5mcy9udGZzL3JlcGFyc2UuYy01MDItXG5mcy9udGZzL3JlcGFyc2UuYzo1MDM6XHRyZXR1cm4gbnRmc19pZV9hZGQoeHIsIChzdHJ1Y3QgaW5kZXhfZW50cnkgKilcdTAwMjZpbmR4KTtcbmZzL250ZnMvcmVwYXJzZS5jLTUwNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBpcyBiZWluZyBjYWxsZWQgZnJvbS4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHdoZW4gZGVidWdnaW5nLCBvcHRpbWl6aW5nLCBvciBldmVuIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiBleGVjdXRpb24gd2l0aGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gY29kZS4gSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzdGF0aWMgYW5hbHlzaXMsIHVzaW5nIGBncmVwYCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIGJyb3dzZXIsIHRvIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBpcyByZWZlcmVuY2VkLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBzb3J0IHRocm91Z2ggdGhlIHJlc3VsdHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICpkaXJlY3QqIGNhbGxlcnMsIG5vdCBqdXN0IGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGV2ZW50dWFsbHkgY2FsbCBpdC4gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OyBpcyBpdCBjYWxsZWQgd2l0aGluIGFuIGBpZmAgYmxvY2ssIGEgbG9vcCwgb3IgYSBzcGVjaWZpYyBmdW5jdGlvbj8gV2hhdCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgaW4gcGxheT8gS25vd2luZyB0aGUgY29uZGl0aW9ucyBhcm91bmQgdGhlIGNhbGwgd2lsbCBiZSBqdXN0IGFzIGltcG9ydGFudCBhcyBrbm93aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbCBpdHNlbGYuCgpJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnB1cnBvc2UqIG9mIHRoZSBjYWxsZXIuIFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBpbnZva2VzIHRoaXMgZnVuY3Rpb24/IElzIGl0IGFkZGluZyBhIG5ldyBmaWxlLCByZW5hbWluZyBhbiBleGlzdGluZyBvbmUsIG9yIHVwZGF0aW5nIGFuIGluZGV4IGVudHJ5PyBUaGUgY2FsbGVyJiMzOTtzIGludGVudCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgaW5zaWdodHMgaW50byB0aGUgYmVoYXZpb3Igb2YgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gQXJlIHdlIGluIHRoZSBtZXRhZGF0YSB1cGRhdGVzIG9yIGFyZSB3ZSBzdGlsbCBpbiB0aGUgaW5kZXhpbmcgaXRzZWxmPwoKSWYgc3RhdGljIGFuYWx5c2lzIGRvZXNuJiMzOTt0IGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIGRlYnVnZ2VyIHdpbGwgYmUgbmV4dC4gSSYjMzk7bGwgc2V0IGEgYnJlYWtwb2ludCBhdCB0aGUgZW50cnkgcG9pbnQgb2YgdGhlIGZ1bmN0aW9uIGFuZCBzdGVwIGJhY2t3YXJkIHRocm91Z2ggdGhlIGNhbGwgc3RhY2suIFRoaXMgd2lsbCByZXZlYWwgdGhlIGR5bmFtaWMgZXhlY3V0aW9uIHBhdGgsIHNob3dpbmcgbWUgZXhhY3RseSB3aGljaCBmdW5jdGlvbiBzZXF1ZW5jZXMgbGVhZCB0byB0aGUgY2FsbCBhbmQgdGhlIHZhbHVlcyBvZiBhbnkgY3JpdGljYWwgdmFyaWFibGVzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sIHJldmVhbGluZyB0aGUgY29udGV4dC4gSeKAmWxsIGJlIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlcywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBpbmZvcm1hdGlvbi4KClRoZSBlbmQgZ29hbCBpcyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4ZWN1dGlvbiBwYXRoLCBmcm9tIHRoZSBvcmlnaW5hdGluZyBmdW5jdGlvbiBhbGwgdGhlIHdheSB0byBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyB3aXRoIHRoZSBmaWxlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pbmRleF9hZGRfZmlsZW5hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNjk4LS8qXG5mcy9udGZzL2luZGV4LmM6MTY5OTogKiBudGZzX2luZGV4X2FkZF9maWxlbmFtZSAtIGFkZCBmaWxlbmFtZSB0byBkaXJlY3RvcnkgaW5kZXhcbmZzL250ZnMvaW5kZXguYy0xNzAwLSAqIEBuaTpcdFx0bnRmcyBpbm9kZSBkZXNjcmliaW5nIGRpcmVjdG9yeSB0byB3aGljaCBpbmRleCBhZGQgZmlsZW5hbWVcbi0tXG5mcy9udGZzL2luZGV4LmMtMTcwMy0gKi9cbmZzL250ZnMvaW5kZXguYzoxNzA0OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxuZnMvbnRmcy9pbmRleC5jLTE3MDUte1xuLS1cbmZzL250ZnMvaW5kZXguaD0xMDg9dm9pZCBudGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN0eCk7XG5mcy9udGZzL2luZGV4Lmg6MTA5OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKTtcbmZzL250ZnMvaW5kZXguaC0xMTAtaW50IG50ZnNfaW5kZXhfcmVtb3ZlKHN0cnVjdCBudGZzX2lub2RlICpuaSwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB1MzIga2V5bGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9Mzk0PXN0YXRpYyBzdHJ1Y3QgbnRmc19pbm9kZSAqX19udGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvbnRmcy9uYW1laS5jLTY3Ny1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGluZGV4LiAqL1xuZnMvbnRmcy9uYW1laS5jOjY3ODpcdGVyciA9IG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lKGRpcl9uaSwgZm4sIGNoaWxkX21mdF9yZWYpO1xuZnMvbnRmcy9uYW1laS5jLTY3OS1cdGlmIChlcnIpIHtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTE0OT1zdGF0aWMgaW50IF9fbnRmc19saW5rKHN0cnVjdCBudGZzX2lub2RlICpuaSwgc3RydWN0IG50ZnNfaW5vZGUgKmRpcl9uaSxcbi0tXG5mcy9udGZzL25hbWVpLmMtMTIxNi1cdC8qIEFkZCBGSUxFX05BTUUgYXR0cmlidXRlIHRvIGluZGV4LiAqL1xuZnMvbnRmcy9uYW1laS5jOjEyMTc6XHRlcnIgPSBudGZzX2luZGV4X2FkZF9maWxlbmFtZShkaXJfbmksIGZuLCBNS19NUkVGKG5pLVx1MDAzZW1mdF9ubyxcbmZzL250ZnMvbmFtZWkuYy0xMjE4LVx0XHRcdFx0XHRsZTE2X3RvX2NwdShuaV9tcmVjLVx1MDAzZXNlcXVlbmNlX251bWJlcikpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOVEZTIE1vZHVsZSBDb21waWxhdGlvbiBhbmQgV3JpdGUgU3VwcG9ydCAtIEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBfX250ZnNfY3JlYXRlYCBhbmQgYF9fbnRmc19saW5rYCBhcmUgZGVmaW5pdGVseSBkZWZpbmVkIHdpdGhpbiBgZnMvbnRmcy9uYW1laS5jYC4mIzM0OyBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBmcy9udGZzL25hbWVpLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBzY2FuIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJldmVhbHMgdGhhdCwgeWVzLCBpdCYjMzk7cyBpbmNsdWRlZCB1bmRlciB0aGUgYG50ZnMteWAgZGlyZWN0aXZlLiBFeGNlbGxlbnQsIHNvIGZhciBzbyBnb29kLgoKTm93LCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBkb2VzIHRoZSBgZnMvbnRmc2AgbW9kdWxlICpzdXBwb3J0KiB3cml0ZSBvcGVyYXRpb25zPyBJIGhhZCBhIGZsZWV0aW5nIG1lbW9yeSBvZiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgSSBjb3VsZG4mIzM5O3QgcXVpdGUgcGxhY2UgaXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBBaCwgeWVzLCBJIHJlY2FsbCBub3c6IGBOVEZTX1JXYC4gSXQmIzM5O3MgYWxsIGNvbWluZyBiYWNrIHRvIG1lLiBMZXQgbWUgZ28gYmFjayBhbmQgZ2l2ZSBpdCBhbm90aGVyIG9uY2Utb3Zlci4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODE3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqSHVudGluZyBEb3duIFJlYWQvV3JpdGUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgcmVhZC93cml0ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGZvciB0aGUgTlRGUyBmaWxlc3lzdGVtIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgYW5kIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSYjMzk7ZCBiZSBzdXJwcmlzZWQgaWYgaXQgd2FzbiYjMzk7dCB0aGVyZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGBjb25maWdgIG9wdGlvbiBvciBzb21lIG90aGVyIHZhcmlhYmxlIHRoYXQgSSBjYW4gdHdlYWssIG1heWJlIHNvbWV0aGluZyBsaWtlIGBDT05GSUdfTlRGU19SV2AsIG9yIGEgcmVsYXRlZCBzeW1ib2wuIFRpbWUgdG8gY2hlY2sgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9sYXlvdXQuaD0xNzUyPXN0cnVjdCBzZGhfaW5kZXhfa2V5IHtcbi0tXG5mcy9udGZzL2xheW91dC5oLTE3NjYtICogVk9MVU1FX01PVU5URURfT05fTlQ0OiAgICAgICAgICBNb3VudGVkIG9uIE5UNCAoY29tcGF0aWJpbGl0eSBmbGFnKS5cbmZzL250ZnMvbGF5b3V0Lmg6MTc2NzogKiBWT0xVTUVfREVMRVRFX1VTTl9VTkRFUldBWTogICAgIFVTTiBqb3VybmFsIGRlbGV0aW9uIGluIHByb2dyZXNzLlxuZnMvbnRmcy9sYXlvdXQuaC0xNzY4LSAqIFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEOiAgICAgICAgUmVwYWlyICRPYmpJZCBvbiBuZXh0IG1vdW50LlxuZnMvbnRmcy9sYXlvdXQuaDoxNzY5OiAqIFZPTFVNRV9DSEtEU0tfVU5ERVJXQVk6ICAgICAgICAgQ2hrZHNrIGlzIHJ1bm5pbmcuXG5mcy9udGZzL2xheW91dC5oLTE3NzAtICogVk9MVU1FX01PRElGSUVEX0JZX0NIS0RTSzogICAgICBNb2RpZmllZCBieSBjaGtkc2suXG4tLVxuZnMvbnRmcy9sYXlvdXQuaD0xNzc1PWVudW0ge1xuLS1cbmZzL250ZnMvbGF5b3V0LmgtMTc4MC1cbmZzL250ZnMvbGF5b3V0Lmg6MTc4MTpcdFZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZXHQ9IGNwdV90b19sZTE2KDB4MDAxMCksXG5mcy9udGZzL2xheW91dC5oLTE3ODItXHRWT0xVTUVfUkVQQUlSX09CSkVDVF9JRFx0XHQ9IGNwdV90b19sZTE2KDB4MDAyMCksXG5mcy9udGZzL2xheW91dC5oLTE3ODMtXG5mcy9udGZzL2xheW91dC5oOjE3ODQ6XHRWT0xVTUVfQ0hLRFNLX1VOREVSV0FZXHRcdD0gY3B1X3RvX2xlMTYoMHg0MDAwKSxcbmZzL250ZnMvbGF5b3V0LmgtMTc4NS1cdFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0tcdD0gY3B1X3RvX2xlMTYoMHg4MDAwKSxcbi0tXG5mcy9udGZzL2xheW91dC5oLTE3OTctICogQG1pbm9yX3ZlcjogICAgICBNaW5vciBOVEZTIHZlcnNpb24gbnVtYmVyIChlLmcuLCAxIGZvciBOVEZTIDMuMSkuXG5mcy9udGZzL2xheW91dC5oOjE3OTg6ICogQGZsYWdzOiAgICAgICAgICBWb2x1bWUgZmxhZ3MgKFZPTFVNRV9JU19ESVJUWSwgVk9MVU1FX0NIS0RTS19VTkRFUldBWSwgZXRjLikuXG5mcy9udGZzL2xheW91dC5oLTE3OTktICogICAgICAgICAgICAgICAgICBTZWUgdm9sdW1lIGZsYWdzIGVudW0gZm9yIGRldGFpbHMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkZpbGUgU3lzdGVtIElucXVpcnkqKgoKSG1tLCBJJiMzOTttIGN1cnJlbnRseSBsb29raW5nIGludG8gdGhlIGBmcy9udGZzL2AgZGlyZWN0b3J5LCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gQW0gSSBvdmVybG9va2luZyBhIHBvdGVudGlhbGx5IG1vcmUgcmVjZW50LCBpbXByb3ZlZCB2ZXJzaW9uPyBNeSBpbnR1aXRpb24gaXMgcHJvZGRpbmcgbWUgdG8gY29uc2lkZXIuLi4gaXMgdGhlcmUgYSBgZnMvbnRmczMvYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGF0IHNsaWdodCB1bmNlcnRhaW50eSBpcyBuYWdnaW5nIGF0IG1lLiBQZXJoYXBzIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhhdCBtb3JlIHJlY2VudCB2ZXJzaW9uIGV4aXN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWlvLmMmIzM0OywKICAgICYjMzQ7YW5vbl9pbm9kZXMuYyYjMzQ7LAogICAgJiMzNDthdHRyLmMmIzM0OywKICAgICYjMzQ7YmFja2luZy1maWxlLmMmIzM0OywKICAgICYjMzQ7YmFkX2lub2RlLmMmIzM0OywKICAgICYjMzQ7YmluZm10X2VsZi5jJiMzNDssCiAgICAmIzM0O2JpbmZtdF9lbGZfZmRwaWMuYyYjMzQ7LAogICAgJiMzNDtiaW5mbXRfZmxhdC5jJiMzNDssCiAgICAmIzM0O2JpbmZtdF9taXNjLmMmIzM0OywKICAgICYjMzQ7YmluZm10X3NjcmlwdC5jJiMzNDssCiAgICAmIzM0O2JwZl9mc19rZnVuY3MuYyYjMzQ7LAogICAgJiMzNDtidWZmZXIuYyYjMzQ7LAogICAgJiMzNDtjaGFyX2Rldi5jJiMzNDssCiAgICAmIzM0O2NvbXBhdF9iaW5mbXRfZWxmLmMmIzM0OywKICAgICYjMzQ7Y29yZWR1bXAuYyYjMzQ7LAogICAgJiMzNDtkX3BhdGguYyYjMzQ7LAogICAgJiMzNDtkYXguYyYjMzQ7LAogICAgJiMzNDtkY2FjaGUuYyYjMzQ7LAogICAgJiMzNDtkaXJlY3QtaW8uYyYjMzQ7LAogICAgJiMzNDtkcm9wX2NhY2hlcy5jJiMzNDssCiAgICAmIzM0O2V2ZW50ZmQuYyYjMzQ7LAogICAgJiMzNDtldmVudHBvbGwuYyYjMzQ7LAogICAgJiMzNDtleGVjLmMmIzM0OywKICAgICYjMzQ7ZmNudGwuYyYjMzQ7LAogICAgJiMzNDtmaGFuZGxlLmMmIzM0OywKICAgICYjMzQ7ZmlsZS5jJiMzNDssCiAgICAmIzM0O2ZpbGVfYXR0ci5jJiMzNDssCiAgICAmIzM0O2ZpbGVfdGFibGUuYyYjMzQ7LAogICAgJiMzNDtmaWxlc3lzdGVtcy5jJiMzNDssCiAgICAmIzM0O2ZzLXdyaXRlYmFjay5jJiMzNDssCiAgICAmIzM0O2ZzX2NvbnRleHQuYyYjMzQ7LAogICAgJiMzNDtmc19kaXJlbnQuYyYjMzQ7LAogICAgJiMzNDtmc19wYXJzZXIuYyYjMzQ7LAogICAgJiMzNDtmc19waW4uYyYjMzQ7LAogICAgJiMzNDtmc19zdHJ1Y3QuYyYjMzQ7LAogICAgJiMzNDtmc2Vycm9yLmMmIzM0OywKICAgICYjMzQ7ZnNvcGVuLmMmIzM0OywKICAgICYjMzQ7aW5pdC5jJiMzNDssCiAgICAmIzM0O2lub2RlLmMmIzM0OywKICAgICYjMzQ7aW50ZXJuYWwuaCYjMzQ7LAogICAgJiMzNDtpb2N0bC5jJiMzNDssCiAgICAmIzM0O2tlcm5lbF9yZWFkX2ZpbGUuYyYjMzQ7LAogICAgJiMzNDtsaWJmcy5jJiMzNDssCiAgICAmIzM0O2xvY2tzLmMmIzM0OywKICAgICYjMzQ7bWJjYWNoZS5jJiMzNDssCiAgICAmIzM0O21udF9pZG1hcHBpbmcuYyYjMzQ7LAogICAgJiMzNDttb3VudC5oJiMzNDssCiAgICAmIzM0O21wYWdlLmMmIzM0OywKICAgICYjMzQ7bmFtZWkuYyYjMzQ7LAogICAgJiMzNDtuYW1lc3BhY2UuYyYjMzQ7LAogICAgJiMzNDtuc2ZzLmMmIzM0OywKICAgICYjMzQ7bnVsbGZzLmMmIzM0OywKICAgICYjMzQ7b3Blbi5jJiMzNDssCiAgICAmIzM0O3BpZGZzLmMmIzM0OywKICAgICYjMzQ7cGlwZS5jJiMzNDssCiAgICAmIzM0O3Bub2RlLmMmIzM0OywKICAgICYjMzQ7cG5vZGUuaCYjMzQ7LAogICAgJiMzNDtwb3NpeF9hY2wuYyYjMzQ7LAogICAgJiMzNDtwcm9jX25hbWVzcGFjZS5jJiMzNDssCiAgICAmIzM0O3JlYWRfd3JpdGUuYyYjMzQ7LAogICAgJiMzNDtyZWFkZGlyLmMmIzM0OywKICAgICYjMzQ7cmVtYXBfcmFuZ2UuYyYjMzQ7LAogICAgJiMzNDtzZWxlY3QuYyYjMzQ7LAogICAgJiMzNDtzZXFfZmlsZS5jJiMzNDssCiAgICAmIzM0O3NpZ25hbGZkLmMmIzM0OywKICAgICYjMzQ7c3BsaWNlLmMmIzM0OywKICAgICYjMzQ7c3RhY2suYyYjMzQ7LAogICAgJiMzNDtzdGF0LmMmIzM0OywKICAgICYjMzQ7c3RhdGZzLmMmIzM0OywKICAgICYjMzQ7c3VwZXIuYyYjMzQ7LAogICAgJiMzNDtzeW5jLmMmIzM0OywKICAgICYjMzQ7c3lzY3Rscy5jJiMzNDssCiAgICAmIzM0O3RpbWVyZmQuYyYjMzQ7LAogICAgJiMzNDt1dGltZXMuYyYjMzQ7LAogICAgJiMzNDt4YXR0ci5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0OzlwJiMzNDssCiAgICAmIzM0O2FkZnMmIzM0OywKICAgICYjMzQ7YWZmcyYjMzQ7LAogICAgJiMzNDthZnMmIzM0OywKICAgICYjMzQ7YXV0b2ZzJiMzNDssCiAgICAmIzM0O2JlZnMmIzM0OywKICAgICYjMzQ7YmZzJiMzNDssCiAgICAmIzM0O2J0cmZzJiMzNDssCiAgICAmIzM0O2NhY2hlZmlsZXMmIzM0OywKICAgICYjMzQ7Y2VwaCYjMzQ7LAogICAgJiMzNDtjb2RhJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzJiMzNDssCiAgICAmIzM0O2NyYW1mcyYjMzQ7LAogICAgJiMzNDtjcnlwdG8mIzM0OywKICAgICYjMzQ7ZGVidWdmcyYjMzQ7LAogICAgJiMzNDtkZXZwdHMmIzM0OywKICAgICYjMzQ7ZGxtJiMzNDssCiAgICAmIzM0O2VjcnlwdGZzJiMzNDssCiAgICAmIzM0O2VmaXZhcmZzJiMzNDssCiAgICAmIzM0O2VmcyYjMzQ7LAogICAgJiMzNDtlcm9mcyYjMzQ7LAogICAgJiMzNDtleGZhdCYjMzQ7LAogICAgJiMzNDtleHBvcnRmcyYjMzQ7LAogICAgJiMzNDtleHQyJiMzNDssCiAgICAmIzM0O2V4dDQmIzM0OywKICAgICYjMzQ7ZjJmcyYjMzQ7LAogICAgJiMzNDtmYXQmIzM0OywKICAgICYjMzQ7ZnJlZXZ4ZnMmIzM0OywKICAgICYjMzQ7ZnVzZSYjMzQ7LAogICAgJiMzNDtnZnMyJiMzNDssCiAgICAmIzM0O2hmcyYjMzQ7LAogICAgJiMzNDtoZnNwbHVzJiMzNDssCiAgICAmIzM0O2hvc3RmcyYjMzQ7LAogICAgJiMzNDtocGZzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmcyYjMzQ7LAogICAgJiMzNDtpb21hcCYjMzQ7LAogICAgJiMzNDtpc29mcyYjMzQ7LAogICAgJiMzNDtqYmQyJiMzNDssCiAgICAmIzM0O2pmZnMyJiMzNDssCiAgICAmIzM0O2pmcyYjMzQ7LAogICAgJiMzNDtrZXJuZnMmIzM0OywKICAgICYjMzQ7bG9ja2QmIzM0OywKICAgICYjMzQ7bWluaXgmIzM0OywKICAgICYjMzQ7bmV0ZnMmIzM0OywKICAgICYjMzQ7bmZzJiMzNDssCiAgICAmIzM0O25mc19jb21tb24mIzM0OywKICAgICYjMzQ7bmZzZCYjMzQ7LAogICAgJiMzNDtuaWxmczImIzM0OywKICAgICYjMzQ7bmxzJiMzNDssCiAgICAmIzM0O25vdGlmeSYjMzQ7LAogICAgJiMzNDtudGZzJiMzNDssCiAgICAmIzM0O250ZnMzJiMzNDssCiAgICAmIzM0O29jZnMyJiMzNDssCiAgICAmIzM0O29tZnMmIzM0OywKICAgICYjMzQ7b3BlbnByb21mcyYjMzQ7LAogICAgJiMzNDtvcmFuZ2VmcyYjMzQ7LAogICAgJiMzNDtvdmVybGF5ZnMmIzM0OywKICAgICYjMzQ7cHJvYyYjMzQ7LAogICAgJiMzNDtwc3RvcmUmIzM0OywKICAgICYjMzQ7cW54NCYjMzQ7LAogICAgJiMzNDtxbng2JiMzNDssCiAgICAmIzM0O3F1b3RhJiMzNDssCiAgICAmIzM0O3JhbWZzJiMzNDssCiAgICAmIzM0O3Jlc2N0cmwmIzM0OywKICAgICYjMzQ7cm9tZnMmIzM0OywKICAgICYjMzQ7c21iJiMzNDssCiAgICAmIzM0O3NxdWFzaGZzJiMzNDssCiAgICAmIzM0O3N5c2ZzJiMzNDssCiAgICAmIzM0O3Rlc3RzJiMzNDssCiAgICAmIzM0O3RyYWNlZnMmIzM0OywKICAgICYjMzQ7dWJpZnMmIzM0OywKICAgICYjMzQ7dWRmJiMzNDssCiAgICAmIzM0O3VmcyYjMzQ7LAogICAgJiMzNDt1bmljb2RlJiMzNDssCiAgICAmIzM0O3Zib3hzZiYjMzQ7LAogICAgJiMzNDt2ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzJiMzNDssCiAgICAmIzM0O3pvbmVmcyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBGaWxlIFN5c3RlbSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBmYWN0IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBib3RoIGBmcy9udGZzYCBhbmQgYGZzL250ZnMzYCBwb3BzIHVwLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL250ZnMvaW5kZXguY2AuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHdhbnQgdG8gY29uZmlybSBhIHNldHRpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZS1leGFtaW5lIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb3Igc3RhdHVzIG9mIGBOVEZTX1JXYC4gVGhhdCB3aWxsIGluZmx1ZW5jZSBteSBleHBlY3RhdGlvbnMgb2YgdGhlIGFmZmVjdGVkIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIE5URlMgQ29uZmlndXJhdGlvbiBTcGFjZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBEaWRuJiMzOTt0IEkganVzdCB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlRGUyBhbHJlYWR5PyBJJiMzOTttIHByZXR0eSBzdXJlIEkgZGlkLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYmVmb3JlIGRpdmluZyBpbiBmdXJ0aGVyLiBZZXMsIHRoYXQmIzM5O3MgcmlnaHQsIEkgaGFkIHRoYXQgZGF0YS4gT2theSwgbmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBlbHNlLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5LCBgZnMvbnRmcy9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB0aGUgZW50cnkgcmVsYXRlZCB0byBgY29uZmlnIE5URlNgIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSB0aGUga2V5IGluZm9ybWF0aW9uIEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5URlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZy0xMi1cbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xuZnMvbnRmcy9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjc4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqSW52ZXN0aWdhdGluZyBOVEZTIFdyaXRlIFN1cHBvcnQgQ2hhbmdlcyoqCgpIbW0sIGludGVyZXN0aW5nLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkcm9wcGVkIGZyb20gYGZzL250ZnMvS2NvbmZpZ2Agc29tZXRpbWUgYXJvdW5kIDIwMjQuIFRoYXQgZGVmaW5pdGVseSBjYXVnaHQgbXkgZXllLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3cml0ZSBzdXBwb3J0IG1pZ2h0IGJlIGVuYWJsZWQgZGlmZmVyZW50bHkgbm93LCBwb3RlbnRpYWxseSB1bmNvbmRpdGlvbmFsbHkuIFRvIGNvbmZpcm0gdGhpcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmcy9udGZzL01ha2VmaWxlYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYG50ZnMteWAgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaWYgaXQgaW50cmluc2ljYWxseSBpbmNvcnBvcmF0ZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSwgcmVnYXJkbGVzcyBvZiBhIEtjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgYE1ha2VmaWxlYCBlbnRyeSBwb2ludCB3aWxsIGNsYXJpZnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgTlRGUyB3cml0ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYW5kIHdoZXRoZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZSBpcyBuZWNlc3Nhcnkgb3Igbm90LCBhbmQgd2hlcmUgdGhhdCBjaGFuZ2Ugd291bGQgYmUgbWFkZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmotJChDT05GSUdfTlRGU19GUykgJiM0Mzs9IG50ZnMub1xuICAgNDpcdFxuICAgNTpcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcbiAgIDY6XHRcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcbiAgIDc6XHRcdCAgdXBjYXNlLm8gYml0bWFwLm8gbGNuYWxsb2MubyBsb2dmaWxlLm8gcmVwYXJzZS5vIGNvbXByZXNzLm8gXFxcbiAgIDg6XHRcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xuICAgOTpcdFxuICAxMDpcdGNjZmxhZ3MtJChDT05GSUdfTlRGU19ERUJVRykgJiM0Mzs9IC1EREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBmaWxlIHN5c3RlbSBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBOVEZTIFdyaXRlIFN1cHBvcnQgSW5xdWlyeSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRyb3BwZWQsIG9yIG1heWJlIHdyaXRlIHN1cHBvcnQgYmVpbmcgKmFsd2F5cyogb24gbm93PyBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgTlRGUyBkcml2ZXIsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGNoZWNrIHRoZSBjb3JlLCB0aGUgYGZzL250ZnMvc3VwZXIuY2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCB0byBkZXRlcm1pbmUgdGhlIG1vdW50IGJlaGF2aW9yLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBob3cgcmVhZC1vbmx5IG1vdW50aW5nIGlzIGhhbmRsZWQsIG9yIGlmIGl0JiMzOTtzIGV2ZW4gYW4gb3B0aW9uIGFueW1vcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NCX1JET05MWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvc3VwZXIuYz0yNjU9c3RhdGljIGludCBudGZzX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9udGZzL3N1cGVyLmMtMjg0LVx0ICovXG5mcy9udGZzL3N1cGVyLmM6Mjg1Olx0aWYgKHNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2ICEoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSkpIHtcbmZzL250ZnMvc3VwZXIuYy0yODYtXHRcdHN0YXRpYyBjb25zdCBjaGFyICplcyA9IFwmIzM0Oy4gIENhbm5vdCByZW1vdW50IHJlYWQtd3JpdGUuXCYjMzQ7O1xuLS1cbmZzL250ZnMvc3VwZXIuYy0zMTItXHRcdH1cbmZzL250ZnMvc3VwZXIuYzozMTM6XHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiAoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSkpIHtcbmZzL250ZnMvc3VwZXIuYy0zMTQtXHRcdC8qIFJlbW91bnRpbmcgcmVhZC1vbmx5LiAqL1xuLS1cbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL250ZnMvc3VwZXIuYy0zNDAtXHRpZiAodm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjM0MTpcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMzQyLVx0XHRwcl9jcml0KFwmIzM0OyhkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXG5cJiMzNDssXG4tLVxuZnMvbnRmcy9zdXBlci5jPTEzOTk9c3RhdGljIGJvb2wgbG9hZF9zeXN0ZW1fZmlsZXMoc3RydWN0IG50ZnNfdm9sdW1lICp2b2wpXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE0MTYtXG5mcy9udGZzL3N1cGVyLmM6MTQxNzpcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNDE4LVx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssXG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1NDItXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1NDM6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU0NC1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDslcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXCYjMzQ7LCBlczEsIGVzMik7XG4tLVxuZnMvbnRmcy9zdXBlci5jLTE1NTktXHRcdGlmICghc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgdm9sLVx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xuZnMvbnRmcy9zdXBlci5jOjE1NjA6XHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG5mcy9udGZzL3N1cGVyLmMtMTU2MS1cdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtGYWlsZWQgdG8gbG9hZCBMb2dGaWxlLiBNb3VudGluZyByZWFkLW9ubHkuXCYjMzQ7KTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTU5MS1cdFx0aWYgKCFzYl9yZG9ubHkoc2IpIFx1MDAyNlx1MDAyNiB2b2wtXHUwMDNlb25fZXJyb3JzID09IE9OX0VSUk9SU19SRU1PVU5UX1JPKSB7XG5mcy9udGZzL3N1cGVyLmM6MTU5MjpcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmZzL250ZnMvc3VwZXIuYy0xNTkzLVx0XHRcdG50ZnNfZXJyb3Ioc2IsIFwmIzM0OyVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcJiMzNDssIGVzMSwgZXMyKTtcbi0tXG5mcy9udGZzL3N1cGVyLmMtMTYwNi1cdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7JXMuICBNb3VudGluZyByZWFkLW9ubHklc1wmIzM0OywgZXMxLCBlczIpO1xuZnMvbnRmcy9zdXBlci5jOjE2MDc6XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuZnMvbnRmcy9zdXBlci5jLTE2MDgtXHRcdE5Wb2xTZXRFcnJvcnModm9sKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byBhIFJlYWQtT25seSBGaWxlIFN5c3RlbSBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBzb21ldGhpbmcgYW5kIG15IG1lbnRhbCBicmVhZGNydW1iIHRyYWlsIGxlYWRzIG1lIHRvIGBmcy9udGZzL3N1cGVyLmNgLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtb25seSBzdGF0ZXMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSB0aGlzIGNvbmRpdGlvbjogYHNiX3Jkb25seShzYikgJmFtcDsmYW1wOyAhKGZjLSZndDtzYl9mbGFncyAmYW1wOyBTQl9SRE9OTFkpYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGlzIGxvb2tzIGxpa2UgYSBjb25kaXRpb25hbCBpc3N1ZSB3aXRoIGEgc3VwZXIgYmxvY2sgZmxhZyBhbmQgYW5vdGhlciBmbGFncy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFuZCBmaWd1cmUgb3V0IHRoZSBpbXBhY3QuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIHRoYXQgY29kZSBibG9jayBhcm91bmQgbGluZSAyODUgaW4gYGZzL250ZnMvc3VwZXIuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgY2hlY2tzIG1lYW4sIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgd2h5IHRoZXkgbWlnaHQgYmUgY2F1c2luZyBhIHByb2JsZW0gb3IgYSBjb25jZXJuIHRoYXQgSSBuZWVkIHRvIGFkZHJlc3MuIFRoaXMgbG9va3MgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGZsb3cgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9udGZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0bnRmc19kZWJ1ZyhcJiMzNDtFbnRlcmluZyB3aXRoIHJlbW91bnRcJiMzNDspO1xuIDI3MTpcdFxuIDI3MjpcdFx0c3luY19maWxlc3lzdGVtKHNiKTtcbiAyNzM6XHRcbiAyNzQ6XHRcdC8qXG4gMjc1Olx0XHQgKiBGb3IgdGhlIHJlYWQtd3JpdGUgY29tcGlsZWQgZHJpdmVyLCBpZiB3ZSBhcmUgcmVtb3VudGluZyByZWFkLXdyaXRlLFxuIDI3NjpcdFx0ICogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyB2b2x1bWUgZXJyb3JzIGFuZCB0aGF0IG5vIHVuc3VwcG9ydGVkIHZvbHVtZVxuIDI3NzpcdFx0ICogZmxhZ3MgYXJlIHNldC4gIEFsc28sIGVtcHR5IHRoZSBsb2dmaWxlIGpvdXJuYWwgYXMgaXQgd291bGQgYmVjb21lXG4gMjc4Olx0XHQgKiBzdGFsZSBhcyBzb29uIGFzIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIHRoZSB2b2x1bWUgYW5kIG1hcmsgdGhlXG4gMjc5Olx0XHQgKiB2b2x1bWUgZGlydHkgc28gdGhhdCBjaGtkc2sgaXMgcnVuIGlmIHRoZSB2b2x1bWUgaXMgbm90IHVtb3VudGVkXG4gMjgwOlx0XHQgKiBjbGVhbmx5LlxuIDI4MTpcdFx0ICpcbiAyODI6XHRcdCAqIFdoZW4gcmVtb3VudGluZyByZWFkLW9ubHksIG1hcmsgdGhlIHZvbHVtZSBjbGVhbiBpZiBubyB2b2x1bWUgZXJyb3JzXG4gMjgzOlx0XHQgKiBoYXZlIG9jY3VycmVkLlxuIDI4NDpcdFx0ICovXG4gMjg1Olx0XHRpZiAoc2JfcmRvbmx5KHNiKSBcdTAwMjZcdTAwMjYgIShmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfUkRPTkxZKSkge1xuIDI4NjpcdFx0XHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcJiMzNDsuICBDYW5ub3QgcmVtb3VudCByZWFkLXdyaXRlLlwmIzM0OztcbiAyODc6XHRcbiAyODg6XHRcdFx0LyogUmVtb3VudGluZyByZWFkLXdyaXRlLiAqL1xuIDI4OTpcdFx0XHRpZiAoTlZvbEVycm9ycyh2b2wpKSB7XG4gMjkwOlx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Vm9sdW1lIGhhcyBlcnJvcnMgYW5kIGlzIHJlYWQtb25seSVzXCYjMzQ7LFxuIDI5MTpcdFx0XHRcdFx0XHRlcyk7XG4gMjkyOlx0XHRcdFx0cmV0dXJuIC1FUk9GUztcbiAyOTM6XHRcdFx0fVxuIDI5NDpcdFx0XHRpZiAodm9sLVx1MDAzZXZvbF9mbGFncyBcdTAwMjYgVk9MVU1FX0lTX0RJUlRZKSB7XG4gMjk1Olx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7Vm9sdW1lIGlzIGRpcnR5IGFuZCByZWFkLW9ubHklc1wmIzM0OywgZXMpO1xuIDI5NjpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMjk3Olx0XHRcdH1cbiAyOTg6XHRcdFx0aWYgKHZvbC1cdTAwM2V2b2xfZmxhZ3MgXHUwMDI2IFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0spIHtcbiAyOTk6XHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtWb2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQgYnkgY2hrZHNrIGFuZCBpcyByZWFkLW9ubHklc1wmIzM0OywgZXMpO1xuIDMwMDpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzAxOlx0XHRcdH1cbiAzMDI6XHRcdFx0aWYgKHZvbC1cdTAwM2V2b2xfZmxhZ3MgXHUwMDI2IFZPTFVNRV9NVVNUX01PVU5UX1JPX01BU0spIHtcbiAzMDM6XHRcdFx0XHRudGZzX2Vycm9yKHNiLCBcJiMzNDtWb2x1bWUgaGFzIHVuc3VwcG9ydGVkIGZsYWdzIHNldCAoMHgleCkgYW5kIGlzIHJlYWQtb25seSVzXCYjMzQ7LFxuIDMwNDpcdFx0XHRcdFx0XHRsZTE2X3RvX2NwdSh2b2wtXHUwMDNldm9sX2ZsYWdzKSwgZXMpO1xuIDMwNTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzA2Olx0XHRcdH1cbiAzMDc6XHRcdFx0aWYgKHZvbC1cdTAwM2Vsb2dmaWxlX2lubyBcdTAwMjZcdTAwMjYgIW50ZnNfZW1wdHlfbG9nZmlsZSh2b2wtXHUwMDNlbG9nZmlsZV9pbm8pKSB7XG4gMzA4Olx0XHRcdFx0bnRmc19lcnJvcihzYiwgXCYjMzQ7RmFpbGVkIHRvIGVtcHR5IGpvdXJuYWwgTG9nRmlsZSVzXCYjMzQ7LFxuIDMwOTpcdFx0XHRcdFx0XHRlcyk7XG4gMzEwOlx0XHRcdFx0TlZvbFNldEVycm9ycyh2b2wpO1xuIDMxMTpcdFx0XHRcdHJldHVybiAtRVJPRlM7XG4gMzEyOlx0XHRcdH1cbiAzMTM6XHRcdH0gZWxzZSBpZiAoIXNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2IChmYy1cdTAwM2VzYl9mbGFncyBcdTAwMjYgU0JfUkRPTkxZKSkge1xuIDMxNDpcdFx0XHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cbiAzMTU6XHRcdFx0aWYgKCFOVm9sRXJyb3JzKHZvbCkpIHtcbiAzMTY6XHRcdFx0XHRpZiAobnRmc19jbGVhcl92b2x1bWVfZmxhZ3Modm9sLCBWT0xVTUVfSVNfRElSVFkpKVxuIDMxNzpcdFx0XHRcdFx0bnRmc193YXJuaW5nKHNiLFxuIDMxODpcdFx0XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gY2xlYXIgZGlydHkgYml0IGluIHZvbHVtZSBpbmZvcm1hdGlvbiBmbGFncy4gIFJ1biBjaGtkc2suXCYjMzQ7KTtcbiAzMTk6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzMAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBOVEZTIFJlYWQvV3JpdGUgQ2FwYWJpbGl0aWVzKioKClJpZ2h0LCBzbyBJIHNlZSB0aGlzIG1lbnRpb24gb2YgJiMzNDtGb3IgdGhlIHJlYWQtd3JpdGUgY29tcGlsZWQgZHJpdmVyJiMzNDsuIEhtbSwgaXMgdGhpcyBzdWdnZXN0aW5nIHNvbWV0aGluZyBzaWduaWZpY2FudD8gRG9lcyB0aGlzIG1lYW4gYGZzL250ZnNgIGlzICphbHdheXMqIGNvbXBpbGVkIHdpdGggcmVhZC13cml0ZSBzdXBwb3J0IG5vdz8gVGhhdCB3b3VsZCBiZSBhIG1ham9yIHNoaWZ0LCBhc3N1bWluZyBpdCBpcyBpbmRlZWQgdGFsa2luZyBhYm91dCBudGZzLTNnLgoKT2theSwgYmVzdCB0byB2ZXJpZnkuIEkgbmVlZCB0byBnZXQgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgc2VlIGlmIHRoaXMgaXMgdHJ1ZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSYjMzk7bGwgc2VhcmNoIHRoZSBrZXJuZWwgdHJlZSBmb3IgYW55IGluc3RhbmNlIG9mIGBDT05GSUdfTlRGU19SV2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGNhbiBpbW1lZGlhdGVseSBjcm9zcy1yZWZlcmVuY2Ugd2l0aCBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGZpbGVzeXN0ZW0gYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05URlNfUlcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZz0xNDE9Q09ORklHX05URlNfRlM9eVxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZzoxNDI6Q09ORklHX05URlNfUlc9eVxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZy0xNDMtQ09ORklHX1RNUEZTPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTE1Mz1DT05GSUdfTlRGU19GUz1tXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnOjE1NDpDT05GSUdfTlRGU19SVz15XG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnLTE1NS1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZz0xODg9Q09ORklHX05URlNfRlM9bVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZzoxODk6Q09ORklHX05URlNfUlc9eVxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZy0xOTAtQ09ORklHX1BST0NfS0NPUkU9eVxuLS1cbmFyY2gvc2gvY29uZmlncy9hcHNoNGEzYV9kZWZjb25maWc9NjY9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZzo2NzpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhM2FfZGVmY29uZmlnLTY4LUNPTkZJR19QUk9DX0tDT1JFPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz05ND1DT05GSUdfTlRGU19GUz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZzo5NTpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZy05Ni1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnPTk5PUNPTkZJR19OVEZTX0ZTPW1cbmFyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZzoxMDA6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnLTEwMS1DT05GSUdfVE1QRlM9eVxuLS1cbmFyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZz04MT1DT05GSUdfTlRGU19GUz15XG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWc6ODI6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnLTgzLUNPTkZJR19QUk9DX0tDT1JFPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9NzY9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnOjc3OkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZy03OC1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnPTExMj1DT05GSUdfTlRGU19ERUJVRz15XG5hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWc6MTEzOkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZy0xMTQtQ09ORklHX1RNUEZTPXlcbi0tXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZz0xMTg9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWc6MTE5OkNPTkZJR19OVEZTX1JXPXlcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnLTEyMC1DT05GSUdfUFJPQ19LQ09SRT15XG4tLVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc9OTM9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc6OTQ6Q09ORklHX05URlNfUlc9eVxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWctOTUtQ09ORklHX1BST0NfS0NPUkU9eVxuLS1cbmFyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZz0xMTk9Q09ORklHX05URlNfRlM9eVxuYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnOjEyMDpDT05GSUdfTlRGU19SVz15XG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWctMTIxLUNPTkZJR19QUk9DX0tDT1JFPXlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfTlRGU19SV2AmIzM5O3MgQ29uZmlndXJhdGlvbiBNeXN0ZXJ5KioKCkhtbSwgSSYjMzk7bSBzZWVpbmcgdGhhdCBgQ09ORklHX05URlNfUldgIGlzIGFwcGFyZW50bHkgcHJlc2VudCBpbiBzb21lIGRlZmNvbmZpZyBmaWxlcywgYnV0IGl0JiMzOTtzIGNvbnNwaWN1b3VzbHkgYWJzZW50IGZyb20gYGZzL250ZnMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl0JiMzOTtzIGEgbGVnYWN5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwZXJoYXBzIGludHJvZHVjZWQgYW5kIHRoZW4gZWl0aGVyIGRlcHJlY2F0ZWQgb3IgbW92ZWQsIGJ1dCB0aGUgYXNzb2NpYXRlZCBgS2NvbmZpZ2AgZmlsZSB3YXNuJiMzOTt0IHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZXN0YWJsaXNoIGl0cyB0cnVlIHByb3ZlbmFuY2UuIEEgcXVpY2sgZGl2ZSBpbnRvIHRoZSBoaXN0b3J5IG9mIGBmcy9udGZzL0tjb25maWdgIGlzIGRlZmluaXRlbHkgaW4gb3JkZXIg4oCTIGdpdCBibGFtZSBzaG91bGQgcmV2ZWFsIHdoZW4gYW5kIGlmIGl0IHdhcyBldmVyIGRlY2xhcmVkIHRoZXJlLiBJdCYjMzk7cyBwb3NzaWJsZSBpdCBsaXZlZCBpbiBhIGRpZmZlcmVudCBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcGFzdCwgb3IgbWF5YmUgd2FzIGludHJvZHVjZWQgdmlhIHNvbWUgbW9yZSBpbmRpcmVjdCBtZXRob2QuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhlcmUmIzM5O3MgYW4gaW5jbHVkZSBzb21ld2hlcmUgdGhhdCBpbmNsdWRlcyBhIGZpbGUgdGhhdCBkZWZpbmVzIGl0LgoKQWx0ZXJuYXRpdmVseSwgYmVmb3JlIGRpZ2dpbmcgaW50byBnaXQgaGlzdG9yeSwgYSBicm9hZGVyIHNlYXJjaCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgbWlnaHQgcXVpY2tseSB1bmNvdmVyIHdoZXRoZXIgYENPTkZJR19OVEZTX1JXYCBpcyAqYWN0dWFsbHkqIGRlZmluZWQgYW55d2hlcmUuIEEgc2ltcGxlIGBncmVwYCBvciBgZmluZGAgb24gdGhlIGtlcm5lbCBzb3VyY2UgdG8gY29uZmlybSB3aGF0IEkgc3VzcGVjdCBpcyBhIGRlcHJlY2F0ZWQgb3Igb3JwaGFuZWQgY29uZmlndXJhdGlvbi4gTWlnaHQgdHVybiB1cCBhIHVzZSBjYXNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIHNlZSBpZiBpdCYjMzk7cyByZWZlcmVuY2VkIG9yIHVzZWQg4oCTIGlmIG5vdCwgdGhlbiBpdCBwcm9iYWJseSBpc24mIzM5O3QgYSBjdXJyZW50IGZhY3Rvci4gSWYgdGhlIHN5bWJvbCAqaXMqIGRlZmluZWQsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgaXRzIGFjdHVhbCBkZWZpbml0aW9uIGlzIGxvY2F0ZWQuIFRoaXMgd2lsbCBwb2ludCBtZSB0b3dhcmRzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIE5URlMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKSG1tLCBzb21ldGhpbmcmIzM5O3MgYmVlbiByZW1vdmVkLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBjaGFuZ2Ugb2NjdXJyZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgQ09ORklHX05URlNfUldgIHNldHRpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW55IGAjaWZkZWYgQ09ORklHX05URlNfUldgIGRpcmVjdGl2ZXMsIGFueXdoZXJlIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeT8gVGhpcyBjb3VsZCBiZSBhIGNsdWUuIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgcmVhZC93cml0ZSBzdXBwb3J0IGhhcyBiZWVuIGNvbmRpdGlvbmFsbHkgZGlzYWJsZWQsIG9yIHBlcmhhcHMgcmVtb3ZlZCBlbnRpcmVseS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19OVEZTX1JXJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk3NAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIE5URlMgV3JpdGUgU3VwcG9ydCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyB3cml0ZSBzdXBwb3J0IGZvciBOVEZTIGlzIG5vdyAqdW5jb25kaXRpb25hbGx5KiBjb21waWxlZCB3aXRoaW4gYGZzL250ZnNgIOKAkyBpbnRlcmVzdGluZyEgVGhpcyB3YXJyYW50cyBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBzcGVjaWZpYyBmdW5jdGlvbnMuIEkgbmVlZCB0byB2ZXJpZnkgYSBwYXJ0aWN1bGFyIGRldGFpbC4gTGV0JiMzOTtzIGRpdmUgaW50byBgZnMvbnRmcy9pbmRleC5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFsc28gYmVpbmcgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5LiBUaGlzIGlzIGEga2V5IGRhdGEgcG9pbnQgdG8ga25vdyBhcyBJIGZ1cnRoZXIgZGV2ZWxvcCB0aGUgbW9kdWxlLiBUaGlzIGNvbXBpbGF0aW9uIGNoYW5nZSBjb3VsZCBoYXZlIGEgd2lkZXNwcmVhZCBlZmZlY3QhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzQxMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZSBDcmVhdGlvbiBQYXRoKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSByZWxhdGVkIHRvIGZpbGUgY3JlYXRpb24sIGNvbmZpcm1lZC4gVGhlIGNvcmUgZHJpdmVyIHdlJiMzOTtyZSBsb29raW5nIGF0IGlzIGBmcy9udGZzYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgbnRmc2AuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBudGZzX2lyX3RvX2liYCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE5vdywgbGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBgbnRmc19pcl90b19pYmAgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX3JlcGFyZW50YC4gVGhhdCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGlzIGV2ZW50dWFsbHkgbGVhZHMgdXAgdG8gYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAuIEZpbmFsbHksIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYXBwZWFycyB0byBiZSBjYWxsZWQgYnkgYm90aCBgX19udGZzX2NyZWF0ZWAgYW5kIGBfX250ZnNfbGlua2AuCgpTbywgZnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBib3RoIGZpbGUgKmNyZWF0aW9uKiBhbmQgdGhlICpsaW5raW5nKiBvZiBmaWxlcyBvbiBhbiBOVEZTIHZvbHVtZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgX19udGZzX2NyZWF0ZWAgaXMgYWN0dWFsbHkgY2FsbGFibGUuIFRoaXMgc291bmRzIGxpa2UgYW4gYXJlYSBvZiB0aGUgY29kZSB0aGF0JiMzOTtzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHdoZXJlIHRoZSBwYXRjaCBpcyBsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX250ZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcbi0tXG5mcy9udGZzL25hbWVpLmMtMzkzLVxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbnRmcy9uYW1laS5jLTM5NS1cdFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcbi0tXG5mcy9udGZzL25hbWVpLmM9NzM4PXN0YXRpYyBpbnQgbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy03NjUtXG5mcy9udGZzL25hbWVpLmM6NzY2Olx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcbmZzL250ZnMvbmFtZWkuYy03NjctXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxuZnMvbnRmcy9uYW1laS5jOjEwODU6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTEwODYtXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdXNyYywgdXNyY19sZW4sIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXHRcdFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTQ1Mz1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDg1LVx0Y2FzZSBTX0lGQkxLOlxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XHRcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXHRcdFx0XHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cdGRlZmF1bHQ6XG5mcy9udGZzL25hbWVpLmM6MTQ5MDpcdFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXG5mcy9udGZzL25hbWVpLmMtMTQ5MS1cdFx0XHRcdG1vZGUsIDAsIE5VTEwsIDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODYzNgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipGaWxlIFN5c3RlbSBPcGVyYXRpb24gUmVnaXN0cmF0aW9uKioKCkhtbSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEkgc2VlIHRoYXQgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rbm9kYCBhcmUgYWxsIGRlZmluZWQgaW4gYGZzL250ZnMvbmFtZWkuY2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgbGlua2VkIGludG8gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zPyBBcmUgdGhleSBjb3JyZWN0bHkgYXNzb2NpYXRlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlIGBpbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmU/IFRoYXQmIzM5O3MgdGhlIGtleTogYXJlIHRoZXkgY29ycmVjdGx5IGhvb2tlZCBpbj8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIGVuc3VyZSB0aGV5JiMzOTtyZSBhdmFpbGFibGUgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSYjMzk7cyBvcGVyYXRpb24uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aG9zZSBvcGVyYXRpb25zIGFyZSBwcm9wZXJseSBhc3NpZ25lZCB3aXRoaW4gdGhlIE5URlMgZHJpdmVyJiMzOTtzIGlub2RlIG9wZXJhdGlvbnMgc3RydWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTY4My1cdCAqIFRoaXMgY29uZGl0aW9uIGNhbiBwcmV2ZW50IG50ZnNfd3JpdGVfbXN0X2Jsb2NrKClcbmZzL250ZnMvbWZ0LmM6Njg0Olx0ICogZnJvbSBhcHBseWluZy91bmRvIGZpeHVwcyB3aGlsZSBudGZzX2NyZWF0ZSgpIGJlaW5nXG5mcy9udGZzL21mdC5jLTY4NS1cdCAqIGNhbGxlZFxuLS1cbmZzL250ZnMvbmFtZWkuYz0zMzA9c3RhdGljIGludCBudGZzX3NkX2FkZF9ldmVyeW9uZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmkpXG4tLVxuZnMvbnRmcy9uYW1laS5jLTM5My1cbmZzL250ZnMvbmFtZWkuYzozOTQ6c3RhdGljIHN0cnVjdCBudGZzX2lub2RlICpfX250ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL250ZnMvbmFtZWkuYy0zOTUtXHRcdF9fbGUxNiAqbmFtZSwgdTggbmFtZV9sZW4sIG1vZGVfdCBtb2RlLCBkZXZfdCBkZXYsXG4tLVxuZnMvbnRmcy9uYW1laS5jLTcxMC1cdCAqIEZyZWUgZXh0ZW50IE1GVCByZWNvcmRzIChzaG91bGQgbm90IGV4aXN0IGFueSB3aXRoIGN1cnJlbnRcbmZzL250ZnMvbmFtZWkuYzo3MTE6XHQgKiBudGZzX2NyZWF0ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGZvciBhbnkgY2FzZSBpZiBzb21ldGhpbmcgd2lsbCBiZVxuZnMvbnRmcy9uYW1laS5jLTcxMi1cdCAqIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkuXG4tLVxuZnMvbnRmcy9uYW1laS5jLTczNy1cbmZzL250ZnMvbmFtZWkuYzo3Mzg6c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG5mcy9udGZzL25hbWVpLmMtNzM5LVx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxuLS1cbmZzL250ZnMvbmFtZWkuYy03NjUtXG5mcy9udGZzL25hbWVpLmM6NzY2Olx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcbmZzL250ZnMvbmFtZWkuYy03NjctXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTEwNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxuZnMvbnRmcy9uYW1laS5jOjEwODU6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xuZnMvbnRmcy9uYW1laS5jLTEwODYtXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XG4tLVxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdXNyYywgdXNyY19sZW4sIFNfSUZMTksgfCAwNzc3LCAwLFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXHRcdFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcbi0tXG5mcy9udGZzL25hbWVpLmM9MTQ1Mz1zdGF0aWMgaW50IG50ZnNfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL250ZnMvbmFtZWkuYy0xNDg1LVx0Y2FzZSBTX0lGQkxLOlxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XHRcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXHRcdFx0XHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcbi0tXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cdGRlZmF1bHQ6XG5mcy9udGZzL25hbWVpLmM6MTQ5MDpcdFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXG5mcy9udGZzL25hbWVpLmMtMTQ5MS1cdFx0XHRcdG1vZGUsIDAsIE5VTEwsIDApO1xuLS1cbmZzL250ZnMvbmFtZWkuYz0xNTYxPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG50ZnNfZGlyX2lub2RlX29wcyA9IHtcbmZzL250ZnMvbmFtZWkuYy0xNTYyLVx0Lmxvb2t1cFx0XHQ9IG50ZnNfbG9va3VwLFx0LyogVkZTOiBMb29rdXAgZGlyZWN0b3J5LiAqL1xuZnMvbnRmcy9uYW1laS5jOjE1NjM6XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG5mcy9udGZzL25hbWVpLmMtMTU2NC1cdC51bmxpbmtcdFx0PSBudGZzX3VubGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTlRGUyBXcml0ZSBTdXBwb3J0IEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbnRmc19jcmVhdGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG50ZnNfZGlyX2lub2RlX29wc2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIE5URlMgZHJpdmVyIG5vdyBoYXMgd3JpdGUgY2FwYWJpbGl0eS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgY29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gQSBxdWljayBtZW50YWwgY2hlY2s6IGlzIGBmcy9udGZzYCBhY3R1YWxseSB0aGUgb2xkZXIgYG50ZnNgIGRyaXZlciBvciB0aGUgbmV3ZXIgYG50ZnMzYD8gQWgsIHJpZ2h0LCBgZnMvbnRmc2AgaXMgdGhlIGxlZ2FjeSBkcml2ZXIsIGFuZCBgZnMvbnRmczNgIGlzIHRoZSBhY3RpdmVseSBkZXZlbG9wZWQgb25lLiBEaWQgd3JpdGUgc3VwcG9ydCBnZXQgYmFja3BvcnRlZD8gSSBjYW4mIzM5O3QgYXNzdW1lIGFueXRoaW5nLiBMZXQgbWUgdmVyaWZ5IHRoZSBjb2RlLiBJIG5lZWQgdG8gY2hlY2sgbGluZSAxNTYxIGluIGBmcy9udGZzL25hbWVpLmNgLiBUaGF0IHNob3VsZCBjbGVhciB0aGlzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU1MDpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpcl9uaS1cdTAwM2VtcmVjX2xvY2spO1xuMTU1MTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pLVx1MDAzZW1yZWNfbG9jayk7XG4xNTUyOlx0XG4xNTUzOlx0b3V0OlxuMTU1NDpcdFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xuMTU1NTpcdFx0cmV0dXJuIGVycjtcbjE1NTY6XHR9XG4xNTU3Olx0XG4xNTU4Olx0LypcbjE1NTk6XHQgKiBJbm9kZSBvcGVyYXRpb25zIGZvciBkaXJlY3Rvcmllcy5cbjE1NjA6XHQgKi9cbjE1NjE6XHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4xNTYyOlx0XHQubG9va3VwXHRcdD0gbnRmc19sb29rdXAsXHQvKiBWRlM6IExvb2t1cCBkaXJlY3RvcnkuICovXG4xNTYzOlx0XHQuY3JlYXRlXHRcdD0gbnRmc19jcmVhdGUsXG4xNTY0Olx0XHQudW5saW5rXHRcdD0gbnRmc191bmxpbmssXG4xNTY1Olx0XHQubWtkaXJcdFx0PSBudGZzX21rZGlyLFxuMTU2NjpcdFx0LnJtZGlyXHRcdD0gbnRmc19ybWRpcixcbjE1Njc6XHRcdC5yZW5hbWVcdFx0PSBudGZzX3JlbmFtZSxcbjE1Njg6XHRcdC5nZXRfYWNsXHQ9IG50ZnNfZ2V0X2FjbCxcbjE1Njk6XHRcdC5zZXRfYWNsXHQ9IG50ZnNfc2V0X2FjbCxcbjE1NzA6XHRcdC5saXN0eGF0dHJcdD0gbnRmc19saXN0eGF0dHIsXG4xNTcxOlx0XHQuc2V0YXR0clx0PSBudGZzX3NldGF0dHIsXG4xNTcyOlx0XHQuZ2V0YXR0clx0PSBudGZzX2dldGF0dHIsXG4xNTczOlx0XHQuc3ltbGlua1x0PSBudGZzX3N5bWxpbmssXG4xNTc0Olx0XHQubWtub2RcdFx0PSBudGZzX21rbm9kLFxuMTU3NTpcdFx0LmxpbmtcdFx0PSBudGZzX2xpbmssXG4xNTc2Olx0fTtcbjE1Nzc6XHRcbjE1Nzg6XHQvKlxuMTU3OTpcdCAqIG50ZnNfZ2V0X3BhcmVudCAtIGZpbmQgdGhlIGRlbnRyeSBvZiB0aGUgcGFyZW50IG9mIGEgZ2l2ZW4gZGlyZWN0b3J5IGRlbnRyeVxuMTU4MDpcdCAqIEBjaGlsZF9kZW50Olx0XHRkZW50cnkgb2YgdGhlIGRpcmVjdG9yeSB3aG9zZSBwYXJlbnQgZGlyZWN0b3J5IHRvIGZpbmRcbjE1ODE6XHQgKlxuMTU4MjpcdCAqIEZpbmQgdGhlIGRlbnRyeSBmb3IgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlXG4xNTgzOlx0ICogZGVudHJ5IEBjaGlsZF9kZW50LiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuMTU4NDpcdCAqIGZzL2V4cG9ydGZzL2V4cGZzLmM6OmZpbmRfZXhwb3J0ZWRfZGVudHJ5KCkgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSB0aGVcbjE1ODU6XHQgKiBkZWZhdWx0IC1cdTAwM2VkZWNvZGVfZmgoKSB3aGljaCBpcyBleHBvcnRfZGVjb2RlX2ZoKCkgaW4gdGhlIHNhbWUgZmlsZS5cbjE1ODY6XHQgKlxuMTU4NzpcdCAqIE5vdGU6IG50ZnNfZ2V0X3BhcmVudCgpIGlzIGNhbGxlZCB3aXRoIEBkX2lub2RlKGNoaWxkX2RlbnQpLVx1MDAzZWlfbXV0ZXggZG93bi5cbjE1ODg6XHQgKlxuMTU4OTpcdCAqIFJldHVybiB0aGUgZGVudHJ5IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9uIHN1Y2Nlc3Mgb3IgdGhlIGVycm9yIGNvZGUgb25cbjE1OTA6XHQgKiBlcnJvciAoSVNfRVJSKCkgaXMgdHJ1ZSkuXG4xNTkxOlx0ICovXG4xNTkyOlx0c3RhdGljIHN0cnVjdCBkZW50cnkgKm50ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZF9kZW50KVxuMTU5MzpcdHtcbjE1OTQ6XHRcdHN0cnVjdCBpbm9kZSAqdmkgPSBkX2lub2RlKGNoaWxkX2RlbnQpO1xuMTU5NTpcdFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcbjE1OTY6XHRcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xuMTU5NzpcdFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XG4xNTk4Olx0XHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHI7XG4xNTk5Olx0XHRzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgRmlsZXN5c3RlbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHNlZWluZyB0aG9zZSBgZnMvbnRmc2AgZnVuY3Rpb25zIGxpa2UgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBhbmQgc28gb24sIGl0JiMzOTtzIGNsZWFyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgKmZ1bGx5IGZ1bmN0aW9uYWwqIGFuZCByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIEdvb2QuIE5vdywgdGhhdCBwYXRjaOKApiBsZXQmIzM5O3Mgc2VlLCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2s6IGBpZiAoKHUzMilpICZndDsgaWJfY2FwKWAgd2l0aGluIGBudGZzX2lyX3RvX2liYC4gUmlnaHQsIHNvIGlmIHRoYXQgY29uZGl0aW9uIGlzIHRydWUsIGl0IGZyZWVzIGBpYmAgYW5kIHJldHVybnMgYE5VTExgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqLCBpbXBhY3RpbmcgaG93IHRoZSBjb2RlIGhhbmRsZXMgaW50ZXJuYWwgYnVmZmVyIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgTlRGU19GU2AgaXMgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQ7IGl0JiMzOTtzIHRoZSBtYWluIGNvbmZpZyBmb3IgdGhlIHdob2xlIGZpbGVzeXN0ZW0uIEhtbSwgaXMgdGhhdCAqYWxsKiB0aG91Z2g/IEp1c3QgdG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmV2aXNpdCBgZnMvbnRmcy9LY29uZmlnYC4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBOVEZTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBOTFNcbiAgIDU6XHRcdHNlbGVjdCBGU19JT01BUFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXG4gICA4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxuICAgOTpcdFxuICAxMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTE6XHRcdCAgbnRmcy5cbiAgMTI6XHRcbiAgMTM6XHRjb25maWcgTlRGU19ERUJVR1xuICAxNDpcdFx0Ym9vbCBcJiMzNDtOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZXBlbmRzIG9uIE5URlNfRlNcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxuICAxODpcdFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXG4gIDE5Olx0XHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cbiAgMjA6XHRcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXG4gIDIxOlx0XHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXG4gIDIyOlx0XHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxuICAyMzpcdFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXG4gIDI0Olx0XHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XG4gIDI1Olx0XHQgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcbiAgMjY6XHRcdCAgUmVwbGFjaW5nIHRoZSBcJiMzNDsxXCYjMzQ7IHdpdGggXCYjMzQ7MFwmIzM0OyB3b3VsZCBkaXNhYmxlIGRlYnVnIG1lc3NhZ2VzLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXG4gIDI5Olx0XHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XG4gIDMwOlx0XHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXG4gIDMxOlx0XG4gIDMyOlx0XHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcbiAgMzM6XHRcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbiAgMzY6XHRcdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXG4gIDM4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDM5Olx0XHRoZWxwXG4gIDQwOlx0XHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xuICA0MTpcdFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNDI6XHRcbiAgNDM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBBQ0wgc3VwcG9ydCBmb3IgbnRmcywgcHJvdmlkaW5nIGZ1bmN0aW9uYWwgcGFyaXR5XG4gIDQ0Olx0XHQgIHdpdGggbnRmczMgZHJpdmllci5cbiAgNDU6XHRcbiAgNDY6XHRcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5URlMgSW5kZXhpbmcgRnVuY3Rpb25hbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYE5URlNfRlNgLiBSaWdodCwgYE5URlNfRlNgICppcyogdGhlIGNvbmZpZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBudGZzX2lyX3RvX2liYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gYSBzeXNjYWxsLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIGNoYWluLiBJdCBsb29rcyBsaWtlIGBudGZzX2lyX3RvX2liYCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfcmVwYXJlbnRgLCB3aGljaCBpcyBpbiB0dXJuIGNhbGxlZCBieSBgbnRmc19pcl9tYWtlX3NwYWNlYC4gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYW5kIGZpbmFsbHkgdG8gYF9fbnRmc19jcmVhdGVgLCB3aGljaCBnZXRzIGNhbGxlZCBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtub2RgLiBTbywgdGhlcmUmIzM5O3MgYSBjbGVhciBwYXRoIGZyb20gZmlsZSBjcmVhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIGNoYWluIHRvIHRoZSBtYWluIGZ1bmN0aW9uLgoKSGFuZyBvbiwgdGhlcmUmIzM5O3MgYW5vdGhlciBwYXRoISBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBhbHNvIGNhbGxlZCBieSBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgd2hpY2ggaXRzZWxmIGZlZWRzIGludG8gYG50ZnNfaWJfc3BsaXRgLCBhbmQgdGhlbiBmaW5hbGx5IHRvIGBudGZzX2llX2FkZGAuIEFuZCB0aGVyZSYjMzk7cyBtb3JlISBgbnRmc19pcl9tYWtlX3NwYWNlYCBnZXRzIGNhbGxlZCBieSBgbnRmc19pbmRleF9ybV9ub2RlYCwgdGhlbiBgbnRmc19paF90YWtlb3V0YCwgYW5kIGZpbmFsbHkgYnkgYG50ZnNfaW5kZXhfcmVtb3ZlYCwgd2hpY2ggaXMgbGlua2VkIHRvIGBudGZzX3VubGlua2AsIGBudGZzX3JtZGlyYCwgYW5kIGBudGZzX3JlbmFtZWAuCgpPa2F5LCBzbyB0aGlzIGBudGZzX2lyX3RvX2liYCBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIGJvdGggZmlsZSBjcmVhdGlvbiAqYW5kKiBmaWxlIGRlbGV0aW9uIHBhdGhzLiBUaGF0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgYSBrZXkgZW50cnlwb2ludCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSB3b3J0aCBzcGVuZGluZyBzb21lIHRpbWUgb24gdGhpcy4KCkhlcmUgYXJlIHRoZSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGFuIGV5ZSBvbjogYG50ZnNfaXJfdG9faWJgLCBgbnRmc19pcl9yZXBhcmVudGAsIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBgbnRmc19pZV9hZGRgLCBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLCBgbnRmc19pbmRleF9ybV9ub2RlYCwgYG50ZnNfaWhfdGFrZW91dGAsIGFuZCBgbnRmc19pbmRleF9yZW1vdmVgLgoKTm93LCBsZXQmIzM5O3MgcGljayBhIGZldyBvZiB0aGVzZSB0byBmb2N1cyBvbiBmb3Igbm93LiBgbnRmc19pcl90b19pYmAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGFuZCBgbnRmc19pcl9yZXBhcmVudGAgY2FsbHMgdGhlIGZ1bmN0aW9uLiBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyB0aGUgY2FsbGVyIG9mIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgbG9va3MgbGlrZSBgbnRmc19pZV9hZGRgIGFsc28gY2FsbHMgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIEFuZCBoZXksIGBudGZzX2luZGV4X3JtX25vZGVgIGlzIGFub3RoZXIgY2FsbGVyIG9mIGBudGZzX2lyX21ha2Vfc3BhY2VgLgoKTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIHRoYXQgYG50ZnNfaXJfdG9faWJgIGRvZXNuJiMzOTt0IGhhdmUgb3RoZXIgZGlyZWN0IGNhbGxlcnMgdG8gY29uZmlybSB0aGUgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnRmc19pcl90b19pYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvaW5kZXguYz0xMDczPXN0YXRpYyBzNjQgbnRmc19pYm1fZ2V0X2ZyZWUoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxuLS1cbmZzL250ZnMvaW5kZXguYy0xMTA4LVxuZnMvbnRmcy9pbmRleC5jOjExMDk6c3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXG5mcy9udGZzL2luZGV4LmMtMTExMC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTEyNDk9c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI4Ni1cbmZzL250ZnMvaW5kZXguYzoxMjg3Olx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcbmZzL250ZnMvaW5kZXguYy0xMjg4LVx0aWYgKGliID09IE5VTEwpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRm9jdXNpbmcgb24gTlRGUyBSZXBhcmVudGluZyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY29wZSBpcyBjbGVhcjogSSYjMzk7bSBzb2xlbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG50ZnNfaXJfcmVwYXJlbnRgIGZ1bmN0aW9uLiBObyBuZWVkIHRvIGdldCBkaXN0cmFjdGVkIGJ5IG90aGVyIHBvdGVudGlhbCBhcmVhcyBmb3Igbm93LiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBJIHdhbnQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBTbywgSSBuZWVkIHRvIGNoZWNrIGZvciBhbGwgdGhlICpjYWxsZXJzKiBvZiBgbnRmc19pcl9yZXBhcmVudGAuIFRoaXMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIGFuZCB0aGUgc3Vycm91bmRpbmcgb3BlcmF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcbi0tXG5mcy9udGZzL2luZGV4LmMtMTI0OC1cbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XG4tLVxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxuLS1cbmZzL250ZnMvaW5kZXguYy0xNDI2LVx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XG5mcy9udGZzL2luZGV4LmM6MTQyNzpcdFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xuZnMvbnRmcy9pbmRleC5jLTE0MjgtXHRcdGlmICghcmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDE3NQoJCQkJCQkJb3V0cHV0OiAxOTAKCQkJCQkJCXRob3VnaHRzOiAxODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGEgYm91bmRzIGNoZWNrIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgYG50ZnNfaXJfdG9faWJgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnZlcnNpb24gb2YgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jayB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLgoKVGhpbmtpbmcgYWJvdXQgdGhlIGZpbGVzeXN0ZW0mIzM5O3Mgb3BlcmF0aW9uYWwgZmxvdywgSSBpbW1lZGlhdGVseSBzZWUgaG93IHRoaXMgaXMgcmVsZXZhbnQuIFRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBpbmRleCBibG9ja3MgYW5kIHRyaWdnZXIgdGhlIG5lZWQgdG8gbWFrZSBzcGFjZSBhcmUgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc191bmxpbmtgLCBhbmQgYG50ZnNfcm1kaXJgLiBUaGlzIG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgc3RhbmRhcmQgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbnMsIGxpa2UgZmlsZSBjcmVhdGlvbiBhbmQgZGVsZXRpb24uIFRoZXNlIG1hbmlwdWxhdGlvbnMgdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgIOKAkyBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIGZvY3VzIHN5bWJvbHMuCgpDb25zaWRlcmluZyB0aGlzIGNvbnRleHQsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgYG50ZnNfaXJfdG9faWJgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdl4oCUYm91bmRzIGNoZWNraW5n4oCUaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgY2hhbmdlIGlzIGZ1bmN0aW9uYWwuIE15IGluc3RpbmN0cyB0ZWxsIG1lIHRoaXMgaXMgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgaW50ZXJhY3Rpb25zIG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkLiBUaGUgY29uZmlndXJhdGlvbiBgTlRGU19GU2Agc2hvdWxkIGJlIGluIGZvY3VzIGR1cmluZyB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfaXJfdG9faWImIzM0OywKICAgICYjMzQ7bnRmc19pcl9yZXBhcmVudCYjMzQ7LAogICAgJiMzNDtudGZzX2lyX21ha2Vfc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgbnRmc19pcl90b19pYmAgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24gd2hlbiBjb252ZXJ0aW5nIGFuIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYmxvY2suIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGR1cmluZyBkaXJlY3RvcnkgaW5kZXggbWFuaXB1bGF0aW9ucywgc3VjaCBhcyBmaWxlIGNyZWF0aW9uIChgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmApIG9yIGRlbGV0aW9uIChgbnRmc191bmxpbmtgLCBgbnRmc19ybWRpcmApLCB3aGljaCB0cmlnZ2VyIGBudGZzX2lyX21ha2Vfc3BhY2VgIGFuZCBgbnRmc19pcl9yZXBhcmVudGAuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX2lyX3RvX2liJiMzNDssCiAgICAmIzM0O250ZnNfaXJfcmVwYXJlbnQmIzM0OywKICAgICYjMzQ7bnRmc19pcl9tYWtlX3NwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDYuNDc2NTYyOTA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDQxODM0MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX2lyX3RvX2liXCIsXG4gICAgXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gICAgXCJudGZzX2lyX21ha2Vfc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIHRvIGBudGZzX2lyX3RvX2liYCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRyaXZlciwgcHJldmVudGluZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Mgb3IgY29ycnVwdGlvbiB3aGVuIGNvbnZlcnRpbmcgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jay4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgZHVyaW5nIGRpcmVjdG9yeSBpbmRleCBtYW5pcHVsYXRpb25zLCBzdWNoIGFzIGZpbGUgY3JlYXRpb24gKGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCkgb3IgZGVsZXRpb24gKGBudGZzX3VubGlua2AsIGBudGZzX3JtZGlyYCksIHdoaWNoIHRyaWdnZXIgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYW5kIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDYuNDc2NTY4NDA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTI5OTcyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZjU1NDg0ZDA5MjBlYzFiODU5NjgzYjFjMzM3OWM2ODU3YTNmNzUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjA1OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xcbmluZGV4IGZhYTdlZTkyMGEzYWQwLi41Mjk2OTdiNTg5MWU1MCAxMDA2NDRcXG4tLS0gYS9mcy9udGZzL2luZGV4LmNcXG4rKysgYi9mcy9udGZzL2luZGV4LmNcXG5AQCAtMTExMiw2ICsxMTEyLDcgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXFxuIFxcdHN0cnVjdCBpbmRleF9lbnRyeSAqaWVfbGFzdDtcXG4gXFx0Y2hhciAqaWVzX3N0YXJ0LCAqaWVzX2VuZDtcXG4gXFx0aW50IGk7XFxuK1xcdHUzMiBpYl9jYXA7XFxuIFxcbiBcXHRudGZzX2RlYnVnKFxcXCJFbnRlcmluZ1xcXFxuXFxcIik7XFxuIFxcbkBAIC0xMTI3LDYgKzExMjgsMTUgQEAgc3RhdGljIHN0cnVjdCBpbmRleF9ibG9jayAqbnRmc19pcl90b19pYihzdHJ1Y3QgaW5kZXhfcm9vdCAqaXIsIHM2NCBpYl92Y24pXFxuIFxcdCAqIGFzIHdlbGwsIHdoaWNoIGNhbiBuZXZlciBoYXZlIGFueSBkYXRhLlxcbiBcXHQgKi9cXG4gXFx0aSA9IChjaGFyICopaWVfbGFzdCAtIGllc19zdGFydCArIGxlMTZfdG9fY3B1KGllX2xhc3QtXFx1MDAzZWxlbmd0aCk7XFxuK1xcbitcXHQvKiBFbnRyaWVzIG11c3QgZml0IGluIHRoZSBhbGxvY2F0ZWQgaW5kZXggYmxvY2sgKi9cXG4rXFx0aWJfY2FwID0gbGUzMl90b19jcHUoaWItXFx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxcbitcXHRcXHQtIGxlMzJfdG9fY3B1KGliLVxcdTAwM2VpbmRleC5lbnRyaWVzX29mZnNldCk7XFxuK1xcdGlmICgodTMyKWkgXFx1MDAzZSBpYl9jYXApIHtcXG4rXFx0XFx0a3ZmcmVlKGliKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuIFxcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcXHUwMDI2aWItXFx1MDAzZWluZGV4KSwgaWVzX3N0YXJ0LCBpKTtcXG4gXFxuIFxcdGliLVxcdTAwM2VpbmRleC5mbGFncyA9IGlyLVxcdTAwM2VpbmRleC5mbGFncztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDcuMDMwMjc0ODA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTE4ODgxMTA5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaXJfdG9faWJcIixcbiAgICBcIm50ZnNfaXJfcmVwYXJlbnRcIixcbiAgICBcIm50ZnNfaXJfbWFrZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNmNTU0ODRkMDkyMGVjMWI4NTk2ODNiMWMzMzc5YzY4NTdhM2Y3NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAxNDowNTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguYyBiL2ZzL250ZnMvaW5kZXguY1xuaW5kZXggZmFhN2VlOTIwYTNhZDAuLjUyOTY5N2I1ODkxZTUwIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9pbmRleC5jXG4rKysgYi9mcy9udGZzL2luZGV4LmNcbkBAIC0xMTEyLDYgKzExMTIsNyBAQCBzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcbiBcdHN0cnVjdCBpbmRleF9lbnRyeSAqaWVfbGFzdDtcbiBcdGNoYXIgKmllc19zdGFydCwgKmllc19lbmQ7XG4gXHRpbnQgaTtcbitcdHUzMiBpYl9jYXA7XG4gXG4gXHRudGZzX2RlYnVnKFwiRW50ZXJpbmdcXG5cIik7XG4gXG5AQCAtMTEyNyw2ICsxMTI4LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgaW5kZXhfYmxvY2sgKm50ZnNfaXJfdG9faWIoc3RydWN0IGluZGV4X3Jvb3QgKmlyLCBzNjQgaWJfdmNuKVxuIFx0ICogYXMgd2VsbCwgd2hpY2ggY2FuIG5ldmVyIGhhdmUgYW55IGRhdGEuXG4gXHQgKi9cbiBcdGkgPSAoY2hhciAqKWllX2xhc3QgLSBpZXNfc3RhcnQgKyBsZTE2X3RvX2NwdShpZV9sYXN0LVx1MDAzZWxlbmd0aCk7XG4rXG4rXHQvKiBFbnRyaWVzIG11c3QgZml0IGluIHRoZSBhbGxvY2F0ZWQgaW5kZXggYmxvY2sgKi9cbitcdGliX2NhcCA9IGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmFsbG9jYXRlZF9zaXplKVxuK1x0XHQtIGxlMzJfdG9fY3B1KGliLVx1MDAzZWluZGV4LmVudHJpZXNfb2Zmc2V0KTtcbitcdGlmICgodTMyKWkgXHUwMDNlIGliX2NhcCkge1xuK1x0XHRrdmZyZWUoaWIpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdG1lbWNweShudGZzX2llX2dldF9maXJzdChcdTAwMjZpYi1cdTAwM2VpbmRleCksIGllc19zdGFydCwgaSk7XG4gXG4gXHRpYi1cdTAwM2VpbmRleC5mbGFncyA9IGlyLVx1MDAzZWluZGV4LmZsYWdzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NDcuMDMwMjc2MzM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQxMTk2MDcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOVEZTIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBmcy9udGZzL2luZGV4LmNgIOKAkyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIGBudGZzX2lyX3RvX2liYDogYGlmICgodTMyKWkgXHUwMDNlIGliX2NhcClgLiBJZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBgaWJgIGdldHMgZnJlZWQgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBOVUxMYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgaXMgdGhpcyBjb2RlIHBhdGggZXZlbiAqcmVhY2hhYmxlKj8gQW5kIHdoYXQgYXJlIHRoZSBwcmVyZXF1aXNpdGVzPyBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGU/XCJcblxuRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBmb3IgYG50ZnNfaXJfdG9faWJgLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIHNlZSB3aGVyZSBpdCdzIGNhbGxlZCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AgYW5kIHBvdGVudGlhbGx5IGJleW9uZC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgY2hlY2sgaXMgYSBsZWdpdGltYXRlIGltcHJvdmVtZW50IG9yIHBvdGVudGlhbGx5IGludHJvZHVjZXMgYSBuZXcgZWRnZSBjYXNlLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyB0aGUgY2FsbGluZyBmdW5jdGlvbnMgaGFuZGxlIHRoZSBwb3RlbnRpYWwgYE5VTExgIHJldHVybiB0byBlbnN1cmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NTEuNDQyMjM4OTM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NjU1NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaXJfdG9faWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTEwNzM9c3RhdGljIHM2NCBudGZzX2libV9nZXRfZnJlZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTEwOC1cXG5mcy9udGZzL2luZGV4LmM6MTEwOTpzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcXG5mcy9udGZzL2luZGV4LmMtMTExMC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTI0OT1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyODYtXFxuZnMvbnRmcy9pbmRleC5jOjEyODc6XFx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcXG5mcy9udGZzL2luZGV4LmMtMTI4OC1cXHRpZiAoaWIgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNTo1MS41MDE4OTk1ODJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAzNzMyODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVEZTIEluZGV4IFJvb3QgdG8gSW5kZXggQnVmZmVyIFJlcGFyZW50aW5nIExvZ2ljKipcblxuUmlnaHQsIGBudGZzX2lyX3RvX2liYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX3JlcGFyZW50YC4gT2theSwgbWFrZXMgc2Vuc2UuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGEgcmVwYXJlbnRpbmcgc2NlbmFyaW8gd2l0aGluIHRoZSBOVEZTIGluZGV4IHN0cnVjdHVyZSBhbmQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgb3IgbWlncmF0aW5nIGRhdGEgZnJvbSB0aGUgaW5kZXggcm9vdCB0byBhbiBpbmRleCBidWZmZXIuIFNvLCBsZXQncyB0cmFjZSB0aGlzIGJhY2suIFRoZSBtb3JlIHByZXNzaW5nIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBXaGVyZSAqZXhhY3RseSogaXMgYG50ZnNfaXJfcmVwYXJlbnRgIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIGNhbGwgdG8gcmVhbGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIHdpbGwgcGFpbnQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHRyaWdnZXJzIHRoYXQgbGVhZCB0byB0aGlzIHNwZWNpZmljIGluZGV4IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA1OjU0LjgwNTYzNDQxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODM2NTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA1OjU0Ljg2NDAwNjI2M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDE4MjM3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgbWluZCdzIHdvcmtpbmcgdGhyb3VnaCB0aGlzLi4uXG5cbioqVHJhY2luZyB0aGUgTlRGUyBGaWxlIFN5c3RlbSBPcGVyYXRpb25zKipcblxuUmlnaHQsIGBudGZzX2lyX3JlcGFyZW50YCBpcyBkZWZpbml0ZWx5IGJlaW5nIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLiBUaGF0J3MgYSBrZXkgcmVsYXRpb25zaGlwIHRvIHVuZGVyc3RhbmQuIE5vdywgSSBuZWVkIHRvIHpvb20gb3V0IGEgYml0LiBXaGVyZSBpcyBgbnRmc19pcl9tYWtlX3NwYWNlYCBiZWluZyBpbnZva2VkPyBGaW5kaW5nIHRoZSB1cHN0cmVhbSBjYWxscyB0byBgbnRmc19pcl9tYWtlX3NwYWNlYCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cgYW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgcmVwYXJlbnRpbmcgb3BlcmF0aW9uIGlzIGhhcHBlbmluZy4gSXQncyBhbGwgYWJvdXQgZm9sbG93aW5nIHRoZSBkYXRhIGFuZCB0aGUgZXhlY3V0aW9uIHBhdGggdG8gZmlndXJlIG91dCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgZ2l2ZXMgbWUgdGhlIGJlc3QgY29udGV4dCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNTo1Ny45NjU4MzI1MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3MjU4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pcl9tYWtlX3NwYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMzc4PXN0YXRpYyBpbnQgbnRmc19pcl90cnVuY2F0ZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQxNC0vKlxcbmZzL250ZnMvaW5kZXguYzoxNDE1OiAqIG50ZnNfaXJfbWFrZV9zcGFjZSAtIE1ha2UgbW9yZSBzcGFjZSBmb3IgdGhlIGluZGV4IHJvb3QgYXR0cmlidXRlXFxuZnMvbnRmcy9pbmRleC5jLTE0MTYtICogQGljeDogaW5kZXggY29udGV4dFxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MTgtICovXFxuZnMvbnRmcy9pbmRleC5jOjE0MTk6c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbmZzL250ZnMvaW5kZXguYy0xNDIwLXtcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNDkzPXN0YXRpYyBpbnQgbnRmc19pcl9pbnNlcnRfbWVkaWFuKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICptZWRpYW4sXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTUwOS1cXG5mcy9udGZzL2luZGV4LmM6MTUxMDpcXHRyZXQgPSBudGZzX2lyX21ha2Vfc3BhY2UoaWN4LCBuZXdfc2l6ZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE1MTEtXFx0aWYgKHJldClcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNjQ2PWludCBudGZzX2llX2FkZChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9lbnRyeSAqaWUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTY3OS1cXHRcXHRpZiAoaWN4LVxcdTAwM2Vpc19pbl9yb290KVxcbmZzL250ZnMvaW5kZXguYzoxNjgwOlxcdFxcdFxcdHJldCA9IG50ZnNfaXJfbWFrZV9zcGFjZShpY3gsIG5ld19zaXplKTtcXG5mcy9udGZzL2luZGV4LmMtMTY4MS1cXHRcXHRlbHNlXFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTg4Mj1zdGF0aWMgaW50IG50ZnNfaW5kZXhfcm1fbm9kZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTk1MS1cXHRcXHRpZiAoaWN4LVxcdTAwM2Vpc19pbl9yb290KSB7XFxuZnMvbnRmcy9pbmRleC5jOjE5NTI6XFx0XFx0XFx0cmV0ID0gbnRmc19pcl9tYWtlX3NwYWNlKGljeCwgbmV3X3NpemUpO1xcbmZzL250ZnMvaW5kZXguYy0xOTUzLVxcdFxcdFxcdGlmIChyZXQgIT0gMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDU6NTguMDI0NTY0ODc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NjEwNTM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBJbmRleCBPcGVyYXRpb25zKipcblxuT2theSwgc28gYG50ZnNfaXJfbWFrZV9zcGFjZWAgaXMgdXNlZCBpbiBhIGZldyBrZXkgTlRGUyBpbmRleCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zOiBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgYG50ZnNfaWVfYWRkYCwgYW5kIGBudGZzX2luZGV4X3JtX25vZGVgLiBUaGF0J3MgcHJldHR5IHN0YW5kYXJkIGZvciBhbnkgaW5kZXggaW1wbGVtZW50YXRpb24sIGNhcnZpbmcgb3V0IHNwYWNlIGZvciBuZXcgZW50cmllcywgcmlnaHQ/IEdpdmVuIHRoZSBuYW1lcywgdGhlc2Ugc2VlbSBsaWtlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbnMgZm9yIG1haW50YWluaW5nIHRoZSBpbmRleCBzdHJ1Y3R1cmUgd2l0aGluIE5URlMuIElmIHRoZSBjb2RlJ3MgdGhlcmUsIHRoZW4gaXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGlmIE5URlMgaXMgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIE5URlMgaXMgZW5hYmxlZCwgcmlnaHQ/IFRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgYW5kIGNvbmZpcm0gTlRGUyBpcyBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjAzLjQ3MDY3MjUwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5OTY2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXFxuLS1cXG5mcy9udGZzL0tjb25maWctMzQtXFxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxcbmZzL250ZnMvS2NvbmZpZy0zNi1cXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjowMy41Mjk2NzQ5OTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk4ODc1Nzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gTlRGUyBXcml0ZSBTdXBwb3J0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBOVEZTX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IEJ1dCBJIG5lZWQgdG8gbmFpbCBkb3duIHdoZXRoZXIgdGhpcyBzaW5nbGUgb3B0aW9uIGVuY29tcGFzc2VzIHRoZSB3aG9sZSBmaWxlIHN5c3RlbSBzZXR1cCwgb3IgaWYgdGhlcmUncyBhIHNlcGFyYXRlIGZsYWcgc3BlY2lmaWNhbGx5IGZvciBlbmFibGluZyB3cml0ZSBzdXBwb3J0LiBJdCdzIGEga2V5IGRpc3RpbmN0aW9uLlxuXG5UaGUgb2J2aW91cyBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIEknbSBnb2luZyB0byBmaW5kIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBOVEZTIGRyaXZlci4gSXQgc2hvdWxkIGNvbnRhaW4gdGhlIGRlcGVuZGVuY2llcywgYW55IHJlbGF0ZWQgYnVpbGQgZmxhZ3MsIGFuZCB0aGUgYW5zd2VyIHRvIG15IGNydWNpYWwgcXVlc3Rpb24uIERpZ2dpbmcgaW4gdGhlcmUgc2hvdWxkIGNsYXJpZnkgaWYgYE5URlNfRlNgIGNvbnRyb2xzIHJlYWQtb25seSAqYW5kKiB3cml0ZSBmdW5jdGlvbmFsaXR5LCBvciBpZiBpdCdzIG1vcmUgbnVhbmNlZCB0aGFuIHRoYXQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoxMi41MTg0MzUwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvbnRmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIE5URlNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgTkxTXFxuICAgNTpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgTlRGUyBpcyB0aGUgZmlsZSBzeXN0ZW0gb2YgTWljcm9zb2Z0IFdpbmRvd3MgTlQsIDIwMDAsIFhQIGFuZCAyMDAzLlxcbiAgIDg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gbW91bnQgZGV2aWNlcyBmb3JtYXR0ZWQgd2l0aCB0aGUgbnRmcyBmaWxlIHN5c3RlbS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDExOlxcdFxcdCAgbnRmcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5URlNfREVCVUdcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5URlMgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuICAxNTpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgSWYgeW91IGFyZSBleHBlcmllbmNpbmcgYW55IHByb2JsZW1zIHdpdGggdGhlIE5URlMgZmlsZSBzeXN0ZW0sIHNheVxcbiAgMTg6XFx0XFx0ICBZIGhlcmUuICBUaGlzIHdpbGwgcmVzdWx0IGluIGFkZGl0aW9uYWwgY29uc2lzdGVuY3kgY2hlY2tzIHRvIGJlXFxuICAxOTpcXHRcXHQgIHBlcmZvcm1lZCBieSB0aGUgZHJpdmVyIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG9cXG4gIDIwOlxcdFxcdCAgYmUgd3JpdHRlbiB0byB0aGUgc3lzdGVtIGxvZy4gIE5vdGUgdGhhdCBkZWJ1Z2dpbmcgbWVzc2FnZXMgYXJlXFxuICAyMTpcXHRcXHQgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBUbyBlbmFibGUgdGhlbSwgc3VwcGx5IHRoZSBvcHRpb24gZGVidWdfbXNncz0xXFxuICAyMjpcXHRcXHQgIGF0IHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHdoZW4gYm9vdGluZyB0aGUga2VybmVsIG9yIGFzIGFuIG9wdGlvblxcbiAgMjM6XFx0XFx0ICB0byBpbnNtb2Qgd2hlbiBsb2FkaW5nIHRoZSBudGZzIG1vZHVsZS4gIE9uY2UgdGhlIGRyaXZlciBpcyBhY3RpdmUsXFxuICAyNDpcXHRcXHQgIHlvdSBjYW4gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBieSBkb2luZyAoYXMgcm9vdCk6XFxuICAyNTpcXHRcXHQgIGVjaG8gMSBcXHUwMDNlIC9wcm9jL3N5cy9mcy9udGZzLWRlYnVnXFxuICAyNjpcXHRcXHQgIFJlcGxhY2luZyB0aGUgXFxcIjFcXFwiIHdpdGggXFxcIjBcXFwiIHdvdWxkIGRpc2FibGUgZGVidWcgbWVzc2FnZXMuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgeW91IGxlYXZlIGRlYnVnZ2luZyBtZXNzYWdlcyBkaXNhYmxlZCwgdGhpcyByZXN1bHRzIGluIGxpdHRsZVxcbiAgMjk6XFx0XFx0ICBvdmVyaGVhZCwgYnV0IGVuYWJsaW5nIGRlYnVnIG1lc3NhZ2VzIHJlc3VsdHMgaW4gdmVyeSBzaWduaWZpY2FudFxcbiAgMzA6XFx0XFx0ICBzbG93ZG93biBvZiB0aGUgc3lzdGVtLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIFdoZW4gcmVwb3J0aW5nIGJ1Z3MsIHBsZWFzZSB0cnkgdG8gaGF2ZSBhdmFpbGFibGUgYSBmdWxsIGR1bXAgb2ZcXG4gIDMzOlxcdFxcdCAgZGVidWdnaW5nIG1lc3NhZ2VzIHdoaWxlIHRoZSBtaXNiZWhhdmlvdXIgd2FzIG9jY3VycmluZy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuICAzNjpcXHRcXHRib29sIFxcXCJOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBOVEZTX0ZTXFxuICAzODpcXHRcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IGFkZGl0aW9uYWwgYWNjZXNzIHJpZ2h0c1xcbiAgNDE6XFx0XFx0ICBmb3IgdXNlcnMgYW5kIGdyb3VwcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIEFDTCBzdXBwb3J0IGZvciBudGZzLCBwcm92aWRpbmcgZnVuY3Rpb25hbCBwYXJpdHlcXG4gIDQ0OlxcdFxcdCAgd2l0aCBudGZzMyBkcml2aWVyLlxcbiAgNDU6XFx0XFxuICA0NjpcXHRcXHQgIE5PVEU6IHRoaXMgaXMgbGludXggb25seSBmZWF0dXJlLiBXaW5kb3dzIHdpbGwgaWdub3JlIHRoZXNlIEFDTHMuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCBBY2Nlc3MgQ29udHJvbCBMaXN0cyBhcmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoxMi41MTg1MDI4MzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyMzA5ODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDaGVja2luZyBmb3IgTlRGU19SVyBDb25maWd1cmF0aW9uKipcblxuSG1tLCBub3cgdGhhdCBJJ20gY29uc2lkZXJpbmcgdGhpcywgYSBkZXRhaWwgaXMgbmFnZ2luZyBhdCBtZS4gV2Fzbid0IHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZvciBOVEZTIHJlYWQvd3JpdGUgZnVuY3Rpb25hbGl0eSB0aGF0IEkgbmVlZCB0byBjaGVjaz8gWWVzLCBub3cgSSByZW1lbWJlciwgSSB0aGluayBpdCdzIGNhbGxlZCBgTlRGU19SV2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV4aXN0cyBhbmQgaXMgc2V0IGNvcnJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3Qgb3Zlcmxvb2tlZCBzb21ldGhpbmcgZnVuZGFtZW50YWwgYWJvdXQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiBpcyBpbnRlbmRlZCB0byBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MTYuNTQxNjAzNDQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE1NzUwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MTYuNjAyNzcxNTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzQzMDY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24gQ29uZnVzaW9uKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gRGlkIEkganVzdCByZWFkIHRoYXQgYE5URlNfUldgIHdhcyByZW1vdmVkPyBUaGF0IGRvZXNuJ3Qgc291bmQgcmlnaHQuIEknbSBnb2luZyB0byBkb3VibGUtY2hlY2sgYGZzL250ZnMvS2NvbmZpZ2AuIFJpZ2h0LCBoZXJlIHdlIGdvLi4uIEhtbSwgaXQgZG9lcyBzZWVtIHRvIGJlIG1pc3NpbmcuIE9rYXksIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgaXQuIExldCdzIG5vdCBhc3N1bWUgSSBrbm93IHRoZSBmaWxlIGNvbnRlbnRzLCBsZXQncyBjYXJlZnVsbHkgcmV2aWV3IHRoZSBlbnRpcmUgYGZzL250ZnMvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IHN1YnRsZXR5IG9yIHJlbG9jYXRpb24gSSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoyNC4wMzcwODA3MzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyMzAsIkVycm9yIjoiZmlsZSBmcy9udGZzL0tjb25maWcgZG9lcyBub3QgaGF2ZSBsaW5lIDQ5LCBpdCBoYXMgb25seSA0OCBsaW5lcyIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgZnMvbnRmcy9LY29uZmlnIGRvZXMgbm90IGhhdmUgbGluZSA0OSwgaXQgaGFzIG9ubHkgNDggbGluZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MjQuMDM3MTUzMjUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc0Nzc3NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKlxuXG5SaWdodCwgc28gSSByZW1lbWJlciBoZWFyaW5nIHNvbWV0aGluZyBhYm91dCBgTlRGU19SV2AgYmVpbmcgZGVwcmVjYXRlZCBvciByZW1vdmVkIHJlY2VudGx5LCBtYXliZSBhcm91bmQgMjAyND8gSSBjYW4ndCBxdWl0ZSByZWNhbGwgdGhlIGV4YWN0IGRldGFpbHMuIFdhcyBpdCBiZWNhdXNlIGBudGZzM2AgYmVjYW1lIHRoZSBuZXcgZGVmYXVsdD8gT3IgbWF5YmUgYG50ZnNgIGl0c2VsZiBpcyBub3cgcmVhZC1vbmx5IGJ5IGRlZmF1bHQsIGFuZCB0aGV5IHNwZWNpZmljYWxseSBwdWxsZWQgb3V0IHRoZSB3cml0ZSBzdXBwb3J0PyBJdCdzIGFsbCBhIGJpdCBoYXp5LiBIb2xkIG9uLCB3YXNuJ3QgSSBsb29raW5nIGF0IHNvbWUgYG50ZnNfaXJfcmVwYXJlbnRgIGNhbGxzIHJlY2VudGx5PyBBaCB5ZXMsIHRoYXTigJlzIGNhbGxlZCBmcm9tIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBudGZzX2llX2FkZGAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdyaXRlIG9wZXJhdGlvbnMhIElmIHRoZXnigJlyZSBzdGlsbCB0aGVyZSB0aGF0IHN1Z2dlc3RzIHRoYXQgdGhlIHdyaXRlIGNvZGUgaGFzbid0IGJlZW4gcmVtb3ZlZCwgYnV0IGhhcyBqdXN0IGNoYW5nZWQuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgb3V0IG1vcmUgaXMgcHJvYmFibHkgaW4gYGZzL250ZnMvaW5kZXguY2AuIFRpbWUgdG8gc2VlIGlmIHRoZSB3cml0ZSBvcGVyYXRpb25zIGFyZSBzdGlsbCBwcmVzZW50IHdpdGhpbiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjoyOC4yMjQ2MzI5MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzMxMTk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MjguMjkxOTcxNzU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDQxODE1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQ2hlY2tpbmcgdGhlIEJ1aWxkIFN0YXR1cyBvZiBgbnRmc19pcl9yZXBhcmVudGAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgYG50ZnNfaXJfcmVwYXJlbnRgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCByZWFkeSB0byBnby4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgaXQncyBwYXJ0IG9mIHRoZSBjdXJyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIGFueXRoaW5nIGVsc2UsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyB3aXNlLiBJIHdhbnQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzaW1wbHkgc3RlbSBmcm9tIGEgbWlzc2luZyBvciBvdXRkYXRlZCBjb21waWxhdGlvbi4gTGV0J3Mgc2VlIGlmIHRoZSBsaW5rZXIgd2lsbCBmaW5kIGl0LCBvciB3aGV0aGVyIEkgbmVlZCB0byByZXZpc2l0IHRoZSBidWlsZCBzY3JpcHRzLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBJIG9mdGVuIG92ZXJsb29rIGluIHRoZSBoZWF0IG9mIGNvZGluZywgc28gSSdtIG1ha2luZyBpdCBhIHByaW9yaXR5IHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjMxLjIzNjE1NTQ5NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc3MjM3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pcl9yZXBhcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2luZGV4LmM9MTIyMz1zdGF0aWMgaW50IG50ZnNfaWFfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xMjQ4LVxcbmZzL250ZnMvaW5kZXguYzoxMjQ5OnN0YXRpYyBpbnQgbnRmc19pcl9yZXBhcmVudChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuZnMvbnRmcy9pbmRleC5jLTEyNTAte1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MjYtXFx0aWYgKHJldCA9PSAtRU5PU1BDKSB7XFxuZnMvbnRmcy9pbmRleC5jOjE0Mjc6XFx0XFx0cmV0ID0gbnRmc19pcl9yZXBhcmVudChpY3gpO1xcbmZzL250ZnMvaW5kZXguYy0xNDI4LVxcdFxcdGlmICghcmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjozMS4zMzM4ODQ4NDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDAzNzYyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGF0OlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbXBpbGF0aW9uIG9mIGBmcy9udGZzL2luZGV4LmNgKipcblxuUmlnaHQsIHNvIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhcHBhcmVudGx5IGRlZmluZWQgd2l0aGluIGBmcy9udGZzL2luZGV4LmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBpcyB0aGlzIGZpbGUgZXZlbiBiZWluZyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgbW9kdWxlIG9yIGltYWdlIEknbSB3b3JraW5nIHdpdGg/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJIGNhbid0IGp1c3QgYXNzdW1lIGl0J3MgaW5jbHVkZWQgYW5kIGF2YWlsYWJsZS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc2VlIGlmIHRoYXQgc3BlY2lmaWMgZmlsZSwgYGZzL250ZnMvaW5kZXguY2AsIGlzIGFjdHVhbGx5IHBhcnQgb2YgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFRoYXQncyB0aGUgbmV4dCBzdGVwOyBJIG5lZWQgdG8gY29uZmlybSBpdHMgaW5jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MzQuNzczOTI0OTAxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NzM1NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5kZXhcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19OVEZTX0ZTKSArPSBudGZzLm9cXG5mcy9udGZzL01ha2VmaWxlLTQtXFxuZnMvbnRmcy9NYWtlZmlsZTo1Om50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGUtNi1cXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6MzUuMDEyNzA0MzQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDgzODI5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuQWxyaWdodCwgY29uZmlybWVkIOKAkyBgaW5kZXgub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCwgdGhhdCdzIGEgZ2l2ZW4uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIHN0cnVjdHVyZXMuIExldCdzIHNlZS4uLiBJcyB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGFjY2Vzc2libGU/IFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBSaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgbnRmc19pcl9yZXBhcmVudGAuIEFuZCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYG50ZnNfaXJfbWFrZV9zcGFjZWAuIE9rYXksIHRoYXQncyBzdGFydGluZyB0byBwYWludCB0aGUgb3V0bGluZSBvZiB0aGUgY2FsbCBzdGFjay4uLiBBbmQsIGZpbmFsbHksIGBudGZzX2lyX21ha2Vfc3BhY2VgIGlzIGNhbGxlZCBmcm9tIGBudGZzX2llX2FkZGAuIFxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBudGZzX2llX2FkZGAgaXMgdXNlZC4gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGl0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCB1bmRlcnN0YW5kIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjQyLjE2MTA4OTI5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMzM1NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19pZV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTE0MTk9c3RhdGljIGludCBudGZzX2lyX21ha2Vfc3BhY2Uoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBpbnQgZGF0YV9zaXplKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE0MzktICovXFxuZnMvbnRmcy9pbmRleC5jOjE0NDA6c3RhdGljIGludCBudGZzX2llX2FkZF92Y24oc3RydWN0IGluZGV4X2VudHJ5ICoqaWUpXFxuZnMvbnRmcy9pbmRleC5jLTE0NDEte1xcbi0tXFxuZnMvbnRmcy9pbmRleC5jPTE0NTQ9c3RhdGljIGludCBudGZzX2loX2luc2VydChzdHJ1Y3QgaW5kZXhfaGVhZGVyICppaCwgc3RydWN0IGluZGV4X2VudHJ5ICpvcmlnX2llLCBzNjQgbmV3X3ZjbixcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xNDY2LVxcdGlmICghKGllLVxcdTAwM2VmbGFncyBcXHUwMDI2IElOREVYX0VOVFJZX05PREUpKSB7XFxuZnMvbnRmcy9pbmRleC5jOjE0Njc6XFx0XFx0cmV0ID0gbnRmc19pZV9hZGRfdmNuKFxcdTAwMjZpZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE0NjgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNTc0PXN0YXRpYyBpbnQgbnRmc19pYl9zcGxpdChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9ibG9jayAqaWIpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTY0NS1cXG5mcy9udGZzL2luZGV4LmM6MTY0NjppbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxcbmZzL250ZnMvaW5kZXguYy0xNjQ3LXtcXG4tLVxcbmZzL250ZnMvaW5kZXguYz0xNzA0PWludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE3MzUtXFxuZnMvbnRmcy9pbmRleC5jOjE3MzY6XFx0ZXJyID0gbnRmc19pZV9hZGQoaWN4LCBpZSk7XFxuZnMvbnRmcy9pbmRleC5jLTE3MzctXFx0bnRmc19pbmRleF9jdHhfcHV0KGljeCk7XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTc0Mz1zdGF0aWMgaW50IG50ZnNfaWhfdGFrZW91dChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIHN0cnVjdCBpbmRleF9oZWFkZXIgKmloLFxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE3ODAtXFxuZnMvbnRmcy9pbmRleC5jOjE3ODE6XFx0cmV0ID0gbnRmc19pZV9hZGQoaWN4LCBpZV9yb2FtKTtcXG5mcy9udGZzL2luZGV4LmMtMTc4Mi1vdXQ6XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTg4Mj1zdGF0aWMgaW50IG50ZnNfaW5kZXhfcm1fbm9kZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTkzNi1cXG5mcy9udGZzL2luZGV4LmM6MTkzNzpcXHRyZXQgPSBudGZzX2llX2FkZF92Y24oXFx1MDAyNmllKTtcXG5mcy9udGZzL2luZGV4LmMtMTkzOC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5oPTExNT12b2lkIG50ZnNfaW5kZXhfY3R4X3JlaW5pdChzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpO1xcbmZzL250ZnMvaW5kZXguaDoxMTY6aW50IG50ZnNfaWVfYWRkKHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeCwgc3RydWN0IGluZGV4X2VudHJ5ICppZSk7XFxuZnMvbnRmcy9pbmRleC5oLTExNy1pbnQgbnRmc19pY3hfaWJfc3luY193cml0ZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpO1xcbi0tXFxuZnMvbnRmcy9yZXBhcnNlLmM9NDgwPXN0YXRpYyBpbnQgc2V0X3JlcGFyc2VfaW5kZXgoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICp4cixcXG4tLVxcbmZzL250ZnMvcmVwYXJzZS5jLTUwMi1cXG5mcy9udGZzL3JlcGFyc2UuYzo1MDM6XFx0cmV0dXJuIG50ZnNfaWVfYWRkKHhyLCAoc3RydWN0IGluZGV4X2VudHJ5ICopXFx1MDAyNmluZHgpO1xcbmZzL250ZnMvcmVwYXJzZS5jLTUwNC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjQyLjIyODIzMDIxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTMzNjAxODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBxdWVzdGlvbjpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB3aGVuIGRlYnVnZ2luZywgb3B0aW1pemluZywgb3IgZXZlbiBqdXN0IHVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIHdpdGhpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGNvZGUuIEknbSBnb2luZyB0byBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHN0YXRpYyBhbmFseXNpcywgdXNpbmcgYGdyZXBgIG9yIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGNvZGUgYnJvd3NlciwgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgIGlzIHJlZmVyZW5jZWQuXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBzb3J0IHRocm91Z2ggdGhlIHJlc3VsdHMuIEknbSBsb29raW5nIGZvciB0aGUgKmRpcmVjdCogY2FsbGVycywgbm90IGp1c3QgZnVuY3Rpb25zIHRoYXQgbWlnaHQgZXZlbnR1YWxseSBjYWxsIGl0LiBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbnRleHQ7IGlzIGl0IGNhbGxlZCB3aXRoaW4gYW4gYGlmYCBibG9jaywgYSBsb29wLCBvciBhIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBpbiBwbGF5PyBLbm93aW5nIHRoZSBjb25kaXRpb25zIGFyb3VuZCB0aGUgY2FsbCB3aWxsIGJlIGp1c3QgYXMgaW1wb3J0YW50IGFzIGtub3dpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsIGl0c2VsZi5cblxuSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKnB1cnBvc2UqIG9mIHRoZSBjYWxsZXIuIFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjY29tcGxpc2ggd2hlbiBpdCBpbnZva2VzIHRoaXMgZnVuY3Rpb24/IElzIGl0IGFkZGluZyBhIG5ldyBmaWxlLCByZW5hbWluZyBhbiBleGlzdGluZyBvbmUsIG9yIHVwZGF0aW5nIGFuIGluZGV4IGVudHJ5PyBUaGUgY2FsbGVyJ3MgaW50ZW50IHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBpbnNpZ2h0cyBpbnRvIHRoZSBiZWhhdmlvciBvZiBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLiBBcmUgd2UgaW4gdGhlIG1ldGFkYXRhIHVwZGF0ZXMgb3IgYXJlIHdlIHN0aWxsIGluIHRoZSBpbmRleGluZyBpdHNlbGY/XG5cbklmIHN0YXRpYyBhbmFseXNpcyBkb2Vzbid0IGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIGRlYnVnZ2VyIHdpbGwgYmUgbmV4dC4gSSdsbCBzZXQgYSBicmVha3BvaW50IGF0IHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgZnVuY3Rpb24gYW5kIHN0ZXAgYmFja3dhcmQgdGhyb3VnaCB0aGUgY2FsbCBzdGFjay4gVGhpcyB3aWxsIHJldmVhbCB0aGUgZHluYW1pYyBleGVjdXRpb24gcGF0aCwgc2hvd2luZyBtZSBleGFjdGx5IHdoaWNoIGZ1bmN0aW9uIHNlcXVlbmNlcyBsZWFkIHRvIHRoZSBjYWxsIGFuZCB0aGUgdmFsdWVzIG9mIGFueSBjcml0aWNhbCB2YXJpYWJsZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgcmV2ZWFsaW5nIHRoZSBjb250ZXh0LiBJ4oCZbGwgYmUgZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdmFsdWVzLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGluZm9ybWF0aW9uLlxuXG5UaGUgZW5kIGdvYWwgaXMgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGVjdXRpb24gcGF0aCwgZnJvbSB0aGUgb3JpZ2luYXRpbmcgZnVuY3Rpb24gYWxsIHRoZSB3YXkgdG8gYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQgZXhhY3RseSBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgZmlsZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo0Ni43NjE4MzQ0MDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjMzNTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2luZGV4X2FkZF9maWxlbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2luZGV4LmM9MTY0Nj1pbnQgbnRmc19pZV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4LCBzdHJ1Y3QgaW5kZXhfZW50cnkgKmllKVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTE2OTgtLypcXG5mcy9udGZzL2luZGV4LmM6MTY5OTogKiBudGZzX2luZGV4X2FkZF9maWxlbmFtZSAtIGFkZCBmaWxlbmFtZSB0byBkaXJlY3RvcnkgaW5kZXhcXG5mcy9udGZzL2luZGV4LmMtMTcwMC0gKiBAbmk6XFx0XFx0bnRmcyBpbm9kZSBkZXNjcmliaW5nIGRpcmVjdG9yeSB0byB3aGljaCBpbmRleCBhZGQgZmlsZW5hbWVcXG4tLVxcbmZzL250ZnMvaW5kZXguYy0xNzAzLSAqL1xcbmZzL250ZnMvaW5kZXguYzoxNzA0OmludCBudGZzX2luZGV4X2FkZF9maWxlbmFtZShzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBmaWxlX25hbWVfYXR0ciAqZm4sIHU2NCBtcmVmKVxcbmZzL250ZnMvaW5kZXguYy0xNzA1LXtcXG4tLVxcbmZzL250ZnMvaW5kZXguaD0xMDg9dm9pZCBudGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN0eCk7XFxuZnMvbnRmcy9pbmRleC5oOjEwOTppbnQgbnRmc19pbmRleF9hZGRfZmlsZW5hbWUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuLCB1NjQgbXJlZik7XFxuZnMvbnRmcy9pbmRleC5oLTExMC1pbnQgbnRmc19pbmRleF9yZW1vdmUoc3RydWN0IG50ZnNfaW5vZGUgKm5pLCBjb25zdCB2b2lkICprZXksIGNvbnN0IHUzMiBrZXlsZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTM5ND1zdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTY3Ny1cXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbmRleC4gKi9cXG5mcy9udGZzL25hbWVpLmM6Njc4OlxcdGVyciA9IG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lKGRpcl9uaSwgZm4sIGNoaWxkX21mdF9yZWYpO1xcbmZzL250ZnMvbmFtZWkuYy02NzktXFx0aWYgKGVycikge1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTExNDk9c3RhdGljIGludCBfX250ZnNfbGluayhzdHJ1Y3QgbnRmc19pbm9kZSAqbmksIHN0cnVjdCBudGZzX2lub2RlICpkaXJfbmksXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTIxNi1cXHQvKiBBZGQgRklMRV9OQU1FIGF0dHJpYnV0ZSB0byBpbmRleC4gKi9cXG5mcy9udGZzL25hbWVpLmM6MTIxNzpcXHRlcnIgPSBudGZzX2luZGV4X2FkZF9maWxlbmFtZShkaXJfbmksIGZuLCBNS19NUkVGKG5pLVxcdTAwM2VtZnRfbm8sXFxuZnMvbnRmcy9uYW1laS5jLTEyMTgtXFx0XFx0XFx0XFx0XFx0bGUxNl90b19jcHUobmlfbXJlYy1cXHUwMDNlc2VxdWVuY2VfbnVtYmVyKSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo0Ni45NzgxNzU4NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NTU5MDgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVEZTIE1vZHVsZSBDb21waWxhdGlvbiBhbmQgV3JpdGUgU3VwcG9ydCAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgX19udGZzX2NyZWF0ZWAgYW5kIGBfX250ZnNfbGlua2AgYXJlIGRlZmluaXRlbHkgZGVmaW5lZCB3aXRoaW4gYGZzL250ZnMvbmFtZWkuY2AuXCIgVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY29uZmlybSB0aGF0IGBmcy9udGZzL25hbWVpLmNgIGlzIGFjdHVhbGx5IGJlaW5nIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQSBxdWljayBzY2FuIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHJldmVhbHMgdGhhdCwgeWVzLCBpdCdzIGluY2x1ZGVkIHVuZGVyIHRoZSBgbnRmcy15YCBkaXJlY3RpdmUuIEV4Y2VsbGVudCwgc28gZmFyIHNvIGdvb2QuXG5cbk5vdywgdGhpcyByYWlzZXMgYSBxdWVzdGlvbjogZG9lcyB0aGUgYGZzL250ZnNgIG1vZHVsZSAqc3VwcG9ydCogd3JpdGUgb3BlcmF0aW9ucz8gSSBoYWQgYSBmbGVldGluZyBtZW1vcnkgb2YgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IEkgY291bGRuJ3QgcXVpdGUgcGxhY2UgaXQuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRoZSBgZnMvbnRmcy9LY29uZmlnYCBmaWxlLiBBaCwgeWVzLCBJIHJlY2FsbCBub3c6IGBOVEZTX1JXYC4gSXQncyBhbGwgY29taW5nIGJhY2sgdG8gbWUuIExldCBtZSBnbyBiYWNrIGFuZCBnaXZlIGl0IGFub3RoZXIgb25jZS1vdmVyLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDY6NTYuNDYzNzY5MTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU1ODczOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjU2LjUzNzMzOTI5MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MDIyNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipIdW50aW5nIERvd24gUmVhZC9Xcml0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHJlYWQvd3JpdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBmb3IgdGhlIE5URlMgZmlsZXN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCwgaXMgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGZpbGVzeXN0ZW0gY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgSSdkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QgdGhlcmUuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IGBSV2Agb3IgaXRzIGVxdWl2YWxlbnQgaXMgZGVmaW5lZCBhcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgYGNvbmZpZ2Agb3B0aW9uIG9yIHNvbWUgb3RoZXIgdmFyaWFibGUgdGhhdCBJIGNhbiB0d2VhaywgbWF5YmUgc29tZXRoaW5nIGxpa2UgYENPTkZJR19OVEZTX1JXYCwgb3IgYSByZWxhdGVkIHN5bWJvbC4gVGltZSB0byBjaGVjayBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgxNywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA2OjU5LjUyNjM2NDA4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDkzNTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL2xheW91dC5oPTE3NTI9c3RydWN0IHNkaF9pbmRleF9rZXkge1xcbi0tXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzY2LSAqIFZPTFVNRV9NT1VOVEVEX09OX05UNDogICAgICAgICAgTW91bnRlZCBvbiBOVDQgKGNvbXBhdGliaWxpdHkgZmxhZykuXFxuZnMvbnRmcy9sYXlvdXQuaDoxNzY3OiAqIFZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZOiAgICAgVVNOIGpvdXJuYWwgZGVsZXRpb24gaW4gcHJvZ3Jlc3MuXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzY4LSAqIFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEOiAgICAgICAgUmVwYWlyICRPYmpJZCBvbiBuZXh0IG1vdW50LlxcbmZzL250ZnMvbGF5b3V0Lmg6MTc2OTogKiBWT0xVTUVfQ0hLRFNLX1VOREVSV0FZOiAgICAgICAgIENoa2RzayBpcyBydW5uaW5nLlxcbmZzL250ZnMvbGF5b3V0LmgtMTc3MC0gKiBWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLOiAgICAgIE1vZGlmaWVkIGJ5IGNoa2Rzay5cXG4tLVxcbmZzL250ZnMvbGF5b3V0Lmg9MTc3NT1lbnVtIHtcXG4tLVxcbmZzL250ZnMvbGF5b3V0LmgtMTc4MC1cXG5mcy9udGZzL2xheW91dC5oOjE3ODE6XFx0Vk9MVU1FX0RFTEVURV9VU05fVU5ERVJXQVlcXHQ9IGNwdV90b19sZTE2KDB4MDAxMCksXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzgyLVxcdFZPTFVNRV9SRVBBSVJfT0JKRUNUX0lEXFx0XFx0PSBjcHVfdG9fbGUxNigweDAwMjApLFxcbmZzL250ZnMvbGF5b3V0LmgtMTc4My1cXG5mcy9udGZzL2xheW91dC5oOjE3ODQ6XFx0Vk9MVU1FX0NIS0RTS19VTkRFUldBWVxcdFxcdD0gY3B1X3RvX2xlMTYoMHg0MDAwKSxcXG5mcy9udGZzL2xheW91dC5oLTE3ODUtXFx0Vk9MVU1FX01PRElGSUVEX0JZX0NIS0RTS1xcdD0gY3B1X3RvX2xlMTYoMHg4MDAwKSxcXG4tLVxcbmZzL250ZnMvbGF5b3V0LmgtMTc5Ny0gKiBAbWlub3JfdmVyOiAgICAgIE1pbm9yIE5URlMgdmVyc2lvbiBudW1iZXIgKGUuZy4sIDEgZm9yIE5URlMgMy4xKS5cXG5mcy9udGZzL2xheW91dC5oOjE3OTg6ICogQGZsYWdzOiAgICAgICAgICBWb2x1bWUgZmxhZ3MgKFZPTFVNRV9JU19ESVJUWSwgVk9MVU1FX0NIS0RTS19VTkRFUldBWSwgZXRjLikuXFxuZnMvbnRmcy9sYXlvdXQuaC0xNzk5LSAqICAgICAgICAgICAgICAgICAgU2VlIHZvbHVtZSBmbGFncyBlbnVtIGZvciBkZXRhaWxzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNjo1OS41OTEzMDU1NTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDI3ODM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkZpbGUgU3lzdGVtIElucXVpcnkqKlxuXG5IbW0sIEknbSBjdXJyZW50bHkgbG9va2luZyBpbnRvIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeSwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEFtIEkgb3Zlcmxvb2tpbmcgYSBwb3RlbnRpYWxseSBtb3JlIHJlY2VudCwgaW1wcm92ZWQgdmVyc2lvbj8gTXkgaW50dWl0aW9uIGlzIHByb2RkaW5nIG1lIHRvIGNvbnNpZGVyLi4uIGlzIHRoZXJlIGEgYGZzL250ZnMzL2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhhdCBzbGlnaHQgdW5jZXJ0YWludHkgaXMgbmFnZ2luZyBhdCBtZS4gUGVyaGFwcyBJIHNob3VsZCBxdWlja2x5IGNoZWNrIGlmIHRoYXQgbW9yZSByZWNlbnQgdmVyc2lvbiBleGlzdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDMuMjI1NTg2NzE0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFpby5jXCIsXG4gICAgXCJhbm9uX2lub2Rlcy5jXCIsXG4gICAgXCJhdHRyLmNcIixcbiAgICBcImJhY2tpbmctZmlsZS5jXCIsXG4gICAgXCJiYWRfaW5vZGUuY1wiLFxuICAgIFwiYmluZm10X2VsZi5jXCIsXG4gICAgXCJiaW5mbXRfZWxmX2ZkcGljLmNcIixcbiAgICBcImJpbmZtdF9mbGF0LmNcIixcbiAgICBcImJpbmZtdF9taXNjLmNcIixcbiAgICBcImJpbmZtdF9zY3JpcHQuY1wiLFxuICAgIFwiYnBmX2ZzX2tmdW5jcy5jXCIsXG4gICAgXCJidWZmZXIuY1wiLFxuICAgIFwiY2hhcl9kZXYuY1wiLFxuICAgIFwiY29tcGF0X2JpbmZtdF9lbGYuY1wiLFxuICAgIFwiY29yZWR1bXAuY1wiLFxuICAgIFwiZF9wYXRoLmNcIixcbiAgICBcImRheC5jXCIsXG4gICAgXCJkY2FjaGUuY1wiLFxuICAgIFwiZGlyZWN0LWlvLmNcIixcbiAgICBcImRyb3BfY2FjaGVzLmNcIixcbiAgICBcImV2ZW50ZmQuY1wiLFxuICAgIFwiZXZlbnRwb2xsLmNcIixcbiAgICBcImV4ZWMuY1wiLFxuICAgIFwiZmNudGwuY1wiLFxuICAgIFwiZmhhbmRsZS5jXCIsXG4gICAgXCJmaWxlLmNcIixcbiAgICBcImZpbGVfYXR0ci5jXCIsXG4gICAgXCJmaWxlX3RhYmxlLmNcIixcbiAgICBcImZpbGVzeXN0ZW1zLmNcIixcbiAgICBcImZzLXdyaXRlYmFjay5jXCIsXG4gICAgXCJmc19jb250ZXh0LmNcIixcbiAgICBcImZzX2RpcmVudC5jXCIsXG4gICAgXCJmc19wYXJzZXIuY1wiLFxuICAgIFwiZnNfcGluLmNcIixcbiAgICBcImZzX3N0cnVjdC5jXCIsXG4gICAgXCJmc2Vycm9yLmNcIixcbiAgICBcImZzb3Blbi5jXCIsXG4gICAgXCJpbml0LmNcIixcbiAgICBcImlub2RlLmNcIixcbiAgICBcImludGVybmFsLmhcIixcbiAgICBcImlvY3RsLmNcIixcbiAgICBcImtlcm5lbF9yZWFkX2ZpbGUuY1wiLFxuICAgIFwibGliZnMuY1wiLFxuICAgIFwibG9ja3MuY1wiLFxuICAgIFwibWJjYWNoZS5jXCIsXG4gICAgXCJtbnRfaWRtYXBwaW5nLmNcIixcbiAgICBcIm1vdW50LmhcIixcbiAgICBcIm1wYWdlLmNcIixcbiAgICBcIm5hbWVpLmNcIixcbiAgICBcIm5hbWVzcGFjZS5jXCIsXG4gICAgXCJuc2ZzLmNcIixcbiAgICBcIm51bGxmcy5jXCIsXG4gICAgXCJvcGVuLmNcIixcbiAgICBcInBpZGZzLmNcIixcbiAgICBcInBpcGUuY1wiLFxuICAgIFwicG5vZGUuY1wiLFxuICAgIFwicG5vZGUuaFwiLFxuICAgIFwicG9zaXhfYWNsLmNcIixcbiAgICBcInByb2NfbmFtZXNwYWNlLmNcIixcbiAgICBcInJlYWRfd3JpdGUuY1wiLFxuICAgIFwicmVhZGRpci5jXCIsXG4gICAgXCJyZW1hcF9yYW5nZS5jXCIsXG4gICAgXCJzZWxlY3QuY1wiLFxuICAgIFwic2VxX2ZpbGUuY1wiLFxuICAgIFwic2lnbmFsZmQuY1wiLFxuICAgIFwic3BsaWNlLmNcIixcbiAgICBcInN0YWNrLmNcIixcbiAgICBcInN0YXQuY1wiLFxuICAgIFwic3RhdGZzLmNcIixcbiAgICBcInN1cGVyLmNcIixcbiAgICBcInN5bmMuY1wiLFxuICAgIFwic3lzY3Rscy5jXCIsXG4gICAgXCJ0aW1lcmZkLmNcIixcbiAgICBcInV0aW1lcy5jXCIsXG4gICAgXCJ4YXR0ci5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIjlwXCIsXG4gICAgXCJhZGZzXCIsXG4gICAgXCJhZmZzXCIsXG4gICAgXCJhZnNcIixcbiAgICBcImF1dG9mc1wiLFxuICAgIFwiYmVmc1wiLFxuICAgIFwiYmZzXCIsXG4gICAgXCJidHJmc1wiLFxuICAgIFwiY2FjaGVmaWxlc1wiLFxuICAgIFwiY2VwaFwiLFxuICAgIFwiY29kYVwiLFxuICAgIFwiY29uZmlnZnNcIixcbiAgICBcImNyYW1mc1wiLFxuICAgIFwiY3J5cHRvXCIsXG4gICAgXCJkZWJ1Z2ZzXCIsXG4gICAgXCJkZXZwdHNcIixcbiAgICBcImRsbVwiLFxuICAgIFwiZWNyeXB0ZnNcIixcbiAgICBcImVmaXZhcmZzXCIsXG4gICAgXCJlZnNcIixcbiAgICBcImVyb2ZzXCIsXG4gICAgXCJleGZhdFwiLFxuICAgIFwiZXhwb3J0ZnNcIixcbiAgICBcImV4dDJcIixcbiAgICBcImV4dDRcIixcbiAgICBcImYyZnNcIixcbiAgICBcImZhdFwiLFxuICAgIFwiZnJlZXZ4ZnNcIixcbiAgICBcImZ1c2VcIixcbiAgICBcImdmczJcIixcbiAgICBcImhmc1wiLFxuICAgIFwiaGZzcGx1c1wiLFxuICAgIFwiaG9zdGZzXCIsXG4gICAgXCJocGZzXCIsXG4gICAgXCJodWdldGxiZnNcIixcbiAgICBcImlvbWFwXCIsXG4gICAgXCJpc29mc1wiLFxuICAgIFwiamJkMlwiLFxuICAgIFwiamZmczJcIixcbiAgICBcImpmc1wiLFxuICAgIFwia2VybmZzXCIsXG4gICAgXCJsb2NrZFwiLFxuICAgIFwibWluaXhcIixcbiAgICBcIm5ldGZzXCIsXG4gICAgXCJuZnNcIixcbiAgICBcIm5mc19jb21tb25cIixcbiAgICBcIm5mc2RcIixcbiAgICBcIm5pbGZzMlwiLFxuICAgIFwibmxzXCIsXG4gICAgXCJub3RpZnlcIixcbiAgICBcIm50ZnNcIixcbiAgICBcIm50ZnMzXCIsXG4gICAgXCJvY2ZzMlwiLFxuICAgIFwib21mc1wiLFxuICAgIFwib3BlbnByb21mc1wiLFxuICAgIFwib3JhbmdlZnNcIixcbiAgICBcIm92ZXJsYXlmc1wiLFxuICAgIFwicHJvY1wiLFxuICAgIFwicHN0b3JlXCIsXG4gICAgXCJxbng0XCIsXG4gICAgXCJxbng2XCIsXG4gICAgXCJxdW90YVwiLFxuICAgIFwicmFtZnNcIixcbiAgICBcInJlc2N0cmxcIixcbiAgICBcInJvbWZzXCIsXG4gICAgXCJzbWJcIixcbiAgICBcInNxdWFzaGZzXCIsXG4gICAgXCJzeXNmc1wiLFxuICAgIFwidGVzdHNcIixcbiAgICBcInRyYWNlZnNcIixcbiAgICBcInViaWZzXCIsXG4gICAgXCJ1ZGZcIixcbiAgICBcInVmc1wiLFxuICAgIFwidW5pY29kZVwiLFxuICAgIFwidmJveHNmXCIsXG4gICAgXCJ2ZXJpdHlcIixcbiAgICBcInhmc1wiLFxuICAgIFwiem9uZWZzXCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDMuMjI1NzU5ODU0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjE2MjIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTlRGUyBGaWxlIFN5c3RlbSBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBib3RoIGBmcy9udGZzYCBhbmQgYGZzL250ZnMzYCBwb3BzIHVwLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgb3IgY29uZmxpY3RzLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYGZzL250ZnMvaW5kZXguY2AuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXBseSBpbnRvIHRoZSBjb2RlLCBJIHdhbnQgdG8gY29uZmlybSBhIHNldHRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvciBzdGF0dXMgb2YgYE5URlNfUldgLiBUaGF0IHdpbGwgaW5mbHVlbmNlIG15IGV4cGVjdGF0aW9ucyBvZiB0aGUgYWZmZWN0ZWQgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2NzEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MDYuOTg3Mzg0NDI3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDUzODE5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjA3LjA1NzkzMjQ4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA0ODI0MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTlRGUyBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gRGlkbid0IEkganVzdCB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlRGUyBhbHJlYWR5PyBJJ20gcHJldHR5IHN1cmUgSSBkaWQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBiZWZvcmUgZGl2aW5nIGluIGZ1cnRoZXIuIFllcywgdGhhdCdzIHJpZ2h0LCBJIGhhZCB0aGF0IGRhdGEuIE9rYXksIG5leHQgdXAsIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgZWxzZS4gTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5LCBgZnMvbnRmcy9LY29uZmlnYC4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBlbnRyeSByZWxhdGVkIHRvIGBjb25maWcgTlRGU2Agc3BlY2lmaWNhbGx5LiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBrZXkgaW5mb3JtYXRpb24gSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkxNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjEwLjk2Mjc1OTE0NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk2NzU3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcXG5mcy9udGZzL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTEyLVxcbmZzL250ZnMvS2NvbmZpZzoxMzpjb25maWcgTlRGU19ERUJVR1xcbmZzL250ZnMvS2NvbmZpZy0xNC1cXHRib29sIFxcXCJOVEZTIGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MTEuMDIyNDQxODAzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMzMDA5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgTlRGUyBXcml0ZSBTdXBwb3J0IENoYW5nZXMqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGBOVEZTX1JXYCBiZWluZyBkcm9wcGVkIGZyb20gYGZzL250ZnMvS2NvbmZpZ2Agc29tZXRpbWUgYXJvdW5kIDIwMjQuIFRoYXQgZGVmaW5pdGVseSBjYXVnaHQgbXkgZXllLiBUaGUgaW1wbGljYXRpb24gaXMgdGhhdCB3cml0ZSBzdXBwb3J0IG1pZ2h0IGJlIGVuYWJsZWQgZGlmZmVyZW50bHkgbm93LCBwb3RlbnRpYWxseSB1bmNvbmRpdGlvbmFsbHkuIFRvIGNvbmZpcm0gdGhpcywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBmcy9udGZzL01ha2VmaWxlYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYG50ZnMteWAgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgaWYgaXQgaW50cmluc2ljYWxseSBpbmNvcnBvcmF0ZXMgd3JpdGUgZnVuY3Rpb25hbGl0eSwgcmVnYXJkbGVzcyBvZiBhIEtjb25maWcgb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgYE1ha2VmaWxlYCBlbnRyeSBwb2ludCB3aWxsIGNsYXJpZnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgTlRGUyB3cml0ZSBzdXBwb3J0IGluIHRoZSBrZXJuZWwgYW5kIHdoZXRoZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZSBpcyBuZWNlc3Nhcnkgb3Igbm90LCBhbmQgd2hlcmUgdGhhdCBjaGFuZ2Ugd291bGQgYmUgbWFkZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyNzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNzoxNC45NDU3NDYzMzNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmotJChDT05GSUdfTlRGU19GUykgKz0gbnRmcy5vXFxuICAgNDpcXHRcXG4gICA1OlxcdG50ZnMteSA6PSBhb3BzLm8gYXR0cmliLm8gY29sbGF0ZS5vIGRpci5vIGZpbGUubyBpbmRleC5vIGlub2RlLm8gXFxcXFxcbiAgIDY6XFx0XFx0ICBtZnQubyBtc3QubyBuYW1laS5vIHJ1bmxpc3QubyBzdXBlci5vIHVuaXN0ci5vIGF0dHJsaXN0Lm8gZWEubyBcXFxcXFxuICAgNzpcXHRcXHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXFxcXG4gICA4OlxcdFxcdCAgaW9tYXAubyBkZWJ1Zy5vIHN5c2N0bC5vIG9iamVjdF9pZC5vIGJkZXYtaW8ub1xcbiAgIDk6XFx0XFxuICAxMDpcXHRjY2ZsYWdzLSQoQ09ORklHX05URlNfREVCVUcpICs9IC1EREVCVUdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MTQuOTQ1ODU3MzgyWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2OTY3MTk1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBmaWxlIHN5c3RlbSBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIE5URlMgV3JpdGUgU3VwcG9ydCBJbnF1aXJ5KipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYE5URlNfUldgIGJlaW5nIGRyb3BwZWQsIG9yIG1heWJlIHdyaXRlIHN1cHBvcnQgYmVpbmcgKmFsd2F5cyogb24gbm93PyBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBOVEZTIGRyaXZlciwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gY2hlY2sgdGhlIGNvcmUsIHRoZSBgZnMvbnRmcy9zdXBlci5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudCBiZWhhdmlvci4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBob3cgcmVhZC1vbmx5IG1vdW50aW5nIGlzIGhhbmRsZWQsIG9yIGlmIGl0J3MgZXZlbiBhbiBvcHRpb24gYW55bW9yZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjE5LjY0MjU4MTUzNloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5ODU5MDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNCX1JET05MWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL3N1cGVyLmM9MjY1PXN0YXRpYyBpbnQgbnRmc19yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMjg0LVxcdCAqL1xcbmZzL250ZnMvc3VwZXIuYzoyODU6XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTI4Ni1cXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTMxMi1cXHRcXHR9XFxuZnMvbnRmcy9zdXBlci5jOjMxMzpcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuZnMvbnRmcy9zdXBlci5jLTMxNC1cXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4tLVxcbmZzL250ZnMvc3VwZXIuYz0zMzM9dm9pZCBudGZzX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9zdXBlci5jLTM0MC1cXHRpZiAodm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MzQxOlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMzQyLVxcdFxcdHByX2NyaXQoXFxcIihkZXZpY2UgJXMpOiBGaWxlc3lzdGVtIGhhcyBiZWVuIHNldCByZWFkLW9ubHlcXFxcblxcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmM9MTM5OT1zdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbClcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNDE2LVxcbmZzL250ZnMvc3VwZXIuYzoxNDE3OlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTQxOC1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsXFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU0Mi1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU0MzpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NDQtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIiVzLiAgTW91bnRpbmcgcmVhZC1vbmx5JXNcXFwiLCBlczEsIGVzMik7XFxuLS1cXG5mcy9udGZzL3N1cGVyLmMtMTU1OS1cXHRcXHRpZiAoIXNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgdm9sLVxcdTAwM2Vvbl9lcnJvcnMgPT0gT05fRVJST1JTX1JFTU9VTlRfUk8pIHtcXG5mcy9udGZzL3N1cGVyLmM6MTU2MDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuZnMvbnRmcy9zdXBlci5jLTE1NjEtXFx0XFx0XFx0bnRmc19lcnJvcihzYiwgXFxcIkZhaWxlZCB0byBsb2FkIExvZ0ZpbGUuIE1vdW50aW5nIHJlYWQtb25seS5cXFwiKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNTkxLVxcdFxcdGlmICghc2JfcmRvbmx5KHNiKSBcXHUwMDI2XFx1MDAyNiB2b2wtXFx1MDAzZW9uX2Vycm9ycyA9PSBPTl9FUlJPUlNfUkVNT1VOVF9STykge1xcbmZzL250ZnMvc3VwZXIuYzoxNTkyOlxcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTU5My1cXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiJXMuICBNb3VudGluZyByZWFkLW9ubHklc1xcXCIsIGVzMSwgZXMyKTtcXG4tLVxcbmZzL250ZnMvc3VwZXIuYy0xNjA2LVxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCIlcy4gIE1vdW50aW5nIHJlYWQtb25seSVzXFxcIiwgZXMxLCBlczIpO1xcbmZzL250ZnMvc3VwZXIuYzoxNjA3OlxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcXG5mcy9udGZzL3N1cGVyLmMtMTYwOC1cXHRcXHROVm9sU2V0RXJyb3JzKHZvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjE5Ljg5MjQ0NjY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzQ1NDMxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIGEgUmVhZC1Pbmx5IEZpbGUgU3lzdGVtIElzc3VlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBzb21ldGhpbmcgYW5kIG15IG1lbnRhbCBicmVhZGNydW1iIHRyYWlsIGxlYWRzIG1lIHRvIGBmcy9udGZzL3N1cGVyLmNgLiBSaWdodCwgSSByZW1lbWJlciBzZWVpbmcgc29tZXRoaW5nIGFib3V0IHJlYWQtb25seSBzdGF0ZXMgaW4gdGhlcmUsIHBhcnRpY3VsYXJseSB0aGlzIGNvbmRpdGlvbjogYHNiX3Jkb25seShzYikgXHUwMDI2XHUwMDI2ICEoZmMtXHUwMDNlc2JfZmxhZ3MgXHUwMDI2IFNCX1JET05MWSlgLiBUaGF0J3MgdGhlIGtleS4gVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhpcyBsb29rcyBsaWtlIGEgY29uZGl0aW9uYWwgaXNzdWUgd2l0aCBhIHN1cGVyIGJsb2NrIGZsYWcgYW5kIGFub3RoZXIgZmxhZ3MuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGFjdC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGF0IGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgMjg1IGluIGBmcy9udGZzL3N1cGVyLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIGNoZWNrcyBtZWFuLCBob3cgdGhleSBpbnRlcmFjdCwgYW5kIHdoeSB0aGV5IG1pZ2h0IGJlIGNhdXNpbmcgYSBwcm9ibGVtIG9yIGEgY29uY2VybiB0aGF0IEkgbmVlZCB0byBhZGRyZXNzLiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBmbG93IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MjQuMjI2OTkzNTMxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL3N1cGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjcwOlxcdFxcdG50ZnNfZGVidWcoXFxcIkVudGVyaW5nIHdpdGggcmVtb3VudFxcXCIpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRzeW5jX2ZpbGVzeXN0ZW0oc2IpO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHQvKlxcbiAyNzU6XFx0XFx0ICogRm9yIHRoZSByZWFkLXdyaXRlIGNvbXBpbGVkIGRyaXZlciwgaWYgd2UgYXJlIHJlbW91bnRpbmcgcmVhZC13cml0ZSxcXG4gMjc2OlxcdFxcdCAqIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdm9sdW1lIGVycm9ycyBhbmQgdGhhdCBubyB1bnN1cHBvcnRlZCB2b2x1bWVcXG4gMjc3OlxcdFxcdCAqIGZsYWdzIGFyZSBzZXQuICBBbHNvLCBlbXB0eSB0aGUgbG9nZmlsZSBqb3VybmFsIGFzIGl0IHdvdWxkIGJlY29tZVxcbiAyNzg6XFx0XFx0ICogc3RhbGUgYXMgc29vbiBhcyBzb21ldGhpbmcgaXMgd3JpdHRlbiB0byB0aGUgdm9sdW1lIGFuZCBtYXJrIHRoZVxcbiAyNzk6XFx0XFx0ICogdm9sdW1lIGRpcnR5IHNvIHRoYXQgY2hrZHNrIGlzIHJ1biBpZiB0aGUgdm9sdW1lIGlzIG5vdCB1bW91bnRlZFxcbiAyODA6XFx0XFx0ICogY2xlYW5seS5cXG4gMjgxOlxcdFxcdCAqXFxuIDI4MjpcXHRcXHQgKiBXaGVuIHJlbW91bnRpbmcgcmVhZC1vbmx5LCBtYXJrIHRoZSB2b2x1bWUgY2xlYW4gaWYgbm8gdm9sdW1lIGVycm9yc1xcbiAyODM6XFx0XFx0ICogaGF2ZSBvY2N1cnJlZC5cXG4gMjg0OlxcdFxcdCAqL1xcbiAyODU6XFx0XFx0aWYgKHNiX3Jkb25seShzYikgXFx1MDAyNlxcdTAwMjYgIShmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuIDI4NjpcXHRcXHRcXHRzdGF0aWMgY29uc3QgY2hhciAqZXMgPSBcXFwiLiAgQ2Fubm90IHJlbW91bnQgcmVhZC13cml0ZS5cXFwiO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtd3JpdGUuICovXFxuIDI4OTpcXHRcXHRcXHRpZiAoTlZvbEVycm9ycyh2b2wpKSB7XFxuIDI5MDpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiVm9sdW1lIGhhcyBlcnJvcnMgYW5kIGlzIHJlYWQtb25seSVzXFxcIixcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdGVzKTtcXG4gMjkyOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDI5MzpcXHRcXHRcXHR9XFxuIDI5NDpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2V2b2xfZmxhZ3MgXFx1MDAyNiBWT0xVTUVfSVNfRElSVFkpIHtcXG4gMjk1OlxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJWb2x1bWUgaXMgZGlydHkgYW5kIHJlYWQtb25seSVzXFxcIiwgZXMpO1xcbiAyOTY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUk9GUztcXG4gMjk3OlxcdFxcdFxcdH1cXG4gMjk4OlxcdFxcdFxcdGlmICh2b2wtXFx1MDAzZXZvbF9mbGFncyBcXHUwMDI2IFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0spIHtcXG4gMjk5OlxcdFxcdFxcdFxcdG50ZnNfZXJyb3Ioc2IsIFxcXCJWb2x1bWUgaGFzIGJlZW4gbW9kaWZpZWQgYnkgY2hrZHNrIGFuZCBpcyByZWFkLW9ubHklc1xcXCIsIGVzKTtcXG4gMzAwOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMwMTpcXHRcXHRcXHR9XFxuIDMwMjpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2V2b2xfZmxhZ3MgXFx1MDAyNiBWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiVm9sdW1lIGhhcyB1bnN1cHBvcnRlZCBmbGFncyBzZXQgKDB4JXgpIGFuZCBpcyByZWFkLW9ubHklc1xcXCIsXFxuIDMwNDpcXHRcXHRcXHRcXHRcXHRcXHRsZTE2X3RvX2NwdSh2b2wtXFx1MDAzZXZvbF9mbGFncyksIGVzKTtcXG4gMzA1OlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMwNjpcXHRcXHRcXHR9XFxuIDMwNzpcXHRcXHRcXHRpZiAodm9sLVxcdTAwM2Vsb2dmaWxlX2lubyBcXHUwMDI2XFx1MDAyNiAhbnRmc19lbXB0eV9sb2dmaWxlKHZvbC1cXHUwMDNlbG9nZmlsZV9pbm8pKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRudGZzX2Vycm9yKHNiLCBcXFwiRmFpbGVkIHRvIGVtcHR5IGpvdXJuYWwgTG9nRmlsZSVzXFxcIixcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdFxcdGVzKTtcXG4gMzEwOlxcdFxcdFxcdFxcdE5Wb2xTZXRFcnJvcnModm9sKTtcXG4gMzExOlxcdFxcdFxcdFxcdHJldHVybiAtRVJPRlM7XFxuIDMxMjpcXHRcXHRcXHR9XFxuIDMxMzpcXHRcXHR9IGVsc2UgaWYgKCFzYl9yZG9ubHkoc2IpIFxcdTAwMjZcXHUwMDI2IChmYy1cXHUwMDNlc2JfZmxhZ3MgXFx1MDAyNiBTQl9SRE9OTFkpKSB7XFxuIDMxNDpcXHRcXHRcXHQvKiBSZW1vdW50aW5nIHJlYWQtb25seS4gKi9cXG4gMzE1OlxcdFxcdFxcdGlmICghTlZvbEVycm9ycyh2b2wpKSB7XFxuIDMxNjpcXHRcXHRcXHRcXHRpZiAobnRmc19jbGVhcl92b2x1bWVfZmxhZ3Modm9sLCBWT0xVTUVfSVNfRElSVFkpKVxcbiAzMTc6XFx0XFx0XFx0XFx0XFx0bnRmc193YXJuaW5nKHNiLFxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBjbGVhciBkaXJ0eSBiaXQgaW4gdm9sdW1lIGluZm9ybWF0aW9uIGZsYWdzLiAgUnVuIGNoa2Rzay5cXFwiKTtcXG4gMzE5OlxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MjQuMjI3MTQxMDExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5NjI0MTI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBOVEZTIFJlYWQvV3JpdGUgQ2FwYWJpbGl0aWVzKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoaXMgbWVudGlvbiBvZiBcIkZvciB0aGUgcmVhZC13cml0ZSBjb21waWxlZCBkcml2ZXJcIi4gSG1tLCBpcyB0aGlzIHN1Z2dlc3Rpbmcgc29tZXRoaW5nIHNpZ25pZmljYW50PyBEb2VzIHRoaXMgbWVhbiBgZnMvbnRmc2AgaXMgKmFsd2F5cyogY29tcGlsZWQgd2l0aCByZWFkLXdyaXRlIHN1cHBvcnQgbm93PyBUaGF0IHdvdWxkIGJlIGEgbWFqb3Igc2hpZnQsIGFzc3VtaW5nIGl0IGlzIGluZGVlZCB0YWxraW5nIGFib3V0IG50ZnMtM2cuXG5cbk9rYXksIGJlc3QgdG8gdmVyaWZ5LiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIHNlZSBpZiB0aGlzIGlzIHRydWUuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCB0cmVlIGZvciBhbnkgaW5zdGFuY2Ugb2YgYENPTkZJR19OVEZTX1JXYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgY2FuIGltbWVkaWF0ZWx5IGNyb3NzLXJlZmVyZW5jZSB3aXRoIGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgZmlsZXN5c3RlbSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAzMCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MzMuMTg5NTU2NTI2WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyNzYwNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19OVEZTX1JXXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9jb25maWdzL3NvY2ZwZ2FfZGVmY29uZmlnPTE0MT1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9hcm0vY29uZmlncy9zb2NmcGdhX2RlZmNvbmZpZzoxNDI6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvYXJtL2NvbmZpZ3Mvc29jZnBnYV9kZWZjb25maWctMTQzLUNPTkZJR19UTVBGUz15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnPTE1Mz1DT05GSUdfTlRGU19GUz1tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZzoxNTQ6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWctMTU1LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2Z1bG9vbmcyZV9kZWZjb25maWc9MTg4PUNPTkZJR19OVEZTX0ZTPW1cXG5hcmNoL21pcHMvY29uZmlncy9mdWxvb25nMmVfZGVmY29uZmlnOjE4OTpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvZnVsb29uZzJlX2RlZmNvbmZpZy0xOTAtQ09ORklHX1BST0NfS0NPUkU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZz02Nj1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZzo2NzpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YTNhX2RlZmNvbmZpZy02OC1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZz05ND1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWc6OTU6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9hcHNoNGFkMGFfZGVmY29uZmlnLTk2LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZz05OT1DT05GSUdfTlRGU19GUz1tXFxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnOjEwMDpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnLTEwMS1DT05GSUdfVE1QRlM9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnPTgxPUNPTkZJR19OVEZTX0ZTPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWc6ODI6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZy04My1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWc9NzY9Q09ORklHX05URlNfRlM9eVxcbmFyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZzo3NzpDT05GSUdfTlRGU19SVz15XFxuYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnLTc4LUNPTkZJR19QUk9DX0tDT1JFPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZz0xMTI9Q09ORklHX05URlNfREVCVUc9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZzoxMTM6Q09ORklHX05URlNfUlc9eVxcbmFyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZy0xMTQtQ09ORklHX1RNUEZTPXlcXG4tLVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnPTExOD1DT05GSUdfTlRGU19GUz15XFxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWc6MTE5OkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZy0xMjAtQ09ORklHX1BST0NfS0NPUkU9eVxcbi0tXFxuYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWc9OTM9Q09ORklHX05URlNfRlM9eVxcbmFyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnOjk0OkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZy05NS1DT05GSUdfUFJPQ19LQ09SRT15XFxuLS1cXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWc9MTE5PUNPTkZJR19OVEZTX0ZTPXlcXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWc6MTIwOkNPTkZJR19OVEZTX1JXPXlcXG5hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWctMTIxLUNPTkZJR19QUk9DX0tDT1JFPXlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6MzYuODIyMzI1MjkxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjgzMzk2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYENPTkZJR19OVEZTX1JXYCdzIENvbmZpZ3VyYXRpb24gTXlzdGVyeSoqXG5cbkhtbSwgSSdtIHNlZWluZyB0aGF0IGBDT05GSUdfTlRGU19SV2AgaXMgYXBwYXJlbnRseSBwcmVzZW50IGluIHNvbWUgZGVmY29uZmlnIGZpbGVzLCBidXQgaXQncyBjb25zcGljdW91c2x5IGFic2VudCBmcm9tIGBmcy9udGZzL0tjb25maWdgLiBUaGF0J3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHN1c3BpY2lvbiBpcyB0aGF0IGl0J3MgYSBsZWdhY3kgY29uZmlndXJhdGlvbiBvcHRpb24sIHBlcmhhcHMgaW50cm9kdWNlZCBhbmQgdGhlbiBlaXRoZXIgZGVwcmVjYXRlZCBvciBtb3ZlZCwgYnV0IHRoZSBhc3NvY2lhdGVkIGBLY29uZmlnYCBmaWxlIHdhc24ndCB1cGRhdGVkIGFjY29yZGluZ2x5LlxuXG5TbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBlc3RhYmxpc2ggaXRzIHRydWUgcHJvdmVuYW5jZS4gQSBxdWljayBkaXZlIGludG8gdGhlIGhpc3Rvcnkgb2YgYGZzL250ZnMvS2NvbmZpZ2AgaXMgZGVmaW5pdGVseSBpbiBvcmRlciDigJMgZ2l0IGJsYW1lIHNob3VsZCByZXZlYWwgd2hlbiBhbmQgaWYgaXQgd2FzIGV2ZXIgZGVjbGFyZWQgdGhlcmUuIEl0J3MgcG9zc2libGUgaXQgbGl2ZWQgaW4gYSBkaWZmZXJlbnQgYEtjb25maWdgIGZpbGUgaW4gdGhlIHBhc3QsIG9yIG1heWJlIHdhcyBpbnRyb2R1Y2VkIHZpYSBzb21lIG1vcmUgaW5kaXJlY3QgbWV0aG9kLiBJdCdzIGFsc28gcG9zc2libGUgdGhlcmUncyBhbiBpbmNsdWRlIHNvbWV3aGVyZSB0aGF0IGluY2x1ZGVzIGEgZmlsZSB0aGF0IGRlZmluZXMgaXQuXG5cbkFsdGVybmF0aXZlbHksIGJlZm9yZSBkaWdnaW5nIGludG8gZ2l0IGhpc3RvcnksIGEgYnJvYWRlciBzZWFyY2ggd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIG1pZ2h0IHF1aWNrbHkgdW5jb3ZlciB3aGV0aGVyIGBDT05GSUdfTlRGU19SV2AgaXMgKmFjdHVhbGx5KiBkZWZpbmVkIGFueXdoZXJlLiBBIHNpbXBsZSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gd2hhdCBJIHN1c3BlY3QgaXMgYSBkZXByZWNhdGVkIG9yIG9ycGhhbmVkIGNvbmZpZ3VyYXRpb24uIE1pZ2h0IHR1cm4gdXAgYSB1c2UgY2FzZS4gSXTigJlzIGltcG9ydGFudCB0byBzZWUgaWYgaXQncyByZWZlcmVuY2VkIG9yIHVzZWQg4oCTIGlmIG5vdCwgdGhlbiBpdCBwcm9iYWJseSBpc24ndCBhIGN1cnJlbnQgZmFjdG9yLiBJZiB0aGUgc3ltYm9sICppcyogZGVmaW5lZCwgdGhlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdHMgYWN0dWFsIGRlZmluaXRpb24gaXMgbG9jYXRlZC4gVGhpcyB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzA5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDc6NDQuMzkwNjY2ODY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzExNzg4NjAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlRGU19SV1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjQ2LjcwMjQ2MzIzOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA2OTUzODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgdGhlIE5URlMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5IbW0sIHNvbWV0aGluZydzIGJlZW4gcmVtb3ZlZC4gVGltZSB0byBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL01ha2VmaWxlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgY2hhbmdlIG9jY3VycmVkLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSBgQ09ORklHX05URlNfUldgIHNldHRpbmcuIElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYW55IGAjaWZkZWYgQ09ORklHX05URlNfUldgIGRpcmVjdGl2ZXMsIGFueXdoZXJlIGluIHRoZSBgZnMvbnRmcy9gIGRpcmVjdG9yeT8gVGhpcyBjb3VsZCBiZSBhIGNsdWUuIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiByZWFkL3dyaXRlIHN1cHBvcnQgaGFzIGJlZW4gY29uZGl0aW9uYWxseSBkaXNhYmxlZCwgb3IgcGVyaGFwcyByZW1vdmVkIGVudGlyZWx5LiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowNzo1MC4zMDk0MTk1MzNaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDE2NTg3NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05URlNfUldcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjUwLjUxOTU5MzkwOVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjk0MzcyNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIE5URlMgV3JpdGUgU3VwcG9ydCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIHdyaXRlIHN1cHBvcnQgZm9yIE5URlMgaXMgbm93ICp1bmNvbmRpdGlvbmFsbHkqIGNvbXBpbGVkIHdpdGhpbiBgZnMvbnRmc2Ag4oCTIGludGVyZXN0aW5nISBUaGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgcmVnYXJkaW5nIHNwZWNpZmljIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHZlcmlmeSBhIHBhcnRpY3VsYXIgZGV0YWlsLiBMZXQncyBkaXZlIGludG8gYGZzL250ZnMvaW5kZXguY2AgcmlnaHQgYXdheS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBudGZzX2lyX3JlcGFyZW50YCBpcyBhbHNvIGJlaW5nIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseS4gVGhpcyBpcyBhIGtleSBkYXRhIHBvaW50IHRvIGtub3cgYXMgSSBmdXJ0aGVyIGRldmVsb3AgdGhlIG1vZHVsZS4gVGhpcyBjb21waWxhdGlvbiBjaGFuZ2UgY291bGQgaGF2ZSBhIHdpZGVzcHJlYWQgZWZmZWN0IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjU0LjgxMzk2OTM2WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjMwNjExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA3OjU0Ljg3NjI4MjIxOVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI2NzYxODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlIENyZWF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBmaWxlIGNyZWF0aW9uLCBjb25maXJtZWQuIFRoZSBjb3JlIGRyaXZlciB3ZSdyZSBsb29raW5nIGF0IGlzIGBmcy9udGZzYCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgbnRmc2AuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBudGZzX2lyX3RvX2liYCB3aXRoaW4gYGZzL250ZnMvaW5kZXguY2AuIE5vdywgbGV0J3MgdHJhY2UgdGhlIGNhbGwgY2hhaW4uIGBudGZzX2lyX3RvX2liYCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfcmVwYXJlbnRgLiBUaGF0LCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIFRoaXMgZXZlbnR1YWxseSBsZWFkcyB1cCB0byBgbnRmc19pZV9hZGRgLCB3aGljaCB0aGVuIGZlZWRzIGludG8gYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYC4gRmluYWxseSwgYG50ZnNfaW5kZXhfYWRkX2ZpbGVuYW1lYCBhcHBlYXJzIHRvIGJlIGNhbGxlZCBieSBib3RoIGBfX250ZnNfY3JlYXRlYCBhbmQgYF9fbnRmc19saW5rYC5cblxuU28sIGZyb20gd2hhdCBJJ20gc2VlaW5nLCB0aGlzIGZ1bmN0aW9uLCBgbnRmc19pcl90b19pYmAsIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyBib3RoIGZpbGUgKmNyZWF0aW9uKiBhbmQgdGhlICpsaW5raW5nKiBvZiBmaWxlcyBvbiBhbiBOVEZTIHZvbHVtZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYF9fbnRmc19jcmVhdGVgIGlzIGFjdHVhbGx5IGNhbGxhYmxlLiBUaGlzIHNvdW5kcyBsaWtlIGFuIGFyZWEgb2YgdGhlIGNvZGUgdGhhdCdzIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHdoZXJlIHRoZSBwYXRjaCBpcyBsb2NhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQxMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODowNC4zMDMwNDcyNjVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzI3MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbnRmc19jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL250ZnMvbmFtZWkuYy0zOTUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz03Mzg9c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzY1LVxcbmZzL250ZnMvbmFtZWkuYzo3NjY6XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sIFNfSUZSRUcgfCBtb2RlLCAwLCBOVUxMLCAwKTtcXG5mcy9udGZzL25hbWVpLmMtNzY3LVxcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xMDU1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xMDg0LVxcbmZzL250ZnMvbmFtZWkuYzoxMDg1OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLCBTX0lGRElSIHwgbW9kZSwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTEwODYtXFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0MDU9c3RhdGljIGludCBudGZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTE0MzctXFxuZnMvbnRmcy9uYW1laS5jOjE0Mzg6XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVzcmMsIHVzcmNfbGVuLCBTX0lGTE5LIHwgMDc3NywgMCxcXG5mcy9udGZzL25hbWVpLmMtMTQzOS1cXHRcXHRcXHQgICBzeW1uYW1lLCBzeW1sZW4pO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE0NTM9c3RhdGljIGludCBudGZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDg1LVxcdGNhc2UgU19JRkJMSzpcXG5mcy9udGZzL25hbWVpLmM6MTQ4NjpcXHRcXHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbixcXG5mcy9udGZzL25hbWVpLmMtMTQ4Ny1cXHRcXHRcXHRcXHRtb2RlLCByZGV2LCBOVUxMLCAwKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDg5LVxcdGRlZmF1bHQ6XFxuZnMvbnRmcy9uYW1laS5jOjE0OTA6XFx0XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXFxuZnMvbnRmcy9uYW1laS5jLTE0OTEtXFx0XFx0XFx0XFx0bW9kZSwgMCwgTlVMTCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjA0LjM2MjM4MTMwM1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjU4OTQxNDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkZpbGUgU3lzdGVtIE9wZXJhdGlvbiBSZWdpc3RyYXRpb24qKlxuXG5IbW0sIHNvIEknbSBsb29raW5nIGF0IHRoZSBOVEZTIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIG5hbWluZyBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBuZXcgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCBhdCB0aGUgaW5vZGUgbGV2ZWwuIEkgc2VlIHRoYXQgYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgLCBgbnRmc19zeW1saW5rYCwgYW5kIGBudGZzX21rbm9kYCBhcmUgYWxsIGRlZmluZWQgaW4gYGZzL250ZnMvbmFtZWkuY2AuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgbGlua2VkIGludG8gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zPyBBcmUgdGhleSBjb3JyZWN0bHkgYXNzb2NpYXRlZCBhbmQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb3JlIGBpbm9kZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmU/IFRoYXQncyB0aGUga2V5OiBhcmUgdGhleSBjb3JyZWN0bHkgaG9va2VkIGluPyBJdCdzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhleSdyZSBhdmFpbGFibGUgZHVyaW5nIHRoZSBmaWxlIHN5c3RlbSdzIG9wZXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRob3NlIG9wZXJhdGlvbnMgYXJlIHByb3Blcmx5IGFzc2lnbmVkIHdpdGhpbiB0aGUgTlRGUyBkcml2ZXIncyBpbm9kZSBvcGVyYXRpb25zIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NjM2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MTEuMDIxMzI0ODE2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDUxMDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9udGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL21mdC5jPTY2NT1zdGF0aWMgaW50IG50ZnNfdGVzdF9pbm9kZV93YihzdHJ1Y3QgaW5vZGUgKnZpLCB1NjQgaW5vLCB2b2lkICpkYXRhKVxcbi0tXFxuZnMvbnRmcy9tZnQuYy02ODMtXFx0ICogVGhpcyBjb25kaXRpb24gY2FuIHByZXZlbnQgbnRmc193cml0ZV9tc3RfYmxvY2soKVxcbmZzL250ZnMvbWZ0LmM6Njg0OlxcdCAqIGZyb20gYXBwbHlpbmcvdW5kbyBmaXh1cHMgd2hpbGUgbnRmc19jcmVhdGUoKSBiZWluZ1xcbmZzL250ZnMvbWZ0LmMtNjg1LVxcdCAqIGNhbGxlZFxcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTMzMD1zdGF0aWMgaW50IG50ZnNfc2RfYWRkX2V2ZXJ5b25lKHN0cnVjdCBudGZzX2lub2RlICpuaSlcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmcy9uYW1laS5jOjM5NDpzdGF0aWMgc3RydWN0IG50ZnNfaW5vZGUgKl9fbnRmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL250ZnMvbmFtZWkuYy0zOTUtXFx0XFx0X19sZTE2ICpuYW1lLCB1OCBuYW1lX2xlbiwgbW9kZV90IG1vZGUsIGRldl90IGRldixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy03MTAtXFx0ICogRnJlZSBleHRlbnQgTUZUIHJlY29yZHMgKHNob3VsZCBub3QgZXhpc3QgYW55IHdpdGggY3VycmVudFxcbmZzL250ZnMvbmFtZWkuYzo3MTE6XFx0ICogbnRmc19jcmVhdGUgaW1wbGVtZW50YXRpb24sIGJ1dCBmb3IgYW55IGNhc2UgaWYgc29tZXRoaW5nIHdpbGwgYmVcXG5mcy9udGZzL25hbWVpLmMtNzEyLVxcdCAqIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkuXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtNzM3LVxcbmZzL250ZnMvbmFtZWkuYzo3Mzg6c3RhdGljIGludCBudGZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbnRmcy9uYW1laS5jLTczOS1cXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgYm9vbCBleGNsKVxcbi0tXFxuZnMvbnRmcy9uYW1laS5jLTc2NS1cXG5mcy9udGZzL25hbWVpLmM6NzY2OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLCBTX0lGUkVHIHwgbW9kZSwgMCwgTlVMTCwgMCk7XFxuZnMvbnRmcy9uYW1laS5jLTc2Ny1cXHRrbWVtX2NhY2hlX2ZyZWUobnRmc19uYW1lX2NhY2hlLCB1bmFtZSk7XFxuLS1cXG5mcy9udGZzL25hbWVpLmM9MTA1NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTA4NC1cXG5mcy9udGZzL25hbWVpLmM6MTA4NTpcXHRuaSA9IF9fbnRmc19jcmVhdGUoaWRtYXAsIGRpciwgdW5hbWUsIHVuYW1lX2xlbiwgU19JRkRJUiB8IG1vZGUsIDAsIE5VTEwsIDApO1xcbmZzL250ZnMvbmFtZWkuYy0xMDg2LVxcdGttZW1fY2FjaGVfZnJlZShudGZzX25hbWVfY2FjaGUsIHVuYW1lKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNDA1PXN0YXRpYyBpbnQgbnRmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNDM3LVxcbmZzL250ZnMvbmFtZWkuYzoxNDM4OlxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1c3JjLCB1c3JjX2xlbiwgU19JRkxOSyB8IDA3NzcsIDAsXFxuZnMvbnRmcy9uYW1laS5jLTE0MzktXFx0XFx0XFx0ICAgc3ltbmFtZSwgc3ltbGVuKTtcXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNDUzPXN0YXRpYyBpbnQgbnRmc19ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTQ4NS1cXHRjYXNlIFNfSUZCTEs6XFxuZnMvbnRmcy9uYW1laS5jOjE0ODY6XFx0XFx0bmkgPSBfX250ZnNfY3JlYXRlKGlkbWFwLCBkaXIsIHVuYW1lLCB1bmFtZV9sZW4sXFxuZnMvbnRmcy9uYW1laS5jLTE0ODctXFx0XFx0XFx0XFx0bW9kZSwgcmRldiwgTlVMTCwgMCk7XFxuLS1cXG5mcy9udGZzL25hbWVpLmMtMTQ4OS1cXHRkZWZhdWx0OlxcbmZzL250ZnMvbmFtZWkuYzoxNDkwOlxcdFxcdG5pID0gX19udGZzX2NyZWF0ZShpZG1hcCwgZGlyLCB1bmFtZSwgdW5hbWVfbGVuLFxcbmZzL250ZnMvbmFtZWkuYy0xNDkxLVxcdFxcdFxcdFxcdG1vZGUsIDAsIE5VTEwsIDApO1xcbi0tXFxuZnMvbnRmcy9uYW1laS5jPTE1NjE9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbnRmc19kaXJfaW5vZGVfb3BzID0ge1xcbmZzL250ZnMvbmFtZWkuYy0xNTYyLVxcdC5sb29rdXBcXHRcXHQ9IG50ZnNfbG9va3VwLFxcdC8qIFZGUzogTG9va3VwIGRpcmVjdG9yeS4gKi9cXG5mcy9udGZzL25hbWVpLmM6MTU2MzpcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG5mcy9udGZzL25hbWVpLmMtMTU2NC1cXHQudW5saW5rXFx0XFx0PSBudGZzX3VubGluayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MTEuMDgxODQxNjE1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTg3NjQ4MjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5URlMgV3JpdGUgU3VwcG9ydCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgbnRmc19jcmVhdGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCB3aXRoaW4gYG50ZnNfZGlyX2lub2RlX29wc2AuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlIE5URlMgZHJpdmVyIG5vdyBoYXMgd3JpdGUgY2FwYWJpbGl0eS4gSG93ZXZlciwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB3ZSdyZSB0YWxraW5nIGFib3V0IHRoZSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLiBBIHF1aWNrIG1lbnRhbCBjaGVjazogaXMgYGZzL250ZnNgIGFjdHVhbGx5IHRoZSBvbGRlciBgbnRmc2AgZHJpdmVyIG9yIHRoZSBuZXdlciBgbnRmczNgPyBBaCwgcmlnaHQsIGBmcy9udGZzYCBpcyB0aGUgbGVnYWN5IGRyaXZlciwgYW5kIGBmcy9udGZzM2AgaXMgdGhlIGFjdGl2ZWx5IGRldmVsb3BlZCBvbmUuIERpZCB3cml0ZSBzdXBwb3J0IGdldCBiYWNrcG9ydGVkPyBJIGNhbid0IGFzc3VtZSBhbnl0aGluZy4gTGV0IG1lIHZlcmlmeSB0aGUgY29kZS4gSSBuZWVkIHRvIGNoZWNrIGxpbmUgMTU2MSBpbiBgZnMvbnRmcy9uYW1laS5jYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6MjkuMjY5NDkzMTdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTUwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlyX25pLVxcdTAwM2VtcmVjX2xvY2spO1xcbjE1NTE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaS1cXHUwMDNlbXJlY19sb2NrKTtcXG4xNTUyOlxcdFxcbjE1NTM6XFx0b3V0OlxcbjE1NTQ6XFx0XFx0a21lbV9jYWNoZV9mcmVlKG50ZnNfbmFtZV9jYWNoZSwgdW5hbWUpO1xcbjE1NTU6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTU2OlxcdH1cXG4xNTU3OlxcdFxcbjE1NTg6XFx0LypcXG4xNTU5OlxcdCAqIElub2RlIG9wZXJhdGlvbnMgZm9yIGRpcmVjdG9yaWVzLlxcbjE1NjA6XFx0ICovXFxuMTU2MTpcXHRjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBudGZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuMTU2MjpcXHRcXHQubG9va3VwXFx0XFx0PSBudGZzX2xvb2t1cCxcXHQvKiBWRlM6IExvb2t1cCBkaXJlY3RvcnkuICovXFxuMTU2MzpcXHRcXHQuY3JlYXRlXFx0XFx0PSBudGZzX2NyZWF0ZSxcXG4xNTY0OlxcdFxcdC51bmxpbmtcXHRcXHQ9IG50ZnNfdW5saW5rLFxcbjE1NjU6XFx0XFx0Lm1rZGlyXFx0XFx0PSBudGZzX21rZGlyLFxcbjE1NjY6XFx0XFx0LnJtZGlyXFx0XFx0PSBudGZzX3JtZGlyLFxcbjE1Njc6XFx0XFx0LnJlbmFtZVxcdFxcdD0gbnRmc19yZW5hbWUsXFxuMTU2ODpcXHRcXHQuZ2V0X2FjbFxcdD0gbnRmc19nZXRfYWNsLFxcbjE1Njk6XFx0XFx0LnNldF9hY2xcXHQ9IG50ZnNfc2V0X2FjbCxcXG4xNTcwOlxcdFxcdC5saXN0eGF0dHJcXHQ9IG50ZnNfbGlzdHhhdHRyLFxcbjE1NzE6XFx0XFx0LnNldGF0dHJcXHQ9IG50ZnNfc2V0YXR0cixcXG4xNTcyOlxcdFxcdC5nZXRhdHRyXFx0PSBudGZzX2dldGF0dHIsXFxuMTU3MzpcXHRcXHQuc3ltbGlua1xcdD0gbnRmc19zeW1saW5rLFxcbjE1NzQ6XFx0XFx0Lm1rbm9kXFx0XFx0PSBudGZzX21rbm9kLFxcbjE1NzU6XFx0XFx0LmxpbmtcXHRcXHQ9IG50ZnNfbGluayxcXG4xNTc2OlxcdH07XFxuMTU3NzpcXHRcXG4xNTc4OlxcdC8qXFxuMTU3OTpcXHQgKiBudGZzX2dldF9wYXJlbnQgLSBmaW5kIHRoZSBkZW50cnkgb2YgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeSBkZW50cnlcXG4xNTgwOlxcdCAqIEBjaGlsZF9kZW50OlxcdFxcdGRlbnRyeSBvZiB0aGUgZGlyZWN0b3J5IHdob3NlIHBhcmVudCBkaXJlY3RvcnkgdG8gZmluZFxcbjE1ODE6XFx0ICpcXG4xNTgyOlxcdCAqIEZpbmQgdGhlIGRlbnRyeSBmb3IgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgYnkgdGhlXFxuMTU4MzpcXHQgKiBkZW50cnkgQGNoaWxkX2RlbnQuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tXFxuMTU4NDpcXHQgKiBmcy9leHBvcnRmcy9leHBmcy5jOjpmaW5kX2V4cG9ydGVkX2RlbnRyeSgpIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gdGhlXFxuMTU4NTpcXHQgKiBkZWZhdWx0IC1cXHUwMDNlZGVjb2RlX2ZoKCkgd2hpY2ggaXMgZXhwb3J0X2RlY29kZV9maCgpIGluIHRoZSBzYW1lIGZpbGUuXFxuMTU4NjpcXHQgKlxcbjE1ODc6XFx0ICogTm90ZTogbnRmc19nZXRfcGFyZW50KCkgaXMgY2FsbGVkIHdpdGggQGRfaW5vZGUoY2hpbGRfZGVudCktXFx1MDAzZWlfbXV0ZXggZG93bi5cXG4xNTg4OlxcdCAqXFxuMTU4OTpcXHQgKiBSZXR1cm4gdGhlIGRlbnRyeSBvZiB0aGUgcGFyZW50IGRpcmVjdG9yeSBvbiBzdWNjZXNzIG9yIHRoZSBlcnJvciBjb2RlIG9uXFxuMTU5MDpcXHQgKiBlcnJvciAoSVNfRVJSKCkgaXMgdHJ1ZSkuXFxuMTU5MTpcXHQgKi9cXG4xNTkyOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcXG4xNTkzOlxcdHtcXG4xNTk0OlxcdFxcdHN0cnVjdCBpbm9kZSAqdmkgPSBkX2lub2RlKGNoaWxkX2RlbnQpO1xcbjE1OTU6XFx0XFx0c3RydWN0IG50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTtcXG4xNTk2OlxcdFxcdHN0cnVjdCBtZnRfcmVjb3JkICptcmVjO1xcbjE1OTc6XFx0XFx0c3RydWN0IG50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHg7XFxuMTU5ODpcXHRcXHRzdHJ1Y3QgYXR0cl9yZWNvcmQgKmF0dHI7XFxuMTU5OTpcXHRcXHRzdHJ1Y3QgZmlsZV9uYW1lX2F0dHIgKmZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODoyOS4yNjk2MTEyMloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTYxMjAzNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBzZWVpbmcgdGhvc2UgYGZzL250ZnNgIGZ1bmN0aW9ucyBsaWtlIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCwgYW5kIHNvIG9uLCBpdCdzIGNsZWFyIHRoZSBOVEZTIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24gaXMgKmZ1bGx5IGZ1bmN0aW9uYWwqIGFuZCByZWFjaGFibGUgd2l0aGluIHRoZSBrZXJuZWwuIEdvb2QuIE5vdywgdGhhdCBwYXRjaOKApiBsZXQncyBzZWUsIGl0IGludHJvZHVjZXMgYSBjaGVjazogYGlmICgodTMyKWkgXHUwMDNlIGliX2NhcClgIHdpdGhpbiBgbnRmc19pcl90b19pYmAuIFJpZ2h0LCBzbyBpZiB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLCBpdCBmcmVlcyBgaWJgIGFuZCByZXR1cm5zIGBOVUxMYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiwgaW1wYWN0aW5nIGhvdyB0aGUgY29kZSBoYW5kbGVzIGludGVybmFsIGJ1ZmZlciBtYW5hZ2VtZW50LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBOVEZTX0ZTYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludDsgaXQncyB0aGUgbWFpbiBjb25maWcgZm9yIHRoZSB3aG9sZSBmaWxlc3lzdGVtLiBIbW0sIGlzIHRoYXQgKmFsbCogdGhvdWdoPyBKdXN0IHRvIGJlIGNlcnRhaW4sIEkgc2hvdWxkIHJldmlzaXQgYGZzL250ZnMvS2NvbmZpZ2AuIEdvdHRhIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjM0LjQzMDgxNzU1NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9udGZzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTlRGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA1OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBOVEZTIGlzIHRoZSBmaWxlIHN5c3RlbSBvZiBNaWNyb3NvZnQgV2luZG93cyBOVCwgMjAwMCwgWFAgYW5kIDIwMDMuXFxuICAgODpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCBkZXZpY2VzIGZvcm1hdHRlZCB3aXRoIHRoZSBudGZzIGZpbGUgc3lzdGVtLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMTE6XFx0XFx0ICBudGZzLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTlRGU19ERUJVR1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTlRGUyBkZWJ1Z2dpbmcgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlcGVuZHMgb24gTlRGU19GU1xcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBJZiB5b3UgYXJlIGV4cGVyaWVuY2luZyBhbnkgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlIHN5c3RlbSwgc2F5XFxuICAxODpcXHRcXHQgIFkgaGVyZS4gIFRoaXMgd2lsbCByZXN1bHQgaW4gYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja3MgdG8gYmVcXG4gIDE5OlxcdFxcdCAgcGVyZm9ybWVkIGJ5IHRoZSBkcml2ZXIgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGRlYnVnZ2luZyBtZXNzYWdlcyB0b1xcbiAgMjA6XFx0XFx0ICBiZSB3cml0dGVuIHRvIHRoZSBzeXN0ZW0gbG9nLiAgTm90ZSB0aGF0IGRlYnVnZ2luZyBtZXNzYWdlcyBhcmVcXG4gIDIxOlxcdFxcdCAgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIGVuYWJsZSB0aGVtLCBzdXBwbHkgdGhlIG9wdGlvbiBkZWJ1Z19tc2dzPTFcXG4gIDIyOlxcdFxcdCAgYXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgd2hlbiBib290aW5nIHRoZSBrZXJuZWwgb3IgYXMgYW4gb3B0aW9uXFxuICAyMzpcXHRcXHQgIHRvIGluc21vZCB3aGVuIGxvYWRpbmcgdGhlIG50ZnMgbW9kdWxlLiAgT25jZSB0aGUgZHJpdmVyIGlzIGFjdGl2ZSxcXG4gIDI0OlxcdFxcdCAgeW91IGNhbiBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGJ5IGRvaW5nIChhcyByb290KTpcXG4gIDI1OlxcdFxcdCAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWdcXG4gIDI2OlxcdFxcdCAgUmVwbGFjaW5nIHRoZSBcXFwiMVxcXCIgd2l0aCBcXFwiMFxcXCIgd291bGQgZGlzYWJsZSBkZWJ1ZyBtZXNzYWdlcy5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0ICBJZiB5b3UgbGVhdmUgZGVidWdnaW5nIG1lc3NhZ2VzIGRpc2FibGVkLCB0aGlzIHJlc3VsdHMgaW4gbGl0dGxlXFxuICAyOTpcXHRcXHQgIG92ZXJoZWFkLCBidXQgZW5hYmxpbmcgZGVidWcgbWVzc2FnZXMgcmVzdWx0cyBpbiB2ZXJ5IHNpZ25pZmljYW50XFxuICAzMDpcXHRcXHQgIHNsb3dkb3duIG9mIHRoZSBzeXN0ZW0uXFxuICAzMTpcXHRcXG4gIDMyOlxcdFxcdCAgV2hlbiByZXBvcnRpbmcgYnVncywgcGxlYXNlIHRyeSB0byBoYXZlIGF2YWlsYWJsZSBhIGZ1bGwgZHVtcCBvZlxcbiAgMzM6XFx0XFx0ICBkZWJ1Z2dpbmcgbWVzc2FnZXMgd2hpbGUgdGhlIG1pc2JlaGF2aW91ciB3YXMgb2NjdXJyaW5nLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIE5URlNfRlNcXG4gIDM4OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgYWRkaXRpb25hbCBhY2Nlc3MgcmlnaHRzXFxuICA0MTpcXHRcXHQgIGZvciB1c2VycyBhbmQgZ3JvdXBzIGJleW9uZCB0aGUgc3RhbmRhcmQgb3duZXIvZ3JvdXAvd29ybGQgc2NoZW1lLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgQUNMIHN1cHBvcnQgZm9yIG50ZnMsIHByb3ZpZGluZyBmdW5jdGlvbmFsIHBhcml0eVxcbiAgNDQ6XFx0XFx0ICB3aXRoIG50ZnMzIGRyaXZpZXIuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgTk9URTogdGhpcyBpcyBsaW51eCBvbmx5IGZlYXR1cmUuIFdpbmRvd3Mgd2lsbCBpZ25vcmUgdGhlc2UgQUNMcy5cXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjM0LjQzMDkwMjUwNloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAxMzYxMjE3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTlRGUyBJbmRleGluZyBGdW5jdGlvbmFsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOVEZTIGZpbGUgc3lzdGVtIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYE5URlNfRlNgLiBSaWdodCwgYE5URlNfRlNgICppcyogdGhlIGNvbmZpZy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGBudGZzX2lyX3RvX2liYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gYSBzeXNjYWxsLlxuXG5MZXQncyB0cmFjZSB0aGUgY2FsbCBjaGFpbi4gSXQgbG9va3MgbGlrZSBgbnRmc19pcl90b19pYmAgaXMgY2FsbGVkIGJ5IGBudGZzX2lyX3JlcGFyZW50YCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIFRoYXQncyBjYWxsZWQgYnkgYG50ZnNfaWVfYWRkYCwgd2hpY2ggdGhlbiBmZWVkcyBpbnRvIGBudGZzX2luZGV4X2FkZF9maWxlbmFtZWAgYW5kIGZpbmFsbHkgdG8gYF9fbnRmc19jcmVhdGVgLCB3aGljaCBnZXRzIGNhbGxlZCBieSBgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmAsIGBudGZzX3N5bWxpbmtgLCBhbmQgYG50ZnNfbWtub2RgLiBTbywgdGhlcmUncyBhIGNsZWFyIHBhdGggZnJvbSBmaWxlIGNyZWF0aW9uIHRocm91Z2ggdGhlIGNhbGwgY2hhaW4gdG8gdGhlIG1haW4gZnVuY3Rpb24uXG5cbkhhbmcgb24sIHRoZXJlJ3MgYW5vdGhlciBwYXRoISBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyBhbHNvIGNhbGxlZCBieSBgbnRmc19pcl9pbnNlcnRfbWVkaWFuYCwgd2hpY2ggaXRzZWxmIGZlZWRzIGludG8gYG50ZnNfaWJfc3BsaXRgLCBhbmQgdGhlbiBmaW5hbGx5IHRvIGBudGZzX2llX2FkZGAuIEFuZCB0aGVyZSdzIG1vcmUhIGBudGZzX2lyX21ha2Vfc3BhY2VgIGdldHMgY2FsbGVkIGJ5IGBudGZzX2luZGV4X3JtX25vZGVgLCB0aGVuIGBudGZzX2loX3Rha2VvdXRgLCBhbmQgZmluYWxseSBieSBgbnRmc19pbmRleF9yZW1vdmVgLCB3aGljaCBpcyBsaW5rZWQgdG8gYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgLCBhbmQgYG50ZnNfcmVuYW1lYC5cblxuT2theSwgc28gdGhpcyBgbnRmc19pcl90b19pYmAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBib3RoIGZpbGUgY3JlYXRpb24gKmFuZCogZmlsZSBkZWxldGlvbiBwYXRocy4gVGhhdCBtZWFucyB0aGlzIGZ1bmN0aW9uIGlzIGEga2V5IGVudHJ5cG9pbnQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgd29ydGggc3BlbmRpbmcgc29tZSB0aW1lIG9uIHRoaXMuXG5cbkhlcmUgYXJlIHRoZSBzeW1ib2xzIEkgd2FudCB0byBrZWVwIGFuIGV5ZSBvbjogYG50ZnNfaXJfdG9faWJgLCBgbnRmc19pcl9yZXBhcmVudGAsIGBudGZzX2lyX21ha2Vfc3BhY2VgLCBgbnRmc19pZV9hZGRgLCBgbnRmc19pbmRleF9hZGRfZmlsZW5hbWVgLCBgbnRmc19pbmRleF9ybV9ub2RlYCwgYG50ZnNfaWhfdGFrZW91dGAsIGFuZCBgbnRmc19pbmRleF9yZW1vdmVgLlxuXG5Ob3csIGxldCdzIHBpY2sgYSBmZXcgb2YgdGhlc2UgdG8gZm9jdXMgb24gZm9yIG5vdy4gYG50ZnNfaXJfdG9faWJgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiB0aGF0IEknbSBpbnRlcmVzdGVkIGluIGFuZCBgbnRmc19pcl9yZXBhcmVudGAgY2FsbHMgdGhlIGZ1bmN0aW9uLiBgbnRmc19pcl9tYWtlX3NwYWNlYCBpcyB0aGUgY2FsbGVyIG9mIGBudGZzX2lyX3JlcGFyZW50YC4gSXQgbG9va3MgbGlrZSBgbnRmc19pZV9hZGRgIGFsc28gY2FsbHMgYG50ZnNfaXJfbWFrZV9zcGFjZWAuIEFuZCBoZXksIGBudGZzX2luZGV4X3JtX25vZGVgIGlzIGFub3RoZXIgY2FsbGVyIG9mIGBudGZzX2lyX21ha2Vfc3BhY2VgLlxuXG5MZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBudGZzX2lyX3RvX2liYCBkb2Vzbid0IGhhdmUgb3RoZXIgZGlyZWN0IGNhbGxlcnMgdG8gY29uZmlybSB0aGUgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzMjEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODo0NS40NDQ1MTcyNjNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDg4Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm50ZnNfaXJfdG9faWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9pbmRleC5jPTEwNzM9c3RhdGljIHM2NCBudGZzX2libV9nZXRfZnJlZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTEwOC1cXG5mcy9udGZzL2luZGV4LmM6MTEwOTpzdGF0aWMgc3RydWN0IGluZGV4X2Jsb2NrICpudGZzX2lyX3RvX2liKHN0cnVjdCBpbmRleF9yb290ICppciwgczY0IGliX3ZjbilcXG5mcy9udGZzL2luZGV4LmMtMTExMC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTI0OT1zdGF0aWMgaW50IG50ZnNfaXJfcmVwYXJlbnQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyODYtXFxuZnMvbnRmcy9pbmRleC5jOjEyODc6XFx0aWIgPSBudGZzX2lyX3RvX2liKGlyLCBuZXdfaWJfdmNuKTtcXG5mcy9udGZzL2luZGV4LmMtMTI4OC1cXHRpZiAoaWIgPT0gTlVMTCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDowODo0NS41MDIwMTA5MjJaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0OTA3NDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzaW5nIG9uIE5URlMgUmVwYXJlbnRpbmcqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBzY29wZSBpcyBjbGVhcjogSSdtIHNvbGVseSBpbnRlcmVzdGVkIGluIHRoZSBgbnRmc19pcl9yZXBhcmVudGAgZnVuY3Rpb24uIE5vIG5lZWQgdG8gZ2V0IGRpc3RyYWN0ZWQgYnkgb3RoZXIgcG90ZW50aWFsIGFyZWFzIGZvciBub3cuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgd2FudCB0byBzZWUgKmhvdyogaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIEkgbmVlZCB0byBjaGVjayBmb3IgYWxsIHRoZSAqY2FsbGVycyogb2YgYG50ZnNfaXJfcmVwYXJlbnRgLiBUaGlzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSBhbmQgdGhlIHN1cnJvdW5kaW5nIG9wZXJhdGlvbnMuIExldCdzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MDg6NTEuNzUxMDg4ODYyWiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODQ5Mzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2lyX3JlcGFyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvaW5kZXguYz0xMjIzPXN0YXRpYyBpbnQgbnRmc19pYV9hZGQoc3RydWN0IG50ZnNfaW5kZXhfY29udGV4dCAqaWN4KVxcbi0tXFxuZnMvbnRmcy9pbmRleC5jLTEyNDgtXFxuZnMvbnRmcy9pbmRleC5jOjEyNDk6c3RhdGljIGludCBudGZzX2lyX3JlcGFyZW50KHN0cnVjdCBudGZzX2luZGV4X2NvbnRleHQgKmljeClcXG5mcy9udGZzL2luZGV4LmMtMTI1MC17XFxuLS1cXG5mcy9udGZzL2luZGV4LmM9MTQxOT1zdGF0aWMgaW50IG50ZnNfaXJfbWFrZV9zcGFjZShzdHJ1Y3QgbnRmc19pbmRleF9jb250ZXh0ICppY3gsIGludCBkYXRhX3NpemUpXFxuLS1cXG5mcy9udGZzL2luZGV4LmMtMTQyNi1cXHRpZiAocmV0ID09IC1FTk9TUEMpIHtcXG5mcy9udGZzL2luZGV4LmM6MTQyNzpcXHRcXHRyZXQgPSBudGZzX2lyX3JlcGFyZW50KGljeCk7XFxuZnMvbnRmcy9pbmRleC5jLTE0MjgtXFx0XFx0aWYgKCFyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjUxLjgwOTU5MTM4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzE5MDEzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTlRGUyBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQsIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGEgYm91bmRzIGNoZWNrIGltcGxlbWVudGVkIHdpdGhpbiB0aGUgYG50ZnNfaXJfdG9faWJgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnZlcnNpb24gb2YgYW4gaW5kZXggcm9vdCB0byBhbiBpbmRleCBibG9jayB3aXRoaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIuIFRoZSBnb2FsIGlzIHRvIHByZXZlbnQgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLlxuXG5UaGlua2luZyBhYm91dCB0aGUgZmlsZXN5c3RlbSdzIG9wZXJhdGlvbmFsIGZsb3csIEkgaW1tZWRpYXRlbHkgc2VlIGhvdyB0aGlzIGlzIHJlbGV2YW50LiBUaGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgaW5kZXggYmxvY2tzIGFuZCB0cmlnZ2VyIHRoZSBuZWVkIHRvIG1ha2Ugc3BhY2UgYXJlIGBudGZzX2NyZWF0ZWAsIGBudGZzX21rZGlyYCwgYG50ZnNfdW5saW5rYCwgYW5kIGBudGZzX3JtZGlyYC4gVGhpcyBtZWFucyB0aGUgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIHN0YW5kYXJkIGRpcmVjdG9yeSBtYW5pcHVsYXRpb25zLCBsaWtlIGZpbGUgY3JlYXRpb24gYW5kIGRlbGV0aW9uLiBUaGVzZSBtYW5pcHVsYXRpb25zIHRyaWdnZXIgYG50ZnNfaXJfbWFrZV9zcGFjZWAgYW5kIGBudGZzX2lyX3JlcGFyZW50YCDigJMgSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyBmb2N1cyBzeW1ib2xzLlxuXG5Db25zaWRlcmluZyB0aGlzIGNvbnRleHQsIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0IGhlcmUgaXMgYG50ZnNfaXJfdG9faWJgLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUgYW5kLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2XigJRib3VuZHMgY2hlY2tpbmfigJRpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB0aGlzIGNoYW5nZSBpcyBmdW5jdGlvbmFsLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGludGVyYWN0aW9ucyBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZC4gVGhlIGNvbmZpZ3VyYXRpb24gYE5URlNfRlNgIHNob3VsZCBiZSBpbiBmb2N1cyBkdXJpbmcgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNzUsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjA4OjU4Ljg0MTQ5NjA2NVoiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2ODg0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19pcl90b19pYlwiLFxuICAgIFwibnRmc19pcl9yZXBhcmVudFwiLFxuICAgIFwibnRmc19pcl9tYWtlX3NwYWNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayB0byBgbnRmc19pcl90b19pYmAgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkcml2ZXIsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIG9yIGNvcnJ1cHRpb24gd2hlbiBjb252ZXJ0aW5nIGFuIGluZGV4IHJvb3QgdG8gYW4gaW5kZXggYmxvY2suIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGR1cmluZyBkaXJlY3RvcnkgaW5kZXggbWFuaXB1bGF0aW9ucywgc3VjaCBhcyBmaWxlIGNyZWF0aW9uIChgbnRmc19jcmVhdGVgLCBgbnRmc19ta2RpcmApIG9yIGRlbGV0aW9uIChgbnRmc191bmxpbmtgLCBgbnRmc19ybWRpcmApLCB3aGljaCB0cmlnZ2VyIGBudGZzX2lyX21ha2Vfc3BhY2VgIGFuZCBgbnRmc19pcl9yZXBhcmVudGAuIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlRGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm50ZnNfaXJfdG9faWJcIixcbiAgICBcIm50ZnNfaXJfcmVwYXJlbnRcIixcbiAgICBcIm50ZnNfaXJfbWFrZV9zcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgdG8gYG50ZnNfaXJfdG9faWJgIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBvciBjb3JydXB0aW9uIHdoZW4gY29udmVydGluZyBhbiBpbmRleCByb290IHRvIGFuIGluZGV4IGJsb2NrLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBkdXJpbmcgZGlyZWN0b3J5IGluZGV4IG1hbmlwdWxhdGlvbnMsIHN1Y2ggYXMgZmlsZSBjcmVhdGlvbiAoYG50ZnNfY3JlYXRlYCwgYG50ZnNfbWtkaXJgKSBvciBkZWxldGlvbiAoYG50ZnNfdW5saW5rYCwgYG50ZnNfcm1kaXJgKSwgd2hpY2ggdHJpZ2dlciBgbnRmc19pcl9tYWtlX3NwYWNlYCBhbmQgYG50ZnNfaXJfcmVwYXJlbnRgLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowwq5pr[1] Phase: Succeeded StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 14:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 14:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2] Phase: Succeeded StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 14:10:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 14:10:25 +0000 UTC FinishedAt: 2026-07-16 14:10:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwq5pr/series-workflowwq5pr-convert-artifact-2336775258/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 14:10:35 +0000 UTC FinishedAt: 2026-07-16 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 14:10:35 +0000 UTC FinishedAt: 2026-07-16 14:42:13 +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:*7833350a-de95-422a-8237-b332e233a2ad,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-workflowwq5pr/series-workflowwq5pr-convert-artifact-2336775258/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": "dbf47047-aa86-4ddf-bf73-02996d7a4db4", "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-workflowwq5pr/series-workflowwq5pr-build-action-678859016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 14:10:35 +0000 UTC FinishedAt: 2026-07-16 14:42:03 +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:*7833350a-de95-422a-8237-b332e233a2ad,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-workflowwq5pr/series-workflowwq5pr-convert-artifact-2336775258/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": "dbf47047-aa86-4ddf-bf73-02996d7a4db4", "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-workflowwq5pr/series-workflowwq5pr-build-action-678859016/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 14:42:13 +0000 UTC FinishedAt: 2026-07-16 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 14:42:13 +0000 UTC FinishedAt: 2026-07-16 14:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 14:42:13 +0000 UTC FinishedAt: 2026-07-16 14:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 14:42:13 +0000 UTC FinishedAt: 2026-07-16 14:42:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowwq5pr/series-workflowwq5pr-convert-artifact-845941941/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 14:42:34 +0000 UTC FinishedAt: 2026-07-16 14:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 14:42:34 +0000 UTC FinishedAt: 2026-07-16 14:44:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dbf47047-aa86-4ddf-bf73-02996d7a4db4,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-workflowwq5pr/series-workflowwq5pr-build-action-678859016/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-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 14:44:37 +0000 UTC FinishedAt: 2026-07-16 14:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 14:44:37 +0000 UTC FinishedAt: 2026-07-16 14:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 14:44:37 +0000 UTC FinishedAt: 2026-07-16 15:10:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 14:44:37 +0000 UTC FinishedAt: 2026-07-16 15:10:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7833350a-de95-422a-8237-b332e233a2ad,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-workflowwq5pr/series-workflowwq5pr-convert-artifact-845941941/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": "0dd395dd-49f9-4388-a5bd-34a172aa44f0", "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-workflowwq5pr/series-workflowwq5pr-build-action-3338157505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 14:44:37 +0000 UTC FinishedAt: 2026-07-16 15:09:56 +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:*7833350a-de95-422a-8237-b332e233a2ad,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-workflowwq5pr/series-workflowwq5pr-convert-artifact-845941941/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": "0dd395dd-49f9-4388-a5bd-34a172aa44f0", "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-workflowwq5pr/series-workflowwq5pr-build-action-3338157505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 15:10:05 +0000 UTC FinishedAt: 2026-07-16 15:10:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 15:10:05 +0000 UTC FinishedAt: 2026-07-16 15:10:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 15:10:05 +0000 UTC FinishedAt: 2026-07-16 15:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 15:10:05 +0000 UTC FinishedAt: 2026-07-16 15:12:21 +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:*0dd395dd-49f9-4388-a5bd-34a172aa44f0,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-workflowwq5pr/series-workflowwq5pr-build-action-3338157505/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-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"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:*dbf47047-aa86-4ddf-bf73-02996d7a4db4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0dd395dd-49f9-4388-a5bd-34a172aa44f0,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-workflowwq5pr/series-workflowwq5pr-build-action-678859016/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-workflowwq5pr/series-workflowwq5pr-build-action-3338157505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 15:12:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 15:12:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"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-workflowwq5pr/series-workflowwq5pr-convert-artifact-2687399578/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 15:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 15:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 15:12:31 +0000 UTC FinishedAt: 2026-07-16 15:12:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 15:12:41 +0000 UTC FinishedAt: 2026-07-16 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwq5pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_ir_to_ib","ntfs_ir_reparent","ntfs_ir_make_space"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"37e2f878a7a660a216cc7a60459995fefd150f25","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"b2d2ec66-3bb5-4734-88b4-83d7f62ca084","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 15:12:41 +0000 UTC FinishedAt: 2026-07-16 15:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dbf47047-aa86-4ddf-bf73-02996d7a4db4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0dd395dd-49f9-4388-a5bd-34a172aa44f0,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-workflowwq5pr/series-workflowwq5pr-build-action-678859016/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-workflowwq5pr/series-workflowwq5pr-build-action-3338157505/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-workflowwq5pr/series-workflowwq5pr-convert-artifact-2687399578/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,}