Name: series-workflowp7v2f Phase: Succeeded StartedAt: 2026-08-20 06:40:52 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[0] Phase: Succeeded StartedAt: 2026-08-20 06:40:52 +0000 UTC FinishedAt: 2026-08-20 07:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 06:40:52 +0000 UTC FinishedAt: 2026-08-20 07:01:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "c5104873-d4d2-4a73-bed0-5ee28dcc936a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_read_compressed_block" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNTcxZjk5MzMyMThmYjNjODNkZjFmODdjNDRlYjU2ZjJlY2I0OGFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDc6MDA6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSxcbiBcdFx0dTggKmRwX2JhY2tfYWRkcjtcbiBcbiBcdFx0LyogQ2hlY2sgaWYgd2UgYXJlIGRvbmUgLyBzdGlsbCBpbiByYW5nZS4gKi9cbi1cdFx0aWYgKGNiIFx1MDAzZT0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgXHUwMDNlIGRwX3NiX2VuZClcbiYjNDM7XHRcdGlmIChjYiBcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFx1MDAzZT0gZHBfc2JfZW5kKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBEZXRlcm1pbmUgdG9rZW4gdHlwZSBhbmQgcGFyc2UgYXBwcm9wcmlhdGVseS4qL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBudGZzX2RlY29tcHJlc3NgIGJ5IGNoYW5naW5nIGBkcF9hZGRyIFx1MDAzZSBkcF9zYl9lbmRgIHRvIGBkcF9hZGRyIFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1NzFmOTkzMzIxOGZiM2M4M2RmMWY4N2M0NGViNTZmMmVjYjQ4YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvY29tcHJlc3MuYyBiL2ZzL250ZnMvY29tcHJlc3MuYwppbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NAotLS0gYS9mcy9udGZzL2NvbXByZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jCkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSwKIAkJdTggKmRwX2JhY2tfYWRkcjsKIAogCQkvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqLwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQogCQkJYnJlYWs7CiAKIAkJLyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbXByZXNzaW9uIEJ1ZyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBhIG1pbm9yLCBzZWVtaW5nbHkgaW5ub2N1b3VzIGNoYW5nZSB0byBgZnMvbnRmcy9jb21wcmVzcy5jYC4gSXQmIzM5O3MgYSBzaW5nbGUtbGluZSBmaXggd2l0aGluIHRoZSBgbnRmc19kZWNvbXByZXNzYCBmdW5jdGlvbjogc3dpdGNoaW5nIGZyb20gYSBzdHJpY3QgZ3JlYXRlci10aGFuIGNvbXBhcmlzb24gKGAmZ3Q7YCkgdG8gYSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gY29tcGFyaXNvbiAoYCZndDs9YCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyAmIzM0O3BvdGVudGlhbCBidWcgZml4JiMzNDsgaW4gdGhlIE5URlMgZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgZ29vZC4gQnV0Li4uIHRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGlzIGRvZXMgYW5kIHdoYXQgdGhlIGltcGFjdCBpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZnMvbnRmcy9jb21wcmVzcy5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC4KClNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JyZWN0aW9uLCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGFuZCwgZ2l2ZW4gdGhhdCBOVEZTIGlzIHVzZXItc3BhY2UgcmVhY2hhYmxlIHRocm91Z2ggbW91bnRpbmcsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSB0aG91Z2h0OiB3ZSBzaG91bGQgYWJzb2x1dGVseSBmdXp6IHRoaXMuIERlY29tcHJlc3Npb24gcm91dGluZXMgYXJlIG5vdG9yaW91cyBzb3VyY2VzIG9mIHZ1bG5lcmFiaWxpdGllcy4gQSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgZXNwZWNpYWxseSBpbiBhIGNvbXByZXNzZWQgZmlsZXN5c3RlbSwgY291bGQgYmUgZXhwbG9pdGVkLiBUaGlzIGNvdWxkIGJlIGEgc29saWQgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgTlRGUyBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEl0IHNob3VsZCBiZSBgQ09ORklHX05URlNfRlNgIHJpZ2h0PyBVbmxlc3PigKYgdGhlcmUmIzM5O3MgdGhhdCBuZXdlciBgQ09ORklHX05URlMzX0ZTYC4gQnV0IHNpbmNlIHRoaXMgcGF0Y2ggaXMgaW4gYGZzL250ZnNgLCBpdCYjMzk7cyB0aGUgKm9sZCogZHJpdmVyLiBUaW1lIHRvIGNoZWNrIGBmcy9udGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEZTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYE5URlNfRlNgIHJpZ2h0IG5vdyDigJMgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZXhhbWluZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG50ZnNfZGVjb21wcmVzc2AgaXMgYSBzdGF0aWMgY29tcG9uZW50LiBVbmRlcnN0YW5kaW5nIGl0cyBuYXR1cmUg4oCTIHdoZXRoZXIgaXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkIG9yIG5vdCDigJMgaXMgY3J1Y2lhbCBmb3IgaG93IEkmIzM5O2xsIGFwcHJvYWNoIHRoZSBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGlzIGluZm9ybXMgaG93IEkmIzM5O2QgYXBwcm9hY2ggdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbi4gSXQgd2lsbCBkaWN0YXRlIGhvdyBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZWhhdmUgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZGVjb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvY29tcHJlc3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2NvbXByZXNzLmM9MTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfYm91bmRzX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtMTMzLS8qXG5mcy9udGZzL2NvbXByZXNzLmM6MTM0OiAqIG50ZnNfZGVjb21wcmVzcyAtIGRlY29tcHJlc3MgYSBjb21wcmVzc2lvbiBibG9jayBpbnRvIGFuIGFycmF5IG9mIHBhZ2VzXG5mcy9udGZzL2NvbXByZXNzLmMtMTM1LSAqIEBkZXN0X3BhZ2VzOlx0XHRkZXN0aW5hdGlvbiBhcnJheSBvZiBwYWdlc1xuLS1cbmZzL250ZnMvY29tcHJlc3MuYy0xNDctICpcbmZzL250ZnMvY29tcHJlc3MuYzoxNDg6ICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgcHJlZW1wdGlvbi4gbnRmc19kZWNvbXByZXNzKCkgcmVlbmFibGVzIGl0IHdoZW5cbmZzL250ZnMvY29tcHJlc3MuYy0xNDktICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgZmluaXNoZWQuXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jLTE3MC0gKi9cbmZzL250ZnMvY29tcHJlc3MuYzoxNzE6c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuZnMvbnRmcy9jb21wcmVzcy5jLTE3Mi1cdFx0aW50ICpkZXN0X2luZGV4LCBpbnQgKmRlc3Rfb2ZzLCBjb25zdCBpbnQgZGVzdF9tYXhfaW5kZXgsXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jPTQ2Mz1pbnQgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNzg5LVx0XHRudGZzX2RlYnVnKFwmIzM0O0ZvdW5kIGNvbXByZXNzZWQgY29tcHJlc3Npb24gYmxvY2suXCYjMzQ7KTtcbmZzL250ZnMvY29tcHJlc3MuYzo3OTA6XHRcdGVyciA9IG50ZnNfZGVjb21wcmVzcyhwYWdlcywgY29tcGxldGVkX3BhZ2VzLCBcdTAwMjZjdXJfcGFnZSxcbmZzL250ZnMvY29tcHJlc3MuYy03OTEtXHRcdFx0XHRcdTAwMjZjdXJfb2ZzLCBjYl9tYXhfcGFnZSwgY2JfbWF4X29mcywgeHBhZ2UsXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jLTc5NS1cdFx0ICogV2UgY2FuIHNsZWVwIGZyb20gbm93IG9uLCBsb2NrIGFscmVhZHkgZHJvcHBlZCBieVxuZnMvbnRmcy9jb21wcmVzcy5jOjc5NjpcdFx0ICogbnRmc19kZWNvbXByZXNzKCkuXG5mcy9udGZzL2NvbXByZXNzLmMtNzk3LVx0XHQgKi9cbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNzk5LVx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuZnMvbnRmcy9jb21wcmVzcy5jOjgwMDpcdFx0XHRcdFwmIzM0O250ZnNfZGVjb21wcmVzcygpIGZhaWxlZCBpbiBpbm9kZSAweCVsbHggd2l0aCBlcnJvciBjb2RlICVpLiBTa2lwcGluZyB0aGlzIGNvbXByZXNzaW9uIGJsb2NrLlwmIzM0OyxcbmZzL250ZnMvY29tcHJlc3MuYy04MDEtXHRcdFx0XHRuaS1cdTAwM2VtZnRfbm8sIC1lcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTlRGUyBDb21wcmVzc2lvbiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgYG50ZnNfZGVjb21wcmVzc2AuLi4gdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBBbmQgSSByZW1lbWJlciBpdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYC4gU28sIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYWN0dWFsIGRlY29tcHJlc3Npb24gcHJvY2VzcyBpcyBpbml0aWF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogZnVuY3Rpb24gb3JjaGVzdHJhdGVzIHRoZSBjYWxsIHRvIGBudGZzX2RlY29tcHJlc3NgLCBhbmQgd2hhdCBjb250ZXh0IGl0IHByb3ZpZGVzLiBXaGF0IGFyZSB0aGUgYXJndW1lbnRzIHBhc3NlZD8gV2hhdCBwcmUtcHJvY2Vzc2luZyBoYXBwZW5zPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbnRyb2wgZmxvdyB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBOVEZTIGhhbmRsZXMgY29tcHJlc3NlZCBkYXRhIGJsb2Nrcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hb3BzLmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyBudGZzX2lvbWFwX2Jpb19yZWFkX29wcyA9IHtcbi0tXG5mcy9udGZzL2FvcHMuYy02MS0gKiAtIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm9uLXJlc2lkZW50IGFuZCBjb21wcmVzc2VkLCB0aGUgcmVhZCBvcGVyYXRpb24gaXNcbmZzL250ZnMvYW9wcy5jOjYyOiAqICAgZGVsZWdhdGVkIHRvIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuXG5mcy9udGZzL2FvcHMuYy02My0gKiAtIEZvciBub3JtYWwgcmVzaWRlbnQgb3Igbm9uLXJlc2lkZW50IGF0dHJpYnV0ZSwgaXQgdXRpbGl6ZXMgdGhlIGdlbmVyaWNcbi0tXG5mcy9udGZzL2FvcHMuYz02OD1zdGF0aWMgaW50IG50ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL2FvcHMuYy05NC1cdFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXHUwMDI2XHUwMDI2IE5Jbm9Db21wcmVzc2VkKG5pKSlcbmZzL250ZnMvYW9wcy5jOjk1Olx0XHRcdHJldHVybiBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhmb2xpbyk7XG5mcy9udGZzL2FvcHMuYy05Ni1cdH1cbi0tXG5mcy9udGZzL2NvbXByZXNzLmM9MTcxPXN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNDQ1LS8qXG5mcy9udGZzL2NvbXByZXNzLmM6NDQ2OiAqIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrIC0gcmVhZCBhIGNvbXByZXNzZWQgYmxvY2sgaW50byB0aGUgcGFnZSBjYWNoZVxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0Ny0gKiBAZm9saW86XHRsb2NrZWQgZm9saW8gaW4gdGhlIGNvbXByZXNzaW9uIGJsb2NrKHMpIHdlIG5lZWQgdG8gcmVhZFxuLS1cbmZzL250ZnMvY29tcHJlc3MuYy00NjItICovXG5mcy9udGZzL2NvbXByZXNzLmM6NDYzOmludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbnRmcy9jb21wcmVzcy5jLTQ2NC17XG4tLVxuZnMvbnRmcy9udGZzLmg9MTk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IG50ZnNfdm9sdW1lICpOVEZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbnRmcy9udGZzLmgtMjAzLS8qIEZyb20gZnMvbnRmcy9jb21wcmVzcy5jICovXG5mcy9udGZzL250ZnMuaDoyMDQ6aW50IG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZnMvbnRmcy9udGZzLmgtMjA1LWludCBhbGxvY2F0ZV9jb21wcmVzc2lvbl9idWZmZXJzKHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9mb2xpb2AuIFRoYXQgbWFrZXMgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gaW50byBOVEZTIGNvbXByZXNzaW9uIOKAkyBpdCYjMzk7cyBtb3JlIGZvY3VzZWQgdGhhbiBqdXN0IGBudGZzX3JlYWRfZm9saW9gLCB0aG91Z2ggdGhhdCYjMzk7cyBhbHNvIGEgcmVsZXZhbnQgZnVuY3Rpb24gdG8gY29uc2lkZXIuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIEkgYWxyZWFkeSBoYXZlIGBOVEZTX0ZTYCwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBjb21wcmVzc2lvbiBhc3BlY3Qgc3BlY2lmaWNhbGx5PyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUgb25lIG1vcmUgdGltZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIGxvY2F0ZWQgaW4gYGZzL250ZnMvY29tcHJlc3MuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoaXMgZmlsZSwgYW5kIHRoZXJlZm9yZSB0aGlzIGZ1bmN0aW9uYWxpdHksIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgY29tcHJlc3Npb24gc3VwcG9ydCBpcyBlbmFibGVkIGJ5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIOKAkyBpdCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hldGhlciBpdCYjMzk7cyBhIGZlYXR1cmUgdGhhdCYjMzk7cyBnZW5lcmFsbHkgYXZhaWxhYmxlIG9yIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXByZXNzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvTWFrZWZpbGU9NT1udGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTYtXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXG5mcy9udGZzL01ha2VmaWxlOjc6XHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTgtXHQgIGlvbWFwLm8gZGVidWcubyBzeXNjdGwubyBvYmplY3RfaWQubyBiZGV2LWlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIERlY29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBpdCYjMzk7cyAqYWx3YXlzKiBidWlsdCBpbiB3aGVuIGBOVEZTX0ZTYCBpcyBlbmFibGVkLCBtZWFuaW5nIHRoYXQmIzM5O3MgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBFYXN5IGVub3VnaC4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2Agc3ltYm9sLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBhIGNvbXBhcmlzb24gZnJvbSBncmVhdGVyLXRoYW4gdG8gZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBkZWNvbXByZXNzaW9uIHBhdGggaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBob25lIGluIG9uLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUuLi4gWXVwLCBpdCYjMzk7cyBleHBvcnRlZCBpbiBgZnMvbnRmcy9udGZzLmhgIGFuZCBjYWxsZWQgZnJvbSBgZnMvbnRmcy9hb3BzLmNgLiBTZWVtcyBsaWtlIGEgdmVyeSBzZW5zaWJsZSBzdGFydGluZyBwb2ludC4KCkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBUaGUgY29uZmlybWF0aW9uIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCB3aGljaCBpcyBnb29kLiBXZSYjMzk7cmUgemVyb2luZyBpbiBvbiBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgIGFzIG91ciBmb2N1cyBzeW1ib2wsIGFuZCB3ZSYjMzk7bGwgZW5zdXJlIHRoYXQgYE5URlNfRlNgIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBwcm9jZXNzLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIGNvbmNpc2VseSBzdGF0ZXMgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCBmaXggd2l0aGluIGBudGZzX2RlY29tcHJlc3NgIGFuZCBpdHMgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSB2aWEgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG50ZnNfZGVjb21wcmVzc2AgYnkgY2hhbmdpbmcgYGRwX2FkZHIgXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXHUwMDNlPSBkcF9zYl9lbmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1vdW50aW5nIGEgY3JhZnRlZCBOVEZTIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1NzFmOTkzMzIxOGZiM2M4M2RmMWY4N2M0NGViNTZmMmVjYjQ4YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvY29tcHJlc3MuYyBiL2ZzL250ZnMvY29tcHJlc3MuYwppbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NAotLS0gYS9mcy9udGZzL2NvbXByZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jCkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSwKIAkJdTggKmRwX2JhY2tfYWRkcjsKIAogCQkvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqLwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQogCQkJYnJlYWs7CiAKIAkJLyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBEZWNvbXByZXNzaW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBqdXN0IGEgbWlub3IgYWRqdXN0bWVudCB0byBhIGJvdW5kcyBjaGVjayB3aXRoaW4gdGhlIGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uOgoKYGBgYwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQpgYGAKCkluaXRpYWxseSwgaXQgc2VlbXMgbGlrZSBhIHNpbXBsZSBmaXggdG8gcHJldmVudCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgYGRwX2FkZHJgLCBmcm9tIGV4Y2VlZGluZyBpdHMgdmFsaWQgYm91bmRzIChgZHBfc2JfZW5kYCkuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgJmd0O2AgdG8gYCZndDs9YC4gVGhhdCBtZWFucyB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIGFsbG93ZWQgYGRwX2FkZHJgIHRvICplcXVhbCogYGRwX3NiX2VuZGAgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGVycm9yLgoKSWYgYGRwX2FkZHJgICppcyogZXF1YWwgdG8gYGRwX3NiX2VuZGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcHJvY2VlZGVkLiBUaGVuIGl0IG1pZ2h0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciAoYGNiYCkgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYXQgYGRwX2FkZHJgLiBJZiBgZHBfYWRkcmAgaXMgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3cml0aW5nIHRvIGl0IHdvdWxkIGJlIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyB3cml0ZS4gVW5sZXNzLCBpdCBpcyBhbHNvIHJlYWRpbmcgZnJvbSBgZHBfYWRkcmAuCgpJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvbnRmcy9jb21wcmVzcy5jYCwgYXJvdW5kIGxpbmUgMzUyLCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBpbXBhY3RzIHRoZSBkZWNvbXByZXNzaW9uIGxvZ2ljLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgcHJlY2lzZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvY29tcHJlc3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XG4gMzQxOlx0XHQvKiBDaGVjayB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuICovXG4gMzQyOlx0XHRpZiAoY2IgXHUwMDNlIGNiX3NiX2VuZCB8fCBkcF9hZGRyIFx1MDAzZSBkcF9zYl9lbmQpXG4gMzQzOlx0XHRcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogR2V0IHRoZSBuZXh0IHRhZyBhbmQgYWR2YW5jZSB0byBmaXJzdCB0b2tlbi4gKi9cbiAzNDY6XHRcdHRhZyA9ICpjYiYjNDM7JiM0Mzs7XG4gMzQ3Olx0XG4gMzQ4Olx0XHQvKiBQYXJzZSB0aGUgZWlnaHQgdG9rZW5zIGRlc2NyaWJlZCBieSB0aGUgdGFnLiAqL1xuIDM0OTpcdFx0Zm9yICh0b2tlbiA9IDA7IHRva2VuIFx1MDAzYyA4OyB0b2tlbiYjNDM7JiM0MzssIHRhZyBcdTAwM2VcdTAwM2U9IDEpIHtcbiAzNTA6XHRcdFx0cmVnaXN0ZXIgdTE2IGk7XG4gMzUxOlx0XHRcdHUxNiBsZywgcHQsIGxlbmd0aCwgbWF4X25vbl9vdmVybGFwO1xuIDM1MjpcdFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIDM1MzpcdFxuIDM1NDpcdFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuIDM1NTpcdFx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiAzNTY6XHRcdFx0XHRicmVhaztcbiAzNTc6XHRcbiAzNTg6XHRcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiAzNTk6XHRcdFx0aWYgKCh0YWcgXHUwMDI2IE5URlNfVE9LRU5fTUFTSykgPT0gTlRGU19TWU1CT0xfVE9LRU4pIHtcbiAzNjA6XHRcdFx0XHQvKlxuIDM2MTpcdFx0XHRcdCAqIFdlIGhhdmUgYSBzeW1ib2wgdG9rZW4sIGNvcHkgdGhlIHN5bWJvbCBhY3Jvc3MsIGFuZFxuIDM2MjpcdFx0XHRcdCAqIGFkdmFuY2UgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9zaXRpb25zLlxuIDM2MzpcdFx0XHRcdCAqL1xuIDM2NDpcdFx0XHRcdCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpjYiYjNDM7JiM0Mzs7XG4gMzY1Olx0XHRcdFx0JiM0MzsmIzQzOypkZXN0X29mcztcbiAzNjY6XHRcbiAzNjc6XHRcdFx0XHQvKiBDb250aW51ZSB3aXRoIHRoZSBuZXh0IHRva2VuLiAqL1xuIDM2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDM2OTpcdFx0XHR9XG4gMzcwOlx0XG4gMzcxOlx0XHRcdC8qXG4gMzcyOlx0XHRcdCAqIFdlIGhhdmUgYSBwaHJhc2UgdG9rZW4uIE1ha2Ugc3VyZSBpdCBpcyBub3QgdGhlIGZpcnN0IHRhZyBpblxuIDM3MzpcdFx0XHQgKiB0aGUgc2IgYXMgdGhpcyBpcyBpbGxlZ2FsIGFuZCB3b3VsZCBjb25mdXNlIHRoZSBjb2RlIGJlbG93LlxuIDM3NDpcdFx0XHQgKi9cbiAzNzU6XHRcdFx0aWYgKGRwX2FkZHIgPT0gZHBfc2Jfc3RhcnQpXG4gMzc2Olx0XHRcdFx0Z290byByZXR1cm5fb3ZlcmZsb3c7XG4gMzc3Olx0XG4gMzc4Olx0XHRcdC8qXG4gMzc5Olx0XHRcdCAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdvIGJhY2sgKHApIGFuZCB0aGUgbnVtYmVyXG4gMzgwOlx0XHRcdCAqIG9mIGJ5dGVzIHRvIGNvcHkgKGwpLiBXZSB1c2UgYW4gb3B0aW1pemVkIGFsZ29yaXRobSBpbiB3aGljaFxuIDM4MTpcdFx0XHQgKiB3ZSBmaXJzdCBjYWxjdWxhdGUgbG9nMihjdXJyZW50IGRlc3RpbmF0aW9uIHBvc2l0aW9uIGluIHNiKSxcbiAzODI6XHRcdFx0ICogd2hpY2ggYWxsb3dzIGRldGVybWluYXRpb24gb2YgbCBhbmQgcCBpbiBPKDEpIHJhdGhlciB0aGFuXG4gMzgzOlx0XHRcdCAqIE8obikuIFdlIGp1c3QgbmVlZCBhbiBhcmNoLW9wdGltaXplZCBsb2cyKCkgZnVuY3Rpb24gbm93LlxuIDM4NDpcdFx0XHQgKi9cbiAzODU6XHRcdFx0bGcgPSAwO1xuIDM4NjpcdFx0XHRmb3IgKGkgPSAqZGVzdF9vZnMgLSBkb19zYl9zdGFydCAtIDE7IGkgXHUwMDNlPSAweDEwOyBpIFx1MDAzZVx1MDAzZT0gMSlcbiAzODc6XHRcdFx0XHRsZyYjNDM7JiM0Mzs7XG4gMzg4Olx0XG4gMzg5Olx0XHRcdC8qIEdldCB0aGUgcGhyYXNlIHRva2VuIGludG8gaS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSoqCgpPa2F5LCBzbyB0aGUgb2xkIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGBkcF9hZGRyYCByZWFjaGVzIGBkcF9zYl9lbmRgLCAqc2hvdWxkbiYjMzk7dCogaGF2ZSBicm9rZW4gdGhlIHdheSBpdCYjMzk7cyBzZXQgdXAuLi4gd2hpY2ggcmFpc2VzIGEgcmVkIGZsYWcuIFRoZSBzdWJzZXF1ZW50IGNoZWNrLCBgKHRhZyAmYW1wOyBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOYCwgbG9va3MgbGlrZSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQmIzM5O3MgdHJ1ZSwgd2UgaGF2ZSBhIHdyaXRlIG9wZXJhdGlvbjogYCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpjYiYjNDM7JiM0Mzs7YC4gIFRoYXQgbG9va3MgbGlrZSBhbiBpbW1lZGlhdGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBzaW5jZSBgZHBfYWRkcmAgaXMgYWxyZWFkeSBhdCB0aGUgZW5kLiAgRXZlbiBpZiB0aGF0IGNvbmRpdGlvbiBpcyAqZmFsc2UqLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGhyYXNlIHRva2VuLCB3aGljaCBhbHNvIGludm9sdmVzIHdyaXRlcyB0byBgZHBfYWRkcmAuIFNvIGFnYWluLCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLgoKVGhlIGdvb2QgbmV3cyBpcywgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgKnNob3VsZCogYmUgY2F0Y2hpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyB3cml0ZXMuICBMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgYSByaXNrIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZSwgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjb25zaWRlcmF0aW9uPyBObywgaXQmIzM5O3MgYSBkZWNvbXByZXNzaW9uIHJvdXRpbmUsIGl0JiMzOTtzICp3cml0aW5nKiB0byBhIGRlc3RpbmF0aW9uIGJ1ZmZlci4gSWYgaXQmIzM5O3Mgd3JpdGluZyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCByZWFkcyBvdXQgb2YgYm91bmRzIGZyb20gYGNiYCwgdGhhdCYjMzk7cyBLQVNBTiYjMzk7cyBwcm9ibGVtIHRvby4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHRoZSBwYXRjaCAqZG9lcyogZml4IGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCwgYnV0IHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIGFuIGV4aXN0aW5nIG91dC1vZi1ib3VuZHMgaXNzdWUuIFNpbmNlIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgcmVhbGx5IEtBU0FOIHRoYXQgbWF0dGVycyBoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggcGhyYXNlIHRva2VucyB0byBiZSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9jb21wcmVzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRcdFx0cHQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWNiKTtcbiAzOTE6XHRcbiAzOTI6XHRcdFx0LypcbiAzOTM6XHRcdFx0ICogQ2FsY3VsYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluXG4gMzk0Olx0XHRcdCAqIHRoZSBkZXN0aW5hdGlvbiB1c2luZyB0aGUgZmFjdCB0aGF0IHAgPSAocHQgXHUwMDNlXHUwMDNlICgxMiAtIGxnKSkgJiM0MzsgMVxuIDM5NTpcdFx0XHQgKiBhbmQgbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnbyB0b28gZmFyIGJhY2suXG4gMzk2Olx0XHRcdCAqL1xuIDM5NzpcdFx0XHRkcF9iYWNrX2FkZHIgPSBkcF9hZGRyIC0gKHB0IFx1MDAzZVx1MDAzZSAoMTIgLSBsZykpIC0gMTtcbiAzOTg6XHRcdFx0aWYgKGRwX2JhY2tfYWRkciBcdTAwM2MgZHBfc2Jfc3RhcnQpXG4gMzk5Olx0XHRcdFx0Z290byByZXR1cm5fb3ZlcmZsb3c7XG4gNDAwOlx0XG4gNDAxOlx0XHRcdC8qIE5vdyBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZS4gKi9cbiA0MDI6XHRcdFx0bGVuZ3RoID0gKHB0IFx1MDAyNiAoMHhmZmYgXHUwMDNlXHUwMDNlIGxnKSkgJiM0MzsgMztcbiA0MDM6XHRcbiA0MDQ6XHRcdFx0LyogQWR2YW5jZSBkZXN0aW5hdGlvbiBwb3NpdGlvbiBhbmQgdmVyaWZ5IGl0IGlzIGluIHJhbmdlLiAqL1xuIDQwNTpcdFx0XHQqZGVzdF9vZnMgJiM0Mzs9IGxlbmd0aDtcbiA0MDY6XHRcdFx0aWYgKCpkZXN0X29mcyBcdTAwM2UgZG9fc2JfZW5kKVxuIDQwNzpcdFx0XHRcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xuIDQwODpcdFxuIDQwOTpcdFx0XHQvKiBUaGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBieXRlcy4gKi9cbiA0MTA6XHRcdFx0bWF4X25vbl9vdmVybGFwID0gZHBfYWRkciAtIGRwX2JhY2tfYWRkcjtcbiA0MTE6XHRcbiA0MTI6XHRcdFx0aWYgKGxlbmd0aCBcdTAwM2M9IG1heF9ub25fb3ZlcmxhcCkge1xuIDQxMzpcdFx0XHRcdC8qIFRoZSBieXRlIHNlcXVlbmNlIGRvZXNuJiMzOTt0IG92ZXJsYXAsIGp1c3QgY29weSBpdC4gKi9cbiA0MTQ6XHRcdFx0XHRtZW1jcHkoZHBfYWRkciwgZHBfYmFja19hZGRyLCBsZW5ndGgpO1xuIDQxNTpcdFxuIDQxNjpcdFx0XHRcdC8qIEFkdmFuY2UgZGVzdGluYXRpb24gcG9pbnRlci4gKi9cbiA0MTc6XHRcdFx0XHRkcF9hZGRyICYjNDM7PSBsZW5ndGg7XG4gNDE4Olx0XHRcdH0gZWxzZSB7XG4gNDE5Olx0XHRcdFx0LypcbiA0MjA6XHRcdFx0XHQgKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2VzIG92ZXJsYXAsIGNvcHkgbm9uLW92ZXJsYXBwaW5nXG4gNDIxOlx0XHRcdFx0ICogcGFydCBhbmQgdGhlbiBkbyBhIHNsb3cgYnl0ZSBieSBieXRlIGNvcHkgZm9yIHRoZVxuIDQyMjpcdFx0XHRcdCAqIG92ZXJsYXBwaW5nIHBhcnQuIEFsc28sIGFkdmFuY2UgdGhlIGRlc3RpbmF0aW9uXG4gNDIzOlx0XHRcdFx0ICogcG9pbnRlci5cbiA0MjQ6XHRcdFx0XHQgKi9cbiA0MjU6XHRcdFx0XHRtZW1jcHkoZHBfYWRkciwgZHBfYmFja19hZGRyLCBtYXhfbm9uX292ZXJsYXApO1xuIDQyNjpcdFx0XHRcdGRwX2FkZHIgJiM0Mzs9IG1heF9ub25fb3ZlcmxhcDtcbiA0Mjc6XHRcdFx0XHRkcF9iYWNrX2FkZHIgJiM0Mzs9IG1heF9ub25fb3ZlcmxhcDtcbiA0Mjg6XHRcdFx0XHRsZW5ndGggLT0gbWF4X25vbl9vdmVybGFwO1xuIDQyOTpcdFx0XHRcdHdoaWxlIChsZW5ndGgtLSlcbiA0MzA6XHRcdFx0XHRcdCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpkcF9iYWNrX2FkZHImIzQzOyYjNDM7O1xuIDQzMTpcdFx0XHR9XG4gNDMyOlx0XG4gNDMzOlx0XHRcdC8qIEFkdmFuY2Ugc291cmNlIHBvc2l0aW9uIGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHRva2VuLiAqL1xuIDQzNDpcdFx0XHRjYiAmIzQzOz0gMjtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcbiA0Mzc6XHRcdC8qIE5vIHRva2VucyBsZWZ0IGluIHRoZSBjdXJyZW50IHRhZy4gQ29udGludWUgd2l0aCB0aGUgbmV4dCB0YWcuICovXG4gNDM4Olx0XHRnb3RvIGRvX25leHRfdGFnO1xuIDQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ2CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkJ1ZmZlciBPdmVyZmxvdyBEZXRlY3RlZCoqCgpPa2F5LCBzbyB0aGUgdG9rZW4gbG9naWMgaGFzIGEgZmxhdzsgaXQmIzM5O3Mgd3JpdGluZyB0byBgZHBfYWRkcmAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiBgZHBfYWRkcmAgZW5kcyB1cCBlcXVhbGluZyBgZHBfc2JfZW5kYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGJ1ZmZlciBvdmVyZmxvdywgbm8gcXVlc3Rpb24uIFRoZSBwb3RlbnRpYWwgZm9yIGEgS0FTQU4gZGV0ZWN0aW9uIGlzIGhpZ2guIEhvd2V2ZXIsIHNpbmNlIHRoZSBpc3N1ZSBpcyBhIHdyaXRlICphZnRlciogdGhlIGJ1ZmZlciwgYW5kIG5vdCBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJiMzOTtzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gdGhlIE5URlMgZGVjb21wcmVzc2lvbiByb3V0aW5lIChgbnRmc19kZWNvbXByZXNzYCkuIFRoZSBvbGQgY29kZSBhbGxvd2VkIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIChgZHBfYWRkcmApIHRvIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYGRwX3NiX2VuZGApIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRva2Vucywgd2hpY2ggd291bGQgcmVzdWx0IGluIHdyaXRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKG9yIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlcikuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGhlcmUsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIHRoZSBOVEZTIGRlY29tcHJlc3Npb24gcm91dGluZSAoYG50ZnNfZGVjb21wcmVzc2ApLiBUaGUgb2xkIGNvZGUgYWxsb3dlZCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciAoYGRwX2FkZHJgKSB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGBkcF9zYl9lbmRgKSBhbmQgY29udGludWUgcHJvY2Vzc2luZyB0b2tlbnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChvciByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIpLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBoZXJlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDA6MzYuMzk3NTM0NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5NzE4NDcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBudGZzX2RlY29tcHJlc3NgIGJ5IGNoYW5naW5nIGBkcF9hZGRyIFxcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcXHUwMDNlPSBkcF9zYl9lbmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1vdW50aW5nIGEgY3JhZnRlZCBOVEZTIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDozNi4zOTc1NDA4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNDg3OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmNcXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvY29tcHJlc3MuY1xcbisrKyBiL2ZzL250ZnMvY29tcHJlc3MuY1xcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbiBcXHRcXHR1OCAqZHBfYmFja19hZGRyO1xcbiBcXG4gXFx0XFx0LyogQ2hlY2sgaWYgd2UgYXJlIGRvbmUgLyBzdGlsbCBpbiByYW5nZS4gKi9cXG4tXFx0XFx0aWYgKGNiIFxcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFxcdTAwM2UgZHBfc2JfZW5kKVxcbitcXHRcXHRpZiAoY2IgXFx1MDAzZT0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdC8qIERldGVybWluZSB0b2tlbiB0eXBlIGFuZCBwYXJzZSBhcHByb3ByaWF0ZWx5LiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjM2Ljg0MTU5OTQ1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1NDA4OTgyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA3OjAwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4rKysgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuIFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjM2Ljg0MTYwMDgxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDI4MzczMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb21wcmVzc2lvbiBCdWcgYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGEgbWlub3IsIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIHRvIGBmcy9udGZzL2NvbXByZXNzLmNgLiBJdCdzIGEgc2luZ2xlLWxpbmUgZml4IHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb246IHN3aXRjaGluZyBmcm9tIGEgc3RyaWN0IGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIChgXHUwMDNlYCkgdG8gYSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gY29tcGFyaXNvbiAoYFx1MDAzZT1gKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFwicG90ZW50aWFsIGJ1ZyBmaXhcIiBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyBnb29kLiBCdXQuLi4gdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHdoYXQgdGhpcyBkb2VzIGFuZCB3aGF0IHRoZSBpbXBhY3QgaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgZnMvbnRmcy9jb21wcmVzcy5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC5cblxuU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcnJlY3Rpb24sIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gYW5kLCBnaXZlbiB0aGF0IE5URlMgaXMgdXNlci1zcGFjZSByZWFjaGFibGUgdGhyb3VnaCBtb3VudGluZywgdGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHRob3VnaHQ6IHdlIHNob3VsZCBhYnNvbHV0ZWx5IGZ1enogdGhpcy4gRGVjb21wcmVzc2lvbiByb3V0aW5lcyBhcmUgbm90b3Jpb3VzIHNvdXJjZXMgb2YgdnVsbmVyYWJpbGl0aWVzLiBBIHN1YnRsZSBvZmYtYnktb25lIGVycm9yLCBlc3BlY2lhbGx5IGluIGEgY29tcHJlc3NlZCBmaWxlc3lzdGVtLCBjb3VsZCBiZSBleHBsb2l0ZWQuIFRoaXMgY291bGQgYmUgYSBzb2xpZCB0YXJnZXQuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgTlRGUyBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEl0IHNob3VsZCBiZSBgQ09ORklHX05URlNfRlNgIHJpZ2h0PyBVbmxlc3PigKYgdGhlcmUncyB0aGF0IG5ld2VyIGBDT05GSUdfTlRGUzNfRlNgLiBCdXQgc2luY2UgdGhpcyBwYXRjaCBpcyBpbiBgZnMvbnRmc2AsIGl0J3MgdGhlICpvbGQqIGRyaXZlci4gVGltZSB0byBjaGVjayBgZnMvbnRmcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo0Mi44NDQ0NDA4NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODUxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDA6NDIuODkwMzM0NDU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODc5MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYE5URlNfRlNgIHJpZ2h0IG5vdyDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBleGFtaW5lLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciBgbnRmc19kZWNvbXByZXNzYCBpcyBhIHN0YXRpYyBjb21wb25lbnQuIFVuZGVyc3RhbmRpbmcgaXRzIG5hdHVyZSDigJMgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgZGVmaW5lZCBvciBub3Qg4oCTIGlzIGNydWNpYWwgZm9yIGhvdyBJJ2xsIGFwcHJvYWNoIHRoZSBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGlzIGluZm9ybXMgaG93IEknZCBhcHByb2FjaCB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uLiBJdCB3aWxsIGRpY3RhdGUgaG93IEknZCBleHBlY3QgaXQgdG8gYmVoYXZlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ2LjEyOTEyOTY0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3NjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9jb21wcmVzcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvY29tcHJlc3MuYz0xMjU9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ib3VuZHNfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTEzMy0vKlxcbmZzL250ZnMvY29tcHJlc3MuYzoxMzQ6ICogbnRmc19kZWNvbXByZXNzIC0gZGVjb21wcmVzcyBhIGNvbXByZXNzaW9uIGJsb2NrIGludG8gYW4gYXJyYXkgb2YgcGFnZXNcXG5mcy9udGZzL2NvbXByZXNzLmMtMTM1LSAqIEBkZXN0X3BhZ2VzOlxcdFxcdGRlc3RpbmF0aW9uIGFycmF5IG9mIHBhZ2VzXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtMTQ3LSAqXFxuZnMvbnRmcy9jb21wcmVzcy5jOjE0ODogKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBwcmVlbXB0aW9uLiBudGZzX2RlY29tcHJlc3MoKSByZWVuYWJsZXMgaXQgd2hlblxcbmZzL250ZnMvY29tcHJlc3MuYy0xNDktICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgZmluaXNoZWQuXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtMTcwLSAqL1xcbmZzL250ZnMvY29tcHJlc3MuYzoxNzE6c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbmZzL250ZnMvY29tcHJlc3MuYy0xNzItXFx0XFx0aW50ICpkZXN0X2luZGV4LCBpbnQgKmRlc3Rfb2ZzLCBjb25zdCBpbnQgZGVzdF9tYXhfaW5kZXgsXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmM9NDYzPWludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTc4OS1cXHRcXHRudGZzX2RlYnVnKFxcXCJGb3VuZCBjb21wcmVzc2VkIGNvbXByZXNzaW9uIGJsb2NrLlxcXCIpO1xcbmZzL250ZnMvY29tcHJlc3MuYzo3OTA6XFx0XFx0ZXJyID0gbnRmc19kZWNvbXByZXNzKHBhZ2VzLCBjb21wbGV0ZWRfcGFnZXMsIFxcdTAwMjZjdXJfcGFnZSxcXG5mcy9udGZzL2NvbXByZXNzLmMtNzkxLVxcdFxcdFxcdFxcdFxcdTAwMjZjdXJfb2ZzLCBjYl9tYXhfcGFnZSwgY2JfbWF4X29mcywgeHBhZ2UsXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtNzk1LVxcdFxcdCAqIFdlIGNhbiBzbGVlcCBmcm9tIG5vdyBvbiwgbG9jayBhbHJlYWR5IGRyb3BwZWQgYnlcXG5mcy9udGZzL2NvbXByZXNzLmM6Nzk2OlxcdFxcdCAqIG50ZnNfZGVjb21wcmVzcygpLlxcbmZzL250ZnMvY29tcHJlc3MuYy03OTctXFx0XFx0ICovXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtNzk5LVxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYixcXG5mcy9udGZzL2NvbXByZXNzLmM6ODAwOlxcdFxcdFxcdFxcdFxcXCJudGZzX2RlY29tcHJlc3MoKSBmYWlsZWQgaW4gaW5vZGUgMHglbGx4IHdpdGggZXJyb3IgY29kZSAlaS4gU2tpcHBpbmcgdGhpcyBjb21wcmVzc2lvbiBibG9jay5cXFwiLFxcbmZzL250ZnMvY29tcHJlc3MuYy04MDEtXFx0XFx0XFx0XFx0bmktXFx1MDAzZW1mdF9ubywgLWVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ2LjE4MDExMTgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTAwNzk2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBOVEZTIENvbXByZXNzaW9uIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGBudGZzX2RlY29tcHJlc3NgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBBbmQgSSByZW1lbWJlciBpdCdzIGNhbGxlZCBieSBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLiBTbywgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFjdHVhbCBkZWNvbXByZXNzaW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIG9yY2hlc3RyYXRlcyB0aGUgY2FsbCB0byBgbnRmc19kZWNvbXByZXNzYCwgYW5kIHdoYXQgY29udGV4dCBpdCBwcm92aWRlcy4gV2hhdCBhcmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQ/IFdoYXQgcHJlLXByb2Nlc3NpbmcgaGFwcGVucz8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgTlRGUyBoYW5kbGVzIGNvbXByZXNzZWQgZGF0YSBibG9ja3MuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo0OS4zMzAxOTMzNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NzAwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hb3BzLmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyBudGZzX2lvbWFwX2Jpb19yZWFkX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvYW9wcy5jLTYxLSAqIC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub24tcmVzaWRlbnQgYW5kIGNvbXByZXNzZWQsIHRoZSByZWFkIG9wZXJhdGlvbiBpc1xcbmZzL250ZnMvYW9wcy5jOjYyOiAqICAgZGVsZWdhdGVkIHRvIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuXFxuZnMvbnRmcy9hb3BzLmMtNjMtICogLSBGb3Igbm9ybWFsIHJlc2lkZW50IG9yIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUsIGl0IHV0aWxpemVzIHRoZSBnZW5lcmljXFxuLS1cXG5mcy9udGZzL2FvcHMuYz02OD1zdGF0aWMgaW50IG50ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL250ZnMvYW9wcy5jLTk0LVxcdFxcdGlmIChOSW5vTm9uUmVzaWRlbnQobmkpIFxcdTAwMjZcXHUwMDI2IE5Jbm9Db21wcmVzc2VkKG5pKSlcXG5mcy9udGZzL2FvcHMuYzo5NTpcXHRcXHRcXHRyZXR1cm4gbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soZm9saW8pO1xcbmZzL250ZnMvYW9wcy5jLTk2LVxcdH1cXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYz0xNzE9c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0NS0vKlxcbmZzL250ZnMvY29tcHJlc3MuYzo0NDY6ICogbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2sgLSByZWFkIGEgY29tcHJlc3NlZCBibG9jayBpbnRvIHRoZSBwYWdlIGNhY2hlXFxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0Ny0gKiBAZm9saW86XFx0bG9ja2VkIGZvbGlvIGluIHRoZSBjb21wcmVzc2lvbiBibG9jayhzKSB3ZSBuZWVkIHRvIHJlYWRcXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYy00NjItICovXFxuZnMvbnRmcy9jb21wcmVzcy5jOjQ2MzppbnQgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9udGZzL2NvbXByZXNzLmMtNDY0LXtcXG4tLVxcbmZzL250ZnMvbnRmcy5oPTE5Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBudGZzX3ZvbHVtZSAqTlRGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9udGZzLmgtMjAzLS8qIEZyb20gZnMvbnRmcy9jb21wcmVzcy5jICovXFxuZnMvbnRmcy9udGZzLmg6MjA0OmludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5mcy9udGZzL250ZnMuaC0yMDUtaW50IGFsbG9jYXRlX2NvbXByZXNzaW9uX2J1ZmZlcnModm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ5LjM3NzY3MjQ5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzI3MTI1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqXG5cbk9rYXksIHNvIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgaXNuJ3Qgc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9mb2xpb2AuIFRoYXQgbWFrZXMgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gaW50byBOVEZTIGNvbXByZXNzaW9uIOKAkyBpdCdzIG1vcmUgZm9jdXNlZCB0aGFuIGp1c3QgYG50ZnNfcmVhZF9mb2xpb2AsIHRob3VnaCB0aGF0J3MgYWxzbyBhIHJlbGV2YW50IGZ1bmN0aW9uIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0J3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSBhbHJlYWR5IGhhdmUgYE5URlNfRlNgLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGNvbXByZXNzaW9uIGFzcGVjdCBzcGVjaWZpY2FsbHk/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZSBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo1Mi42NTAzODc4OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTQ3Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0zNC1cXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjUyLjY5NjM0MTk3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NjU5NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBDb21wcmVzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBsb2NhdGVkIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHNlZSBpZiB0aGlzIGZpbGUsIGFuZCB0aGVyZWZvcmUgdGhpcyBmdW5jdGlvbmFsaXR5LCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpZiBpdCdzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIOKAkyBpdCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hldGhlciBpdCdzIGEgZmVhdHVyZSB0aGF0J3MgZ2VuZXJhbGx5IGF2YWlsYWJsZSBvciBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc2V0dXAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo1Ni4xMjEwMTM2MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTk3ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXByZXNzLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL01ha2VmaWxlPTU9bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxcXFxuZnMvbnRmcy9NYWtlZmlsZS02LVxcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGU6NzpcXHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXFxcXG5mcy9udGZzL01ha2VmaWxlLTgtXFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjU2LjE2ODIxODg0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk3Nzc0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBEZWNvbXByZXNzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBpdCdzICphbHdheXMqIGJ1aWx0IGluIHdoZW4gYE5URlNfRlNgIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhhdCdzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gRWFzeSBlbm91Z2guXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2Agc3ltYm9sLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBhIGNvbXBhcmlzb24gZnJvbSBncmVhdGVyLXRoYW4gdG8gZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBkZWNvbXByZXNzaW9uIHBhdGggaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGhvbmUgaW4gb24uIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4uLiBZdXAsIGl0J3MgZXhwb3J0ZWQgaW4gYGZzL250ZnMvbnRmcy5oYCBhbmQgY2FsbGVkIGZyb20gYGZzL250ZnMvYW9wcy5jYC4gU2VlbXMgbGlrZSBhIHZlcnkgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQuXG5cbkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBUaGUgY29uZmlybWF0aW9uIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCB3aGljaCBpcyBnb29kLiBXZSdyZSB6ZXJvaW5nIGluIG9uIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgYXMgb3VyIGZvY3VzIHN5bWJvbCwgYW5kIHdlJ2xsIGVuc3VyZSB0aGF0IGBOVEZTX0ZTYCBpcyBlbmFibGVkIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhlIHByb3ZpZGVkIHJlYXNvbmluZyBjb25jaXNlbHkgc3RhdGVzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgZml4IHdpdGhpbiBgbnRmc19kZWNvbXByZXNzYCBhbmQgaXRzIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UgdmlhIG1hbGljaW91cyBOVEZTIGltYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDE6MDIuMTY1OTk2MDU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1ODI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG50ZnNfZGVjb21wcmVzc2AgYnkgY2hhbmdpbmcgYGRwX2FkZHIgXFx1MDAzZSBkcF9zYl9lbmRgIHRvIGBkcF9hZGRyIFxcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjAyLjI1MDU4NjYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDQxMjExMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMTowMi4yNTEyODI2MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzNDM0MjAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA3OjAwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4rKysgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuIFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjAyLjI1MTI4NTIxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU0NDE2NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5URlMgRGVjb21wcmVzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL250ZnMvY29tcHJlc3MuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwganVzdCBhIG1pbm9yIGFkanVzdG1lbnQgdG8gYSBib3VuZHMgY2hlY2sgd2l0aGluIHRoZSBgbnRmc19kZWNvbXByZXNzYCBmdW5jdGlvbjpcblxuYGBgY1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbmBgYFxuXG5Jbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzaW1wbGUgZml4IHRvIHByZXZlbnQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGBkcF9hZGRyYCwgZnJvbSBleGNlZWRpbmcgaXRzIHZhbGlkIGJvdW5kcyAoYGRwX3NiX2VuZGApLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpdCdzIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgXHUwMDNlYCB0byBgXHUwMDNlPWAuIFRoYXQgbWVhbnMgdGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIGBkcF9hZGRyYCB0byAqZXF1YWwqIGBkcF9zYl9lbmRgIHdpdGhvdXQgdHJpZ2dlcmluZyBhbiBlcnJvci5cblxuSWYgYGRwX2FkZHJgICppcyogZXF1YWwgdG8gYGRwX3NiX2VuZGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcHJvY2VlZGVkLiBUaGVuIGl0IG1pZ2h0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciAoYGNiYCkgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYXQgYGRwX2FkZHJgLiBJZiBgZHBfYWRkcmAgaXMgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3cml0aW5nIHRvIGl0IHdvdWxkIGJlIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyB3cml0ZS4gVW5sZXNzLCBpdCBpcyBhbHNvIHJlYWRpbmcgZnJvbSBgZHBfYWRkcmAuXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLCBhcm91bmQgbGluZSAzNTIsIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGltcGFjdHMgdGhlIGRlY29tcHJlc3Npb24gbG9naWMuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBwcmVjaXNlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMTowNy4yMDU3MDU0NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvY29tcHJlc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFxuIDM0MTpcXHRcXHQvKiBDaGVjayB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuICovXFxuIDM0MjpcXHRcXHRpZiAoY2IgXFx1MDAzZSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZClcXG4gMzQzOlxcdFxcdFxcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHQvKiBHZXQgdGhlIG5leHQgdGFnIGFuZCBhZHZhbmNlIHRvIGZpcnN0IHRva2VuLiAqL1xcbiAzNDY6XFx0XFx0dGFnID0gKmNiKys7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFBhcnNlIHRoZSBlaWdodCB0b2tlbnMgZGVzY3JpYmVkIGJ5IHRoZSB0YWcuICovXFxuIDM0OTpcXHRcXHRmb3IgKHRva2VuID0gMDsgdG9rZW4gXFx1MDAzYyA4OyB0b2tlbisrLCB0YWcgXFx1MDAzZVxcdTAwM2U9IDEpIHtcXG4gMzUwOlxcdFxcdFxcdHJlZ2lzdGVyIHUxNiBpO1xcbiAzNTE6XFx0XFx0XFx0dTE2IGxnLCBwdCwgbGVuZ3RoLCBtYXhfbm9uX292ZXJsYXA7XFxuIDM1MjpcXHRcXHRcXHR1OCAqZHBfYmFja19hZGRyO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xcbiAzNTU6XFx0XFx0XFx0aWYgKGNiIFxcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFxcdTAwM2U9IGRwX3NiX2VuZClcXG4gMzU2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRcXHQvKiBEZXRlcm1pbmUgdG9rZW4gdHlwZSBhbmQgcGFyc2UgYXBwcm9wcmlhdGVseS4qL1xcbiAzNTk6XFx0XFx0XFx0aWYgKCh0YWcgXFx1MDAyNiBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOKSB7XFxuIDM2MDpcXHRcXHRcXHRcXHQvKlxcbiAzNjE6XFx0XFx0XFx0XFx0ICogV2UgaGF2ZSBhIHN5bWJvbCB0b2tlbiwgY29weSB0aGUgc3ltYm9sIGFjcm9zcywgYW5kXFxuIDM2MjpcXHRcXHRcXHRcXHQgKiBhZHZhbmNlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvc2l0aW9ucy5cXG4gMzYzOlxcdFxcdFxcdFxcdCAqL1xcbiAzNjQ6XFx0XFx0XFx0XFx0KmRwX2FkZHIrKyA9ICpjYisrO1xcbiAzNjU6XFx0XFx0XFx0XFx0KysqZGVzdF9vZnM7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdFxcdFxcdC8qIENvbnRpbnVlIHdpdGggdGhlIG5leHQgdG9rZW4uICovXFxuIDM2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzY5OlxcdFxcdFxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0XFx0XFx0LypcXG4gMzcyOlxcdFxcdFxcdCAqIFdlIGhhdmUgYSBwaHJhc2UgdG9rZW4uIE1ha2Ugc3VyZSBpdCBpcyBub3QgdGhlIGZpcnN0IHRhZyBpblxcbiAzNzM6XFx0XFx0XFx0ICogdGhlIHNiIGFzIHRoaXMgaXMgaWxsZWdhbCBhbmQgd291bGQgY29uZnVzZSB0aGUgY29kZSBiZWxvdy5cXG4gMzc0OlxcdFxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0XFx0aWYgKGRwX2FkZHIgPT0gZHBfc2Jfc3RhcnQpXFxuIDM3NjpcXHRcXHRcXHRcXHRnb3RvIHJldHVybl9vdmVyZmxvdztcXG4gMzc3OlxcdFxcbiAzNzg6XFx0XFx0XFx0LypcXG4gMzc5OlxcdFxcdFxcdCAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdvIGJhY2sgKHApIGFuZCB0aGUgbnVtYmVyXFxuIDM4MDpcXHRcXHRcXHQgKiBvZiBieXRlcyB0byBjb3B5IChsKS4gV2UgdXNlIGFuIG9wdGltaXplZCBhbGdvcml0aG0gaW4gd2hpY2hcXG4gMzgxOlxcdFxcdFxcdCAqIHdlIGZpcnN0IGNhbGN1bGF0ZSBsb2cyKGN1cnJlbnQgZGVzdGluYXRpb24gcG9zaXRpb24gaW4gc2IpLFxcbiAzODI6XFx0XFx0XFx0ICogd2hpY2ggYWxsb3dzIGRldGVybWluYXRpb24gb2YgbCBhbmQgcCBpbiBPKDEpIHJhdGhlciB0aGFuXFxuIDM4MzpcXHRcXHRcXHQgKiBPKG4pLiBXZSBqdXN0IG5lZWQgYW4gYXJjaC1vcHRpbWl6ZWQgbG9nMigpIGZ1bmN0aW9uIG5vdy5cXG4gMzg0OlxcdFxcdFxcdCAqL1xcbiAzODU6XFx0XFx0XFx0bGcgPSAwO1xcbiAzODY6XFx0XFx0XFx0Zm9yIChpID0gKmRlc3Rfb2ZzIC0gZG9fc2Jfc3RhcnQgLSAxOyBpIFxcdTAwM2U9IDB4MTA7IGkgXFx1MDAzZVxcdTAwM2U9IDEpXFxuIDM4NzpcXHRcXHRcXHRcXHRsZysrO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRcXHQvKiBHZXQgdGhlIHBocmFzZSB0b2tlbiBpbnRvIGkuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjA3LjIwNTg3NzkxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUyNjM3MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFdyaXRlKipcblxuT2theSwgc28gdGhlIG9sZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBgZHBfYWRkcmAgcmVhY2hlcyBgZHBfc2JfZW5kYCwgKnNob3VsZG4ndCogaGF2ZSBicm9rZW4gdGhlIHdheSBpdCdzIHNldCB1cC4uLiB3aGljaCByYWlzZXMgYSByZWQgZmxhZy4gVGhlIHN1YnNlcXVlbnQgY2hlY2ssIGAodGFnIFx1MDAyNiBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOYCwgbG9va3MgbGlrZSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQncyB0cnVlLCB3ZSBoYXZlIGEgd3JpdGUgb3BlcmF0aW9uOiBgKmRwX2FkZHIrKyA9ICpjYisrO2AuICBUaGF0IGxvb2tzIGxpa2UgYW4gaW1tZWRpYXRlIG91dC1vZi1ib3VuZHMgd3JpdGUgc2luY2UgYGRwX2FkZHJgIGlzIGFscmVhZHkgYXQgdGhlIGVuZC4gIEV2ZW4gaWYgdGhhdCBjb25kaXRpb24gaXMgKmZhbHNlKiwgd2UncmUgZGVhbGluZyB3aXRoIGEgcGhyYXNlIHRva2VuLCB3aGljaCBhbHNvIGludm9sdmVzIHdyaXRlcyB0byBgZHBfYWRkcmAuIFNvIGFnYWluLCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLlxuXG5UaGUgZ29vZCBuZXdzIGlzLCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSAqc2hvdWxkKiBiZSBjYXRjaGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHdyaXRlcy4gIExldCBtZSB0aGluay4uLiBpcyB0aGVyZSBhIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNvbnNpZGVyYXRpb24/IE5vLCBpdCdzIGEgZGVjb21wcmVzc2lvbiByb3V0aW5lLCBpdCdzICp3cml0aW5nKiB0byBhIGRlc3RpbmF0aW9uIGJ1ZmZlci4gSWYgaXQncyB3cml0aW5nIG91dCBvZiBib3VuZHMsIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIElmIGl0IHJlYWRzIG91dCBvZiBib3VuZHMgZnJvbSBgY2JgLCB0aGF0J3MgS0FTQU4ncyBwcm9ibGVtIHRvby4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdGhlIHBhdGNoICpkb2VzKiBmaXggYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkLCBidXQgdGhlIGZ1bmRhbWVudGFsIHByb2JsZW0gaXMgYW4gZXhpc3Rpbmcgb3V0LW9mLWJvdW5kcyBpc3N1ZS4gU2luY2UgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgcmVhbGx5IEtBU0FOIHRoYXQgbWF0dGVycyBoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbG9naWMgZGVhbGluZyB3aXRoIHBocmFzZSB0b2tlbnMgdG8gYmUgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMToxMi4yNTg1MjA2NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvY29tcHJlc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0cHQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWNiKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0XFx0LypcXG4gMzkzOlxcdFxcdFxcdCAqIENhbGN1bGF0ZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpblxcbiAzOTQ6XFx0XFx0XFx0ICogdGhlIGRlc3RpbmF0aW9uIHVzaW5nIHRoZSBmYWN0IHRoYXQgcCA9IChwdCBcXHUwMDNlXFx1MDAzZSAoMTIgLSBsZykpICsgMVxcbiAzOTU6XFx0XFx0XFx0ICogYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyB0b28gZmFyIGJhY2suXFxuIDM5NjpcXHRcXHRcXHQgKi9cXG4gMzk3OlxcdFxcdFxcdGRwX2JhY2tfYWRkciA9IGRwX2FkZHIgLSAocHQgXFx1MDAzZVxcdTAwM2UgKDEyIC0gbGcpKSAtIDE7XFxuIDM5ODpcXHRcXHRcXHRpZiAoZHBfYmFja19hZGRyIFxcdTAwM2MgZHBfc2Jfc3RhcnQpXFxuIDM5OTpcXHRcXHRcXHRcXHRnb3RvIHJldHVybl9vdmVyZmxvdztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0LyogTm93IGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlLiAqL1xcbiA0MDI6XFx0XFx0XFx0bGVuZ3RoID0gKHB0IFxcdTAwMjYgKDB4ZmZmIFxcdTAwM2VcXHUwMDNlIGxnKSkgKyAzO1xcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXHRcXHQvKiBBZHZhbmNlIGRlc3RpbmF0aW9uIHBvc2l0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgaW4gcmFuZ2UuICovXFxuIDQwNTpcXHRcXHRcXHQqZGVzdF9vZnMgKz0gbGVuZ3RoO1xcbiA0MDY6XFx0XFx0XFx0aWYgKCpkZXN0X29mcyBcXHUwMDNlIGRvX3NiX2VuZClcXG4gNDA3OlxcdFxcdFxcdFxcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHQvKiBUaGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBieXRlcy4gKi9cXG4gNDEwOlxcdFxcdFxcdG1heF9ub25fb3ZlcmxhcCA9IGRwX2FkZHIgLSBkcF9iYWNrX2FkZHI7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdFxcdGlmIChsZW5ndGggXFx1MDAzYz0gbWF4X25vbl9vdmVybGFwKSB7XFxuIDQxMzpcXHRcXHRcXHRcXHQvKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2Vzbid0IG92ZXJsYXAsIGp1c3QgY29weSBpdC4gKi9cXG4gNDE0OlxcdFxcdFxcdFxcdG1lbWNweShkcF9hZGRyLCBkcF9iYWNrX2FkZHIsIGxlbmd0aCk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdFxcdFxcdC8qIEFkdmFuY2UgZGVzdGluYXRpb24gcG9pbnRlci4gKi9cXG4gNDE3OlxcdFxcdFxcdFxcdGRwX2FkZHIgKz0gbGVuZ3RoO1xcbiA0MTg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDE5OlxcdFxcdFxcdFxcdC8qXFxuIDQyMDpcXHRcXHRcXHRcXHQgKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2VzIG92ZXJsYXAsIGNvcHkgbm9uLW92ZXJsYXBwaW5nXFxuIDQyMTpcXHRcXHRcXHRcXHQgKiBwYXJ0IGFuZCB0aGVuIGRvIGEgc2xvdyBieXRlIGJ5IGJ5dGUgY29weSBmb3IgdGhlXFxuIDQyMjpcXHRcXHRcXHRcXHQgKiBvdmVybGFwcGluZyBwYXJ0LiBBbHNvLCBhZHZhbmNlIHRoZSBkZXN0aW5hdGlvblxcbiA0MjM6XFx0XFx0XFx0XFx0ICogcG9pbnRlci5cXG4gNDI0OlxcdFxcdFxcdFxcdCAqL1xcbiA0MjU6XFx0XFx0XFx0XFx0bWVtY3B5KGRwX2FkZHIsIGRwX2JhY2tfYWRkciwgbWF4X25vbl9vdmVybGFwKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGRwX2FkZHIgKz0gbWF4X25vbl9vdmVybGFwO1xcbiA0Mjc6XFx0XFx0XFx0XFx0ZHBfYmFja19hZGRyICs9IG1heF9ub25fb3ZlcmxhcDtcXG4gNDI4OlxcdFxcdFxcdFxcdGxlbmd0aCAtPSBtYXhfbm9uX292ZXJsYXA7XFxuIDQyOTpcXHRcXHRcXHRcXHR3aGlsZSAobGVuZ3RoLS0pXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHQqZHBfYWRkcisrID0gKmRwX2JhY2tfYWRkcisrO1xcbiA0MzE6XFx0XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRcXHQvKiBBZHZhbmNlIHNvdXJjZSBwb3NpdGlvbiBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCB0b2tlbi4gKi9cXG4gNDM0OlxcdFxcdFxcdGNiICs9IDI7XFxuIDQzNTpcXHRcXHR9XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdC8qIE5vIHRva2VucyBsZWZ0IGluIHRoZSBjdXJyZW50IHRhZy4gQ29udGludWUgd2l0aCB0aGUgbmV4dCB0YWcuICovXFxuIDQzODpcXHRcXHRnb3RvIGRvX25leHRfdGFnO1xcbiA0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjEyLjI1ODcwMjI0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM1OTcxMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipCdWZmZXIgT3ZlcmZsb3cgRGV0ZWN0ZWQqKlxuXG5Pa2F5LCBzbyB0aGUgdG9rZW4gbG9naWMgaGFzIGEgZmxhdzsgaXQncyB3cml0aW5nIHRvIGBkcF9hZGRyYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIGBkcF9hZGRyYCBlbmRzIHVwIGVxdWFsaW5nIGBkcF9zYl9lbmRgLiBUaGF0J3MgYSB0ZXh0Ym9vayBidWZmZXIgb3ZlcmZsb3csIG5vIHF1ZXN0aW9uLiBUaGUgcG90ZW50aWFsIGZvciBhIEtBU0FOIGRldGVjdGlvbiBpcyBoaWdoLiBIb3dldmVyLCBzaW5jZSB0aGUgaXNzdWUgaXMgYSB3cml0ZSAqYWZ0ZXIqIHRoZSBidWZmZXIsIGFuZCBub3QgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIEknbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDYsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMToxNi41OTQ2ODE5MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIHRoZSBOVEZTIGRlY29tcHJlc3Npb24gcm91dGluZSAoYG50ZnNfZGVjb21wcmVzc2ApLiBUaGUgb2xkIGNvZGUgYWxsb3dlZCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciAoYGRwX2FkZHJgKSB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGBkcF9zYl9lbmRgKSBhbmQgY29udGludWUgcHJvY2Vzc2luZyB0b2tlbnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChvciByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIpLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBoZXJlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp7v2f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 06:40:52 +0000 UTC FinishedAt: 2026-08-20 07:01:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NTFS_FS" ], "series_id": "c5104873-d4d2-4a73-bed0-5ee28dcc936a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ntfs_read_compressed_block" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNTcxZjk5MzMyMThmYjNjODNkZjFmODdjNDRlYjU2ZjJlY2I0OGFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMDc6MDA6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSxcbiBcdFx0dTggKmRwX2JhY2tfYWRkcjtcbiBcbiBcdFx0LyogQ2hlY2sgaWYgd2UgYXJlIGRvbmUgLyBzdGlsbCBpbiByYW5nZS4gKi9cbi1cdFx0aWYgKGNiIFx1MDAzZT0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgXHUwMDNlIGRwX3NiX2VuZClcbiYjNDM7XHRcdGlmIChjYiBcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFx1MDAzZT0gZHBfc2JfZW5kKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBEZXRlcm1pbmUgdG9rZW4gdHlwZSBhbmQgcGFyc2UgYXBwcm9wcmlhdGVseS4qL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBudGZzX2RlY29tcHJlc3NgIGJ5IGNoYW5naW5nIGBkcF9hZGRyIFx1MDAzZSBkcF9zYl9lbmRgIHRvIGBkcF9hZGRyIFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1NzFmOTkzMzIxOGZiM2M4M2RmMWY4N2M0NGViNTZmMmVjYjQ4YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvY29tcHJlc3MuYyBiL2ZzL250ZnMvY29tcHJlc3MuYwppbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NAotLS0gYS9mcy9udGZzL2NvbXByZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jCkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSwKIAkJdTggKmRwX2JhY2tfYWRkcjsKIAogCQkvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqLwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQogCQkJYnJlYWs7CiAKIAkJLyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWNvbXByZXNzaW9uIEJ1ZyBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBhIG1pbm9yLCBzZWVtaW5nbHkgaW5ub2N1b3VzIGNoYW5nZSB0byBgZnMvbnRmcy9jb21wcmVzcy5jYC4gSXQmIzM5O3MgYSBzaW5nbGUtbGluZSBmaXggd2l0aGluIHRoZSBgbnRmc19kZWNvbXByZXNzYCBmdW5jdGlvbjogc3dpdGNoaW5nIGZyb20gYSBzdHJpY3QgZ3JlYXRlci10aGFuIGNvbXBhcmlzb24gKGAmZ3Q7YCkgdG8gYSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gY29tcGFyaXNvbiAoYCZndDs9YCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyAmIzM0O3BvdGVudGlhbCBidWcgZml4JiMzNDsgaW4gdGhlIE5URlMgZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgZ29vZC4gQnV0Li4uIHRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGlzIGRvZXMgYW5kIHdoYXQgdGhlIGltcGFjdCBpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgZnMvbnRmcy9jb21wcmVzcy5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC4KClNpbmNlIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JyZWN0aW9uLCBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGFuZCwgZ2l2ZW4gdGhhdCBOVEZTIGlzIHVzZXItc3BhY2UgcmVhY2hhYmxlIHRocm91Z2ggbW91bnRpbmcsIHRoaXMgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYSB0aG91Z2h0OiB3ZSBzaG91bGQgYWJzb2x1dGVseSBmdXp6IHRoaXMuIERlY29tcHJlc3Npb24gcm91dGluZXMgYXJlIG5vdG9yaW91cyBzb3VyY2VzIG9mIHZ1bG5lcmFiaWxpdGllcy4gQSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciwgZXNwZWNpYWxseSBpbiBhIGNvbXByZXNzZWQgZmlsZXN5c3RlbSwgY291bGQgYmUgZXhwbG9pdGVkLiBUaGlzIGNvdWxkIGJlIGEgc29saWQgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgTlRGUyBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEl0IHNob3VsZCBiZSBgQ09ORklHX05URlNfRlNgIHJpZ2h0PyBVbmxlc3PigKYgdGhlcmUmIzM5O3MgdGhhdCBuZXdlciBgQ09ORklHX05URlMzX0ZTYC4gQnV0IHNpbmNlIHRoaXMgcGF0Y2ggaXMgaW4gYGZzL250ZnNgLCBpdCYjMzk7cyB0aGUgKm9sZCogZHJpdmVyLiBUaW1lIHRvIGNoZWNrIGBmcy9udGZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlRGU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXG5mcy9udGZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xuLS1cbmZzL250ZnMvS2NvbmZpZy0zNC1cbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcbmZzL250ZnMvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7TlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIHRoZSBOVEZTIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYE5URlNfRlNgIHJpZ2h0IG5vdyDigJMgdGhhdCYjMzk7cyB0aGUgY29uZmlndXJhdGlvbiBJIG5lZWQgdG8gZXhhbWluZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYG50ZnNfZGVjb21wcmVzc2AgaXMgYSBzdGF0aWMgY29tcG9uZW50LiBVbmRlcnN0YW5kaW5nIGl0cyBuYXR1cmUg4oCTIHdoZXRoZXIgaXQmIzM5O3Mgc3RhdGljYWxseSBkZWZpbmVkIG9yIG5vdCDigJMgaXMgY3J1Y2lhbCBmb3IgaG93IEkmIzM5O2xsIGFwcHJvYWNoIHRoZSBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGlzIGluZm9ybXMgaG93IEkmIzM5O2QgYXBwcm9hY2ggdHJvdWJsZXNob290aW5nIG9yIG9wdGltaXphdGlvbi4gSXQgd2lsbCBkaWN0YXRlIGhvdyBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZWhhdmUgYW5kIGl0cyBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfZGVjb21wcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL250ZnMvY29tcHJlc3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9udGZzL2NvbXByZXNzLmM9MTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfYm91bmRzX2NvbXByZXNzZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtMTMzLS8qXG5mcy9udGZzL2NvbXByZXNzLmM6MTM0OiAqIG50ZnNfZGVjb21wcmVzcyAtIGRlY29tcHJlc3MgYSBjb21wcmVzc2lvbiBibG9jayBpbnRvIGFuIGFycmF5IG9mIHBhZ2VzXG5mcy9udGZzL2NvbXByZXNzLmMtMTM1LSAqIEBkZXN0X3BhZ2VzOlx0XHRkZXN0aW5hdGlvbiBhcnJheSBvZiBwYWdlc1xuLS1cbmZzL250ZnMvY29tcHJlc3MuYy0xNDctICpcbmZzL250ZnMvY29tcHJlc3MuYzoxNDg6ICogVGhlIGNhbGxlciBtdXN0IGhhdmUgZGlzYWJsZWQgcHJlZW1wdGlvbi4gbnRmc19kZWNvbXByZXNzKCkgcmVlbmFibGVzIGl0IHdoZW5cbmZzL250ZnMvY29tcHJlc3MuYy0xNDktICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgZmluaXNoZWQuXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jLTE3MC0gKi9cbmZzL250ZnMvY29tcHJlc3MuYzoxNzE6c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuZnMvbnRmcy9jb21wcmVzcy5jLTE3Mi1cdFx0aW50ICpkZXN0X2luZGV4LCBpbnQgKmRlc3Rfb2ZzLCBjb25zdCBpbnQgZGVzdF9tYXhfaW5kZXgsXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jPTQ2Mz1pbnQgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNzg5LVx0XHRudGZzX2RlYnVnKFwmIzM0O0ZvdW5kIGNvbXByZXNzZWQgY29tcHJlc3Npb24gYmxvY2suXCYjMzQ7KTtcbmZzL250ZnMvY29tcHJlc3MuYzo3OTA6XHRcdGVyciA9IG50ZnNfZGVjb21wcmVzcyhwYWdlcywgY29tcGxldGVkX3BhZ2VzLCBcdTAwMjZjdXJfcGFnZSxcbmZzL250ZnMvY29tcHJlc3MuYy03OTEtXHRcdFx0XHRcdTAwMjZjdXJfb2ZzLCBjYl9tYXhfcGFnZSwgY2JfbWF4X29mcywgeHBhZ2UsXG4tLVxuZnMvbnRmcy9jb21wcmVzcy5jLTc5NS1cdFx0ICogV2UgY2FuIHNsZWVwIGZyb20gbm93IG9uLCBsb2NrIGFscmVhZHkgZHJvcHBlZCBieVxuZnMvbnRmcy9jb21wcmVzcy5jOjc5NjpcdFx0ICogbnRmc19kZWNvbXByZXNzKCkuXG5mcy9udGZzL2NvbXByZXNzLmMtNzk3LVx0XHQgKi9cbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNzk5LVx0XHRcdG50ZnNfZXJyb3Iodm9sLVx1MDAzZXNiLFxuZnMvbnRmcy9jb21wcmVzcy5jOjgwMDpcdFx0XHRcdFwmIzM0O250ZnNfZGVjb21wcmVzcygpIGZhaWxlZCBpbiBpbm9kZSAweCVsbHggd2l0aCBlcnJvciBjb2RlICVpLiBTa2lwcGluZyB0aGlzIGNvbXByZXNzaW9uIGJsb2NrLlwmIzM0OyxcbmZzL250ZnMvY29tcHJlc3MuYy04MDEtXHRcdFx0XHRuaS1cdTAwM2VtZnRfbm8sIC1lcnIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgTlRGUyBDb21wcmVzc2lvbiBJbXBsZW1lbnRhdGlvbioqCgpSaWdodCwgYG50ZnNfZGVjb21wcmVzc2AuLi4gdGhhdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBBbmQgSSByZW1lbWJlciBpdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYC4gU28sIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYWN0dWFsIGRlY29tcHJlc3Npb24gcHJvY2VzcyBpcyBpbml0aWF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhhdCogZnVuY3Rpb24gb3JjaGVzdHJhdGVzIHRoZSBjYWxsIHRvIGBudGZzX2RlY29tcHJlc3NgLCBhbmQgd2hhdCBjb250ZXh0IGl0IHByb3ZpZGVzLiBXaGF0IGFyZSB0aGUgYXJndW1lbnRzIHBhc3NlZD8gV2hhdCBwcmUtcHJvY2Vzc2luZyBoYXBwZW5zPyBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgdGhlIGNvbnRyb2wgZmxvdyB0byB0cnVseSB1bmRlcnN0YW5kIGhvdyBOVEZTIGhhbmRsZXMgY29tcHJlc3NlZCBkYXRhIGJsb2Nrcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O250ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbnRmcy9hb3BzLmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyBudGZzX2lvbWFwX2Jpb19yZWFkX29wcyA9IHtcbi0tXG5mcy9udGZzL2FvcHMuYy02MS0gKiAtIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm9uLXJlc2lkZW50IGFuZCBjb21wcmVzc2VkLCB0aGUgcmVhZCBvcGVyYXRpb24gaXNcbmZzL250ZnMvYW9wcy5jOjYyOiAqICAgZGVsZWdhdGVkIHRvIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuXG5mcy9udGZzL2FvcHMuYy02My0gKiAtIEZvciBub3JtYWwgcmVzaWRlbnQgb3Igbm9uLXJlc2lkZW50IGF0dHJpYnV0ZSwgaXQgdXRpbGl6ZXMgdGhlIGdlbmVyaWNcbi0tXG5mcy9udGZzL2FvcHMuYz02OD1zdGF0aWMgaW50IG50ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9udGZzL2FvcHMuYy05NC1cdFx0aWYgKE5Jbm9Ob25SZXNpZGVudChuaSkgXHUwMDI2XHUwMDI2IE5Jbm9Db21wcmVzc2VkKG5pKSlcbmZzL250ZnMvYW9wcy5jOjk1Olx0XHRcdHJldHVybiBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhmb2xpbyk7XG5mcy9udGZzL2FvcHMuYy05Ni1cdH1cbi0tXG5mcy9udGZzL2NvbXByZXNzLmM9MTcxPXN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSxcbi0tXG5mcy9udGZzL2NvbXByZXNzLmMtNDQ1LS8qXG5mcy9udGZzL2NvbXByZXNzLmM6NDQ2OiAqIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrIC0gcmVhZCBhIGNvbXByZXNzZWQgYmxvY2sgaW50byB0aGUgcGFnZSBjYWNoZVxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0Ny0gKiBAZm9saW86XHRsb2NrZWQgZm9saW8gaW4gdGhlIGNvbXByZXNzaW9uIGJsb2NrKHMpIHdlIG5lZWQgdG8gcmVhZFxuLS1cbmZzL250ZnMvY29tcHJlc3MuYy00NjItICovXG5mcy9udGZzL2NvbXByZXNzLmM6NDYzOmludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuZnMvbnRmcy9jb21wcmVzcy5jLTQ2NC17XG4tLVxuZnMvbnRmcy9udGZzLmg9MTk2PXN0YXRpYyBpbmxpbmUgc3RydWN0IG50ZnNfdm9sdW1lICpOVEZTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvbnRmcy9udGZzLmgtMjAzLS8qIEZyb20gZnMvbnRmcy9jb21wcmVzcy5jICovXG5mcy9udGZzL250ZnMuaDoyMDQ6aW50IG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuZnMvbnRmcy9udGZzLmgtMjA1LWludCBhbGxvY2F0ZV9jb21wcmVzc2lvbl9idWZmZXJzKHZvaWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqCgpPa2F5LCBzbyBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgIGlzbiYjMzk7dCBzdGF0aWMsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9mb2xpb2AuIFRoYXQgbWFrZXMgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gaW50byBOVEZTIGNvbXByZXNzaW9uIOKAkyBpdCYjMzk7cyBtb3JlIGZvY3VzZWQgdGhhbiBqdXN0IGBudGZzX3JlYWRfZm9saW9gLCB0aG91Z2ggdGhhdCYjMzk7cyBhbHNvIGEgcmVsZXZhbnQgZnVuY3Rpb24gdG8gY29uc2lkZXIuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIEkgYWxyZWFkeSBoYXZlIGBOVEZTX0ZTYCwgYnV0IGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWdzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBjb21wcmVzc2lvbiBhc3BlY3Qgc3BlY2lmaWNhbGx5PyBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBmcy9udGZzL0tjb25maWdgIGZpbGUgb25lIG1vcmUgdGltZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVEZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbnRmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbnRmcy9LY29uZmlnOjI6Y29uZmlnIE5URlNfRlNcbmZzL250ZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TlRGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbnRmcy9LY29uZmlnPTEzPWNvbmZpZyBOVEZTX0RFQlVHXG4tLVxuZnMvbnRmcy9LY29uZmlnLTM0LVxuZnMvbnRmcy9LY29uZmlnOjM1OmNvbmZpZyBOVEZTX0ZTX1BPU0lYX0FDTFxuZnMvbnRmcy9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtOVEZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5URlMgQ29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIHBhdGNoIGlzIGxvY2F0ZWQgaW4gYGZzL250ZnMvY29tcHJlc3MuY2AuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoaXMgZmlsZSwgYW5kIHRoZXJlZm9yZSB0aGlzIGZ1bmN0aW9uYWxpdHksIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgY29tcHJlc3Npb24gc3VwcG9ydCBpcyBlbmFibGVkIGJ5IGEgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIGl0JiMzOTtzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIOKAkyBpdCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hldGhlciBpdCYjMzk7cyBhIGZlYXR1cmUgdGhhdCYjMzk7cyBnZW5lcmFsbHkgYXZhaWxhYmxlIG9yIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXByZXNzLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9udGZzL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL250ZnMvTWFrZWZpbGU9NT1udGZzLXkgOj0gYW9wcy5vIGF0dHJpYi5vIGNvbGxhdGUubyBkaXIubyBmaWxlLm8gaW5kZXgubyBpbm9kZS5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTYtXHQgIG1mdC5vIG1zdC5vIG5hbWVpLm8gcnVubGlzdC5vIHN1cGVyLm8gdW5pc3RyLm8gYXR0cmxpc3QubyBlYS5vIFxcXG5mcy9udGZzL01ha2VmaWxlOjc6XHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXG5mcy9udGZzL01ha2VmaWxlLTgtXHQgIGlvbWFwLm8gZGVidWcubyBzeXNjdGwubyBvYmplY3RfaWQubyBiZGV2LWlvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEzNQoJCQkJCQkJb3V0cHV0OiAxMTUKCQkJCQkJCXRob3VnaHRzOiAyOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOVEZTIERlY29tcHJlc3Npb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBpdCYjMzk7cyAqYWx3YXlzKiBidWlsdCBpbiB3aGVuIGBOVEZTX0ZTYCBpcyBlbmFibGVkLCBtZWFuaW5nIHRoYXQmIzM5O3MgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gSSBuZWVkIHRvIHdvcnJ5IGFib3V0LiBFYXN5IGVub3VnaC4KCk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2Agc3ltYm9sLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBhIGNvbXBhcmlzb24gZnJvbSBncmVhdGVyLXRoYW4gdG8gZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBkZWNvbXByZXNzaW9uIHBhdGggaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgaXMgaW5kZWVkIHRoZSBjb3JyZWN0IHN5bWJvbCB0byBob25lIGluIG9uLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUuLi4gWXVwLCBpdCYjMzk7cyBleHBvcnRlZCBpbiBgZnMvbnRmcy9udGZzLmhgIGFuZCBjYWxsZWQgZnJvbSBgZnMvbnRmcy9hb3BzLmNgLiBTZWVtcyBsaWtlIGEgdmVyeSBzZW5zaWJsZSBzdGFydGluZyBwb2ludC4KCkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBUaGUgY29uZmlybWF0aW9uIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCB3aGljaCBpcyBnb29kLiBXZSYjMzk7cmUgemVyb2luZyBpbiBvbiBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgIGFzIG91ciBmb2N1cyBzeW1ib2wsIGFuZCB3ZSYjMzk7bGwgZW5zdXJlIHRoYXQgYE5URlNfRlNgIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBwcm9jZXNzLiBUaGUgcHJvdmlkZWQgcmVhc29uaW5nIGNvbmNpc2VseSBzdGF0ZXMgdGhlIG91dC1vZi1ib3VuZHMgcmVhZCBmaXggd2l0aGluIGBudGZzX2RlY29tcHJlc3NgIGFuZCBpdHMgZXhwb3N1cmUgdG8gdXNlciBzcGFjZSB2aWEgbWFsaWNpb3VzIE5URlMgaW1hZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlRGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O250ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05URlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG50ZnNfZGVjb21wcmVzc2AgYnkgY2hhbmdpbmcgYGRwX2FkZHIgXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXHUwMDNlPSBkcF9zYl9lbmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1vdW50aW5nIGEgY3JhZnRlZCBOVEZTIGltYWdlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY1NzFmOTkzMzIxOGZiM2M4M2RmMWY4N2M0NGViNTZmMmVjYjQ4YWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvY29tcHJlc3MuYyBiL2ZzL250ZnMvY29tcHJlc3MuYwppbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NAotLS0gYS9mcy9udGZzL2NvbXByZXNzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbnRmcy9jb21wcmVzcy5jCkBAIC0zNTIsNyAmIzQzOzM1Miw3IEBAIHN0YXRpYyBpbnQgbnRmc19kZWNvbXByZXNzKHN0cnVjdCBwYWdlICpkZXN0X3BhZ2VzW10sIGludCBjb21wbGV0ZWRfcGFnZXNbXSwKIAkJdTggKmRwX2JhY2tfYWRkcjsKIAogCQkvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqLwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQogCQkJYnJlYWs7CiAKIAkJLyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTlRGUyBEZWNvbXByZXNzaW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBqdXN0IGEgbWlub3IgYWRqdXN0bWVudCB0byBhIGJvdW5kcyBjaGVjayB3aXRoaW4gdGhlIGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uOgoKYGBgYwotCQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0OyBkcF9zYl9lbmQpCiYjNDM7CQlpZiAoY2IgJmd0Oz0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgJmd0Oz0gZHBfc2JfZW5kKQpgYGAKCkluaXRpYWxseSwgaXQgc2VlbXMgbGlrZSBhIHNpbXBsZSBmaXggdG8gcHJldmVudCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcywgYGRwX2FkZHJgLCBmcm9tIGV4Y2VlZGluZyBpdHMgdmFsaWQgYm91bmRzIChgZHBfc2JfZW5kYCkuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGl0JiMzOTtzIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgJmd0O2AgdG8gYCZndDs9YC4gVGhhdCBtZWFucyB0aGUgb3JpZ2luYWwgY29kZSBtaWdodCBoYXZlIGFsbG93ZWQgYGRwX2FkZHJgIHRvICplcXVhbCogYGRwX3NiX2VuZGAgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIGVycm9yLgoKSWYgYGRwX2FkZHJgICppcyogZXF1YWwgdG8gYGRwX3NiX2VuZGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcHJvY2VlZGVkLiBUaGVuIGl0IG1pZ2h0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciAoYGNiYCkgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYXQgYGRwX2FkZHJgLiBJZiBgZHBfYWRkcmAgaXMgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3cml0aW5nIHRvIGl0IHdvdWxkIGJlIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyB3cml0ZS4gVW5sZXNzLCBpdCBpcyBhbHNvIHJlYWRpbmcgZnJvbSBgZHBfYWRkcmAuCgpJIHNob3VsZCBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvbnRmcy9jb21wcmVzcy5jYCwgYXJvdW5kIGxpbmUgMzUyLCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBpbXBhY3RzIHRoZSBkZWNvbXByZXNzaW9uIGxvZ2ljLiBOZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgcHJlY2lzZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL250ZnMvY29tcHJlc3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzQwOlx0XG4gMzQxOlx0XHQvKiBDaGVjayB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuICovXG4gMzQyOlx0XHRpZiAoY2IgXHUwMDNlIGNiX3NiX2VuZCB8fCBkcF9hZGRyIFx1MDAzZSBkcF9zYl9lbmQpXG4gMzQzOlx0XHRcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xuIDM0NDpcdFxuIDM0NTpcdFx0LyogR2V0IHRoZSBuZXh0IHRhZyBhbmQgYWR2YW5jZSB0byBmaXJzdCB0b2tlbi4gKi9cbiAzNDY6XHRcdHRhZyA9ICpjYiYjNDM7JiM0Mzs7XG4gMzQ3Olx0XG4gMzQ4Olx0XHQvKiBQYXJzZSB0aGUgZWlnaHQgdG9rZW5zIGRlc2NyaWJlZCBieSB0aGUgdGFnLiAqL1xuIDM0OTpcdFx0Zm9yICh0b2tlbiA9IDA7IHRva2VuIFx1MDAzYyA4OyB0b2tlbiYjNDM7JiM0MzssIHRhZyBcdTAwM2VcdTAwM2U9IDEpIHtcbiAzNTA6XHRcdFx0cmVnaXN0ZXIgdTE2IGk7XG4gMzUxOlx0XHRcdHUxNiBsZywgcHQsIGxlbmd0aCwgbWF4X25vbl9vdmVybGFwO1xuIDM1MjpcdFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIDM1MzpcdFxuIDM1NDpcdFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuIDM1NTpcdFx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiAzNTY6XHRcdFx0XHRicmVhaztcbiAzNTc6XHRcbiAzNTg6XHRcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiAzNTk6XHRcdFx0aWYgKCh0YWcgXHUwMDI2IE5URlNfVE9LRU5fTUFTSykgPT0gTlRGU19TWU1CT0xfVE9LRU4pIHtcbiAzNjA6XHRcdFx0XHQvKlxuIDM2MTpcdFx0XHRcdCAqIFdlIGhhdmUgYSBzeW1ib2wgdG9rZW4sIGNvcHkgdGhlIHN5bWJvbCBhY3Jvc3MsIGFuZFxuIDM2MjpcdFx0XHRcdCAqIGFkdmFuY2UgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcG9zaXRpb25zLlxuIDM2MzpcdFx0XHRcdCAqL1xuIDM2NDpcdFx0XHRcdCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpjYiYjNDM7JiM0Mzs7XG4gMzY1Olx0XHRcdFx0JiM0MzsmIzQzOypkZXN0X29mcztcbiAzNjY6XHRcbiAzNjc6XHRcdFx0XHQvKiBDb250aW51ZSB3aXRoIHRoZSBuZXh0IHRva2VuLiAqL1xuIDM2ODpcdFx0XHRcdGNvbnRpbnVlO1xuIDM2OTpcdFx0XHR9XG4gMzcwOlx0XG4gMzcxOlx0XHRcdC8qXG4gMzcyOlx0XHRcdCAqIFdlIGhhdmUgYSBwaHJhc2UgdG9rZW4uIE1ha2Ugc3VyZSBpdCBpcyBub3QgdGhlIGZpcnN0IHRhZyBpblxuIDM3MzpcdFx0XHQgKiB0aGUgc2IgYXMgdGhpcyBpcyBpbGxlZ2FsIGFuZCB3b3VsZCBjb25mdXNlIHRoZSBjb2RlIGJlbG93LlxuIDM3NDpcdFx0XHQgKi9cbiAzNzU6XHRcdFx0aWYgKGRwX2FkZHIgPT0gZHBfc2Jfc3RhcnQpXG4gMzc2Olx0XHRcdFx0Z290byByZXR1cm5fb3ZlcmZsb3c7XG4gMzc3Olx0XG4gMzc4Olx0XHRcdC8qXG4gMzc5Olx0XHRcdCAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdvIGJhY2sgKHApIGFuZCB0aGUgbnVtYmVyXG4gMzgwOlx0XHRcdCAqIG9mIGJ5dGVzIHRvIGNvcHkgKGwpLiBXZSB1c2UgYW4gb3B0aW1pemVkIGFsZ29yaXRobSBpbiB3aGljaFxuIDM4MTpcdFx0XHQgKiB3ZSBmaXJzdCBjYWxjdWxhdGUgbG9nMihjdXJyZW50IGRlc3RpbmF0aW9uIHBvc2l0aW9uIGluIHNiKSxcbiAzODI6XHRcdFx0ICogd2hpY2ggYWxsb3dzIGRldGVybWluYXRpb24gb2YgbCBhbmQgcCBpbiBPKDEpIHJhdGhlciB0aGFuXG4gMzgzOlx0XHRcdCAqIE8obikuIFdlIGp1c3QgbmVlZCBhbiBhcmNoLW9wdGltaXplZCBsb2cyKCkgZnVuY3Rpb24gbm93LlxuIDM4NDpcdFx0XHQgKi9cbiAzODU6XHRcdFx0bGcgPSAwO1xuIDM4NjpcdFx0XHRmb3IgKGkgPSAqZGVzdF9vZnMgLSBkb19zYl9zdGFydCAtIDE7IGkgXHUwMDNlPSAweDEwOyBpIFx1MDAzZVx1MDAzZT0gMSlcbiAzODc6XHRcdFx0XHRsZyYjNDM7JiM0Mzs7XG4gMzg4Olx0XG4gMzg5Olx0XHRcdC8qIEdldCB0aGUgcGhyYXNlIHRva2VuIGludG8gaS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgT3V0LW9mLUJvdW5kcyBXcml0ZSoqCgpPa2F5LCBzbyB0aGUgb2xkIGNvZGUsIHNwZWNpZmljYWxseSB3aGVuIGBkcF9hZGRyYCByZWFjaGVzIGBkcF9zYl9lbmRgLCAqc2hvdWxkbiYjMzk7dCogaGF2ZSBicm9rZW4gdGhlIHdheSBpdCYjMzk7cyBzZXQgdXAuLi4gd2hpY2ggcmFpc2VzIGEgcmVkIGZsYWcuIFRoZSBzdWJzZXF1ZW50IGNoZWNrLCBgKHRhZyAmYW1wOyBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOYCwgbG9va3MgbGlrZSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQmIzM5O3MgdHJ1ZSwgd2UgaGF2ZSBhIHdyaXRlIG9wZXJhdGlvbjogYCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpjYiYjNDM7JiM0Mzs7YC4gIFRoYXQgbG9va3MgbGlrZSBhbiBpbW1lZGlhdGUgb3V0LW9mLWJvdW5kcyB3cml0ZSBzaW5jZSBgZHBfYWRkcmAgaXMgYWxyZWFkeSBhdCB0aGUgZW5kLiAgRXZlbiBpZiB0aGF0IGNvbmRpdGlvbiBpcyAqZmFsc2UqLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGhyYXNlIHRva2VuLCB3aGljaCBhbHNvIGludm9sdmVzIHdyaXRlcyB0byBgZHBfYWRkcmAuIFNvIGFnYWluLCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLgoKVGhlIGdvb2QgbmV3cyBpcywgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgKnNob3VsZCogYmUgY2F0Y2hpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyB3cml0ZXMuICBMZXQgbWUgdGhpbmsuLi4gaXMgdGhlcmUgYSByaXNrIG9mIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgaGVyZSwgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBjb25zaWRlcmF0aW9uPyBObywgaXQmIzM5O3MgYSBkZWNvbXByZXNzaW9uIHJvdXRpbmUsIGl0JiMzOTtzICp3cml0aW5nKiB0byBhIGRlc3RpbmF0aW9uIGJ1ZmZlci4gSWYgaXQmIzM5O3Mgd3JpdGluZyBvdXQgb2YgYm91bmRzLCBLQVNBTiB3aWxsIGNhdGNoIGl0LiBJZiBpdCByZWFkcyBvdXQgb2YgYm91bmRzIGZyb20gYGNiYCwgdGhhdCYjMzk7cyBLQVNBTiYjMzk7cyBwcm9ibGVtIHRvby4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIHRoZSBwYXRjaCAqZG9lcyogZml4IGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCwgYnV0IHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIGFuIGV4aXN0aW5nIG91dC1vZi1ib3VuZHMgaXNzdWUuIFNpbmNlIEtNU0FOIGlzbiYjMzk7dCByZWxldmFudCBoZXJlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgcmVhbGx5IEtBU0FOIHRoYXQgbWF0dGVycyBoZXJlLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggcGhyYXNlIHRva2VucyB0byBiZSBjZXJ0YWluIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbnRmcy9jb21wcmVzcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTA6XHRcdFx0cHQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWNiKTtcbiAzOTE6XHRcbiAzOTI6XHRcdFx0LypcbiAzOTM6XHRcdFx0ICogQ2FsY3VsYXRlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluXG4gMzk0Olx0XHRcdCAqIHRoZSBkZXN0aW5hdGlvbiB1c2luZyB0aGUgZmFjdCB0aGF0IHAgPSAocHQgXHUwMDNlXHUwMDNlICgxMiAtIGxnKSkgJiM0MzsgMVxuIDM5NTpcdFx0XHQgKiBhbmQgbWFrZSBzdXJlIHdlIGRvbiYjMzk7dCBnbyB0b28gZmFyIGJhY2suXG4gMzk2Olx0XHRcdCAqL1xuIDM5NzpcdFx0XHRkcF9iYWNrX2FkZHIgPSBkcF9hZGRyIC0gKHB0IFx1MDAzZVx1MDAzZSAoMTIgLSBsZykpIC0gMTtcbiAzOTg6XHRcdFx0aWYgKGRwX2JhY2tfYWRkciBcdTAwM2MgZHBfc2Jfc3RhcnQpXG4gMzk5Olx0XHRcdFx0Z290byByZXR1cm5fb3ZlcmZsb3c7XG4gNDAwOlx0XG4gNDAxOlx0XHRcdC8qIE5vdyBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZS4gKi9cbiA0MDI6XHRcdFx0bGVuZ3RoID0gKHB0IFx1MDAyNiAoMHhmZmYgXHUwMDNlXHUwMDNlIGxnKSkgJiM0MzsgMztcbiA0MDM6XHRcbiA0MDQ6XHRcdFx0LyogQWR2YW5jZSBkZXN0aW5hdGlvbiBwb3NpdGlvbiBhbmQgdmVyaWZ5IGl0IGlzIGluIHJhbmdlLiAqL1xuIDQwNTpcdFx0XHQqZGVzdF9vZnMgJiM0Mzs9IGxlbmd0aDtcbiA0MDY6XHRcdFx0aWYgKCpkZXN0X29mcyBcdTAwM2UgZG9fc2JfZW5kKVxuIDQwNzpcdFx0XHRcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xuIDQwODpcdFxuIDQwOTpcdFx0XHQvKiBUaGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBieXRlcy4gKi9cbiA0MTA6XHRcdFx0bWF4X25vbl9vdmVybGFwID0gZHBfYWRkciAtIGRwX2JhY2tfYWRkcjtcbiA0MTE6XHRcbiA0MTI6XHRcdFx0aWYgKGxlbmd0aCBcdTAwM2M9IG1heF9ub25fb3ZlcmxhcCkge1xuIDQxMzpcdFx0XHRcdC8qIFRoZSBieXRlIHNlcXVlbmNlIGRvZXNuJiMzOTt0IG92ZXJsYXAsIGp1c3QgY29weSBpdC4gKi9cbiA0MTQ6XHRcdFx0XHRtZW1jcHkoZHBfYWRkciwgZHBfYmFja19hZGRyLCBsZW5ndGgpO1xuIDQxNTpcdFxuIDQxNjpcdFx0XHRcdC8qIEFkdmFuY2UgZGVzdGluYXRpb24gcG9pbnRlci4gKi9cbiA0MTc6XHRcdFx0XHRkcF9hZGRyICYjNDM7PSBsZW5ndGg7XG4gNDE4Olx0XHRcdH0gZWxzZSB7XG4gNDE5Olx0XHRcdFx0LypcbiA0MjA6XHRcdFx0XHQgKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2VzIG92ZXJsYXAsIGNvcHkgbm9uLW92ZXJsYXBwaW5nXG4gNDIxOlx0XHRcdFx0ICogcGFydCBhbmQgdGhlbiBkbyBhIHNsb3cgYnl0ZSBieSBieXRlIGNvcHkgZm9yIHRoZVxuIDQyMjpcdFx0XHRcdCAqIG92ZXJsYXBwaW5nIHBhcnQuIEFsc28sIGFkdmFuY2UgdGhlIGRlc3RpbmF0aW9uXG4gNDIzOlx0XHRcdFx0ICogcG9pbnRlci5cbiA0MjQ6XHRcdFx0XHQgKi9cbiA0MjU6XHRcdFx0XHRtZW1jcHkoZHBfYWRkciwgZHBfYmFja19hZGRyLCBtYXhfbm9uX292ZXJsYXApO1xuIDQyNjpcdFx0XHRcdGRwX2FkZHIgJiM0Mzs9IG1heF9ub25fb3ZlcmxhcDtcbiA0Mjc6XHRcdFx0XHRkcF9iYWNrX2FkZHIgJiM0Mzs9IG1heF9ub25fb3ZlcmxhcDtcbiA0Mjg6XHRcdFx0XHRsZW5ndGggLT0gbWF4X25vbl9vdmVybGFwO1xuIDQyOTpcdFx0XHRcdHdoaWxlIChsZW5ndGgtLSlcbiA0MzA6XHRcdFx0XHRcdCpkcF9hZGRyJiM0MzsmIzQzOyA9ICpkcF9iYWNrX2FkZHImIzQzOyYjNDM7O1xuIDQzMTpcdFx0XHR9XG4gNDMyOlx0XG4gNDMzOlx0XHRcdC8qIEFkdmFuY2Ugc291cmNlIHBvc2l0aW9uIGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHRva2VuLiAqL1xuIDQzNDpcdFx0XHRjYiAmIzQzOz0gMjtcbiA0MzU6XHRcdH1cbiA0MzY6XHRcbiA0Mzc6XHRcdC8qIE5vIHRva2VucyBsZWZ0IGluIHRoZSBjdXJyZW50IHRhZy4gQ29udGludWUgd2l0aCB0aGUgbmV4dCB0YWcuICovXG4gNDM4Olx0XHRnb3RvIGRvX25leHRfdGFnO1xuIDQzOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzQ2CgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkJ1ZmZlciBPdmVyZmxvdyBEZXRlY3RlZCoqCgpPa2F5LCBzbyB0aGUgdG9rZW4gbG9naWMgaGFzIGEgZmxhdzsgaXQmIzM5O3Mgd3JpdGluZyB0byBgZHBfYWRkcmAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyB3cml0ZSBpZiBgZHBfYWRkcmAgZW5kcyB1cCBlcXVhbGluZyBgZHBfc2JfZW5kYC4gVGhhdCYjMzk7cyBhIHRleHRib29rIGJ1ZmZlciBvdmVyZmxvdywgbm8gcXVlc3Rpb24uIFRoZSBwb3RlbnRpYWwgZm9yIGEgS0FTQU4gZGV0ZWN0aW9uIGlzIGhpZ2guIEhvd2V2ZXIsIHNpbmNlIHRoZSBpc3N1ZSBpcyBhIHdyaXRlICphZnRlciogdGhlIGJ1ZmZlciwgYW5kIG5vdCBjYXVzZWQgYnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoZXJlJiMzOTtzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIGZvciB0aGUgam9iLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHdyaXRlL3JlYWQgaW4gdGhlIE5URlMgZGVjb21wcmVzc2lvbiByb3V0aW5lIChgbnRmc19kZWNvbXByZXNzYCkuIFRoZSBvbGQgY29kZSBhbGxvd2VkIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIChgZHBfYWRkcmApIHRvIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYGRwX3NiX2VuZGApIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nIHRva2Vucywgd2hpY2ggd291bGQgcmVzdWx0IGluIHdyaXRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKG9yIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlcikuIFRoaXMgaXMgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBidWcuIEtBU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyAoYm90aCByZWFkcyBhbmQgd3JpdGVzKSBhbmQgd2lsbCByZWxpYWJseSBjYXRjaCB0aGlzIGlzc3VlLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrIGludm9sdmVkIGhlcmUsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIHRoZSBOVEZTIGRlY29tcHJlc3Npb24gcm91dGluZSAoYG50ZnNfZGVjb21wcmVzc2ApLiBUaGUgb2xkIGNvZGUgYWxsb3dlZCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciAoYGRwX2FkZHJgKSB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGBkcF9zYl9lbmRgKSBhbmQgY29udGludWUgcHJvY2Vzc2luZyB0b2tlbnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChvciByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIpLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBoZXJlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDA6MzYuMzk3NTM0NDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDE5NzE4NDcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGluIGBudGZzX2RlY29tcHJlc3NgIGJ5IGNoYW5naW5nIGBkcF9hZGRyIFxcdTAwM2UgZHBfc2JfZW5kYCB0byBgZHBfYWRkciBcXHUwMDNlPSBkcF9zYl9lbmRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG1vdW50aW5nIGEgY3JhZnRlZCBOVEZTIGltYWdlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDozNi4zOTc1NDA4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNDg3OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwNzowMDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmNcXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxcbi0tLSBhL2ZzL250ZnMvY29tcHJlc3MuY1xcbisrKyBiL2ZzL250ZnMvY29tcHJlc3MuY1xcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbiBcXHRcXHR1OCAqZHBfYmFja19hZGRyO1xcbiBcXG4gXFx0XFx0LyogQ2hlY2sgaWYgd2UgYXJlIGRvbmUgLyBzdGlsbCBpbiByYW5nZS4gKi9cXG4tXFx0XFx0aWYgKGNiIFxcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFxcdTAwM2UgZHBfc2JfZW5kKVxcbitcXHRcXHRpZiAoY2IgXFx1MDAzZT0gY2Jfc2JfZW5kIHx8IGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdC8qIERldGVybWluZSB0b2tlbiB0eXBlIGFuZCBwYXJzZSBhcHByb3ByaWF0ZWx5LiovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjM2Ljg0MTU5OTQ1N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI1NDA4OTgyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA3OjAwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4rKysgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuIFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjM2Ljg0MTYwMDgxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMDI4MzczMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVjb21wcmVzc2lvbiBCdWcgYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2gg4oCTIGEgbWlub3IsIHNlZW1pbmdseSBpbm5vY3VvdXMgY2hhbmdlIHRvIGBmcy9udGZzL2NvbXByZXNzLmNgLiBJdCdzIGEgc2luZ2xlLWxpbmUgZml4IHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb246IHN3aXRjaGluZyBmcm9tIGEgc3RyaWN0IGdyZWF0ZXItdGhhbiBjb21wYXJpc29uIChgXHUwMDNlYCkgdG8gYSBncmVhdGVyLXRoYW4tb3ItZXF1YWwtdG8gY29tcGFyaXNvbiAoYFx1MDAzZT1gKS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIFwicG90ZW50aWFsIGJ1ZyBmaXhcIiBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIGxvZ2ljLCB3aGljaCBpcyBnb29kLiBCdXQuLi4gdGhpcyB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIHdoYXQgdGhpcyBkb2VzIGFuZCB3aGF0IHRoZSBpbXBhY3QgaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgZnMvbnRmcy9jb21wcmVzcy5jYCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBudGZzX2RlY29tcHJlc3NgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG9yaWdpbmFsIGNvZGUsIGFuZCB3aHkgdGhpcyBjaGFuZ2Ugd2FzIG5lZWRlZC5cblxuU2luY2UgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcnJlY3Rpb24sIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gYW5kLCBnaXZlbiB0aGF0IE5URlMgaXMgdXNlci1zcGFjZSByZWFjaGFibGUgdGhyb3VnaCBtb3VudGluZywgdGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHRob3VnaHQ6IHdlIHNob3VsZCBhYnNvbHV0ZWx5IGZ1enogdGhpcy4gRGVjb21wcmVzc2lvbiByb3V0aW5lcyBhcmUgbm90b3Jpb3VzIHNvdXJjZXMgb2YgdnVsbmVyYWJpbGl0aWVzLiBBIHN1YnRsZSBvZmYtYnktb25lIGVycm9yLCBlc3BlY2lhbGx5IGluIGEgY29tcHJlc3NlZCBmaWxlc3lzdGVtLCBjb3VsZCBiZSBleHBsb2l0ZWQuIFRoaXMgY291bGQgYmUgYSBzb2xpZCB0YXJnZXQuXG5cbk5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgTlRGUyBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEl0IHNob3VsZCBiZSBgQ09ORklHX05URlNfRlNgIHJpZ2h0PyBVbmxlc3PigKYgdGhlcmUncyB0aGF0IG5ld2VyIGBDT05GSUdfTlRGUzNfRlNgLiBCdXQgc2luY2UgdGhpcyBwYXRjaCBpcyBpbiBgZnMvbnRmc2AsIGl0J3MgdGhlICpvbGQqIGRyaXZlci4gVGltZSB0byBjaGVjayBgZnMvbnRmcy9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo0Mi44NDQ0NDA4NTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4ODUxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5URlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL250ZnMvS2NvbmZpZzoyOmNvbmZpZyBOVEZTX0ZTXFxuZnMvbnRmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5URlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0xMz1jb25maWcgTlRGU19ERUJVR1xcbi0tXFxuZnMvbnRmcy9LY29uZmlnLTM0LVxcbmZzL250ZnMvS2NvbmZpZzozNTpjb25maWcgTlRGU19GU19QT1NJWF9BQ0xcXG5mcy9udGZzL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiTlRGUyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDA6NDIuODkwMzM0NDU5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODc5MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IG93biBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTlRGUyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gYE5URlNfRlNgIHJpZ2h0IG5vdyDigJMgdGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBleGFtaW5lLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hldGhlciBgbnRmc19kZWNvbXByZXNzYCBpcyBhIHN0YXRpYyBjb21wb25lbnQuIFVuZGVyc3RhbmRpbmcgaXRzIG5hdHVyZSDigJMgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgZGVmaW5lZCBvciBub3Qg4oCTIGlzIGNydWNpYWwgZm9yIGhvdyBJJ2xsIGFwcHJvYWNoIHRoZSBhbmFseXNpcyBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBwYXJ0IG9mIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGlzIGluZm9ybXMgaG93IEknZCBhcHByb2FjaCB0cm91Ymxlc2hvb3Rpbmcgb3Igb3B0aW1pemF0aW9uLiBJdCB3aWxsIGRpY3RhdGUgaG93IEknZCBleHBlY3QgaXQgdG8gYmVoYXZlIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ2LjEyOTEyOTY0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3NjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJudGZzX2RlY29tcHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9jb21wcmVzcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL250ZnMvY29tcHJlc3MuYz0xMjU9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ib3VuZHNfY29tcHJlc3NlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTEzMy0vKlxcbmZzL250ZnMvY29tcHJlc3MuYzoxMzQ6ICogbnRmc19kZWNvbXByZXNzIC0gZGVjb21wcmVzcyBhIGNvbXByZXNzaW9uIGJsb2NrIGludG8gYW4gYXJyYXkgb2YgcGFnZXNcXG5mcy9udGZzL2NvbXByZXNzLmMtMTM1LSAqIEBkZXN0X3BhZ2VzOlxcdFxcdGRlc3RpbmF0aW9uIGFycmF5IG9mIHBhZ2VzXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtMTQ3LSAqXFxuZnMvbnRmcy9jb21wcmVzcy5jOjE0ODogKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBkaXNhYmxlZCBwcmVlbXB0aW9uLiBudGZzX2RlY29tcHJlc3MoKSByZWVuYWJsZXMgaXQgd2hlblxcbmZzL250ZnMvY29tcHJlc3MuYy0xNDktICogdGhlIGNyaXRpY2FsIHNlY3Rpb24gaXMgZmluaXNoZWQuXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtMTcwLSAqL1xcbmZzL250ZnMvY29tcHJlc3MuYzoxNzE6c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbmZzL250ZnMvY29tcHJlc3MuYy0xNzItXFx0XFx0aW50ICpkZXN0X2luZGV4LCBpbnQgKmRlc3Rfb2ZzLCBjb25zdCBpbnQgZGVzdF9tYXhfaW5kZXgsXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmM9NDYzPWludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTc4OS1cXHRcXHRudGZzX2RlYnVnKFxcXCJGb3VuZCBjb21wcmVzc2VkIGNvbXByZXNzaW9uIGJsb2NrLlxcXCIpO1xcbmZzL250ZnMvY29tcHJlc3MuYzo3OTA6XFx0XFx0ZXJyID0gbnRmc19kZWNvbXByZXNzKHBhZ2VzLCBjb21wbGV0ZWRfcGFnZXMsIFxcdTAwMjZjdXJfcGFnZSxcXG5mcy9udGZzL2NvbXByZXNzLmMtNzkxLVxcdFxcdFxcdFxcdFxcdTAwMjZjdXJfb2ZzLCBjYl9tYXhfcGFnZSwgY2JfbWF4X29mcywgeHBhZ2UsXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtNzk1LVxcdFxcdCAqIFdlIGNhbiBzbGVlcCBmcm9tIG5vdyBvbiwgbG9jayBhbHJlYWR5IGRyb3BwZWQgYnlcXG5mcy9udGZzL2NvbXByZXNzLmM6Nzk2OlxcdFxcdCAqIG50ZnNfZGVjb21wcmVzcygpLlxcbmZzL250ZnMvY29tcHJlc3MuYy03OTctXFx0XFx0ICovXFxuLS1cXG5mcy9udGZzL2NvbXByZXNzLmMtNzk5LVxcdFxcdFxcdG50ZnNfZXJyb3Iodm9sLVxcdTAwM2VzYixcXG5mcy9udGZzL2NvbXByZXNzLmM6ODAwOlxcdFxcdFxcdFxcdFxcXCJudGZzX2RlY29tcHJlc3MoKSBmYWlsZWQgaW4gaW5vZGUgMHglbGx4IHdpdGggZXJyb3IgY29kZSAlaS4gU2tpcHBpbmcgdGhpcyBjb21wcmVzc2lvbiBibG9jay5cXFwiLFxcbmZzL250ZnMvY29tcHJlc3MuYy04MDEtXFx0XFx0XFx0XFx0bmktXFx1MDAzZW1mdF9ubywgLWVycik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ2LjE4MDExMTgwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTAwNzk2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBOVEZTIENvbXByZXNzaW9uIEltcGxlbWVudGF0aW9uKipcblxuUmlnaHQsIGBudGZzX2RlY29tcHJlc3NgLi4uIHRoYXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLiBBbmQgSSByZW1lbWJlciBpdCdzIGNhbGxlZCBieSBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLiBTbywgdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFjdHVhbCBkZWNvbXByZXNzaW9uIHByb2Nlc3MgaXMgaW5pdGlhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIG9yY2hlc3RyYXRlcyB0aGUgY2FsbCB0byBgbnRmc19kZWNvbXByZXNzYCwgYW5kIHdoYXQgY29udGV4dCBpdCBwcm92aWRlcy4gV2hhdCBhcmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQ/IFdoYXQgcHJlLXByb2Nlc3NpbmcgaGFwcGVucz8gV2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSSBuZWVkIHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBjb250cm9sIGZsb3cgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgTlRGUyBoYW5kbGVzIGNvbXByZXNzZWQgZGF0YSBibG9ja3MuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0OTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo0OS4zMzAxOTMzNDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NzAwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbnRmcy9hb3BzLmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyBudGZzX2lvbWFwX2Jpb19yZWFkX29wcyA9IHtcXG4tLVxcbmZzL250ZnMvYW9wcy5jLTYxLSAqIC0gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub24tcmVzaWRlbnQgYW5kIGNvbXByZXNzZWQsIHRoZSByZWFkIG9wZXJhdGlvbiBpc1xcbmZzL250ZnMvYW9wcy5jOjYyOiAqICAgZGVsZWdhdGVkIHRvIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuXFxuZnMvbnRmcy9hb3BzLmMtNjMtICogLSBGb3Igbm9ybWFsIHJlc2lkZW50IG9yIG5vbi1yZXNpZGVudCBhdHRyaWJ1dGUsIGl0IHV0aWxpemVzIHRoZSBnZW5lcmljXFxuLS1cXG5mcy9udGZzL2FvcHMuYz02OD1zdGF0aWMgaW50IG50ZnNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL250ZnMvYW9wcy5jLTk0LVxcdFxcdGlmIChOSW5vTm9uUmVzaWRlbnQobmkpIFxcdTAwMjZcXHUwMDI2IE5Jbm9Db21wcmVzc2VkKG5pKSlcXG5mcy9udGZzL2FvcHMuYzo5NTpcXHRcXHRcXHRyZXR1cm4gbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soZm9saW8pO1xcbmZzL250ZnMvYW9wcy5jLTk2LVxcdH1cXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYz0xNzE9c3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxcbi0tXFxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0NS0vKlxcbmZzL250ZnMvY29tcHJlc3MuYzo0NDY6ICogbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2sgLSByZWFkIGEgY29tcHJlc3NlZCBibG9jayBpbnRvIHRoZSBwYWdlIGNhY2hlXFxuZnMvbnRmcy9jb21wcmVzcy5jLTQ0Ny0gKiBAZm9saW86XFx0bG9ja2VkIGZvbGlvIGluIHRoZSBjb21wcmVzc2lvbiBibG9jayhzKSB3ZSBuZWVkIHRvIHJlYWRcXG4tLVxcbmZzL250ZnMvY29tcHJlc3MuYy00NjItICovXFxuZnMvbnRmcy9jb21wcmVzcy5jOjQ2MzppbnQgbnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG5mcy9udGZzL2NvbXByZXNzLmMtNDY0LXtcXG4tLVxcbmZzL250ZnMvbnRmcy5oPTE5Nj1zdGF0aWMgaW5saW5lIHN0cnVjdCBudGZzX3ZvbHVtZSAqTlRGU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvbnRmcy9udGZzLmgtMjAzLS8qIEZyb20gZnMvbnRmcy9jb21wcmVzcy5jICovXFxuZnMvbnRmcy9udGZzLmg6MjA0OmludCBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9jayhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5mcy9udGZzL250ZnMuaC0yMDUtaW50IGFsbG9jYXRlX2NvbXByZXNzaW9uX2J1ZmZlcnModm9pZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjQ5LjM3NzY3MjQ5OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzI3MTI1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTlRGUyBDb21wcmVzc2lvbioqXG5cbk9rYXksIHNvIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgaXNuJ3Qgc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgYnkgYG50ZnNfcmVhZF9mb2xpb2AuIFRoYXQgbWFrZXMgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBhIHJlYWxseSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gaW50byBOVEZTIGNvbXByZXNzaW9uIOKAkyBpdCdzIG1vcmUgZm9jdXNlZCB0aGFuIGp1c3QgYG50ZnNfcmVhZF9mb2xpb2AsIHRob3VnaCB0aGF0J3MgYWxzbyBhIHJlbGV2YW50IGZ1bmN0aW9uIHRvIGNvbnNpZGVyLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGUgY29kZSwgbGV0J3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gSSBhbHJlYWR5IGhhdmUgYE5URlNfRlNgLCBidXQgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGNvbXByZXNzaW9uIGFzcGVjdCBzcGVjaWZpY2FsbHk/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGZzL250ZnMvS2NvbmZpZ2AgZmlsZSBvbmUgbW9yZSB0aW1lIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo1Mi42NTAzODc4OTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTQ3Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVEZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL250ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9udGZzL0tjb25maWc6Mjpjb25maWcgTlRGU19GU1xcbmZzL250ZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJOVEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9udGZzL0tjb25maWc9MTM9Y29uZmlnIE5URlNfREVCVUdcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy0zNC1cXG5mcy9udGZzL0tjb25maWc6MzU6Y29uZmlnIE5URlNfRlNfUE9TSVhfQUNMXFxuZnMvbnRmcy9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIk5URlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjUyLjY5NjM0MTk3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDI0NjU5NjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBDb21wcmVzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBpcyBsb2NhdGVkIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHNlZSBpZiB0aGlzIGZpbGUsIGFuZCB0aGVyZWZvcmUgdGhpcyBmdW5jdGlvbmFsaXR5LCBpcyBjb21waWxlZCBjb25kaXRpb25hbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNvbXByZXNzaW9uIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpZiBpdCdzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgbmVlZCB0byBhbmFseXplIHRoaXMgY2hhbmdlIOKAkyBpdCBtYWtlcyBhIGRpZmZlcmVuY2Ugd2hldGhlciBpdCdzIGEgZmVhdHVyZSB0aGF0J3MgZ2VuZXJhbGx5IGF2YWlsYWJsZSBvciBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc2V0dXAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgYW55IHJlbGV2YW50IGAjaWZkZWZgIGRpcmVjdGl2ZXMgd2l0aGluIHRoZSBzb3VyY2UgZmlsZSBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMDo1Ni4xMjEwMTM2MTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTk3ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXByZXNzLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbnRmcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9udGZzL01ha2VmaWxlPTU9bnRmcy15IDo9IGFvcHMubyBhdHRyaWIubyBjb2xsYXRlLm8gZGlyLm8gZmlsZS5vIGluZGV4Lm8gaW5vZGUubyBcXFxcXFxuZnMvbnRmcy9NYWtlZmlsZS02LVxcdCAgbWZ0Lm8gbXN0Lm8gbmFtZWkubyBydW5saXN0Lm8gc3VwZXIubyB1bmlzdHIubyBhdHRybGlzdC5vIGVhLm8gXFxcXFxcbmZzL250ZnMvTWFrZWZpbGU6NzpcXHQgIHVwY2FzZS5vIGJpdG1hcC5vIGxjbmFsbG9jLm8gbG9nZmlsZS5vIHJlcGFyc2UubyBjb21wcmVzcy5vIFxcXFxcXG5mcy9udGZzL01ha2VmaWxlLTgtXFx0ICBpb21hcC5vIGRlYnVnLm8gc3lzY3RsLm8gb2JqZWN0X2lkLm8gYmRldi1pby5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAwOjU2LjE2ODIxODg0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTk3Nzc0NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlRGUyBEZWNvbXByZXNzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCBpdCdzICphbHdheXMqIGJ1aWx0IGluIHdoZW4gYE5URlNfRlNgIGlzIGVuYWJsZWQsIG1lYW5pbmcgdGhhdCdzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIEkgbmVlZCB0byB3b3JyeSBhYm91dC4gRWFzeSBlbm91Z2guXG5cbk15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2Agc3ltYm9sLiBUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGUgYG50ZnNfZGVjb21wcmVzc2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBjaGFuZ2luZyBhIGNvbXBhcmlzb24gZnJvbSBncmVhdGVyLXRoYW4gdG8gZ3JlYXRlci10aGFuLW9yLWVxdWFsLXRvLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE5URlMgZmlsZXN5c3RlbSBkZWNvbXByZXNzaW9uIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhpcyBkZWNvbXByZXNzaW9uIHBhdGggaXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHdoZW4gbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3Qgc3ltYm9sIHRvIGhvbmUgaW4gb24uIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZS4uLiBZdXAsIGl0J3MgZXhwb3J0ZWQgaW4gYGZzL250ZnMvbnRmcy5oYCBhbmQgY2FsbGVkIGZyb20gYGZzL250ZnMvYW9wcy5jYC4gU2VlbXMgbGlrZSBhIHZlcnkgc2Vuc2libGUgc3RhcnRpbmcgcG9pbnQuXG5cbkFscmlnaHQsIGZpbmFsIGNoZWNrIGNvbXBsZXRlLiBUaGUgY29uZmlybWF0aW9uIGNvbmZpcm1zIHRoYXQgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyB0cnVlLCB3aGljaCBpcyBnb29kLiBXZSdyZSB6ZXJvaW5nIGluIG9uIGBudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja2AgYXMgb3VyIGZvY3VzIHN5bWJvbCwgYW5kIHdlJ2xsIGVuc3VyZSB0aGF0IGBOVEZTX0ZTYCBpcyBlbmFibGVkIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhlIHByb3ZpZGVkIHJlYXNvbmluZyBjb25jaXNlbHkgc3RhdGVzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQgZml4IHdpdGhpbiBgbnRmc19kZWNvbXByZXNzYCBhbmQgaXRzIGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UgdmlhIG1hbGljaW91cyBOVEZTIGltYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDc6MDE6MDIuMTY1OTk2MDU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ1ODI3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5URlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudGZzX3JlYWRfY29tcHJlc3NlZF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpbiBgbnRmc19kZWNvbXByZXNzYCBieSBjaGFuZ2luZyBgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZGAgdG8gYGRwX2FkZHIgXFx1MDAzZT0gZHBfc2JfZW5kYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBOVEZTIGZpbGVzeXN0ZW0gZGVjb21wcmVzc2lvbiBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBtb3VudGluZyBhIGNyYWZ0ZWQgTlRGUyBpbWFnZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnRmc19yZWFkX2NvbXByZXNzZWRfYmxvY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaW4gYG50ZnNfZGVjb21wcmVzc2AgYnkgY2hhbmdpbmcgYGRwX2FkZHIgXFx1MDAzZSBkcF9zYl9lbmRgIHRvIGBkcF9hZGRyIFxcdTAwM2U9IGRwX3NiX2VuZGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTlRGUyBmaWxlc3lzdGVtIGRlY29tcHJlc3Npb24gbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbW91bnRpbmcgYSBjcmFmdGVkIE5URlMgaW1hZ2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjAyLjI1MDU4NjYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNDQxMjExMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMTowMi4yNTEyODI2MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQzNDM0MjAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjU3MWY5OTMzMjE4ZmIzYzgzZGYxZjg3YzQ0ZWI1NmYyZWNiNDhhYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA3OjAwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbnRmcy9jb21wcmVzcy5jIGIvZnMvbnRmcy9jb21wcmVzcy5jXG5pbmRleCA3NmJkODA2YjQxZWRkLi5kYzVhZDk1MWRjNjNlIDEwMDY0NFxuLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jXG4rKysgYi9mcy9udGZzL2NvbXByZXNzLmNcbkBAIC0zNTIsNyArMzUyLDcgQEAgc3RhdGljIGludCBudGZzX2RlY29tcHJlc3Moc3RydWN0IHBhZ2UgKmRlc3RfcGFnZXNbXSwgaW50IGNvbXBsZXRlZF9wYWdlc1tdLFxuIFx0XHR1OCAqZHBfYmFja19hZGRyO1xuIFxuIFx0XHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0LyogRGV0ZXJtaW5lIHRva2VuIHR5cGUgYW5kIHBhcnNlIGFwcHJvcHJpYXRlbHkuKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjAyLjI1MTI4NTIxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU0NDE2NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5URlMgRGVjb21wcmVzc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYGZzL250ZnMvY29tcHJlc3MuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwganVzdCBhIG1pbm9yIGFkanVzdG1lbnQgdG8gYSBib3VuZHMgY2hlY2sgd2l0aGluIHRoZSBgbnRmc19kZWNvbXByZXNzYCBmdW5jdGlvbjpcblxuYGBgY1xuLVx0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2UgZHBfc2JfZW5kKVxuK1x0XHRpZiAoY2IgXHUwMDNlPSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcdTAwM2U9IGRwX3NiX2VuZClcbmBgYFxuXG5Jbml0aWFsbHksIGl0IHNlZW1zIGxpa2UgYSBzaW1wbGUgZml4IHRvIHByZXZlbnQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MsIGBkcF9hZGRyYCwgZnJvbSBleGNlZWRpbmcgaXRzIHZhbGlkIGJvdW5kcyAoYGRwX3NiX2VuZGApLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBpdCdzIHNwZWNpZmljYWxseSBjaGFuZ2luZyBgXHUwMDNlYCB0byBgXHUwMDNlPWAuIFRoYXQgbWVhbnMgdGhlIG9yaWdpbmFsIGNvZGUgbWlnaHQgaGF2ZSBhbGxvd2VkIGBkcF9hZGRyYCB0byAqZXF1YWwqIGBkcF9zYl9lbmRgIHdpdGhvdXQgdHJpZ2dlcmluZyBhbiBlcnJvci5cblxuSWYgYGRwX2FkZHJgICppcyogZXF1YWwgdG8gYGRwX3NiX2VuZGAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgcHJvY2VlZGVkLiBUaGVuIGl0IG1pZ2h0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciAoYGNiYCkgYW5kIHdyaXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYXQgYGRwX2FkZHJgLiBJZiBgZHBfYWRkcmAgaXMgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3cml0aW5nIHRvIGl0IHdvdWxkIGJlIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyB3cml0ZS4gVW5sZXNzLCBpdCBpcyBhbHNvIHJlYWRpbmcgZnJvbSBgZHBfYWRkcmAuXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBmcy9udGZzL2NvbXByZXNzLmNgLCBhcm91bmQgbGluZSAzNTIsIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGltcGFjdHMgdGhlIGRlY29tcHJlc3Npb24gbG9naWMuIE5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBwcmVjaXNlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMTowNy4yMDU3MDU0NzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvY29tcHJlc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDA6XFx0XFxuIDM0MTpcXHRcXHQvKiBDaGVjayB3ZSBhcmUgc3RpbGwgaW4gcmFuZ2UuICovXFxuIDM0MjpcXHRcXHRpZiAoY2IgXFx1MDAzZSBjYl9zYl9lbmQgfHwgZHBfYWRkciBcXHUwMDNlIGRwX3NiX2VuZClcXG4gMzQzOlxcdFxcdFxcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xcbiAzNDQ6XFx0XFxuIDM0NTpcXHRcXHQvKiBHZXQgdGhlIG5leHQgdGFnIGFuZCBhZHZhbmNlIHRvIGZpcnN0IHRva2VuLiAqL1xcbiAzNDY6XFx0XFx0dGFnID0gKmNiKys7XFxuIDM0NzpcXHRcXG4gMzQ4OlxcdFxcdC8qIFBhcnNlIHRoZSBlaWdodCB0b2tlbnMgZGVzY3JpYmVkIGJ5IHRoZSB0YWcuICovXFxuIDM0OTpcXHRcXHRmb3IgKHRva2VuID0gMDsgdG9rZW4gXFx1MDAzYyA4OyB0b2tlbisrLCB0YWcgXFx1MDAzZVxcdTAwM2U9IDEpIHtcXG4gMzUwOlxcdFxcdFxcdHJlZ2lzdGVyIHUxNiBpO1xcbiAzNTE6XFx0XFx0XFx0dTE2IGxnLCBwdCwgbGVuZ3RoLCBtYXhfbm9uX292ZXJsYXA7XFxuIDM1MjpcXHRcXHRcXHR1OCAqZHBfYmFja19hZGRyO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRcXHQvKiBDaGVjayBpZiB3ZSBhcmUgZG9uZSAvIHN0aWxsIGluIHJhbmdlLiAqL1xcbiAzNTU6XFx0XFx0XFx0aWYgKGNiIFxcdTAwM2U9IGNiX3NiX2VuZCB8fCBkcF9hZGRyIFxcdTAwM2U9IGRwX3NiX2VuZClcXG4gMzU2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRcXHQvKiBEZXRlcm1pbmUgdG9rZW4gdHlwZSBhbmQgcGFyc2UgYXBwcm9wcmlhdGVseS4qL1xcbiAzNTk6XFx0XFx0XFx0aWYgKCh0YWcgXFx1MDAyNiBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOKSB7XFxuIDM2MDpcXHRcXHRcXHRcXHQvKlxcbiAzNjE6XFx0XFx0XFx0XFx0ICogV2UgaGF2ZSBhIHN5bWJvbCB0b2tlbiwgY29weSB0aGUgc3ltYm9sIGFjcm9zcywgYW5kXFxuIDM2MjpcXHRcXHRcXHRcXHQgKiBhZHZhbmNlIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvc2l0aW9ucy5cXG4gMzYzOlxcdFxcdFxcdFxcdCAqL1xcbiAzNjQ6XFx0XFx0XFx0XFx0KmRwX2FkZHIrKyA9ICpjYisrO1xcbiAzNjU6XFx0XFx0XFx0XFx0KysqZGVzdF9vZnM7XFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdFxcdFxcdC8qIENvbnRpbnVlIHdpdGggdGhlIG5leHQgdG9rZW4uICovXFxuIDM2ODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzY5OlxcdFxcdFxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0XFx0XFx0LypcXG4gMzcyOlxcdFxcdFxcdCAqIFdlIGhhdmUgYSBwaHJhc2UgdG9rZW4uIE1ha2Ugc3VyZSBpdCBpcyBub3QgdGhlIGZpcnN0IHRhZyBpblxcbiAzNzM6XFx0XFx0XFx0ICogdGhlIHNiIGFzIHRoaXMgaXMgaWxsZWdhbCBhbmQgd291bGQgY29uZnVzZSB0aGUgY29kZSBiZWxvdy5cXG4gMzc0OlxcdFxcdFxcdCAqL1xcbiAzNzU6XFx0XFx0XFx0aWYgKGRwX2FkZHIgPT0gZHBfc2Jfc3RhcnQpXFxuIDM3NjpcXHRcXHRcXHRcXHRnb3RvIHJldHVybl9vdmVyZmxvdztcXG4gMzc3OlxcdFxcbiAzNzg6XFx0XFx0XFx0LypcXG4gMzc5OlxcdFxcdFxcdCAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGdvIGJhY2sgKHApIGFuZCB0aGUgbnVtYmVyXFxuIDM4MDpcXHRcXHRcXHQgKiBvZiBieXRlcyB0byBjb3B5IChsKS4gV2UgdXNlIGFuIG9wdGltaXplZCBhbGdvcml0aG0gaW4gd2hpY2hcXG4gMzgxOlxcdFxcdFxcdCAqIHdlIGZpcnN0IGNhbGN1bGF0ZSBsb2cyKGN1cnJlbnQgZGVzdGluYXRpb24gcG9zaXRpb24gaW4gc2IpLFxcbiAzODI6XFx0XFx0XFx0ICogd2hpY2ggYWxsb3dzIGRldGVybWluYXRpb24gb2YgbCBhbmQgcCBpbiBPKDEpIHJhdGhlciB0aGFuXFxuIDM4MzpcXHRcXHRcXHQgKiBPKG4pLiBXZSBqdXN0IG5lZWQgYW4gYXJjaC1vcHRpbWl6ZWQgbG9nMigpIGZ1bmN0aW9uIG5vdy5cXG4gMzg0OlxcdFxcdFxcdCAqL1xcbiAzODU6XFx0XFx0XFx0bGcgPSAwO1xcbiAzODY6XFx0XFx0XFx0Zm9yIChpID0gKmRlc3Rfb2ZzIC0gZG9fc2Jfc3RhcnQgLSAxOyBpIFxcdTAwM2U9IDB4MTA7IGkgXFx1MDAzZVxcdTAwM2U9IDEpXFxuIDM4NzpcXHRcXHRcXHRcXHRsZysrO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRcXHQvKiBHZXQgdGhlIHBocmFzZSB0b2tlbiBpbnRvIGkuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjA3LjIwNTg3NzkxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDUyNjM3MzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBPdXQtb2YtQm91bmRzIFdyaXRlKipcblxuT2theSwgc28gdGhlIG9sZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBgZHBfYWRkcmAgcmVhY2hlcyBgZHBfc2JfZW5kYCwgKnNob3VsZG4ndCogaGF2ZSBicm9rZW4gdGhlIHdheSBpdCdzIHNldCB1cC4uLiB3aGljaCByYWlzZXMgYSByZWQgZmxhZy4gVGhlIHN1YnNlcXVlbnQgY2hlY2ssIGAodGFnIFx1MDAyNiBOVEZTX1RPS0VOX01BU0spID09IE5URlNfU1lNQk9MX1RPS0VOYCwgbG9va3MgbGlrZSB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS4gSWYgaXQncyB0cnVlLCB3ZSBoYXZlIGEgd3JpdGUgb3BlcmF0aW9uOiBgKmRwX2FkZHIrKyA9ICpjYisrO2AuICBUaGF0IGxvb2tzIGxpa2UgYW4gaW1tZWRpYXRlIG91dC1vZi1ib3VuZHMgd3JpdGUgc2luY2UgYGRwX2FkZHJgIGlzIGFscmVhZHkgYXQgdGhlIGVuZC4gIEV2ZW4gaWYgdGhhdCBjb25kaXRpb24gaXMgKmZhbHNlKiwgd2UncmUgZGVhbGluZyB3aXRoIGEgcGhyYXNlIHRva2VuLCB3aGljaCBhbHNvIGludm9sdmVzIHdyaXRlcyB0byBgZHBfYWRkcmAuIFNvIGFnYWluLCBhbiBvdXQtb2YtYm91bmRzIHdyaXRlLlxuXG5UaGUgZ29vZCBuZXdzIGlzLCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSAqc2hvdWxkKiBiZSBjYXRjaGluZyB0aGVzZSBvdXQtb2YtYm91bmRzIHdyaXRlcy4gIExldCBtZSB0aGluay4uLiBpcyB0aGVyZSBhIHJpc2sgb2YgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBoZXJlLCB3aGljaCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNvbnNpZGVyYXRpb24/IE5vLCBpdCdzIGEgZGVjb21wcmVzc2lvbiByb3V0aW5lLCBpdCdzICp3cml0aW5nKiB0byBhIGRlc3RpbmF0aW9uIGJ1ZmZlci4gSWYgaXQncyB3cml0aW5nIG91dCBvZiBib3VuZHMsIEtBU0FOIHdpbGwgY2F0Y2ggaXQuIElmIGl0IHJlYWRzIG91dCBvZiBib3VuZHMgZnJvbSBgY2JgLCB0aGF0J3MgS0FTQU4ncyBwcm9ibGVtIHRvby4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgdGhlIHBhdGNoICpkb2VzKiBmaXggYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkLCBidXQgdGhlIGZ1bmRhbWVudGFsIHByb2JsZW0gaXMgYW4gZXhpc3Rpbmcgb3V0LW9mLWJvdW5kcyBpc3N1ZS4gU2luY2UgS01TQU4gaXNuJ3QgcmVsZXZhbnQgaGVyZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgcmVhbGx5IEtBU0FOIHRoYXQgbWF0dGVycyBoZXJlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgbG9naWMgZGVhbGluZyB3aXRoIHBocmFzZSB0b2tlbnMgdG8gYmUgY2VydGFpbiBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMToxMi4yNTg1MjA2NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL250ZnMvY29tcHJlc3MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0cHQgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWNiKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0XFx0LypcXG4gMzkzOlxcdFxcdFxcdCAqIENhbGN1bGF0ZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpblxcbiAzOTQ6XFx0XFx0XFx0ICogdGhlIGRlc3RpbmF0aW9uIHVzaW5nIHRoZSBmYWN0IHRoYXQgcCA9IChwdCBcXHUwMDNlXFx1MDAzZSAoMTIgLSBsZykpICsgMVxcbiAzOTU6XFx0XFx0XFx0ICogYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBnbyB0b28gZmFyIGJhY2suXFxuIDM5NjpcXHRcXHRcXHQgKi9cXG4gMzk3OlxcdFxcdFxcdGRwX2JhY2tfYWRkciA9IGRwX2FkZHIgLSAocHQgXFx1MDAzZVxcdTAwM2UgKDEyIC0gbGcpKSAtIDE7XFxuIDM5ODpcXHRcXHRcXHRpZiAoZHBfYmFja19hZGRyIFxcdTAwM2MgZHBfc2Jfc3RhcnQpXFxuIDM5OTpcXHRcXHRcXHRcXHRnb3RvIHJldHVybl9vdmVyZmxvdztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0LyogTm93IGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlLiAqL1xcbiA0MDI6XFx0XFx0XFx0bGVuZ3RoID0gKHB0IFxcdTAwMjYgKDB4ZmZmIFxcdTAwM2VcXHUwMDNlIGxnKSkgKyAzO1xcbiA0MDM6XFx0XFxuIDQwNDpcXHRcXHRcXHQvKiBBZHZhbmNlIGRlc3RpbmF0aW9uIHBvc2l0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgaW4gcmFuZ2UuICovXFxuIDQwNTpcXHRcXHRcXHQqZGVzdF9vZnMgKz0gbGVuZ3RoO1xcbiA0MDY6XFx0XFx0XFx0aWYgKCpkZXN0X29mcyBcXHUwMDNlIGRvX3NiX2VuZClcXG4gNDA3OlxcdFxcdFxcdFxcdGdvdG8gcmV0dXJuX292ZXJmbG93O1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHQvKiBUaGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBieXRlcy4gKi9cXG4gNDEwOlxcdFxcdFxcdG1heF9ub25fb3ZlcmxhcCA9IGRwX2FkZHIgLSBkcF9iYWNrX2FkZHI7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdFxcdGlmIChsZW5ndGggXFx1MDAzYz0gbWF4X25vbl9vdmVybGFwKSB7XFxuIDQxMzpcXHRcXHRcXHRcXHQvKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2Vzbid0IG92ZXJsYXAsIGp1c3QgY29weSBpdC4gKi9cXG4gNDE0OlxcdFxcdFxcdFxcdG1lbWNweShkcF9hZGRyLCBkcF9iYWNrX2FkZHIsIGxlbmd0aCk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdFxcdFxcdC8qIEFkdmFuY2UgZGVzdGluYXRpb24gcG9pbnRlci4gKi9cXG4gNDE3OlxcdFxcdFxcdFxcdGRwX2FkZHIgKz0gbGVuZ3RoO1xcbiA0MTg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDE5OlxcdFxcdFxcdFxcdC8qXFxuIDQyMDpcXHRcXHRcXHRcXHQgKiBUaGUgYnl0ZSBzZXF1ZW5jZSBkb2VzIG92ZXJsYXAsIGNvcHkgbm9uLW92ZXJsYXBwaW5nXFxuIDQyMTpcXHRcXHRcXHRcXHQgKiBwYXJ0IGFuZCB0aGVuIGRvIGEgc2xvdyBieXRlIGJ5IGJ5dGUgY29weSBmb3IgdGhlXFxuIDQyMjpcXHRcXHRcXHRcXHQgKiBvdmVybGFwcGluZyBwYXJ0LiBBbHNvLCBhZHZhbmNlIHRoZSBkZXN0aW5hdGlvblxcbiA0MjM6XFx0XFx0XFx0XFx0ICogcG9pbnRlci5cXG4gNDI0OlxcdFxcdFxcdFxcdCAqL1xcbiA0MjU6XFx0XFx0XFx0XFx0bWVtY3B5KGRwX2FkZHIsIGRwX2JhY2tfYWRkciwgbWF4X25vbl9vdmVybGFwKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGRwX2FkZHIgKz0gbWF4X25vbl9vdmVybGFwO1xcbiA0Mjc6XFx0XFx0XFx0XFx0ZHBfYmFja19hZGRyICs9IG1heF9ub25fb3ZlcmxhcDtcXG4gNDI4OlxcdFxcdFxcdFxcdGxlbmd0aCAtPSBtYXhfbm9uX292ZXJsYXA7XFxuIDQyOTpcXHRcXHRcXHRcXHR3aGlsZSAobGVuZ3RoLS0pXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHQqZHBfYWRkcisrID0gKmRwX2JhY2tfYWRkcisrO1xcbiA0MzE6XFx0XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRcXHQvKiBBZHZhbmNlIHNvdXJjZSBwb3NpdGlvbiBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dCB0b2tlbi4gKi9cXG4gNDM0OlxcdFxcdFxcdGNiICs9IDI7XFxuIDQzNTpcXHRcXHR9XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdC8qIE5vIHRva2VucyBsZWZ0IGluIHRoZSBjdXJyZW50IHRhZy4gQ29udGludWUgd2l0aCB0aGUgbmV4dCB0YWcuICovXFxuIDQzODpcXHRcXHRnb3RvIGRvX25leHRfdGFnO1xcbiA0Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA3OjAxOjEyLjI1ODcwMjI0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzM1OTcxMzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipCdWZmZXIgT3ZlcmZsb3cgRGV0ZWN0ZWQqKlxuXG5Pa2F5LCBzbyB0aGUgdG9rZW4gbG9naWMgaGFzIGEgZmxhdzsgaXQncyB3cml0aW5nIHRvIGBkcF9hZGRyYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIGBkcF9hZGRyYCBlbmRzIHVwIGVxdWFsaW5nIGBkcF9zYl9lbmRgLiBUaGF0J3MgYSB0ZXh0Ym9vayBidWZmZXIgb3ZlcmZsb3csIG5vIHF1ZXN0aW9uLiBUaGUgcG90ZW50aWFsIGZvciBhIEtBU0FOIGRldGVjdGlvbiBpcyBoaWdoLiBIb3dldmVyLCBzaW5jZSB0aGUgaXNzdWUgaXMgYSB3cml0ZSAqYWZ0ZXIqIHRoZSBidWZmZXIsIGFuZCBub3QgY2F1c2VkIGJ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIEknbGwgc2V0IGBOZWVkc0tNU0FOYCB0byBmYWxzZS4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIHRoZSBqb2IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NDYsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwNzowMToxNi41OTQ2ODE5MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUvcmVhZCBpbiB0aGUgTlRGUyBkZWNvbXByZXNzaW9uIHJvdXRpbmUgKGBudGZzX2RlY29tcHJlc3NgKS4gVGhlIG9sZCBjb2RlIGFsbG93ZWQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkcF9hZGRyYCkgdG8gcmVhY2ggdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChgZHBfc2JfZW5kYCkgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgdG9rZW5zLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciAob3IgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYnVmZmVyKS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IGJ1Zy4gS0FTQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIChib3RoIHJlYWRzIGFuZCB3cml0ZXMpIGFuZCB3aWxsIHJlbGlhYmx5IGNhdGNoIHRoaXMgaXNzdWUuIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWsgaW52b2x2ZWQgaGVyZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS9yZWFkIGluIHRoZSBOVEZTIGRlY29tcHJlc3Npb24gcm91dGluZSAoYG50ZnNfZGVjb21wcmVzc2ApLiBUaGUgb2xkIGNvZGUgYWxsb3dlZCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciAoYGRwX2FkZHJgKSB0byByZWFjaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGBkcF9zYl9lbmRgKSBhbmQgY29udGludWUgcHJvY2Vzc2luZyB0b2tlbnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIChvciByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIpLiBUaGlzIGlzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgYnVnLiBLQVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgKGJvdGggcmVhZHMgYW5kIHdyaXRlcykgYW5kIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhpcyBpc3N1ZS4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVhayBpbnZvbHZlZCBoZXJlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowp7v2f[1] Phase: Succeeded StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 07:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 07:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2] Phase: Succeeded StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 07:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 07:01:28 +0000 UTC FinishedAt: 2026-08-20 07:01:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp7v2f/series-workflowp7v2f-convert-artifact-618667542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 07:01:38 +0000 UTC FinishedAt: 2026-08-20 07:18:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 07:01:38 +0000 UTC FinishedAt: 2026-08-20 07:18:33 +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:*369db8be-f902-44e3-85eb-ea9730f05447,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-workflowp7v2f/series-workflowp7v2f-convert-artifact-618667542/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": "e12430d0-f5c4-4fa2-98a0-4d43adf7e8b9", "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-workflowp7v2f/series-workflowp7v2f-build-action-1304120748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 07:01:38 +0000 UTC FinishedAt: 2026-08-20 07:18:23 +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:*369db8be-f902-44e3-85eb-ea9730f05447,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-workflowp7v2f/series-workflowp7v2f-convert-artifact-618667542/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": "e12430d0-f5c4-4fa2-98a0-4d43adf7e8b9", "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-workflowp7v2f/series-workflowp7v2f-build-action-1304120748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 07:18:33 +0000 UTC FinishedAt: 2026-08-20 07:18:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 07:18:33 +0000 UTC FinishedAt: 2026-08-20 07:18:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 07:18:33 +0000 UTC FinishedAt: 2026-08-20 07:18:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 07:18:33 +0000 UTC FinishedAt: 2026-08-20 07:18:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp7v2f/series-workflowp7v2f-convert-artifact-3196342185/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 07:18:43 +0000 UTC FinishedAt: 2026-08-20 07:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 07:18:43 +0000 UTC FinishedAt: 2026-08-20 07:20:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e12430d0-f5c4-4fa2-98a0-4d43adf7e8b9,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-workflowp7v2f/series-workflowp7v2f-build-action-1304120748/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-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 07:20:40 +0000 UTC FinishedAt: 2026-08-20 07:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 07:20:40 +0000 UTC FinishedAt: 2026-08-20 07:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 07:20:40 +0000 UTC FinishedAt: 2026-08-20 07:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 07:20:40 +0000 UTC FinishedAt: 2026-08-20 07:37:29 +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:*369db8be-f902-44e3-85eb-ea9730f05447,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-workflowp7v2f/series-workflowp7v2f-convert-artifact-3196342185/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": "d80b4efa-977e-4ff7-a959-7922277fe234", "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-workflowp7v2f/series-workflowp7v2f-build-action-757830789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 07:20:40 +0000 UTC FinishedAt: 2026-08-20 07:37:17 +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:*369db8be-f902-44e3-85eb-ea9730f05447,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-workflowp7v2f/series-workflowp7v2f-convert-artifact-3196342185/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": "d80b4efa-977e-4ff7-a959-7922277fe234", "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-workflowp7v2f/series-workflowp7v2f-build-action-757830789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 07:37:29 +0000 UTC FinishedAt: 2026-08-20 07:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 07:37:29 +0000 UTC FinishedAt: 2026-08-20 07:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 07:37:29 +0000 UTC FinishedAt: 2026-08-20 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 07:37:29 +0000 UTC FinishedAt: 2026-08-20 07:39:32 +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:*d80b4efa-977e-4ff7-a959-7922277fe234,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-workflowp7v2f/series-workflowp7v2f-build-action-757830789/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-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +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_read_compressed_block"],"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:*e12430d0-f5c4-4fa2-98a0-4d43adf7e8b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d80b4efa-977e-4ff7-a959-7922277fe234,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-workflowp7v2f/series-workflowp7v2f-build-action-1304120748/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-workflowp7v2f/series-workflowp7v2f-build-action-757830789/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 07:39:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 07:39:48 +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_read_compressed_block"],"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-workflowp7v2f/series-workflowp7v2f-convert-artifact-2986752766/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 07:39:42 +0000 UTC FinishedAt: 2026-08-20 07:39:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 07:39:52 +0000 UTC FinishedAt: 2026-08-20 08:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7v2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ntfs_read_compressed_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["NTFS_FS"],"series_id":"c5104873-d4d2-4a73-bed0-5ee28dcc936a","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 07:39:52 +0000 UTC FinishedAt: 2026-08-20 08:22:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e12430d0-f5c4-4fa2-98a0-4d43adf7e8b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d80b4efa-977e-4ff7-a959-7922277fe234,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-workflowp7v2f/series-workflowp7v2f-build-action-1304120748/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-workflowp7v2f/series-workflowp7v2f-build-action-757830789/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-workflowp7v2f/series-workflowp7v2f-convert-artifact-2986752766/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,}