Name: series-workflowrncn2 Phase: Succeeded StartedAt: 2026-08-17 14:54:44 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[0] Phase: Succeeded StartedAt: 2026-08-17 14:54:44 +0000 UTC FinishedAt: 2026-08-17 15:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 14:54:44 +0000 UTC FinishedAt: 2026-08-17 15:14:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "f2672dec-e407-40e2-b79a-7c0b99b163bf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "swapin_sync", "workingset_refault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MmIzM0OywKICAgICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICYjNDM7NDc1OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuJiM0MztcdHZvaWQgKnNoYWRvdztcbiBcbiBcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtNDg4MCw2ICYjNDM7NDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbiYjNDM7XHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uZjk2OGI2OGI2MGM1MiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0yMjUwLDYgJiM0MzsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XG4gXHRwZ29mZl90IG9mZnNldDtcbiYjNDM7XHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiAmIzQzOzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbiYjNDM7XHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuIFx0aWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7XG4gXHRcdGVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbyhcdTAwMjZmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTtcbiBcdFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggOWMzYTVjZjk5Nzc4Ni4uN2VhNGEyYmEwODQxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG5AQCAtMjU3LDEyICYjNDM7MjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4mIzQzO1x0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxuJiM0MztcdCAqL1xuJiM0MztcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3dfcGFya2VkKVxuJiM0MztcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbiYjNDM7XG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzO1xuQEAgLTQ3Nyw4ICYjNDM7NDg3LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbkBAIC02MzgsMTcgJiM0Mzs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuJiM0MztcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY3OCwxNyAmIzQzOzY5NSwyNiBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuJiM0MztcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTczMCw3ICYjNDM7NzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01NzcsNyAmIzQzOzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9scnUoZm9saW8pKSlcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmYwNTkyMDY5NDhhYmEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8mIzM5O3MgcGFya2VkIHNoYWRvdyhzKVxuJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4mIzQzOyAqXG4mIzQzOyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8mIzM5O3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbiYjNDM7ICogenN3YXAgdHJlZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWRcbiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvIHdvcmtpbmdzZXRfcmVmYXVsdCgpXG4mIzQzOyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuJiM0MzsgKiBkb3VibGUtY291bnQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShlKTtcbiYjNDM7XHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4mIzQzO1x0XHRcdHNoYWRvdyA9IHBhcmtlZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaGFkb3c7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTk5OSw2ICYjNDM7MTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiYjNDM7XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpO1xuJiM0MztcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiBcdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbkBAIC0xMDM0LDcgJiM0MzsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuJiM0MztcdGlmICghc2hhZG93KVxuJiM0MztcdFx0c2hhZG93ID0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVztcbiYjNDM7XHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmMzNjRhYmQ1YTA3MmRhY2UyOTUxZjVmMGYxZDFmY2FiY2Q4ZDNlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE1OjExOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDc1OSw2ICYjNDM7NDc1OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGVwOwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpCiAJCWdvdG8gb3V0OwpAQCAtNDg4MCw2ICYjNDM7NDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXRfcGFnZTsKIAl9CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAkvKgogCSAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZgogCSAqIGZvbGlvLSZndDtpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZQpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uZjk2OGI2OGI2MGM1MiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0yMjUwLDYgJiM0MzsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAlpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjsKIAlwZ29mZl90IG9mZnNldDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJVk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7CiAJaW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7CkBAIC0yMzYxLDYgJiM0MzsyMzYyLDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJICovCiAJYXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTsKIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCWlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkgewogCQllcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oJmFtcDtmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI1NywxMiAmIzQzOzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDc3LDggJiM0Mzs0ODcsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAogCS8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqLwogCW1lbWNnMV9zd2FwaW4oZm9saW8pOwotCWlmIChzaGFkb3cpCi0JCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKIAogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwpAQCAtNjM4LDE3ICYjNDM7NjQ2LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQkJCQkgICBzdHJ1Y3Qgc3dhcF9pb2NiICoqcGx1ZywgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjc4LDE3ICYjNDM7Njk1LDI2IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCQkgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7CiAJcmV0dXJuIGZvbGlvOwogfQpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKQEAgLTczMCw3ICYjNDM7NzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHsKIAkJc3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLSZndDtzd2FwOwogCi0JCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQomIzQzOwkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgJmFtcDsmYW1wOwomIzQzOwkJICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSkKIAkJCXNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7CiAJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKIAkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7CmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTc3LDcgJiM0Mzs1NzcsMTAgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CWlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKQomIzQzOwkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKIAl3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIApkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggNzYxY2Q2OTllMGEzZS4uZjA1OTIwNjk0OGFiYSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05NzIsNiAmIzQzOzk3Miw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/CiYjNDM7ICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSkKJiM0MzsgKgomIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHMKJiM0MzsgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XCiYjNDM7ICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGgKJiM0MzsgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LgomIzQzOyAqLwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICYjNDM7IGkpOwomIzQzOwomIzQzOwkJaWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvIHdvcmtpbmdzZXRfcmVmYXVsdCgpCiYjNDM7ICogKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyCiYjNDM7ICogZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05OTIsNiAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCkBAIC05OTksNiAmIzQzOzEwNzMsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCWlmICghc2kpCiAJCXJldHVybiAtRUVYSVNUOwogCiYjNDM7CXNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7CiYjNDM7CiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKIAkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CkBAIC0xMDM0LDcgJiM0MzsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJZ290byBvdXQ7CiAJfQogCi0JeGFfZXJhc2UodHJlZSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFzaGFkb3cpCiYjNDM7CQlzaGFkb3cgPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XOwomIzQzOwl4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7CiAKIAljb3VudF92bV9ldmVudChaU1dQV0IpOwogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBzb21lICp2ZXJ5KiBzZW5zaXRpdmUgYXJlYXM6IGBtbS96c3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBldmVuIHRoZSBoZWFkZXIgZm9yIHpzd2FwLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCYjMzk7cyBhIHdpZGUgcmVhY2gsIGltbWVkaWF0ZWx5IHNpZ25hbGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuIEFkZGluZyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGltcGxpZXMgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBhbmQgdHJhY2tpbmcgb2YgdGhlc2UgZm9saW9zLCBhbmQgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGlzIGNsZWFybHkgaW1wYWN0cyBzd2FwcGluZywgdGhlIHN3YXAgY2FjaGUsIGFuZCBob3cgdGhlIHdvcmtpbmcgc2V0IGlzIGhhbmRsZWQuIEdpdmVuIHRoZSBzY29wZSwgaXQmIzM5O3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBhbmQgSSYjMzk7ZCBwdXQgdGhpcyBwYXRjaCBmaXJtbHkgaW4gdGhlICYjMzQ7bmVlZHMgcmlnb3JvdXMgZnV6emluZyYjMzQ7IGNhdGVnb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIG91dCB3aGljaCBjb25maWcgdGhpcyBhZmZlY3RzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHpzd2FwIGlzIGVuYWJsZWQgYnkgdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Agb3IgbWF5YmUgYG1tL0tjb25maWcuenN3YXBgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlpTV0FQIE9wdGltaXphdGlvbiBTdHJhdGVneSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc2VyaW91c2x5IGNvbnNpZGVyIGVuYWJsaW5nIGBaU1dBUGAgYWxvbmcgd2l0aCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIGRpcmVjdGl2ZS4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIG9wdGltaXphdGlvbiwgcGFydGljdWxhcmx5IHdpdGggdGhlIGN1cnJlbnQgd29ya2xvYWQgY2hhcmFjdGVyaXN0aWNzLiBXZSBrbm93IHRoZSBzeXN0ZW0gbmVlZHMgc29tZSBzd2FwIHNwYWNlLCBzbyB3ZSYjMzk7bGwgbmVlZCB0byBjb25maWd1cmUgc3RhbmRhcmQgYFNXQVBgIGFzIHdlbGwuIEJlZm9yZSB3ZSBjb21taXQsIEkmIzM5O2xsIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFpTV0FQYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gbWFraW5nIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgZWxzZSB0aGlzIGNoYW5nZSBpbXBhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBtbS9LY29uZmlnIExpbmUgMjIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgYW5kIHplcm8gaW4gb24gbGluZSAyMi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgZHJpdmVuIGJ5IHNvbWV0aGluZyBzcGVjaWZpYyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSYjMzk7bSBob3BpbmcgbGluZSAyMiBob2xkcyB0aGUga2V5IHRvIGNsYXJpZnlpbmcgYSBwYXJ0aWN1bGFyIG1hY3JvLCBjb25kaXRpb24sIG9yIGRlZmF1bHQgc2V0dGluZyB0aGF0JiMzOTtzIHRyaXBwaW5nIG1lIHVwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IChlLmcuLCBgaWZgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gKSBvciBhIGRlZmluaXRpb24gdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBhIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYmVoYXZlcyBhdCBjb21waWxlIHRpbWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgb3B0aW9uLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBmZWF0dXJlcywgb3IgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIE1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIGZlYXR1cmUsIGhvdyBpdHMgc3RhdHVzIGlzIGRldGVybWluZWQgYXQgY29tcGlsZS10aW1lLCBhbmQgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueSBjb21waWxlLXRpbWUgc2lkZS1lZmZlY3RzIChlLmcuIGluY2x1ZGluZyBvciBleGNsdWRpbmcgaGVhZGVyIGZpbGVzKSBiYXNlZCBvbiBpdHMgc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZSBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWlNXQVAgUGF0Y2ggRm9jdXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IGBaU1dBUGAsIGFuZCBpdCBoaW5nZXMgb24gdGhlIGV4aXN0aW5nIGBTV0FQYCBmdW5jdGlvbmFsaXR5LiBTZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHdlIG5lZWQgdG8gZW5hYmxlIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIG9mIGNvdXJzZSwgYFNXQVBgIGl0c2VsZiB0byBnZXQgdGhpcyB3b3JraW5nLgoKTm93LCB3aGVyZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aXRoaW4gdGhpcyBwYXRjaD8gTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLgoKYGRvX3N3YXBfcGFnZWAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoOyBhbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc2htZW1fc3dhcGluX2ZvbGlvYCBpcyBzb21ld2hhdCBhY3RpdmUgdG9vLCBhbmQgaXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuIEJ1dCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBsaWtlIGEgcHJpbWFyeSB0YXJnZXQgZm9yIGFuYWx5c2lzLiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFyZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9ucywgc28gdGhleSBzaG91bGQgYmUgc2NydXRpbml6ZWQgY2FyZWZ1bGx5LiAgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgYXJlIGFsc28gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGlvbi4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYWNjZXNzaWJpbGl0eSBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3Igbm90LiBMZXQgbWUgc2VlLi4uIHllcywgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIEFoLCBidXQgd2FpdCwgdGhlIHByb21wdCByZW1pbmRzIG1lIHRoYXQgSSBzaG91bGQgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gUmlnaHQuIFNvIGxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBpbnNpZGUgYG1tL3pzd2FwLmNgIHRvIHNlZSBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgdXNlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTAyMj12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTEwNTktICovXG5tbS96c3dhcC5jOjEwNjA6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtMTA2MS1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTExNjY9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExODktXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExOTA6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExOTEtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTIyNC1cbm1tL3pzd2FwLmM6MTIyNTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTIyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWnN3YXAgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgWnN3YXAgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2Ygc29tZSBrZXkgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgbW9kdWxhci4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZSByZWxhdGVkIGZ1bmN0aW9uczogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gSW50ZXJlc3RpbmcsIHRoZXNlIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIGEgYnJvYWRlciByb2xlIG9yIGEgY2FsbCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLgoKTm93IGxldCYjMzk7cyBjb21wYXJlIHRoYXQgdG8gYHNobWVtX3N3YXBpbl9mb2xpb2AsIHdoaWNoICppcyogc3RhdGljLiBUaGlzIGlzIGFsc28gZnJvbSB0aGUgc3dhcHBpbmcgY29kZS4gVGhlbiB0aGVyZSYjMzk7cyBgZG9fc3dhcF9wYWdlYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCwgd2hpY2ggYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSBjb3JlIHN3YXAgb3BlcmF0aW9ucyB0aGF0IGFyZSB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KClRvIHVuZGVyc3RhbmQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgYmV0dGVyLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBzdHJhaWdodCB0byBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIHRoZXJlLCBzaW5jZSB0aGV5IHNlZW0gcmVsYXRlZCB0byB0aGUgbW9yZSBnZW5lcmFsIHN3YXAgc3RhdGUgaGFuZGxpbmcuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3dhcCBjYWNoaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9yZWFkX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02MTE9dm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY0My1cbm1tL3N3YXBfc3RhdGUuYzo2NDQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG5tbS9zd2FwX3N0YXRlLmMtNjQ1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzI4PXN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzQxLVx0bXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgXHUwMDI2aWx4KTtcbm1tL3N3YXBfc3RhdGUuYzo3NDI6XHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgcGx1ZywgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTc0My1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTgyOD1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy04NTYtXHRcdHJhX2VudHJ5ID0gc3dwX2VudHJ5KHN3cF90eXBlKGVudHJ5KSwgb2Zmc2V0KTtcbm1tL3N3YXBfc3RhdGUuYzo4NTc6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHJhX2VudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxubW0vc3dhcF9zdGF0ZS5jLTg1OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c3BsdWcsIG9mZnNldCAhPSBlbnRyeV9vZmZzZXQpO1xuLS1cbm1tL3N3YXBfc3RhdGUuYy04NjctXHQvKiBUaGUgcGFnZSB3YXMgbGlrZWx5IHJlYWQgYWJvdmUsIHNvIG5vIG5lZWQgZm9yIHBsdWdnaW5nIGhlcmUgKi9cbm1tL3N3YXBfc3RhdGUuYzo4Njg6XHRyZXR1cm4gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtODY5LX1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTI1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTY3LVx0XHR9XG5tbS9zd2FwX3N0YXRlLmM6OTY4Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbm1tL3N3YXBfc3RhdGUuYy05NjktXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNwbHVnLCBhZGRyICE9IHZtZi1cdTAwM2VhZGRyZXNzKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTgyLVx0LyogVGhlIGZvbGlvIHdhcyBsaWtlbHkgcmVhZCBhYm92ZSwgc28gbm8gbmVlZCBmb3IgcGx1Z2dpbmcgaGVyZSAqL1xubW0vc3dhcF9zdGF0ZS5jOjk4MzpcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHRhcmdfZW50cnksIGdmcF9tYXNrLCBtcG9sLCB0YXJnX2lseCxcbm1tL3N3YXBfc3RhdGUuYy05ODQtXHRcdFx0XHQgICAgICBOVUxMLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN3YXAgRnVuY3Rpb25zIGluIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3dhcC1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgbWFraW5nIHNvbWUgb2JzZXJ2YXRpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgbWVhbnQgdG8gYmUgdXNlZCB3aXRoaW4gaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQg4oCTIHByb2JhYmx5IHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBub3QgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgaW50ZW5kZWQgdG8gY2FsbCBkaXJlY3RseS4KClRoZW4sIEkgbm90ZSB0aGF0IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBhcmUgYWxsICpub24tc3RhdGljKi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGVyZSB0aGV5IGFyZSBkZWNsYXJlZC4gVGhpcyBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHVzZWQgaW4gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhleSBhcmUsIHRodXMsIHBhcnQgb2YgYSBmdW5jdGlvbmFsIGludGVyZmFjZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBJIG1heSBuZWVkIHRvIGJlIGNhbGxpbmcgZm9yIGEgZ2l2ZW4gdXNlLWNhc2UuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgZm9yIHNvbWUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYHN3YXBpbl9zeW5jYCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiwgaXRzIHBhcmFtZXRlcnMsIGFuZCB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02NDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY3OC0vKipcbm1tL3N3YXBfc3RhdGUuYzo2Nzk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cbm1tL3N3YXBfc3RhdGUuYy02ODAtICogQGVudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY5My0gKi9cbm1tL3N3YXBfc3RhdGUuYzo2OTQ6c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbm1tL3N3YXBfc3RhdGUuYy02OTUtXHRcdFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipGb2N1c2luZyBJbiBvbiBLZXkgQXJlYXMgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBzb21lIGtleSBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UsIG5hbWVseSBgc3dhcGluX3N5bmNgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBhbmQgdGhhdCBjcnVjaWFsIGZ1bmN0aW9uLCBgd29ya2luZ3NldF9yZWZhdWx0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBsYXJnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRvX3N3YXBfcGFnZWAsIGFzIEkga25vdyBpdCYjMzk7cyBmcmVxdWVudGx5IGNhbGxlZCBzbyBJIG5lZWQgdG8gYXZvaWQgaXQuCgpOb3csIHdoZXJlIHdhcyB0aGF0IGB3b3JraW5nc2V0X3JlZmF1bHRgIGZ1bmN0aW9uIGFnYWluPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgd29ya2luZ3NldF9yZWZhdWx0YCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCBzY29wZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBIb3cgaXMgaXQgYmVpbmcgYWNjZXNzZWQ/IEdpdmVuIHRoYXQgdGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkLCBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIHpzd2FwIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS96c3dhcC5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBUaGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgb2ZmZXIgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyBkYXRhIGlzIGhhbmRsZWQgYW5kIHBvdGVudGlhbGx5IHJlLWZhdWx0ZWQgb3IgY2xlYXJlZCB3aXRoaW4gdGhlIHpzd2FwIGFyY2hpdGVjdHVyZS4gSSBleHBlY3QgdGhhdCBieSB0cmFjaW5nIHRoZWlyIHVzYWdlLCBJIGNhbiBmaWd1cmUgb3V0IHdoeSB0aGUgJiMzNDtub24tc3RhdGljJiMzNDsgY2hhcmFjdGVyaXN0aWMgb2YgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgbm90ZXdvcnRoeS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTc4LS8qXG5tbS96c3dhcC5jOjk3OTogKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4tLVxubW0venN3YXAuYy05ODgtICovXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtOTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSB0aGluZ3MgYXJlbiYjMzk7dCBqdXN0IGZpeGVkOyB0aGV5JiMzOTtyZSBkeW5hbWljLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhvbmUgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUuIFRoZXNlIGxvb2sgbGlrZSB0aGUgY2VudHJhbCBwaWVjZXM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgenN3YXAgcHJvY2Vzcy4KCk5vdywgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBjb25maWd1cmF0aW9uIGlzIGtleSwgc28gSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIGBTV0FQYCwgYFpTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCB0byBiZSBlbmFibGVkLiBJIG1heSB3YW50IHRvIHBva2UgYXJvdW5kIGFuZCBjb25maXJtIHRoYXQuCgpJdCYjMzk7cyB0aW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIuIENvdWxkIHdlIGJlIG1pc3Npbmcgc29tZXRoaW5nPyBUaGlua2luZyBsYXRlcmFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgbWlnaHQgYmUgcGVydGluZW50IHRvIHRyaWdnZXJpbmcgdGhhdCB3cml0ZWJhY2suIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUsIHNvIEkmIzM5O2xsIGNoZWNrIGBtbS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ1LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCksIGlzIGRlZmluZWQgb3IgaGFzIHNvbWUgY3JpdGljYWwgbG9naWMgdGhlcmUuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljIOKAkyBtYXliZSBhIGRlZmF1bHQgc2V0dGluZywgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBhbiBpbXBvcnRhbnQgY29tbWVudCB0aGF0JiMzOTtzIGluZmx1ZW5jaW5nIHNvbWUgYmVoYXZpb3IgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4mIzM5O3QganVzdCBzY2FuIHRoZSBmaWxlOyBteSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBnb3Zlcm5zIGl0LiBJIGV4cGVjdCB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgYXMgSSBhcHByb2FjaCBsaW5lIDQ1LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiAgNTU6XHRcdCAgbm90IHlldCBmdWxsLCBvciB0aGUgY2dyb3VwIHpzd2FwIGxpbWl0IGhhcyBub3QgYmVlbiByZWFjaGVkLFxuICA1NjpcdFx0ICByZWR1Y2luZyB0aGUgY2hhbmNlIHRoYXQgY29sZCBwYWdlcyB3aWxsIHJlc2lkZSBpbiB0aGUgenN3YXAgcG9vbFxuICA1NzpcdFx0ICBhbmQgY29uc3VtZSBtZW1vcnkgaW5kZWZpbml0ZWx5LlxuICA1ODpcdFxuICA1OTpcdGNob2ljZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhhbmRsaW5nIHdvcmtpbmdzZXQgc2hhZG93cyBjb3JyZWN0bHkgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgZ2V0dGluZyB3cml0ZWJhY2sgdG8gdHJpZ2dlciwgd2hpY2ggaXMgYWNoaWV2ZWQgYnkgdXRpbGl6aW5nIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyBpbi4KCkkmIzM5O20gcXVpY2tseSBjaGVja2luZyBpZiBhIHNpbWlsYXIgY29tcHJlc3NvciBjb25maWcgbGlrZSBgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNGAgaXMgbmVjZXNzYXJ5LCBidXQgdGhlIGRlZmF1bHQgY29tcHJlc3NvciBpcyBmaW5lIGluIHRoaXMgaW5zdGFuY2UsIHNvIEkmIzM5O2xsIHNraXAgaXQuCgpMZXQgbWUgcmVjYXAgbXkgcmVhc29uaW5nOiBUaGlzIG1vZGlmaWVzIHN3YXAgYW5kIHpzd2FwIHRvIG1hbmFnZSB0aG9zZSBwZXNreSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gSXQgZG9lcyB0aGlzIHdpdGggYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgd2hpY2ggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCB0b3VjaGluZyBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCBkaXJlY3RseS4gVGhleSBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmVhLgoKTG9va2luZyBhdCB0aGUgY29uZmlncyB0aGF0IGFyZSBpbXBhY3RlZDogYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBkZWZpbml0ZWx5IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHN5bWJvbHMgdG8gaGlnaGxpZ2h0IHRoZSBhcmVhIG9mIGNoYW5nZS4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgdGhlIG9idmlvdXMgY2hvaWNlcyBhbmQgYXJlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guIEkgY29uc2lkZXJlZCBgc3dhcGluX3N5bmNgIGFzIGEgZ29vZCBvbmUsIG9yIHBlcmhhcHMgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGJ1dCBJIGRpc21pc3NlZCB0aGUgbGF0dGVyIGFzIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBOb3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljLCBidXQgaXMgZXNzZW50aWFsLCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIEkgY2FuIHVzZSBpdCBhcyBhIGZvY3VzIHBvaW50LiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG92ZXIgc3RhdGljLCBidXQgaXQgZG9lc24mIzM5O3QgZm9yYmlkIHN0YXRpYyBmdW5jdGlvbnMuCgpPa2F5LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9ucy4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgKm5vbiotc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgc28gdGhleSBhcmUgcGVyZmVjdC4gVGhleSYjMzk7cmUgZXhhY3RseSB3aGF0IEkgbmVlZC4gSSYjMzk7bGwganVzdCBjb25maXJtIGB3b3JraW5nc2V0X3JlZmF1bHRgJiMzOTtzIGV4cG9ydCBzdGF0dXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29kZSBWaXNpYmlsaXR5IGFuZCBGdW5jdGlvbiBTY29wZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgSSYjMzk7bSByZW1pbmRlZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gQnV0LCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuIE5vbi1zdGF0aWMgbWVhbnMgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBpbiB3YXlzIEkgbmVlZCB0byBjb25zaWRlciwgZXZlbiBpZiBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBwdWJsaXNoZWQgQVBJLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRvIGxpbmtpbmc/IElzIGl0IGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3IgYSBzZXBhcmF0ZSBvbmU/CgpUaGVyZWZvcmUsIEkgbm93IG5lZWQgdG8gZGV0ZXJtaW5lLCBhbmQgSSYjMzk7bGwgcXVpY2tseSBjaGVjaywgaWYgYHN3YXBpbl9zeW5jYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUgaWYgaXQmIzM5O3MgYmVpbmcgZXhwb3NlZCB2aWEgc29tZSBvdGhlciBtZWFucyBvciBpZiB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgKnNlZW1zKiB0byBiZSBwcml2YXRlIGJ1dCBhY3R1YWxseSBpc24mIzM5O3QuIFRoZSBzY29waW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LCBhbmQgb2YgY291cnNlLCB3aGV0aGVyIG9yIG5vdCBhIHNlZW1pbmdseSBpbnRlcm5hbCBmdW5jdGlvbiBpcyBnb2luZyB0byBjYXVzZSB0cm91YmxlIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3dhcGluX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipGaW5hbCBQYXRjaCBSZXZpZXc6IENoZWNraW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHdvcmsgb24gdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gdGhlIHNlbGVjdGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3MsIGxvb2tzIHNvbGlkLiBJJiMzOTttIHBsZWFzZWQgd2l0aCB0aGUgZGlyZWN0aW9uIHdlJiMzOTtyZSB0YWtpbmcuCgpCZWZvcmUgd2UgY2FsbCB0aGlzIGRvbmUsIHRob3VnaCwgSSBuZWVkIHRvIGRvIGEgZmluYWwgc3dlZXAgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgZGVwZW5kZW5jeS4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqLCBzbyBJIG5lZWQgdG8gYmUgZXh0cmEgdGhvcm91Z2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ09ORklHX01FTUNHYC4gVGhlIHJlYXNvbiBJJiMzOTttIHJhaXNpbmcgdGhpcyBmbGFnIGlzIHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgaW4gYHpzd2FwLmNgLiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyYWN0aW9uIHRoZXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS96c3dhcC5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYE1FTUNHYCB0aGF0IHdlIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGF0IHRoaXMgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz02MTc9c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG4tLVxubW0venN3YXAuYy02NTAtLyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbm1tL3pzd2FwLmM6NjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgV3JpdGViYWNrIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBpbiBteSBoZWFkLiBgTUVNQ0dgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEkmIzM5O2Qgbm9ybWFsbHkganVzdCBhc3N1bWUgaXQmIzM5O3MgdGhlcmUsIGJ1dCBJIHRoaW5rIEkgc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCBpbiBjYXNlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4gTm93LCBgWlNXQVBgIGRvZXNuJiMzOTt0IHN0cmljdGx5IGRlcGVuZCBvbiBgTUVNQ0dgIGl0c2VsZi4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIG1pZ2h0IGRlcGVuZCBvbiBNRU1DRywgYnV0IGl0IGRvZXNuJiMzOTt0LgoKQWxyaWdodCwgbGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGBaU1dBUGAgZGVwZW5kZW5jaWVzLiBJdCBuZWVkcyBgU1dBUGAsIG5hdHVyYWxseS4gSXQgKnNlbGVjdHMqIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBPa2F5LCB0aG9zZSBhcmUgc3RyYWlnaHRmb3J3YXJkLiBHaXZlbiB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSB3cml0ZWJhY2sgYnVmZmVycyBhbmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgU1dBUGAsIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gSSB0aGluayB0aGF0IGNvdmVycyBhbGwgdGhlIGJhc2VzLgoKVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkmIzM5O20gcmVhZGluZywgbW9kaWZpZXMgaG93IHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHdvcmssIHBhcnRpY3VsYXJseSB3aXRoIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIFRoZXNlIGFyZSBjcml0aWNhbCBhZGRpdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBzaGFkb3dzIHdpdGhpbiB0aGUgenN3YXAgdHJlZS4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBvcGVyYXRpb25zLCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgZWZmZWN0cyBvbiBwYWdlIHJlY2xhaW0sIHRoZSBzd2FwIGNhY2hlLCBhbmQgenN3YXAgaXRzZWxmLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSwgYW5kIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC4KCkxldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHNvbGlkaWZ5IHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBwYXJrcyB0aGUgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGFuZCByZXN0b3JlcyBpdCB1cG9uIHN3YXAtaW4gb3Igc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzM2NGFiZDVhMDcyZGFjZTI5NTFmNWYwZjFkMWZjYWJjZDhkM2U3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTU6MTE6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjE3ZTkwNDY2MmViNjUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00NzU5LDYgJiM0Mzs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC00ODgwLDYgJiM0Mzs0ODgxLDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNTAsNiAmIzQzOzIyNTAsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNjEsNiAmIzQzOzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggOWMzYTVjZjk5Nzc4Ni4uN2VhNGEyYmEwODQxNiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMjU3LDEyICYjNDM7MjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAl1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kOwogCWJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl2b2lkICpzaGFkb3dfcGFya2VkOwogCiAJVk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGUKJiM0MzsJICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLgomIzQzOwkgKi8KJiM0MzsJc2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dfcGFya2VkKQomIzQzOwkJc2hhZG93ID0gc2hhZG93X3BhcmtlZDsKJiM0MzsKIAlzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTsKIAljaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7CiAJY2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7CkBAIC00NzcsOCAmIzQzOzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CkBAIC02MzgsMTcgJiM0Mzs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCQkJCSAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZCkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LAomIzQzOwkJICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpOwogCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02NzgsMTcgJiM0Mzs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJCSAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LAomIzQzOwkJICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpOwogCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTsKIAlyZXR1cm4gZm9saW87CiB9CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDU2NzA4ZDFkMmRmZDUuLmMyN2U5NTczMjJiODIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMwLDcgJiM0Mzs3MzEsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01NzcsNyAmIzQzOzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgJmFtcDt3b3JraW5nc2V0LCB0cnVlKSkKIAkJZ290byBvdXQ7CiAKLQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkpCiYjNDM7CQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CiYjNDM7CWVsc2UKJiM0MzsJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwogCXdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgJiM0MzsgZmlsZSwgbnIpOwogCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk3Miw2ICYjNDM7OTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogd3JpdGViYWNrIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiYjNDM7CiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocykKJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlCiYjNDM7ICogenN3YXAgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93CiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWQKJiM0MzsgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8gd29ya2luZ3NldF9yZWZhdWx0KCkKJiM0MzsgKiAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmcgaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIKJiM0MzsgKiBkb3VibGUtY291bnQuCiYjNDM7ICovCiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCXN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7CiYjNDM7CQl2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUocGFya2VkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCWlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVykKJiM0MzsJCQlzaGFkb3cgPSBwYXJrZWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNoYWRvdzsKJiM0Mzt9CiYjNDM7CiAvKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSwKICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGEKQEAgLTk5Miw2ICYjNDM7MTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTk5OSw2ICYjNDM7MTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJaWYgKCFzaSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKJiM0MzsJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTsKJiM0MzsKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwogCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAogCQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTsKQEAgLTEwMzQsNyAmIzQzOzExMTAsOSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwlpZiAoIXNoYWRvdykKJiM0MzsJCXNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7CiYjNDM7CXhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTsKIAogCWNvdW50X3ZtX2V2ZW50KFpTV1BXQik7CiAJaWYgKGVudHJ5LSZndDtvYmpjZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTIKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB6c3dhcCwgc3dhcF9zdGF0ZSwgc2htZW0sIG1lbW9yeSwgdm1zY2FuLCBhbmQgd29ya2luZ3NldCBsaWtlbHkgKmRvZXNuJiMzOTt0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCBtYW5hZ2luZyB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgcGFya2luZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluL2NhY2hlIGRlbGV0aW9uLCBhbmQgaG9va2luZyB0aGlzIGludG8gZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCBhbmQgYHN3YXBpbl9zeW5jYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgc2hhZG93IHZhcmlhYmxlIGlzIGEgYHZvaWQgKmAsIHdoaWNoIGlzIGJhc2ljYWxseSBhbiBlbmNvZGVkIHZhbHVlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNyZWF0ZWQgdmlhIGB4YV9ta192YWx1ZWAgKG9yIGEgc2ltaWxhciBtZWNoYW5pc20gaW4gdGhlIHdvcmtpbmdzZXQgY29kZSkgYW5kIHN0b3JlZCBpbiB0aGUgeGFycmF5IChgc3dhcF96c3dhcF90cmVlKGUpYCkuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgcGFzc2VkIHRvIHVzZXJzcGFjZSBvciBhbnkgYWxsb2NhdGVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIG1lYW5zIHRoZSByaXNrIG9mIGFjY2lkZW50YWxseSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGlzIG1pbmltYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24mIzM5O3QgY2hhbmdlIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKRXNzZW50aWFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZXBseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcCBjYWNoZSBpbnRlcmFjdGlvbnMsIGFuZCB3b3JraW5nc2V0IHNoYWRvd3MuIEFueSBidWdzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgYXJlICpwcmVjaXNlbHkqIHRoZSB0eXBlcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBub3csIGp1c3QgdG8gYmUgc3VyZS4gSSBzZWUgdGhhdCBgc2hhZG93YCBpcyBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AuIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHJldHJpZXZlZCBzaGFkb3cgdG8gYE5VTExgIGFuZCB1cGRhdGVzIGl0IGlmIGEgcGFya2VkIHNoYWRvdyBpcyBmb3VuZC4gSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgYHNoYWRvd2AgaXMgZWl0aGVyIGRlcml2ZWQgZnJvbSBgc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KWAgb3Igc2V0IHRvIGBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XYC4gSXQgYWxsIGxvb2tzIHNhZmUuCgpTbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAocG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSwgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQpLCB0aGUgYWJzZW5jZSBvZiBuZXcsIGNvbXBsaWNhdGVkLCB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGlnaCBsaWtlbGlob29kIHRoYXQgYW55IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBuZWNlc3NpdGF0ZSBhIHNwZWNpYWwgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IHBhcmtzIHRoZSBzaGFkb3cgaW4gdGhlIHpzd2FwIHRyZWUgYW5kIHJlc3RvcmVzIGl0IHVwb24gc3dhcC1pbiBvciBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgZm9saW8gc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgYmUgcmVhZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjE5Ljk1ODgzOTYxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTY0Nzc4MTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMToxOS45NTg4NDQ5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI5Njg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTU6MTE6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcXG4gXFx0cHRlX3QgKnB0ZXA7XFxuK1xcdHZvaWQgKnNoYWRvdztcXG4gXFxuIFxcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Z290byBvdXRfcGFnZTtcXG4gXFx0fVxcbiBcXG4rXFx0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcXG4rXFx0aWYgKHNoYWRvdylcXG4rXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXFxuIFxcdCAqIGZvbGlvLVxcdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDkwMDFhYWYzYjdiOTQuLmY5NjhiNjhiNjBjNTIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI1MCw2ICsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuIFxcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xcbiBcXHRwZ29mZl90IG9mZnNldDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XFxuIFxcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xcbkBAIC0yMzYxLDYgKzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0ICovXFxuIFxcdGFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFxcdTAwMjZmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li43ZWE0YTJiYTA4NDE2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdlX21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuQEAgLTI1NywxMiArMjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcXG4gXFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHR2b2lkICpzaGFkb3dfcGFya2VkO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXFxuK1xcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cXG4rXFx0ICovXFxuK1xcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93X3BhcmtlZClcXG4rXFx0XFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcXG4rXFxuIFxcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xcbiBcXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XFxuIFxcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XFxuQEAgLTQ3Nyw4ICs0ODcsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFxuIFxcdC8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqL1xcbiBcXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcXG4tXFx0aWYgKHNoYWRvdylcXG4tXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbiBcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xcbiBcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbkBAIC02MzgsMTcgKzY0NiwyNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsIGJvb2wgcmVhZGFoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwdHVyZSB0aGUgc2xvdCdzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCxcXG4rXFx0XFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY3OCwxNyArNjk1LDI2IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0XFx0aWYgKGZvbGlvKVxcbiBcXHRcXHRcXHRyZXR1cm4gZm9saW87XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXFxuK1xcdFxcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rXFx0aWYgKHNoYWRvdylcXG4rXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbitcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDgsNiArNDgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdld2Fsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG5AQCAtNzMwLDcgKzczMSw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiBcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcbi1cXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuK1xcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbiBcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiBcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIFxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01NzcsNyArNTc3LDEwIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9scnUoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xcbitcXHRlbHNlXFxuK1xcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbiBcXHR3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSArIGZpbGUsIG5yKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggNzYxY2Q2OTllMGEzZS4uZjA1OTIwNjk0OGFiYSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qXFxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxcbisgKlxcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXFxuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcXG4rICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxcbisgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LlxcbisgKi9cXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xcbitcXG4rXFx0XFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXFxuKyAqXFxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxcbisgKiB6c3dhcCB0cmVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxcbisgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8gd29ya2luZ3NldF9yZWZhdWx0KClcXG4rICogKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyXFxuKyAqIGRvdWJsZS1jb3VudC5cXG4rICovXFxuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xcbitcXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xcbitcXHRcXHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xcbitcXG4rXFx0XFx0aWYgKCF4YV9pc192YWx1ZShwYXJrZWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcXG4rXFx0XFx0XFx0c2hhZG93ID0gcGFya2VkO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc2hhZG93O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXFxuQEAgLTk5Miw2ICsxMDY1LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4gXFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtOTk5LDYgKzEwNzMsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRpZiAoIXNpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFxuK1xcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XFxuK1xcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbkBAIC0xMDM0LDcgKzExMTAsOSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFzaGFkb3cpXFxuK1xcdFxcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XFxuK1xcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcXG4gXFxuIFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuIFxcdGlmIChlbnRyeS1cXHUwMDNlb2JqY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjIwLjQxNDg0MzM0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MzcxNjQyMTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgdG8gbWFuYWdlIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBhZmZlY3QgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNTAsNiArMjI1MCw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiArMjM2MiwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNTcsMTIgKzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDc3LDggKzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG5AQCAtNjM4LDE3ICs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjc4LDE3ICs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzAsNyArNzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTc3LDcgKzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKlxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xuKyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4rICpcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXG4rICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cbisgKi9cbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgKyBpKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0byB3b3JraW5nc2V0X3JlZmF1bHQoKVxuKyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuKyAqIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiArMTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTksNiArMTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4gXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG5AQCAtMTAzNCw3ICsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0aWYgKCFzaGFkb3cpXG4rXHRcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XG4rXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTE6MjAuNDE0ODQ0OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NTYzMDk0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lICp2ZXJ5KiBzZW5zaXRpdmUgYXJlYXM6IGBtbS96c3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBldmVuIHRoZSBoZWFkZXIgZm9yIHpzd2FwLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCdzIGEgd2lkZSByZWFjaCwgaW1tZWRpYXRlbHkgc2lnbmFsaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucy4gQWRkaW5nIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgaW1wbGllcyB0aGV5J3JlIGNoYW5naW5nIHRoZSBsaWZlY3ljbGUgYW5kIHRyYWNraW5nIG9mIHRoZXNlIGZvbGlvcywgYW5kIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGBfX3JlbW92ZV9tYXBwaW5nYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhpcyBjbGVhcmx5IGltcGFjdHMgc3dhcHBpbmcsIHRoZSBzd2FwIGNhY2hlLCBhbmQgaG93IHRoZSB3b3JraW5nIHNldCBpcyBoYW5kbGVkLiBHaXZlbiB0aGUgc2NvcGUsIGl0J3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBhbmQgSSdkIHB1dCB0aGlzIHBhdGNoIGZpcm1seSBpbiB0aGUgXCJuZWVkcyByaWdvcm91cyBmdXp6aW5nXCIgY2F0ZWdvcnkuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBvdXQgd2hpY2ggY29uZmlnIHRoaXMgYWZmZWN0cy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHpzd2FwIGlzIGVuYWJsZWQgYnkgdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Agb3IgbWF5YmUgYG1tL0tjb25maWcuenN3YXBgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjU3LjE3MTE1NzE0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM3ODY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMTo1Ny41MTQ5NTYzMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2MjkzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlpTV0FQIE9wdGltaXphdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHNlcmlvdXNseSBjb25zaWRlciBlbmFibGluZyBgWlNXQVBgIGFsb25nIHdpdGggdGhlIGBaU1dBUF9ERUZBVUxUX09OYCBkaXJlY3RpdmUuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyBvcHRpbWl6YXRpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBjdXJyZW50IHdvcmtsb2FkIGNoYXJhY3RlcmlzdGljcy4gV2Uga25vdyB0aGUgc3lzdGVtIG5lZWRzIHNvbWUgc3dhcCBzcGFjZSwgc28gd2UnbGwgbmVlZCB0byBjb25maWd1cmUgc3RhbmRhcmQgYFNXQVBgIGFzIHdlbGwuIEJlZm9yZSB3ZSBjb21taXQsIEknbGwgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWlNXQVBgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byBtYWtpbmcgc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGVsc2UgdGhpcyBjaGFuZ2UgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEyOjAwLjcyMTI1MjY1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyMjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMjowMC43Njk2ODIxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY0Mzc2MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBtbS9LY29uZmlnIExpbmUgMjIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL0tjb25maWdgIGFuZCB6ZXJvIGluIG9uIGxpbmUgMjIuIE15IGluaXRpYWwgZm9jdXMgaXMgbGlrZWx5IGRyaXZlbiBieSBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSdtIGhvcGluZyBsaW5lIDIyIGhvbGRzIHRoZSBrZXkgdG8gY2xhcmlmeWluZyBhIHBhcnRpY3VsYXIgbWFjcm8sIGNvbmRpdGlvbiwgb3IgZGVmYXVsdCBzZXR0aW5nIHRoYXQncyB0cmlwcGluZyBtZSB1cC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IChlLmcuLCBgaWZgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gKSBvciBhIGRlZmluaXRpb24gdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBhIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYmVoYXZlcyBhdCBjb21waWxlIHRpbWUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoZSBvcHRpb24sIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIGZlYXR1cmVzLCBvciBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLCBob3cgaXRzIHN0YXR1cyBpcyBkZXRlcm1pbmVkIGF0IGNvbXBpbGUtdGltZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgY29tcGlsZS10aW1lIHNpZGUtZWZmZWN0cyAoZS5nLiBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nIGhlYWRlciBmaWxlcykgYmFzZWQgb24gaXRzIHNlbGVjdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MDQuNDM0MDYyMzMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MDQuNDM0MTgxOTExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTA4NTQ4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWlNXQVAgUGF0Y2ggRm9jdXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgYWJvdXQgYFpTV0FQYCwgYW5kIGl0IGhpbmdlcyBvbiB0aGUgZXhpc3RpbmcgYFNXQVBgIGZ1bmN0aW9uYWxpdHkuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UgbmVlZCB0byBlbmFibGUgYFpTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBhbmQgb2YgY291cnNlLCBgU1dBUGAgaXRzZWxmIHRvIGdldCB0aGlzIHdvcmtpbmcuXG5cbk5vdywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoaXMgcGF0Y2g/IExldCdzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLlxuXG5gZG9fc3dhcF9wYWdlYCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGg7IGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBzaG1lbV9zd2FwaW5fZm9saW9gIGlzIHNvbWV3aGF0IGFjdGl2ZSB0b28sIGFuZCBpdCdzIGFsd2F5cyB1c2VmdWwgZm9yIHNvbWUgZm9jdXNlZCBmdXp6aW5nLiBCdXQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgdGFyZ2V0IGZvciBhbmFseXNpcy4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIHNvIHRoZXkgc2hvdWxkIGJlIHNjcnV0aW5pemVkIGNhcmVmdWxseS4gIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIGFyZSBhbHNvIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYWNjZXNzaWJpbGl0eSBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHN0YXRpYyBvciBub3QuIExldCBtZSBzZWUuLi4geWVzLCBpdCdzIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBBaCwgYnV0IHdhaXQsIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0aGF0IEkgc2hvdWxkIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIFJpZ2h0LiBTbyBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBtbS96c3dhcC5jYCB0byBzZWUgaG93IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHVzZWQgYW5kIGlmIHRoZXJlJ3MgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MTcuMDI1MDM5MzE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkwMjEwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xMDIyPXZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xMDU5LSAqL1xcbm1tL3pzd2FwLmM6MTA2MDpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbm1tL3pzd2FwLmMtMTA2MS1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTExNjY9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTE4OS1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTkwOlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExOTEtXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMjI0LVxcbm1tL3pzd2FwLmM6MTIyNTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMjoxNy4yNzQwNjkxMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNDIxNzk3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzd2FwIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBac3dhcCBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiBzb21lIGtleSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIEJ1dCBub3cgSSBuZWVkIHRvIGNoZWNrIHNvbWUgcmVsYXRlZCBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEludGVyZXN0aW5nLCB0aGVzZSBhcmUgKm5vdCogc3RhdGljLCBzbyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIGEgYnJvYWRlciByb2xlIG9yIGEgY2FsbCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLlxuXG5Ob3cgbGV0J3MgY29tcGFyZSB0aGF0IHRvIGBzaG1lbV9zd2FwaW5fZm9saW9gLCB3aGljaCAqaXMqIHN0YXRpYy4gVGhpcyBpcyBhbHNvIGZyb20gdGhlIHN3YXBwaW5nIGNvZGUuIFRoZW4gdGhlcmUncyBgZG9fc3dhcF9wYWdlYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCwgd2hpY2ggYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3JlIGNvcmUgc3dhcCBvcGVyYXRpb25zIHRoYXQgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5UbyB1bmRlcnN0YW5kIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIGJldHRlciwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayB0aGVyZSwgc2luY2UgdGhleSBzZWVtIHJlbGF0ZWQgdG8gdGhlIG1vcmUgZ2VuZXJhbCBzd2FwIHN0YXRlIGhhbmRsaW5nLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3dhcCBjYWNoaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzowNi40MTYyNTE3MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ2OTI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2NhY2hlX3JlYWRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02MTE9dm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjQzLVxcbm1tL3N3YXBfc3RhdGUuYzo2NDQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTY0NS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz03Mjg9c3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTc0MS1cXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcXHUwMDI2aWx4KTtcXG5tbS9zd2FwX3N0YXRlLmM6NzQyOlxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCBwbHVnLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTc0My1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTgyOD1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTg1Ni1cXHRcXHRyYV9lbnRyeSA9IHN3cF9lbnRyeShzd3BfdHlwZShlbnRyeSksIG9mZnNldCk7XFxubW0vc3dhcF9zdGF0ZS5jOjg1NzpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhyYV9lbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcXG5tbS9zd2FwX3N0YXRlLmMtODU4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzcGx1Zywgb2Zmc2V0ICE9IGVudHJ5X29mZnNldCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtODY3LVxcdC8qIFRoZSBwYWdlIHdhcyBsaWtlbHkgcmVhZCBhYm92ZSwgc28gbm8gbmVlZCBmb3IgcGx1Z2dpbmcgaGVyZSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo4Njg6XFx0cmV0dXJuIHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy04NjktfVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTkyNT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTY3LVxcdFxcdH1cXG5tbS9zd2FwX3N0YXRlLmM6OTY4OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbm1tL3N3YXBfc3RhdGUuYy05NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnNwbHVnLCBhZGRyICE9IHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTgyLVxcdC8qIFRoZSBmb2xpbyB3YXMgbGlrZWx5IHJlYWQgYWJvdmUsIHNvIG5vIG5lZWQgZm9yIHBsdWdnaW5nIGhlcmUgKi9cXG5tbS9zd2FwX3N0YXRlLmM6OTgzOlxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHRhcmdfZW50cnksIGdmcF9tYXNrLCBtcG9sLCB0YXJnX2lseCxcXG5tbS9zd2FwX3N0YXRlLmMtOTg0LVxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6MDYuNjg5NzI5Njk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQ4OTExNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAgRnVuY3Rpb25zIGluIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgYW5kIG1ha2luZyBzb21lIG9ic2VydmF0aW9ucy4gRmlyc3QsIEkgc2VlIHRoYXQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSBtZWFudCB0byBiZSB1c2VkIHdpdGhpbiBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdCDigJMgcHJvYmFibHkgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEl0J3Mgbm90IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSSB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVuZGVkIHRvIGNhbGwgZGlyZWN0bHkuXG5cblRoZW4sIEkgbm90ZSB0aGF0IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBhcmUgYWxsICpub24tc3RhdGljKi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGVyZSB0aGV5IGFyZSBkZWNsYXJlZC4gVGhpcyBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHVzZWQgaW4gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhleSBhcmUsIHRodXMsIHBhcnQgb2YgYSBmdW5jdGlvbmFsIGludGVyZmFjZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBJIG1heSBuZWVkIHRvIGJlIGNhbGxpbmcgZm9yIGEgZ2l2ZW4gdXNlLWNhc2UuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBgbW0vc3dhcF9zdGF0ZS5jYCBmb3Igc29tZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBgc3dhcGluX3N5bmNgIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24sIGl0cyBwYXJhbWV0ZXJzLCBhbmQgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjEwLjcxNDYyNDM1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjUzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02NDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjc4LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2Nzk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjgwLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY5My0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6Njk0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTY5NS1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjEwLjc2MTQ5NjMzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwODM4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgSW4gb24gS2V5IEFyZWFzIGZvciBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgdGhhdCBhcmUgbGlrZWx5IGltcGFjdGluZyBwZXJmb3JtYW5jZSwgbmFtZWx5IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCB0aGF0IGNydWNpYWwgZnVuY3Rpb24sIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkb19zd2FwX3BhZ2VgLCBhcyBJIGtub3cgaXQncyBmcmVxdWVudGx5IGNhbGxlZCBzbyBJIG5lZWQgdG8gYXZvaWQgaXQuXG5cbk5vdywgd2hlcmUgd2FzIHRoYXQgYHdvcmtpbmdzZXRfcmVmYXVsdGAgZnVuY3Rpb24gYWdhaW4/IEFoLCByaWdodCwgdGhhdCdzIGluIGBtbS93b3JraW5nc2V0LmNgLiBJJ2xsIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzoxNC4xODIzMzc3MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjAyMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1NDA6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01NDctICovXFxubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTU0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE0LjIzMjU1ODI4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNjE5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBhbmQgc2NvcGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgaXQgYmVpbmcgdXNlZD8gSG93IGlzIGl0IGJlaW5nIGFjY2Vzc2VkPyBHaXZlbiB0aGF0IHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCwgSSdsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIHpzd2FwIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS96c3dhcC5jYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIFRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBvZmZlciBjcnVjaWFsIGluc2lnaHRzIGludG8gaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgcmUtZmF1bHRlZCBvciBjbGVhcmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJIGV4cGVjdCB0aGF0IGJ5IHRyYWNpbmcgdGhlaXIgdXNhZ2UsIEkgY2FuIGZpZ3VyZSBvdXQgd2h5IHRoZSBcIm5vbi1zdGF0aWNcIiBjaGFyYWN0ZXJpc3RpYyBvZiBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBub3Rld29ydGh5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE3Ljg5NTE4MDUwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTA0MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk3OC0vKlxcbm1tL3pzd2FwLmM6OTc5OiAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXFxuLS1cXG5tbS96c3dhcC5jLTk4OC0gKi9cXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk5MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE4LjA3NTI5MTMxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI1OTIzNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIHRoaW5ncyBhcmVuJ3QganVzdCBmaXhlZDsgdGhleSdyZSBkeW5hbWljLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhvbmUgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUuIFRoZXNlIGxvb2sgbGlrZSB0aGUgY2VudHJhbCBwaWVjZXM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgenN3YXAgcHJvY2Vzcy5cblxuTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMga2V5LCBzbyBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIGBTV0FQYCwgYFpTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCB0byBiZSBlbmFibGVkLiBJIG1heSB3YW50IHRvIHBva2UgYXJvdW5kIGFuZCBjb25maXJtIHRoYXQuXG5cbkl0J3MgdGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBDb3VsZCB3ZSBiZSBtaXNzaW5nIHNvbWV0aGluZz8gVGhpbmtpbmcgbGF0ZXJhbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgbWlnaHQgYmUgcGVydGluZW50IHRvIHRyaWdnZXJpbmcgdGhhdCB3cml0ZWJhY2suIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSwgc28gSSdsbCBjaGVjayBgbW0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjI0LjcwMTIxODA5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjI0Ljc0ODcyNzQ0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjUyNzQxODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24sIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSwgaXMgZGVmaW5lZCBvciBoYXMgc29tZSBjcml0aWNhbCBsb2dpYyB0aGVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyDigJMgbWF5YmUgYSBkZWZhdWx0IHNldHRpbmcsIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgb3IgYW4gaW1wb3J0YW50IGNvbW1lbnQgdGhhdCdzIGluZmx1ZW5jaW5nIHNvbWUgYmVoYXZpb3IgSSdtIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCBJIGNhbid0IGp1c3Qgc2NhbiB0aGUgZmlsZTsgbXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgZ292ZXJucyBpdC4gSSBleHBlY3QgdGhhdCBJIHdpbGwgYmUgYWJsZSB0byBmb3JtIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFzIEkgYXBwcm9hY2ggbGluZSA0NS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozMC40MDE0NzI5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcbiAgNTU6XFx0XFx0ICBub3QgeWV0IGZ1bGwsIG9yIHRoZSBjZ3JvdXAgenN3YXAgbGltaXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQsXFxuICA1NjpcXHRcXHQgIHJlZHVjaW5nIHRoZSBjaGFuY2UgdGhhdCBjb2xkIHBhZ2VzIHdpbGwgcmVzaWRlIGluIHRoZSB6c3dhcCBwb29sXFxuICA1NzpcXHRcXHQgIGFuZCBjb25zdW1lIG1lbW9yeSBpbmRlZmluaXRlbHkuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNob2ljZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozMC40MDE1ODM2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAzMjY4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB3b3JraW5nc2V0IHNoYWRvd3MgY29ycmVjdGx5IGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgZ2V0dGluZyB3cml0ZWJhY2sgdG8gdHJpZ2dlciwgd2hpY2ggaXMgYWNoaWV2ZWQgYnkgdXRpbGl6aW5nIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIGluLlxuXG5JJ20gcXVpY2tseSBjaGVja2luZyBpZiBhIHNpbWlsYXIgY29tcHJlc3NvciBjb25maWcgbGlrZSBgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNGAgaXMgbmVjZXNzYXJ5LCBidXQgdGhlIGRlZmF1bHQgY29tcHJlc3NvciBpcyBmaW5lIGluIHRoaXMgaW5zdGFuY2UsIHNvIEknbGwgc2tpcCBpdC5cblxuTGV0IG1lIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBtb2RpZmllcyBzd2FwIGFuZCB6c3dhcCB0byBtYW5hZ2UgdGhvc2UgcGVza3kgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIEl0IGRvZXMgdGhpcyB3aXRoIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciBtYW5hZ2luZyBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcywgdG91Y2hpbmcgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAgZGlyZWN0bHkuIFRoZXkgYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCB3aGljaCBtZWFucyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgYXJlYS5cblxuTG9va2luZyBhdCB0aGUgY29uZmlncyB0aGF0IGFyZSBpbXBhY3RlZDogYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBkZWZpbml0ZWx5IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC5cblxuTm93LCBmb3IgZm9jdXMgc3ltYm9scywgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdtIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIGhpZ2hsaWdodCB0aGUgYXJlYSBvZiBjaGFuZ2UuIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgYXJlIHRoZSBvYnZpb3VzIGNob2ljZXMgYW5kIGFyZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLiBJIGNvbnNpZGVyZWQgYHN3YXBpbl9zeW5jYCBhcyBhIGdvb2Qgb25lLCBvciBwZXJoYXBzIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBidXQgSSBkaXNtaXNzZWQgdGhlIGxhdHRlciBhcyBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYywgYnV0IGlzIGVzc2VudGlhbCwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiBJIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBwb2ludC4gVGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvdmVyIHN0YXRpYywgYnV0IGl0IGRvZXNuJ3QgZm9yYmlkIHN0YXRpYyBmdW5jdGlvbnMuXG5cbk9rYXksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zLiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFyZSAqbm9uKi1zdGF0aWMgYW5kIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBzbyB0aGV5IGFyZSBwZXJmZWN0LiBUaGV5J3JlIGV4YWN0bHkgd2hhdCBJIG5lZWQuIEknbGwganVzdCBjb25maXJtIGB3b3JraW5nc2V0X3JlZmF1bHRgJ3MgZXhwb3J0IHN0YXR1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozOC45MDQ4NTc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY3MzE5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6MzguOTUzNTQwNDQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDIwNTUwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGFuZCBJJ20gcmVtaW5kZWQgaXQncyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gQnV0LCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmlzbid0KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgZGlzdGluY3Rpb24gaXMgY3J1Y2lhbC4gTm9uLXN0YXRpYyBtZWFucyBpdCBtaWdodCBiZSBhY2Nlc3NpYmxlIGluIHdheXMgSSBuZWVkIHRvIGNvbnNpZGVyLCBldmVuIGlmIGl0J3Mgbm90IGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgcHVibGlzaGVkIEFQSS4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZC4gSXMgaXQgYWNjZXNzaWJsZSB0byBsaW5raW5nPyBJcyBpdCBpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0IG9yIGEgc2VwYXJhdGUgb25lP1xuXG5UaGVyZWZvcmUsIEkgbm93IG5lZWQgdG8gZGV0ZXJtaW5lLCBhbmQgSSdsbCBxdWlja2x5IGNoZWNrLCBpZiBgc3dhcGluX3N5bmNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBJIG5lZWQgdG8ga25vdyBmb3Igc3VyZSBpZiBpdCdzIGJlaW5nIGV4cG9zZWQgdmlhIHNvbWUgb3RoZXIgbWVhbnMgb3IgaWYgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0ICpzZWVtcyogdG8gYmUgcHJpdmF0ZSBidXQgYWN0dWFsbHkgaXNuJ3QuIFRoZSBzY29waW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LCBhbmQgb2YgY291cnNlLCB3aGV0aGVyIG9yIG5vdCBhIHNlZW1pbmdseSBpbnRlcm5hbCBmdW5jdGlvbiBpcyBnb2luZyB0byBjYXVzZSB0cm91YmxlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NDIuNjk1NTk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI5NjU2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo0Mi43NDE5MDI1NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NzU0NzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkZpbmFsIFBhdGNoIFJldmlldzogQ2hlY2tpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB3b3JrIG9uIHRoaXMgcGF0Y2gsIGZvY3VzaW5nIG9uIHRoZSBzZWxlY3RlZCBzeW1ib2xzIGFuZCBjb25maWdzLCBsb29rcyBzb2xpZC4gSSdtIHBsZWFzZWQgd2l0aCB0aGUgZGlyZWN0aW9uIHdlJ3JlIHRha2luZy5cblxuQmVmb3JlIHdlIGNhbGwgdGhpcyBkb25lLCB0aG91Z2gsIEkgbmVlZCB0byBkbyBhIGZpbmFsIHN3ZWVwIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgZGVwZW5kZW5jeS4gSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICpub24tc3RhdGljKiwgc28gSSBuZWVkIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX01FTUNHYC4gVGhlIHJlYXNvbiBJJ20gcmFpc2luZyB0aGlzIGZsYWcgaXMgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBpcyBpbiBgenN3YXAuY2AuIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmFjdGlvbiB0aGVyZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS96c3dhcC5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYE1FTUNHYCB0aGF0IHdlIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGF0IHRoaXMgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTMyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NDcuMDM5NDU0MjMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMzczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTYxNz1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjUwLS8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxubW0venN3YXAuYzo2NTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo0Ny4wODU0ODM0MzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1MTM4NjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBXcml0ZWJhY2sgQnVmZmVyIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIHBhdGNoLCBhbmQgSSdtIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGluIG15IGhlYWQuIGBNRU1DR2AgaXMgdXN1YWxseSBlbmFibGVkLCBhbmQgSSdkIG5vcm1hbGx5IGp1c3QgYXNzdW1lIGl0J3MgdGhlcmUsIGJ1dCBJIHRoaW5rIEkgc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCBpbiBjYXNlLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIGBaU1dBUGAgZG9lc24ndCBzdHJpY3RseSBkZXBlbmQgb24gYE1FTUNHYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYCBtaWdodCBkZXBlbmQgb24gTUVNQ0csIGJ1dCBpdCBkb2Vzbid0LlxuXG5BbHJpZ2h0LCBsZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgYFpTV0FQYCBkZXBlbmRlbmNpZXMuIEl0IG5lZWRzIGBTV0FQYCwgbmF0dXJhbGx5LiBJdCAqc2VsZWN0cyogYENSWVBUT2AgYW5kIGBaU01BTExPQ2AuIE9rYXksIHRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuIEdpdmVuIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIHdyaXRlYmFjayBidWZmZXJzIGFuZCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIEkgdGhpbmsgdGhhdCBjb3ZlcnMgYWxsIHRoZSBiYXNlcy5cblxuVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEknbSByZWFkaW5nLCBtb2RpZmllcyBob3cgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgd29yaywgcGFydGljdWxhcmx5IHdpdGggYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGFkZGl0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIHNoYWRvd3Mgd2l0aGluIHRoZSB6c3dhcCB0cmVlLiBJdCdzIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gb3BlcmF0aW9ucywgc28gd2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgZWZmZWN0cyBvbiBwYWdlIHJlY2xhaW0sIHRoZSBzd2FwIGNhY2hlLCBhbmQgenN3YXAgaXRzZWxmLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSwgYW5kIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC5cblxuTGV0J3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBmdW5jdGlvbiB0byBzb2xpZGlmeSB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjYsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjU0LjAzNjg3MzIyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0Mzg2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgdG8gbWFuYWdlIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBhZmZlY3QgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo1NC4xMzEyNjk2NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc1MzQwODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NTQuMTMyMTIwMjU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNDc0NDg1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBwYXJrcyB0aGUgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGFuZCByZXN0b3JlcyBpdCB1cG9uIHN3YXAtaW4gb3Igc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNTAsNiArMjI1MCw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiArMjM2MiwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNTcsMTIgKzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDc3LDggKzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG5AQCAtNjM4LDE3ICs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjc4LDE3ICs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzAsNyArNzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTc3LDcgKzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKlxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xuKyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4rICpcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXG4rICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cbisgKi9cbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgKyBpKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0byB3b3JraW5nc2V0X3JlZmF1bHQoKVxuKyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuKyAqIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiArMTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTksNiArMTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4gXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG5AQCAtMTAzNCw3ICsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0aWYgKCFzaGFkb3cpXG4rXHRcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XG4rXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NTQuMTMyMTI2NzU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDc0NDU1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgenN3YXAsIHN3YXBfc3RhdGUsIHNobWVtLCBtZW1vcnksIHZtc2NhbiwgYW5kIHdvcmtpbmdzZXQgbGlrZWx5ICpkb2Vzbid0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCBtYW5hZ2luZyB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIHRoZSBwYXJraW5nIGFuZCByZXN0b3Jpbmcgb2YgdGhlIHdvcmtpbmdzZXQgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4vY2FjaGUgZGVsZXRpb24sIGFuZCBob29raW5nIHRoaXMgaW50byBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGFuZCBgc3dhcGluX3N5bmNgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHNoYWRvdyB2YXJpYWJsZSBpcyBhIGB2b2lkICpgLCB3aGljaCBpcyBiYXNpY2FsbHkgYW4gZW5jb2RlZCB2YWx1ZS4gSXQgbG9va3MgbGlrZSBpdCdzIGNyZWF0ZWQgdmlhIGB4YV9ta192YWx1ZWAgKG9yIGEgc2ltaWxhciBtZWNoYW5pc20gaW4gdGhlIHdvcmtpbmdzZXQgY29kZSkgYW5kIHN0b3JlZCBpbiB0aGUgeGFycmF5IChgc3dhcF96c3dhcF90cmVlKGUpYCkuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIG9yIGFueSBhbGxvY2F0ZWQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgbWVhbnMgdGhlIHJpc2sgb2YgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgaXMgbWluaW1hbCwgZXNwZWNpYWxseSBzaW5jZSBpdCBkb2Vzbid0IGNoYW5nZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy5cblxuRXNzZW50aWFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZXBseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcCBjYWNoZSBpbnRlcmFjdGlvbnMsIGFuZCB3b3JraW5nc2V0IHNoYWRvd3MuIEFueSBidWdzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgYXJlICpwcmVjaXNlbHkqIHRoZSB0eXBlcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggbm93LCBqdXN0IHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgYHNoYWRvd2AgaXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGluIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgLiBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhbHNvIGluaXRpYWxpemVzIHRoZSByZXRyaWV2ZWQgc2hhZG93IHRvIGBOVUxMYCBhbmQgdXBkYXRlcyBpdCBpZiBhIHBhcmtlZCBzaGFkb3cgaXMgZm91bmQuIEluc2lkZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhlIGBzaGFkb3dgIGlzIGVpdGhlciBkZXJpdmVkIGZyb20gYHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSlgIG9yIHNldCB0byBgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV2AuIEl0IGFsbCBsb29rcyBzYWZlLlxuXG5TbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAocG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSwgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQpLCB0aGUgYWJzZW5jZSBvZiBuZXcsIGNvbXBsaWNhdGVkLCB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGlnaCBsaWtlbGlob29kIHRoYXQgYW55IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCB0aGlzIGRvZXNuJ3QgbmVjZXNzaXRhdGUgYSBzcGVjaWFsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxNDowNS42MDY1ODU3OThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IHBhcmtzIHRoZSBzaGFkb3cgaW4gdGhlIHpzd2FwIHRyZWUgYW5kIHJlc3RvcmVzIGl0IHVwb24gc3dhcC1pbiBvciBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgZm9saW8gc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgYmUgcmVhZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowrncn2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 14:54:44 +0000 UTC FinishedAt: 2026-08-17 15:14:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON" ], "series_id": "f2672dec-e407-40e2-b79a-7c0b99b163bf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zswap_folio_is_writeback_buffer", "zswap_lookup_and_clear_shadows", "swapin_sync", "workingset_refault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MmIzM0OywKICAgICYjMzQ7c3dhcGluX3N5bmMmIzM0OywKICAgICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XG4gYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpO1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICYjNDM7NDc1OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0dW5zaWduZWQgbG9uZyBwYWdlX2lkeDtcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbiBcdHB0ZV90ICpwdGVwO1xuJiM0MztcdHZvaWQgKnNoYWRvdztcbiBcbiBcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcbiBcdFx0Z290byBvdXQ7XG5AQCAtNDg4MCw2ICYjNDM7NDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbiYjNDM7XHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZlxuIFx0ICogZm9saW8tXHUwMDNlaW5kZXggb2Ygbm9uLWtzbSBmb2xpb3Mgd291bGQgYmUgbm9ubGluZWFyIGluc2lkZSB0aGVcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggOTAwMWFhZjNiN2I5NC4uZjk2OGI2OGI2MGM1MiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0yMjUwLDYgJiM0MzsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIFx0aW50IGVycm9yLCBucl9wYWdlcywgb3JkZXI7XG4gXHRwZ29mZl90IG9mZnNldDtcbiYjNDM7XHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiAmIzQzOzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdCAqL1xuIFx0YXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTtcbiBcbiYjNDM7XHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3cpXG4mIzQzO1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4mIzQzO1xuIFx0aWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7XG4gXHRcdGVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbyhcdTAwMjZmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTtcbiBcdFx0aWYgKGVycm9yKVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggOWMzYTVjZjk5Nzc4Ni4uN2VhNGEyYmEwODQxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG5AQCAtMjU3LDEyICYjNDM7MjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gXHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4mIzQzO1x0ICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLlxuJiM0MztcdCAqL1xuJiM0MztcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuJiM0MztcdGlmIChzaGFkb3dfcGFya2VkKVxuJiM0MztcdFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcbiYjNDM7XG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzO1xuQEAgLTQ3Nyw4ICYjNDM7NDg3LDYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXG4gXHQvKiBtZW1zdyB1bmNoYXJnZXMgc3dhcCB3aGVuIGZvbGlvIGlzIGFkZGVkIHRvIHN3YXAgY2FjaGUgKi9cbiBcdG1lbWNnMV9zd2FwaW4oZm9saW8pO1xuLVx0aWYgKHNoYWRvdylcbi1cdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuIFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbkBAIC02MzgsMTcgJiM0Mzs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuJiM0MztcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRpZiAoc2hhZG93KVxuJiM0MztcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuJiM0MztcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XG4gXHRpZiAocmVhZGFoZWFkKSB7XG4gXHRcdGZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pO1xuQEAgLTY3OCwxNyAmIzQzOzY5NSwyNiBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuJiM0MztcdFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4mIzQzO1x0aWYgKHNoYWRvdylcbiYjNDM7XHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiYjNDM7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiAmIzQzOzQ4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kYXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdld2Fsay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2htZW1fZnMuaFx1MDAzZVxuQEAgLTczMCw3ICYjNDM7NzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiYjNDM7XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiBcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC01NzcsNyAmIzQzOzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9scnUoZm9saW8pKSlcbiYjNDM7XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbiBcdHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSAmIzQzOyBmaWxlLCBucik7XG4gXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmYwNTkyMDY5NDhhYmEgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtOTcyLDYgJiM0Mzs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/XG4mIzQzOyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4mIzQzOyAqXG4mIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHNcbiYjNDM7ICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4mIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuXG4mIzQzOyAqL1xuJiM0Mztib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGk7XG4mIzQzO1xuJiM0MztcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyAtIHJldHJpZXZlIGFuZCBjbGVhciBAZm9saW8mIzM5O3MgcGFya2VkIHNoYWRvdyhzKVxuJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4mIzQzOyAqXG4mIzQzOyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8mIzM5O3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbiYjNDM7ICogenN3YXAgdHJlZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWRcbiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvIHdvcmtpbmdzZXRfcmVmYXVsdCgpXG4mIzQzOyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuJiM0MzsgKiBkb3VibGUtY291bnQuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiYjNDM7XHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcbiYjNDM7XHR2b2lkICpzaGFkb3cgPSBOVUxMO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcdFx0c3RydWN0IHhhcnJheSAqdHJlZSA9IHN3YXBfenN3YXBfdHJlZShlKTtcbiYjNDM7XHRcdHZvaWQgKnBhcmtlZCA9IHhhX2xvYWQodHJlZSwgb2Zmc2V0ICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRcdGlmICgheGFfaXNfdmFsdWUocGFya2VkKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7XG4mIzQzO1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4mIzQzO1x0XHRcdHNoYWRvdyA9IHBhcmtlZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaGFkb3c7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7XG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4mIzQzO1x0dm9pZCAqc2hhZG93O1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuQEAgLTk5OSw2ICYjNDM7MTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiYjNDM7XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwZW50cnkpO1xuJiM0MztcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbiBcdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbkBAIC0xMDM0LDcgJiM0MzsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuJiM0MztcdGlmICghc2hhZG93KVxuJiM0MztcdFx0c2hhZG93ID0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVztcbiYjNDM7XHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7WlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXImIzM0OywKICAgICYjMzQ7enN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzJiMzNDssCiAgICAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgICAmIzM0O3dvcmtpbmdzZXRfcmVmYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmMzNjRhYmQ1YTA3MmRhY2UyOTUxZjVmMGYxZDFmY2FiY2Q4ZDNlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDE1OjExOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oCmluZGV4IDMwYzE5M2ExMjA3ZTEuLmRmYjcxNTMyMzZmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw4IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNjksNiAmIzQzOzcxLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfWlNXQVBfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDc1OSw2ICYjNDM7NDc1OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7CiAJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCXB0ZV90ICpwdGVwOwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpCiAJCWdvdG8gb3V0OwpAQCAtNDg4MCw2ICYjNDM7NDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXRfcGFnZTsKIAl9CiAKJiM0MzsJc2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTsKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAkvKgogCSAqIEtTTSBzb21ldGltZXMgaGFzIHRvIGNvcHkgb24gcmVhZCBmYXVsdHMsIGZvciBleGFtcGxlLCBpZgogCSAqIGZvbGlvLSZndDtpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZQpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTAwMWFhZjNiN2I5NC4uZjk2OGI2OGI2MGM1MiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC0yMjUwLDYgJiM0MzsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDsKIAlpbnQgZXJyb3IsIG5yX3BhZ2VzLCBvcmRlcjsKIAlwZ29mZl90IG9mZnNldDsKJiM0MzsJdm9pZCAqc2hhZG93OwogCiAJVk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7CiAJaW5kZXhfZW50cnkgPSByYWRpeF90b19zd3BfZW50cnkoKmZvbGlvcCk7CkBAIC0yMzYxLDYgJiM0MzsyMzYyLDEwIEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJICovCiAJYXJjaF9zd2FwX3Jlc3RvcmUoZm9saW9fc3dhcChzd2FwLCBmb2xpbyksIGZvbGlvKTsKIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCWlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkgewogCQllcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oJmFtcDtmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTsKIAkJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcF90YWJsZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3dhcC5oJiMzNDsKQEAgLTI1NywxMiAmIzQzOzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJdW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDsKIAlib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJdm9pZCAqc2hhZG93X3BhcmtlZDsKIAogCVZNX1dBUk5fT05fT05DRShfX3N3YXBfZW50cnlfdG9fY2x1c3RlcihlbnRyeSkgIT0gY2kpOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKJiM0MzsJLyoKJiM0MzsJICogQSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHBhcmtlZCB0aGUgc2xvdCYjMzk7cyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlCiYjNDM7CSAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi4KJiM0MzsJICovCiYjNDM7CXNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93X3BhcmtlZCkKJiM0MzsJCXNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7CiYjNDM7CiAJc2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7CiAJY2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpOwogCWNpX2VuZCA9IGNpX3N0YXJ0ICYjNDM7IG5yX3BhZ2VzOwpAQCAtNDc3LDggJiM0Mzs0ODcsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAogCS8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqLwogCW1lbWNnMV9zd2FwaW4oZm9saW8pOwotCWlmIChzaGFkb3cpCi0JCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKIAogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwpAQCAtNjM4LDE3ICYjNDM7NjQ2LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQkJCQkgICBzdHJ1Y3Qgc3dhcF9pb2NiICoqcGx1ZywgYm9vbCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjc4LDE3ICYjNDM7Njk1LDI2IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCQkgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJdm9pZCAqc2hhZG93ID0gTlVMTDsKIAogCWRvIHsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBDYXB0dXJlIHRoZSBzbG90JiMzOTtzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCwKJiM0MzsJCSAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy4KJiM0MzsJCSAqLwomIzQzOwkJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTsKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7CiAJcmV0dXJuIGZvbGlvOwogfQpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNDgsNiAmIzQzOzQ4LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RheC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2V3YWxrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKQEAgLTczMCw3ICYjNDM7NzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCWlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHsKIAkJc3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLSZndDtzd2FwOwogCi0JCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQomIzQzOwkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykgJmFtcDsmYW1wOwomIzQzOwkJICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSkKIAkJCXNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7CiAJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKIAkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7CmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmMKaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3NldC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtNTc3LDcgJiM0Mzs1NzcsMTAgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWlmICghd29ya2luZ3NldF90ZXN0X3JlY2VudChzaGFkb3csIGZpbGUsICZhbXA7d29ya2luZ3NldCwgdHJ1ZSkpCiAJCWdvdG8gb3V0OwogCi0JZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CiYjNDM7CWlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKQomIzQzOwkJZm9saW9fYWN0aXZhdGUoZm9saW8pOwomIzQzOwllbHNlCiYjNDM7CQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKIAl3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICYjNDM7IGZpbGUsIG5yKTsKIApkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggNzYxY2Q2OTllMGEzZS4uZjA1OTIwNjk0OGFiYSAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05NzIsNiAmIzQzOzk3Miw3OSBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzOwomIzQzOyNkZWZpbmUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVyB4YV9ta192YWx1ZSgwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciAtIGlzIEBmb2xpbyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXI/CiYjNDM7ICogQGZvbGlvOiB0aGUgZm9saW8gYmVpbmcgZXhhbWluZWQgKHR5cGljYWxseSBhIHN3YXAgY2FjaGUgZm9saW8gdW5kZXIgcmVjbGFpbSkKJiM0MzsgKgomIzQzOyAqIEEgZm9saW8gaXMgYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyIHdoZW4gZXZlcnkgb25lIG9mIGl0cyBzd2FwIG9mZnNldHMgaG9sZHMKJiM0MzsgKiBhIHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93IChhIHJlYWwgc2hhZG93IG9yIHRoZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XCiYjNDM7ICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBAZm9saW8gaXMgYSB3cml0ZWJhY2sgYnVmZmVyLCBpbiB3aGljaCBjYXNlIHRoZSByZWNsYWltIHBhdGgKJiM0MzsgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LgomIzQzOyAqLwomIzQzO2Jvb2wgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3cF9lbnRyeV90IGUgPSBzd3BfZW50cnkoc3dwX3R5cGUoc3dwKSwgb2Zmc2V0ICYjNDM7IGkpOwomIzQzOwomIzQzOwkJaWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICYjNDM7IGkpKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbyYjMzk7cyBwYXJrZWQgc2hhZG93KHMpCiYjNDM7ICogQGZvbGlvOiB0aGUgd3JpdGViYWNrIGJ1ZmZlciBmb2xpbyAob3IgdGhlIHN3YXBpbiBmb2xpbyB0aGF0IGNvbnN1bWVkIGl0KQomIzQzOyAqCiYjNDM7ICogUmVtb3ZlIGFueSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvd3MgZm9yIEBmb2xpbyYjMzk7cyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZQomIzQzOyAqIHpzd2FwIHRyZWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvdwomIzQzOyAqIChzZW50aW5lbCBvbmx5KSBvciBub3RoaW5nIHBhcmtlZC4gVGhlIGNhbGxlciBlaXRoZXIgcmVzdG9yZXMgdGhlIHJldHVybmVkCiYjNDM7ICogc2hhZG93IGludG8gdGhlIHN3YXAgc2xvdCAoYnVmZmVyIGRyb3BwZWQpIG9yIGZlZWRzIGl0IHRvIHdvcmtpbmdzZXRfcmVmYXVsdCgpCiYjNDM7ICogKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyCiYjNDM7ICogZG91YmxlLWNvdW50LgomIzQzOyAqLwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tJmd0O3N3YXA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiYjNDM7CXBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CWlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpOwomIzQzOwkJdm9pZCAqcGFya2VkID0geGFfbG9hZCh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CQlpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpCiYjNDM7CQkJc2hhZG93ID0gcGFya2VkOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzaGFkb3c7CiYjNDM7fQomIzQzOwogLyoKICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsCiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhCkBAIC05OTIsNiAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCkBAIC05OTksNiAmIzQzOzEwNzMsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCWlmICghc2kpCiAJCXJldHVybiAtRUVYSVNUOwogCiYjNDM7CXNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7CiYjNDM7CiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKIAkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CkBAIC0xMDM0LDcgJiM0MzsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkJZ290byBvdXQ7CiAJfQogCi0JeGFfZXJhc2UodHJlZSwgb2Zmc2V0KTsKJiM0MzsJaWYgKCFzaGFkb3cpCiYjNDM7CQlzaGFkb3cgPSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XOwomIzQzOwl4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7CiAKIAljb3VudF92bV9ldmVudChaU1dQV0IpOwogCWlmIChlbnRyeS0mZ3Q7b2JqY2cpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiBzb21lICp2ZXJ5KiBzZW5zaXRpdmUgYXJlYXM6IGBtbS96c3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBldmVuIHRoZSBoZWFkZXIgZm9yIHpzd2FwLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCYjMzk7cyBhIHdpZGUgcmVhY2gsIGltbWVkaWF0ZWx5IHNpZ25hbGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMuIEFkZGluZyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGltcGxpZXMgdGhleSYjMzk7cmUgY2hhbmdpbmcgdGhlIGxpZmVjeWNsZSBhbmQgdHJhY2tpbmcgb2YgdGhlc2UgZm9saW9zLCBhbmQgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGlzIGNsZWFybHkgaW1wYWN0cyBzd2FwcGluZywgdGhlIHN3YXAgY2FjaGUsIGFuZCBob3cgdGhlIHdvcmtpbmcgc2V0IGlzIGhhbmRsZWQuIEdpdmVuIHRoZSBzY29wZSwgaXQmIzM5O3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBhbmQgSSYjMzk7ZCBwdXQgdGhpcyBwYXRjaCBmaXJtbHkgaW4gdGhlICYjMzQ7bmVlZHMgcmlnb3JvdXMgZnV6emluZyYjMzQ7IGNhdGVnb3J5LiBMZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBmaW5kIG91dCB3aGljaCBjb25maWcgdGhpcyBhZmZlY3RzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHpzd2FwIGlzIGVuYWJsZWQgYnkgdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Agb3IgbWF5YmUgYG1tL0tjb25maWcuenN3YXBgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlpTV0FQIE9wdGltaXphdGlvbiBTdHJhdGVneSoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gc2VyaW91c2x5IGNvbnNpZGVyIGVuYWJsaW5nIGBaU1dBUGAgYWxvbmcgd2l0aCB0aGUgYFpTV0FQX0RFRkFVTFRfT05gIGRpcmVjdGl2ZS4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIG9wdGltaXphdGlvbiwgcGFydGljdWxhcmx5IHdpdGggdGhlIGN1cnJlbnQgd29ya2xvYWQgY2hhcmFjdGVyaXN0aWNzLiBXZSBrbm93IHRoZSBzeXN0ZW0gbmVlZHMgc29tZSBzd2FwIHNwYWNlLCBzbyB3ZSYjMzk7bGwgbmVlZCB0byBjb25maWd1cmUgc3RhbmRhcmQgYFNXQVBgIGFzIHdlbGwuIEJlZm9yZSB3ZSBjb21taXQsIEkmIzM5O2xsIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFpTV0FQYC4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgZ29pbmcgdG8gYmUgY3JpdGljYWwgdG8gbWFraW5nIHN1cmUgdGhpcyBjb25maWd1cmF0aW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gSSBuZWVkIHRvIGtub3cgcHJlY2lzZWx5IHdoYXQgZWxzZSB0aGlzIGNoYW5nZSBpbXBhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMj1tZW51Y29uZmlnIFNXQVBcbi0tXG5tbS9LY29uZmlnLTIxLVxubW0vS2NvbmZpZzoyMjpjb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTM0LVxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9NTk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy03Ni1cbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG5tbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWZsYXRlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04Mi1cbm1tL0tjb25maWc6ODM6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9cbm1tL0tjb25maWctODQtXHRib29sIFwmIzM0O0xaT1wmIzM0O1xuLS1cbm1tL0tjb25maWctODgtXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXG5tbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0LVxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxubW0vS2NvbmZpZy05Ni1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDAtXG5tbS9LY29uZmlnOjEwMTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNEhDXG5tbS9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7TFo0SENcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTEwNi1cbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxubW0vS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2Vcbm1tL0tjb25maWctMTEzLVxubW0vS2NvbmZpZzoxMTQ6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBtbS9LY29uZmlnIExpbmUgMjIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vS2NvbmZpZ2AgYW5kIHplcm8gaW4gb24gbGluZSAyMi4gTXkgaW5pdGlhbCBmb2N1cyBpcyBsaWtlbHkgZHJpdmVuIGJ5IHNvbWV0aGluZyBzcGVjaWZpYyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSYjMzk7bSBob3BpbmcgbGluZSAyMiBob2xkcyB0aGUga2V5IHRvIGNsYXJpZnlpbmcgYSBwYXJ0aWN1bGFyIG1hY3JvLCBjb25kaXRpb24sIG9yIGRlZmF1bHQgc2V0dGluZyB0aGF0JiMzOTtzIHRyaXBwaW5nIG1lIHVwLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IChlLmcuLCBgaWZgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gKSBvciBhIGRlZmluaXRpb24gdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBhIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYmVoYXZlcyBhdCBjb21waWxlIHRpbWUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBzY29wZSBvZiB0aGUgb3B0aW9uLCBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBmZWF0dXJlcywgb3IgaG93IGl0IG1pZ2h0IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwga2VybmVsIGNvbmZpZ3VyYXRpb24uIE1vcmUgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY2llcyBvZiBhIHNwZWNpZmljIGZlYXR1cmUsIGhvdyBpdHMgc3RhdHVzIGlzIGRldGVybWluZWQgYXQgY29tcGlsZS10aW1lLCBhbmQgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueSBjb21waWxlLXRpbWUgc2lkZS1lZmZlY3RzIChlLmcuIGluY2x1ZGluZyBvciBleGNsdWRpbmcgaGVhZGVyIGZpbGVzKSBiYXNlZCBvbiBpdHMgc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZSBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgWlNXQVAgUGF0Y2ggRm9jdXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IGFib3V0IGBaU1dBUGAsIGFuZCBpdCBoaW5nZXMgb24gdGhlIGV4aXN0aW5nIGBTV0FQYCBmdW5jdGlvbmFsaXR5LiBTZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHdlIG5lZWQgdG8gZW5hYmxlIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIG9mIGNvdXJzZSwgYFNXQVBgIGl0c2VsZiB0byBnZXQgdGhpcyB3b3JraW5nLgoKTm93LCB3aGVyZSBhcmUgdGhlIGNyaXRpY2FsIHBvaW50cyB3aXRoaW4gdGhpcyBwYXRjaD8gTGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLgoKYGRvX3N3YXBfcGFnZWAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoOyBhbHdheXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBgc2htZW1fc3dhcGluX2ZvbGlvYCBpcyBzb21ld2hhdCBhY3RpdmUgdG9vLCBhbmQgaXQmIzM5O3MgYWx3YXlzIHVzZWZ1bCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuIEJ1dCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBzZWVtcyBsaWtlIGEgcHJpbWFyeSB0YXJnZXQgZm9yIGFuYWx5c2lzLiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFyZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9ucywgc28gdGhleSBzaG91bGQgYmUgc2NydXRpbml6ZWQgY2FyZWZ1bGx5LiAgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgYXJlIGFsc28gcHJpbWUgY2FuZGlkYXRlcyBmb3IgaW52ZXN0aWdhdGlvbi4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYWNjZXNzaWJpbGl0eSBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3Igbm90LiBMZXQgbWUgc2VlLi4uIHllcywgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0venN3YXAuY2AuIEFoLCBidXQgd2FpdCwgdGhlIHByb21wdCByZW1pbmRzIG1lIHRoYXQgSSBzaG91bGQgJiMzNDtQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMmIzM0Oy4gUmlnaHQuIFNvIGxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBpbnNpZGUgYG1tL3pzd2FwLmNgIHRvIHNlZSBob3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgdXNlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9MTAyMj12b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS96c3dhcC5jLTEwNTktICovXG5tbS96c3dhcC5jOjEwNjA6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbm1tL3pzd2FwLmMtMTA2MS1cdFx0XHRcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcbi0tXG5tbS96c3dhcC5jPTExNjY9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbi0tXG5tbS96c3dhcC5jLTExODktXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXG5tbS96c3dhcC5jOjExOTA6XHQgKiAgICB6c3dhcF93cml0ZWJhY2tfZW50cnkoKSB0byBwaW4gdGhlIHN3YXAgZW50cnkgYW5kXG5tbS96c3dhcC5jLTExOTEtXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSYjMzk7c1xuLS1cbm1tL3pzd2FwLmMtMTIyNC1cbm1tL3pzd2FwLmM6MTIyNTpcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcbm1tL3pzd2FwLmMtMTIyNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgWnN3YXAgRnVuY3Rpb24gVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgWnN3YXAgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2Ygc29tZSBrZXkgZnVuY3Rpb25zLiBJIHNlZSB0aGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgbW9kdWxhci4gQnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgc29tZSByZWxhdGVkIGZ1bmN0aW9uczogYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gSW50ZXJlc3RpbmcsIHRoZXNlIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIGEgYnJvYWRlciByb2xlIG9yIGEgY2FsbCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLgoKTm93IGxldCYjMzk7cyBjb21wYXJlIHRoYXQgdG8gYHNobWVtX3N3YXBpbl9mb2xpb2AsIHdoaWNoICppcyogc3RhdGljLiBUaGlzIGlzIGFsc28gZnJvbSB0aGUgc3dhcHBpbmcgY29kZS4gVGhlbiB0aGVyZSYjMzk7cyBgZG9fc3dhcF9wYWdlYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCwgd2hpY2ggYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5JiMzOTtyZSBjb3JlIHN3YXAgb3BlcmF0aW9ucyB0aGF0IGFyZSB1c2VkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4KClRvIHVuZGVyc3RhbmQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AgYmV0dGVyLCBpdCBtYWtlcyBzZW5zZSB0byBnbyBzdHJhaWdodCB0byBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIHRoZXJlLCBzaW5jZSB0aGV5IHNlZW0gcmVsYXRlZCB0byB0aGUgbW9yZSBnZW5lcmFsIHN3YXAgc3RhdGUgaGFuZGxpbmcuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3dhcCBjYWNoaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9yZWFkX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02MTE9dm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY0My1cbm1tL3N3YXBfc3RhdGUuYzo2NDQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG5tbS9zd2FwX3N0YXRlLmMtNjQ1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzI4PXN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzQxLVx0bXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgXHUwMDI2aWx4KTtcbm1tL3N3YXBfc3RhdGUuYzo3NDI6XHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgcGx1ZywgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTc0My1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTgyOD1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy04NTYtXHRcdHJhX2VudHJ5ID0gc3dwX2VudHJ5KHN3cF90eXBlKGVudHJ5KSwgb2Zmc2V0KTtcbm1tL3N3YXBfc3RhdGUuYzo4NTc6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHJhX2VudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxubW0vc3dhcF9zdGF0ZS5jLTg1OC1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c3BsdWcsIG9mZnNldCAhPSBlbnRyeV9vZmZzZXQpO1xuLS1cbm1tL3N3YXBfc3RhdGUuYy04NjctXHQvKiBUaGUgcGFnZSB3YXMgbGlrZWx5IHJlYWQgYWJvdmUsIHNvIG5vIG5lZWQgZm9yIHBsdWdnaW5nIGhlcmUgKi9cbm1tL3N3YXBfc3RhdGUuYzo4Njg6XHRyZXR1cm4gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCBOVUxMLCBmYWxzZSk7XG5tbS9zd2FwX3N0YXRlLmMtODY5LX1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTI1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTY3LVx0XHR9XG5tbS9zd2FwX3N0YXRlLmM6OTY4Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbm1tL3N3YXBfc3RhdGUuYy05NjktXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNwbHVnLCBhZGRyICE9IHZtZi1cdTAwM2VhZGRyZXNzKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTgyLVx0LyogVGhlIGZvbGlvIHdhcyBsaWtlbHkgcmVhZCBhYm92ZSwgc28gbm8gbmVlZCBmb3IgcGx1Z2dpbmcgaGVyZSAqL1xubW0vc3dhcF9zdGF0ZS5jOjk4MzpcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHRhcmdfZW50cnksIGdmcF9tYXNrLCBtcG9sLCB0YXJnX2lseCxcbm1tL3N3YXBfc3RhdGUuYy05ODQtXHRcdFx0XHQgICAgICBOVUxMLCBmYWxzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN3YXAgRnVuY3Rpb25zIGluIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3dhcC1yZWxhdGVkIGZ1bmN0aW9ucyBhbmQgbWFraW5nIHNvbWUgb2JzZXJ2YXRpb25zLiBGaXJzdCwgSSBzZWUgdGhhdCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIG9ubHkgbWVhbnQgdG8gYmUgdXNlZCB3aXRoaW4gaXRzIGRlZmluaW5nIGNvbXBpbGF0aW9uIHVuaXQg4oCTIHByb2JhYmx5IHdpdGhpbiB0aGUgc2FtZSBmaWxlLiBJdCYjMzk7cyBub3QgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQVBJIHRoYXQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgaW50ZW5kZWQgdG8gY2FsbCBkaXJlY3RseS4KClRoZW4sIEkgbm90ZSB0aGF0IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBhcmUgYWxsICpub24tc3RhdGljKi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGVyZSB0aGV5IGFyZSBkZWNsYXJlZC4gVGhpcyBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHVzZWQgaW4gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhleSBhcmUsIHRodXMsIHBhcnQgb2YgYSBmdW5jdGlvbmFsIGludGVyZmFjZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBJIG1heSBuZWVkIHRvIGJlIGNhbGxpbmcgZm9yIGEgZ2l2ZW4gdXNlLWNhc2UuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG1tL3N3YXBfc3RhdGUuY2AgZm9yIHNvbWUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYHN3YXBpbl9zeW5jYCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiwgaXRzIHBhcmFtZXRlcnMsIGFuZCB3aGVyZSBpdCBpcyBjYWxsZWQgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHJvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBpbl9zeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02NDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY3OC0vKipcbm1tL3N3YXBfc3RhdGUuYzo2Nzk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cbm1tL3N3YXBfc3RhdGUuYy02ODAtICogQGVudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY5My0gKi9cbm1tL3N3YXBfc3RhdGUuYzo2OTQ6c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbm1tL3N3YXBfc3RhdGUuYy02OTUtXHRcdFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipGb2N1c2luZyBJbiBvbiBLZXkgQXJlYXMgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBzb21lIGtleSBzeW1ib2xzIHRoYXQgYXJlIGxpa2VseSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UsIG5hbWVseSBgc3dhcGluX3N5bmNgLCBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCBhbmQgdGhhdCBjcnVjaWFsIGZ1bmN0aW9uLCBgd29ya2luZ3NldF9yZWZhdWx0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBpbnRlcmFjdCB3aXRoIHRoZSBsYXJnZXIgcGljdHVyZS4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRvX3N3YXBfcGFnZWAsIGFzIEkga25vdyBpdCYjMzk7cyBmcmVxdWVudGx5IGNhbGxlZCBzbyBJIG5lZWQgdG8gYXZvaWQgaXQuCgpOb3csIHdoZXJlIHdhcyB0aGF0IGB3b3JraW5nc2V0X3JlZmF1bHRgIGZ1bmN0aW9uIGFnYWluPyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgaW4gYG1tL3dvcmtpbmdzZXQuY2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3dvcmtpbmdzZXQuYz00MzA9Ym9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLS1cbm1tL3dvcmtpbmdzZXQuYy01MzktLyoqXG5tbS93b3JraW5nc2V0LmM6NTQwOiAqIHdvcmtpbmdzZXRfcmVmYXVsdCAtIEV2YWx1YXRlIHRoZSByZWZhdWx0IG9mIGEgcHJldmlvdXNseSBldmljdGVkIGZvbGlvLlxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cbi0tXG5tbS93b3JraW5nc2V0LmMtNTQ3LSAqL1xubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG5tbS93b3JraW5nc2V0LmMtNTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aGlua2luZyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBgd29ya2luZ3NldF9yZWZhdWx0YCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB2aXNpYmlsaXR5IGFuZCBzY29wZSBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBIb3cgaXMgaXQgYmVpbmcgYWNjZXNzZWQ/IEdpdmVuIHRoYXQgdGhpcyBpcyBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkLCBJJiMzOTtsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIHpzd2FwIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS96c3dhcC5jYC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLiBUaGVzZSBmdW5jdGlvbnMgcHJvYmFibHkgb2ZmZXIgY3J1Y2lhbCBpbnNpZ2h0cyBpbnRvIGhvdyBkYXRhIGlzIGhhbmRsZWQgYW5kIHBvdGVudGlhbGx5IHJlLWZhdWx0ZWQgb3IgY2xlYXJlZCB3aXRoaW4gdGhlIHpzd2FwIGFyY2hpdGVjdHVyZS4gSSBleHBlY3QgdGhhdCBieSB0cmFjaW5nIHRoZWlyIHVzYWdlLCBJIGNhbiBmaWd1cmUgb3V0IHdoeSB0aGUgJiMzNDtub24tc3RhdGljJiMzNDsgY2hhcmFjdGVyaXN0aWMgb2YgYHdvcmtpbmdzZXRfcmVmYXVsdGAgaXMgbm90ZXdvcnRoeS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3pzd2FwLmMtOTc4LS8qXG5tbS96c3dhcC5jOjk3OTogKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj9cbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4tLVxubW0venN3YXAuYy05ODgtICovXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtOTkwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSB0aGluZ3MgYXJlbiYjMzk7dCBqdXN0IGZpeGVkOyB0aGV5JiMzOTtyZSBkeW5hbWljLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhvbmUgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUuIFRoZXNlIGxvb2sgbGlrZSB0aGUgY2VudHJhbCBwaWVjZXM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgenN3YXAgcHJvY2Vzcy4KCk5vdywgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBjb25maWd1cmF0aW9uIGlzIGtleSwgc28gSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIGBTV0FQYCwgYFpTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCB0byBiZSBlbmFibGVkLiBJIG1heSB3YW50IHRvIHBva2UgYXJvdW5kIGFuZCBjb25maXJtIHRoYXQuCgpJdCYjMzk7cyB0aW1lIHRvIGRpZyBhIGJpdCBkZWVwZXIuIENvdWxkIHdlIGJlIG1pc3Npbmcgc29tZXRoaW5nPyBUaGlua2luZyBsYXRlcmFsbHksIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgbWlnaHQgYmUgcGVydGluZW50IHRvIHRyaWdnZXJpbmcgdGhhdCB3cml0ZWJhY2suIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUsIHNvIEkmIzM5O2xsIGNoZWNrIGBtbS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MzU9Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbi0tXG5tbS9LY29uZmlnLTQ0LVxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxubW0vS2NvbmZpZy00Ni1cdGJvb2wgXCYjMzQ7U2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwOQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ1LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBzZWN0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAoYG1tYCksIGlzIGRlZmluZWQgb3IgaGFzIHNvbWUgY3JpdGljYWwgbG9naWMgdGhlcmUuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljIOKAkyBtYXliZSBhIGRlZmF1bHQgc2V0dGluZywgYSBjb25kaXRpb25hbCBkZXBlbmRlbmN5LCBvciBhbiBpbXBvcnRhbnQgY29tbWVudCB0aGF0JiMzOTtzIGluZmx1ZW5jaW5nIHNvbWUgYmVoYXZpb3IgSSYjMzk7bSBpbnZlc3RpZ2F0aW5nLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgSSBjYW4mIzM5O3QganVzdCBzY2FuIHRoZSBmaWxlOyBteSBnb2FsIGlzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWcgb3B0aW9uLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdGhhdCBnb3Zlcm5zIGl0LiBJIGV4cGVjdCB0aGF0IEkgd2lsbCBiZSBhYmxlIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgYXMgSSBhcHByb2FjaCBsaW5lIDQ1LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuICA1MDpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xuICA1MTpcdFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcbiAgNTI6XHRcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXG4gIDUzOlx0XG4gIDU0Olx0XHQgIFRoaXMgbWVhbnMgdGhhdCB6c3dhcCB3cml0ZWJhY2sgY291bGQgaGFwcGVuIGV2ZW4gaWYgdGhlIHBvb2wgaXNcbiAgNTU6XHRcdCAgbm90IHlldCBmdWxsLCBvciB0aGUgY2dyb3VwIHpzd2FwIGxpbWl0IGhhcyBub3QgYmVlbiByZWFjaGVkLFxuICA1NjpcdFx0ICByZWR1Y2luZyB0aGUgY2hhbmNlIHRoYXQgY29sZCBwYWdlcyB3aWxsIHJlc2lkZSBpbiB0aGUgenN3YXAgcG9vbFxuICA1NzpcdFx0ICBhbmQgY29uc3VtZSBtZW1vcnkgaW5kZWZpbml0ZWx5LlxuICA1ODpcdFxuICA1OTpcdGNob2ljZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUyNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhhbmRsaW5nIHdvcmtpbmdzZXQgc2hhZG93cyBjb3JyZWN0bHkgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBFc3NlbnRpYWxseSwgaXQmIzM5O3MgYWJvdXQgZ2V0dGluZyB3cml0ZWJhY2sgdG8gdHJpZ2dlciwgd2hpY2ggaXMgYWNoaWV2ZWQgYnkgdXRpbGl6aW5nIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyBpbi4KCkkmIzM5O20gcXVpY2tseSBjaGVja2luZyBpZiBhIHNpbWlsYXIgY29tcHJlc3NvciBjb25maWcgbGlrZSBgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNGAgaXMgbmVjZXNzYXJ5LCBidXQgdGhlIGRlZmF1bHQgY29tcHJlc3NvciBpcyBmaW5lIGluIHRoaXMgaW5zdGFuY2UsIHNvIEkmIzM5O2xsIHNraXAgaXQuCgpMZXQgbWUgcmVjYXAgbXkgcmVhc29uaW5nOiBUaGlzIG1vZGlmaWVzIHN3YXAgYW5kIHpzd2FwIHRvIG1hbmFnZSB0aG9zZSBwZXNreSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gSXQgZG9lcyB0aGlzIHdpdGggYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCwgd2hpY2ggYXJlIGNydWNpYWwgZm9yIG1hbmFnaW5nIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzLCB0b3VjaGluZyBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCBkaXJlY3RseS4gVGhleSBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QsIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBzaWduaWZpY2FudCBhcmVhLgoKTG9va2luZyBhdCB0aGUgY29uZmlncyB0aGF0IGFyZSBpbXBhY3RlZDogYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBkZWZpbml0ZWx5IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4KCk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O20gZm9jdXNpbmcgb24ga2V5IHN5bWJvbHMgdG8gaGlnaGxpZ2h0IHRoZSBhcmVhIG9mIGNoYW5nZS4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgdGhlIG9idmlvdXMgY2hvaWNlcyBhbmQgYXJlIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2guIEkgY29uc2lkZXJlZCBgc3dhcGluX3N5bmNgIGFzIGEgZ29vZCBvbmUsIG9yIHBlcmhhcHMgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGJ1dCBJIGRpc21pc3NlZCB0aGUgbGF0dGVyIGFzIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBOb3cgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljLCBidXQgaXMgZXNzZW50aWFsLCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIEkgY2FuIHVzZSBpdCBhcyBhIGZvY3VzIHBvaW50LiBUaGUgcHJvbXB0IHNhaWQgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG92ZXIgc3RhdGljLCBidXQgaXQgZG9lc24mIzM5O3QgZm9yYmlkIHN0YXRpYyBmdW5jdGlvbnMuCgpPa2F5LCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9ucy4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgKm5vbiotc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC96c3dhcC5oYCwgc28gdGhleSBhcmUgcGVyZmVjdC4gVGhleSYjMzk7cmUgZXhhY3RseSB3aGF0IEkgbmVlZC4gSSYjMzk7bGwganVzdCBjb25maXJtIGB3b3JraW5nc2V0X3JlZmF1bHRgJiMzOTtzIGV4cG9ydCBzdGF0dXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQ29kZSBWaXNpYmlsaXR5IGFuZCBGdW5jdGlvbiBTY29wZSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiBhbmQgSSYjMzk7bSByZW1pbmRlZCBpdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gQnV0LCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIGRpc3RpbmN0aW9uIGlzIGNydWNpYWwuIE5vbi1zdGF0aWMgbWVhbnMgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZSBpbiB3YXlzIEkgbmVlZCB0byBjb25zaWRlciwgZXZlbiBpZiBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBwYXJ0IG9mIHRoZSBwdWJsaXNoZWQgQVBJLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgd2hlcmUgdGhpcyB0aGluZyBpcyB1c2VkLiBJcyBpdCBhY2Nlc3NpYmxlIHRvIGxpbmtpbmc/IElzIGl0IGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQgb3IgYSBzZXBhcmF0ZSBvbmU/CgpUaGVyZWZvcmUsIEkgbm93IG5lZWQgdG8gZGV0ZXJtaW5lLCBhbmQgSSYjMzk7bGwgcXVpY2tseSBjaGVjaywgaWYgYHN3YXBpbl9zeW5jYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIGtub3cgZm9yIHN1cmUgaWYgaXQmIzM5O3MgYmVpbmcgZXhwb3NlZCB2aWEgc29tZSBvdGhlciBtZWFucyBvciBpZiB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgKnNlZW1zKiB0byBiZSBwcml2YXRlIGJ1dCBhY3R1YWxseSBpc24mIzM5O3QuIFRoZSBzY29waW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LCBhbmQgb2YgY291cnNlLCB3aGV0aGVyIG9yIG5vdCBhIHNlZW1pbmdseSBpbnRlcm5hbCBmdW5jdGlvbiBpcyBnb2luZyB0byBjYXVzZSB0cm91YmxlIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc3dhcGluX3N5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOgoKKipGaW5hbCBQYXRjaCBSZXZpZXc6IENoZWNraW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHdvcmsgb24gdGhpcyBwYXRjaCwgZm9jdXNpbmcgb24gdGhlIHNlbGVjdGVkIHN5bWJvbHMgYW5kIGNvbmZpZ3MsIGxvb2tzIHNvbGlkLiBJJiMzOTttIHBsZWFzZWQgd2l0aCB0aGUgZGlyZWN0aW9uIHdlJiMzOTtyZSB0YWtpbmcuCgpCZWZvcmUgd2UgY2FsbCB0aGlzIGRvbmUsIHRob3VnaCwgSSBuZWVkIHRvIGRvIGEgZmluYWwgc3dlZXAgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgZGVwZW5kZW5jeS4gSXQmIzM5O3Mgbm90IGV4cG9ydGVkLCBidXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqLCBzbyBJIG5lZWQgdG8gYmUgZXh0cmEgdGhvcm91Z2guIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBgQ09ORklHX01FTUNHYC4gVGhlIHJlYXNvbiBJJiMzOTttIHJhaXNpbmcgdGhpcyBmbGFnIGlzIHRoYXQgYHNocmlua19tZW1jZ19jYmAgaXMgaW4gYHpzd2FwLmNgLiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyYWN0aW9uIHRoZXJlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBtbS96c3dhcC5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYE1FTUNHYCB0aGF0IHdlIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGF0IHRoaXMgc3RhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz02MTc9c3RhdGljIGludCB6c3dhcF9lbmFibGVkX3BhcmFtX3NldChjb25zdCBjaGFyICp2YWwsXG4tLVxubW0venN3YXAuYy02NTAtLyogc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBSQ1UgKi9cbm1tL3pzd2FwLmM6NjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM2NgoJCQkJCQkJb3V0cHV0OiAyMDMKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWnN3YXAgV3JpdGViYWNrIEJ1ZmZlciBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7bSBydW5uaW5nIHRocm91Z2ggdGhlIGRlcGVuZGVuY2llcyBpbiBteSBoZWFkLiBgTUVNQ0dgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYW5kIEkmIzM5O2Qgbm9ybWFsbHkganVzdCBhc3N1bWUgaXQmIzM5O3MgdGhlcmUsIGJ1dCBJIHRoaW5rIEkgc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCBpbiBjYXNlLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC4gTm93LCBgWlNXQVBgIGRvZXNuJiMzOTt0IHN0cmljdGx5IGRlcGVuZCBvbiBgTUVNQ0dgIGl0c2VsZi4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gIG1pZ2h0IGRlcGVuZCBvbiBNRU1DRywgYnV0IGl0IGRvZXNuJiMzOTt0LgoKQWxyaWdodCwgbGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIGBaU1dBUGAgZGVwZW5kZW5jaWVzLiBJdCBuZWVkcyBgU1dBUGAsIG5hdHVyYWxseS4gSXQgKnNlbGVjdHMqIGBDUllQVE9gIGFuZCBgWlNNQUxMT0NgLiBPa2F5LCB0aG9zZSBhcmUgc3RyYWlnaHRmb3J3YXJkLiBHaXZlbiB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSB3cml0ZWJhY2sgYnVmZmVycyBhbmQgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgU1dBUGAsIGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gSSB0aGluayB0aGF0IGNvdmVycyBhbGwgdGhlIGJhc2VzLgoKVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEkmIzM5O20gcmVhZGluZywgbW9kaWZpZXMgaG93IHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHdvcmssIHBhcnRpY3VsYXJseSB3aXRoIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIFRoZXNlIGFyZSBjcml0aWNhbCBhZGRpdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBzaGFkb3dzIHdpdGhpbiB0aGUgenN3YXAgdHJlZS4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIHdyaXRlYmFjayBhbmQgc3dhcC1pbiBvcGVyYXRpb25zLCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgZWZmZWN0cyBvbiBwYWdlIHJlY2xhaW0sIHRoZSBzd2FwIGNhY2hlLCBhbmQgenN3YXAgaXRzZWxmLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSwgYW5kIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC4KCkxldCYjMzk7cyBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIHRvIHNvbGlkaWZ5IHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fc3luYyYjMzQ7LAogICAgJiMzNDt3b3JraW5nc2V0X3JlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gcHJvcGVybHkgaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBmb3IgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcnMuIEl0IGludHJvZHVjZXMgYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCB0byBtYW5hZ2UgcGFya2VkIHNoYWRvd3MgaW4gdGhlIHpzd2FwIHRyZWUgZHVyaW5nIHdyaXRlYmFjayBhbmQgc3dhcC1pbi4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcyB0aGF0IGFmZmVjdCBwYWdlIHJlY2xhaW0sIHN3YXAgY2FjaGUsIGFuZCB6c3dhcCwgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNToxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBwYXJrcyB0aGUgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGFuZCByZXN0b3JlcyBpdCB1cG9uIHN3YXAtaW4gb3Igc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YzM2NGFiZDVhMDcyZGFjZTI5NTFmNWYwZjFkMWZjYWJjZDhkM2U3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMTU6MTE6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvenN3YXAuaApAQCAtMzUsNiAmIzQzOzM1LDggQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpOwogdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7CiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7CiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7CiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKICNlbHNlCiAKIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307CkBAIC02OSw2ICYjNDM7NzEsMTYgQEAgc3RhdGljIGlubGluZSBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLjE3ZTkwNDY2MmViNjUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00NzU5LDYgJiM0Mzs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJdW5zaWduZWQgbG9uZyBwYWdlX2lkeDsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJcHRlX3QgKnB0ZXA7CiYjNDM7CXZvaWQgKnNoYWRvdzsKIAogCWlmICghcHRlX3VubWFwX3NhbWUodm1mKSkKIAkJZ290byBvdXQ7CkBAIC00ODgwLDYgJiM0Mzs0ODgxLDEwIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCQlnb3RvIG91dF9wYWdlOwogCX0KIAomIzQzOwlzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pOwomIzQzOwlpZiAoc2hhZG93KQomIzQzOwkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwomIzQzOwogCS8qCiAJICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmCiAJICogZm9saW8tJmd0O2luZGV4IG9mIG5vbi1rc20gZm9saW9zIHdvdWxkIGJlIG5vbmxpbmVhciBpbnNpZGUgdGhlCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNTAsNiAmIzQzOzIyNTAsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMOwogCWludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyOwogCXBnb2ZmX3Qgb2Zmc2V0OwomIzQzOwl2b2lkICpzaGFkb3c7CiAKIAlWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTsKIAlpbmRleF9lbnRyeSA9IHJhZGl4X3RvX3N3cF9lbnRyeSgqZm9saW9wKTsKQEAgLTIzNjEsNiAmIzQzOzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKIAkgKi8KIAlhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pOwogCiYjNDM7CXNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJaWYgKHNobWVtX3Nob3VsZF9yZXBsYWNlX2ZvbGlvKGZvbGlvLCBnZnApKSB7CiAJCWVycm9yID0gc2htZW1fcmVwbGFjZV9mb2xpbygmYW1wO2ZvbGlvLCBnZnAsIGluZm8sIGluZGV4LCB2bWEpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggOWMzYTVjZjk5Nzc4Ni4uN2VhNGEyYmEwODQxNiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NobWVtX2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwpAQCAtMjU3LDEyICYjNDM7MjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAl1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kOwogCWJvb2wgZm9saW9fc3dhcHBlZCA9IGZhbHNlLCBuZWVkX2ZyZWUgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl2b2lkICpzaGFkb3dfcGFya2VkOwogCiAJVk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7CiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTsKIAlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAomIzQzOwkvKgomIzQzOwkgKiBBIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgcGFya2VkIHRoZSBzbG90JiMzOTtzIG9yaWdpbmFsIHNoYWRvdyBpbiB0aGUKJiM0MzsJICogenN3YXAgdHJlZTogcmVzdG9yZSBpdCBpbnRvIHRoZSBzbG90IGZvciBsYXRlciBzd2FwLWluLgomIzQzOwkgKi8KJiM0MzsJc2hhZG93X3BhcmtlZCA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7CiYjNDM7CWlmIChzaGFkb3dfcGFya2VkKQomIzQzOwkJc2hhZG93ID0gc2hhZG93X3BhcmtlZDsKJiM0MzsKIAlzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTsKIAljaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7CiAJY2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7CkBAIC00NzcsOCAmIzQzOzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCiAJLyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovCiAJbWVtY2cxX3N3YXBpbihmb2xpbyk7Ci0JaWYgKHNoYWRvdykKLQkJd29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpOwogCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CkBAIC02MzgsMTcgJiM0Mzs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCQkJCSAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZCkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LAomIzQzOwkJICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpOwogCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKHNoYWRvdykKJiM0MzsJCXdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTsKJiM0MzsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpOwogCWlmIChyZWFkYWhlYWQpIHsKIAkJZm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7CkBAIC02NzgsMTcgJiM0Mzs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJCSAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwl2b2lkICpzaGFkb3cgPSBOVUxMOwogCiAJZG8gewogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwomIzQzOwkJLyoKJiM0MzsJCSAqIENhcHR1cmUgdGhlIHNsb3QmIzM5O3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LAomIzQzOwkJICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LgomIzQzOwkJICovCiYjNDM7CQlzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpOwogCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiAJfSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7CiAKIAlpZiAoSVNfRVJSKGZvbGlvKSkKIAkJcmV0dXJuIGZvbGlvOwogCiYjNDM7CWlmIChzaGFkb3cpCiYjNDM7CQl3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CiYjNDM7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTsKIAlyZXR1cm4gZm9saW87CiB9CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDU2NzA4ZDFkMmRmZDUuLmMyN2U5NTczMjJiODIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC00OCw2ICYjNDM7NDgsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJpbnRrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZGF4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3pzd2FwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZXdhbGsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaG1lbV9mcy5oJmd0OwpAQCAtNzMwLDcgJiM0Mzs3MzEsOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tJmd0O3N3YXA7CiAKLQkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiYjNDM7CQlpZiAocmVjbGFpbWVkICZhbXA7JmFtcDsgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKIAkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwogCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC01NzcsNyAmIzQzOzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgJmFtcDt3b3JraW5nc2V0LCB0cnVlKSkKIAkJZ290byBvdXQ7CiAKLQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJaWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSkpCiYjNDM7CQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CiYjNDM7CWVsc2UKJiM0MzsJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwogCXdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgbnIpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX0FDVElWQVRFX0JBU0UgJiM0MzsgZmlsZSwgbnIpOwogCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk3Miw2ICYjNDM7OTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbykKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogd3JpdGViYWNrIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiYjNDM7CiYjNDM7I2RlZmluZSBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XIHhhX21rX3ZhbHVlKDApCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyIC0gaXMgQGZvbGlvIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlcj8KJiM0MzsgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKQomIzQzOyAqCiYjNDM7ICogQSBmb2xpbyBpcyBhIHpzd2FwIHdyaXRlYmFjayBidWZmZXIgd2hlbiBldmVyeSBvbmUgb2YgaXRzIHN3YXAgb2Zmc2V0cyBob2xkcwomIzQzOyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cKJiM0MzsgKiBzZW50aW5lbCkgaW4gdGhlIHpzd2FwIHRyZWUgcmF0aGVyIHRoYW4gYSBsaXZlIHpzd2FwIGVudHJ5LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aAomIzQzOyAqIG11c3Qgbm90IG1pbnQgYSBmcmVzaCB3b3JraW5nc2V0IHNoYWRvdyBmb3IgaXQuCiYjNDM7ICovCiYjNDM7Ym9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dwX2VudHJ5X3QgZSA9IHN3cF9lbnRyeShzd3BfdHlwZShzd3ApLCBvZmZzZXQgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CQlpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgJiM0MzsgaSkpKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJiMzOTtzIHBhcmtlZCBzaGFkb3cocykKJiM0MzsgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpCiYjNDM7ICoKJiM0MzsgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJiMzOTtzIHN3YXAgb2Zmc2V0KHMpIGZyb20gdGhlCiYjNDM7ICogenN3YXAgdHJlZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHByZXNlcnZlZCB3b3JraW5nc2V0IHNoYWRvdywgb3IgTlVMTCBpZiB0aGUgc2xvdChzKSBoYWQgbm8gc2hhZG93CiYjNDM7ICogKHNlbnRpbmVsIG9ubHkpIG9yIG5vdGhpbmcgcGFya2VkLiBUaGUgY2FsbGVyIGVpdGhlciByZXN0b3JlcyB0aGUgcmV0dXJuZWQKJiM0MzsgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8gd29ya2luZ3NldF9yZWZhdWx0KCkKJiM0MzsgKiAoYnVmZmVyIGNvbnN1bWVkIGJ5IGEgc3dhcGluKTsgY2xlYXJpbmcgaGVyZSBlbnN1cmVzIHRoZSB0d28gcGF0aHMgbmV2ZXIKJiM0MzsgKiBkb3VibGUtY291bnQuCiYjNDM7ICovCiYjNDM7dm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzd3BfZW50cnlfdCBzd3AgPSBmb2xpby0mZ3Q7c3dhcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJcGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3cCk7CiYjNDM7CXZvaWQgKnNoYWRvdyA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaTsKJiM0MzsKJiM0MzsJaWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCXN0cnVjdCB4YXJyYXkgKnRyZWUgPSBzd2FwX3pzd2FwX3RyZWUoZSk7CiYjNDM7CQl2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJCWlmICgheGFfaXNfdmFsdWUocGFya2VkKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXhhX2VyYXNlKHRyZWUsIG9mZnNldCAmIzQzOyBpKTsKJiM0MzsJCWlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVykKJiM0MzsJCQlzaGFkb3cgPSBwYXJrZWQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHNoYWRvdzsKJiM0Mzt9CiYjNDM7CiAvKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSwKICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGEKQEAgLTk5Miw2ICYjNDM7MTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKJiM0MzsJdm9pZCAqc2hhZG93OwogCWludCByZXQgPSAwOwogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KQEAgLTk5OSw2ICYjNDM7MTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJaWYgKCFzaSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKJiM0MzsJc2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KTsKJiM0MzsKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwogCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAogCQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTsKQEAgLTEwMzQsNyAmIzQzOzExMTAsOSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlnb3RvIG91dDsKIAl9CiAKLQl4YV9lcmFzZSh0cmVlLCBvZmZzZXQpOwomIzQzOwlpZiAoIXNoYWRvdykKJiM0MzsJCXNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7CiYjNDM7CXhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTsKIAogCWNvdW50X3ZtX2V2ZW50KFpTV1BXQik7CiAJaWYgKGVudHJ5LSZndDtvYmpjZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE1OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTIKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogNzU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIG1vZGlmeWluZyB6c3dhcCwgc3dhcF9zdGF0ZSwgc2htZW0sIG1lbW9yeSwgdm1zY2FuLCBhbmQgd29ya2luZ3NldCBsaWtlbHkgKmRvZXNuJiMzOTt0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCBtYW5hZ2luZyB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY2hhbmdlcyB0byBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAsIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgLCB0aGUgcGFya2luZyBhbmQgcmVzdG9yaW5nIG9mIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluL2NhY2hlIGRlbGV0aW9uLCBhbmQgaG9va2luZyB0aGlzIGludG8gZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gLCBhbmQgYHN3YXBpbl9zeW5jYC4KCk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBIb3dldmVyLCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgc2hhZG93IHZhcmlhYmxlIGlzIGEgYHZvaWQgKmAsIHdoaWNoIGlzIGJhc2ljYWxseSBhbiBlbmNvZGVkIHZhbHVlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGNyZWF0ZWQgdmlhIGB4YV9ta192YWx1ZWAgKG9yIGEgc2ltaWxhciBtZWNoYW5pc20gaW4gdGhlIHdvcmtpbmdzZXQgY29kZSkgYW5kIHN0b3JlZCBpbiB0aGUgeGFycmF5IChgc3dhcF96c3dhcF90cmVlKGUpYCkuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGludHJvZHVjZWQgdGhhdCBhcmUgcGFzc2VkIHRvIHVzZXJzcGFjZSBvciBhbnkgYWxsb2NhdGVkIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIG1lYW5zIHRoZSByaXNrIG9mIGFjY2lkZW50YWxseSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGlzIG1pbmltYWwsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24mIzM5O3QgY2hhbmdlIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKRXNzZW50aWFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZXBseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcCBjYWNoZSBpbnRlcmFjdGlvbnMsIGFuZCB3b3JraW5nc2V0IHNoYWRvd3MuIEFueSBidWdzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgYXJlICpwcmVjaXNlbHkqIHRoZSB0eXBlcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guCgpJJiMzOTttIGRvdWJsZS1jaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24gcGF0aCBub3csIGp1c3QgdG8gYmUgc3VyZS4gSSBzZWUgdGhhdCBgc2hhZG93YCBpcyBpbml0aWFsaXplZCB0byBgTlVMTGAgaW4gYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgYW5kIGBzd2FwaW5fc3luY2AuIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFsc28gaW5pdGlhbGl6ZXMgdGhlIHJldHJpZXZlZCBzaGFkb3cgdG8gYE5VTExgIGFuZCB1cGRhdGVzIGl0IGlmIGEgcGFya2VkIHNoYWRvdyBpcyBmb3VuZC4gSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgYHNoYWRvd2AgaXMgZWl0aGVyIGRlcml2ZWQgZnJvbSBgc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cGVudHJ5KWAgb3Igc2V0IHRvIGBaU1dBUF9XUklURUJBQ0tfTk9fU0hBRE9XYC4gSXQgYWxsIGxvb2tzIHNhZmUuCgpTbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAocG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSwgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQpLCB0aGUgYWJzZW5jZSBvZiBuZXcsIGNvbXBsaWNhdGVkLCB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGlnaCBsaWtlbGlob29kIHRoYXQgYW55IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIEkmIzM5O20gY29tZm9ydGFibGUgc2F5aW5nIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBuZWNlc3NpdGF0ZSBhIHNwZWNpYWwgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50LiBJJiMzOTttIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTU6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IHBhcmtzIHRoZSBzaGFkb3cgaW4gdGhlIHpzd2FwIHRyZWUgYW5kIHJlc3RvcmVzIGl0IHVwb24gc3dhcC1pbiBvciBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgZm9saW8gc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgYmUgcmVhZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjE5Ljk1ODgzOTYxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTY0Nzc4MTM3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMToxOS45NTg4NDQ5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI5Njg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTU6MTE6MTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC96c3dhcC5oIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbiBib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZCk7XFxuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIF9MSU5VWF9aU1dBUF9IICovXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9pZHg7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcXG4gXFx0cHRlX3QgKnB0ZXA7XFxuK1xcdHZvaWQgKnNoYWRvdztcXG4gXFxuIFxcdGlmICghcHRlX3VubWFwX3NhbWUodm1mKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Z290byBvdXRfcGFnZTtcXG4gXFx0fVxcbiBcXG4rXFx0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcXG4rXFx0aWYgKHNoYWRvdylcXG4rXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXFxuIFxcdCAqIGZvbGlvLVxcdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDkwMDFhYWYzYjdiOTQuLmY5NjhiNjhiNjBjNTIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI1MCw2ICsyMjUwLDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IE5VTEw7XFxuIFxcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xcbiBcXHRwZ29mZl90IG9mZnNldDtcXG4rXFx0dm9pZCAqc2hhZG93O1xcbiBcXG4gXFx0Vk1fQlVHX09OKCEqZm9saW9wIHx8ICF4YV9pc192YWx1ZSgqZm9saW9wKSk7XFxuIFxcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xcbkBAIC0yMzYxLDYgKzIzNjIsMTAgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0ICovXFxuIFxcdGFyY2hfc3dhcF9yZXN0b3JlKGZvbGlvX3N3YXAoc3dhcCwgZm9saW8pLCBmb2xpbyk7XFxuIFxcbitcXHRzaGFkb3cgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93KVxcbitcXHRcXHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XFxuK1xcbiBcXHRpZiAoc2htZW1fc2hvdWxkX3JlcGxhY2VfZm9saW8oZm9saW8sIGdmcCkpIHtcXG4gXFx0XFx0ZXJyb3IgPSBzaG1lbV9yZXBsYWNlX2ZvbGlvKFxcdTAwMjZmb2xpbywgZ2ZwLCBpbmZvLCBpbmRleCwgdm1hKTtcXG4gXFx0XFx0aWYgKGVycm9yKVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2Li43ZWE0YTJiYTA4NDE2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0yMiw2ICsyMiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdlX21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaG1lbV9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvenN3YXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwX3RhYmxlLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzd2FwLmhcXFwiXFxuQEAgLTI1NywxMiArMjU4LDIxIEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0dW5zaWduZWQgaW50IGNpX3N0YXJ0LCBjaV9vZmYsIGNpX2VuZDtcXG4gXFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xcbiBcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHR2b2lkICpzaGFkb3dfcGFya2VkO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXFxuK1xcdCAqIHpzd2FwIHRyZWU6IHJlc3RvcmUgaXQgaW50byB0aGUgc2xvdCBmb3IgbGF0ZXIgc3dhcC1pbi5cXG4rXFx0ICovXFxuK1xcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xcbitcXHRpZiAoc2hhZG93X3BhcmtlZClcXG4rXFx0XFx0c2hhZG93ID0gc2hhZG93X3BhcmtlZDtcXG4rXFxuIFxcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xcbiBcXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XFxuIFxcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XFxuQEAgLTQ3Nyw4ICs0ODcsNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFxuIFxcdC8qIG1lbXN3IHVuY2hhcmdlcyBzd2FwIHdoZW4gZm9saW8gaXMgYWRkZWQgdG8gc3dhcCBjYWNoZSAqL1xcbiBcXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcXG4tXFx0aWYgKHNoYWRvdylcXG4tXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbiBcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xcbiBcXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xcbkBAIC02MzgsMTcgKzY0NiwyNiBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHN3YXBfaW9jYiAqKnBsdWcsIGJvb2wgcmVhZGFoZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQ2FwdHVyZSB0aGUgc2xvdCdzIHNoYWRvdyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gb3ZlcndyaXRlcyBpdCxcXG4rXFx0XFx0ICogc28gYSBmcmVzaCBzd2FwLWluIGNhbiBiZSBldmFsdWF0ZWQgYXMgYSByZWZhdWx0IGJlbG93LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2hhZG93ID0gc3dhcF9jYWNoZV9nZXRfc2hhZG93KGVudHJ5KTtcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGlmIChzaGFkb3cpXFxuK1xcdFxcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcXG4rXFxuIFxcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7XFxuIFxcdGlmIChyZWFkYWhlYWQpIHtcXG4gXFx0XFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XFxuQEAgLTY3OCwxNyArNjk1LDI2IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHR2b2lkICpzaGFkb3cgPSBOVUxMO1xcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0XFx0aWYgKGZvbGlvKVxcbiBcXHRcXHRcXHRyZXR1cm4gZm9saW87XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXFxuK1xcdFxcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIGZvbGlvO1xcbiBcXG4rXFx0aWYgKHNoYWRvdylcXG4rXFx0XFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcbitcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDgsNiArNDgsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGF4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdld2Fsay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG5AQCAtNzMwLDcgKzczMSw4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiBcXHRcXHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcbi1cXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuK1xcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoZm9saW8pKVxcbiBcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiBcXHRcXHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XFxuIFxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcXG5pbmRleCBmMzUxNzk4ZTcyM2FjLi43YzMwY2YwOTFjYmZiIDEwMDY0NFxcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xcbkBAIC01NzcsNyArNTc3LDEwIEBAIHZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4gXFx0aWYgKCF3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHNoYWRvdywgZmlsZSwgXFx1MDAyNndvcmtpbmdzZXQsIHRydWUpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbitcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9scnUoZm9saW8pKSlcXG4rXFx0XFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xcbitcXHRlbHNlXFxuK1xcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbiBcXHR3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChscnV2ZWMsIG5yKTtcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSArIGZpbGUsIG5yKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggNzYxY2Q2OTllMGEzZS4uZjA1OTIwNjk0OGFiYSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05NzIsNiArOTcyLDc5IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbiAqIHdyaXRlYmFjayBjb2RlXFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuK1xcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcXG4rXFxuKy8qXFxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbisgKiBAZm9saW86IHRoZSBmb2xpbyBiZWluZyBleGFtaW5lZCAodHlwaWNhbGx5IGEgc3dhcCBjYWNoZSBmb2xpbyB1bmRlciByZWNsYWltKVxcbisgKlxcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXFxuKyAqIGEgcGFya2VkIHdyaXRlYmFjayBzaGFkb3cgKGEgcmVhbCBzaGFkb3cgb3IgdGhlIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1dcXG4rICogc2VudGluZWwpIGluIHRoZSB6c3dhcCB0cmVlIHJhdGhlciB0aGFuIGEgbGl2ZSB6c3dhcCBlbnRyeS5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIEBmb2xpbyBpcyBhIHdyaXRlYmFjayBidWZmZXIsIGluIHdoaWNoIGNhc2UgdGhlIHJlY2xhaW0gcGF0aFxcbisgKiBtdXN0IG5vdCBtaW50IGEgZnJlc2ggd29ya2luZ3NldCBzaGFkb3cgZm9yIGl0LlxcbisgKi9cXG4rYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0c3dwX2VudHJ5X3Qgc3dwID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuK1xcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xcbitcXHR1bnNpZ25lZCBsb25nIGk7XFxuK1xcbitcXHRpZiAoenN3YXBfbmV2ZXJfZW5hYmxlZCgpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xcbitcXG4rXFx0XFx0aWYgKCF4YV9pc192YWx1ZSh4YV9sb2FkKHN3YXBfenN3YXBfdHJlZShlKSwgb2Zmc2V0ICsgaSkpKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MgLSByZXRyaWV2ZSBhbmQgY2xlYXIgQGZvbGlvJ3MgcGFya2VkIHNoYWRvdyhzKVxcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXFxuKyAqXFxuKyAqIFJlbW92ZSBhbnkgcGFya2VkIHdyaXRlYmFjayBzaGFkb3dzIGZvciBAZm9saW8ncyBzd2FwIG9mZnNldChzKSBmcm9tIHRoZVxcbisgKiB6c3dhcCB0cmVlLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBwcmVzZXJ2ZWQgd29ya2luZ3NldCBzaGFkb3csIG9yIE5VTEwgaWYgdGhlIHNsb3QocykgaGFkIG5vIHNoYWRvd1xcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxcbisgKiBzaGFkb3cgaW50byB0aGUgc3dhcCBzbG90IChidWZmZXIgZHJvcHBlZCkgb3IgZmVlZHMgaXQgdG8gd29ya2luZ3NldF9yZWZhdWx0KClcXG4rICogKGJ1ZmZlciBjb25zdW1lZCBieSBhIHN3YXBpbik7IGNsZWFyaW5nIGhlcmUgZW5zdXJlcyB0aGUgdHdvIHBhdGhzIG5ldmVyXFxuKyAqIGRvdWJsZS1jb3VudC5cXG4rICovXFxuK3ZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdHN3cF9lbnRyeV90IHN3cCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbitcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbitcXHRwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoc3dwKTtcXG4rXFx0dm9pZCAqc2hhZG93ID0gTlVMTDtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbitcXHRcXHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xcbitcXHRcXHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xcbitcXHRcXHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xcbitcXG4rXFx0XFx0aWYgKCF4YV9pc192YWx1ZShwYXJrZWQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0ICsgaSk7XFxuK1xcdFxcdGlmIChwYXJrZWQgIT0gWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPVylcXG4rXFx0XFx0XFx0c2hhZG93ID0gcGFya2VkO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc2hhZG93O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxcbiAgKiBkZWNvbXByZXNzaW5nIHRoZSBlbnRyeSBkYXRhIGludG8gdGhlIGZvbGlvLCBhbmQgaXNzdWluZyBhXFxuQEAgLTk5Miw2ICsxMDY1LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4gXFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbitcXHR2b2lkICpzaGFkb3c7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG5AQCAtOTk5LDYgKzEwNzMsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRpZiAoIXNpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFxuK1xcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XFxuK1xcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbkBAIC0xMDM0LDcgKzExMTAsOSBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZXJhc2UodHJlZSwgb2Zmc2V0KTtcXG4rXFx0aWYgKCFzaGFkb3cpXFxuK1xcdFxcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XFxuK1xcdHhhX3N0b3JlKHRyZWUsIG9mZnNldCwgc2hhZG93LCBHRlBfS0VSTkVMKTtcXG4gXFxuIFxcdGNvdW50X3ZtX2V2ZW50KFpTV1BXQik7XFxuIFxcdGlmIChlbnRyeS1cXHUwMDNlb2JqY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjIwLjQxNDg0MzM0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1MzcxNjQyMTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgdG8gbWFuYWdlIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBhZmZlY3QgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNTAsNiArMjI1MCw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiArMjM2MiwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNTcsMTIgKzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDc3LDggKzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG5AQCAtNjM4LDE3ICs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjc4LDE3ICs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzAsNyArNzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTc3LDcgKzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKlxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xuKyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4rICpcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXG4rICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cbisgKi9cbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgKyBpKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0byB3b3JraW5nc2V0X3JlZmF1bHQoKVxuKyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuKyAqIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiArMTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTksNiArMTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4gXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG5AQCAtMTAzNCw3ICsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0aWYgKCFzaGFkb3cpXG4rXHRcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XG4rXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTE6MjAuNDE0ODQ0OTQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NTYzMDk0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBzb21lICp2ZXJ5KiBzZW5zaXRpdmUgYXJlYXM6IGBtbS96c3dhcC5jYCwgYG1tL3dvcmtpbmdzZXQuY2AsIGBtbS92bXNjYW4uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9tZW1vcnkuY2AsIGFuZCBldmVuIHRoZSBoZWFkZXIgZm9yIHpzd2FwLCBgaW5jbHVkZS9saW51eC96c3dhcC5oYC4gVGhhdCdzIGEgd2lkZSByZWFjaCwgaW1tZWRpYXRlbHkgc2lnbmFsaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbW9kaWZpY2F0aW9ucy4gQWRkaW5nIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgaW1wbGllcyB0aGV5J3JlIGNoYW5naW5nIHRoZSBsaWZlY3ljbGUgYW5kIHRyYWNraW5nIG9mIHRoZXNlIGZvbGlvcywgYW5kIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGBfX3JlbW92ZV9tYXBwaW5nYCwgYHdvcmtpbmdzZXRfcmVmYXVsdGAsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhpcyBjbGVhcmx5IGltcGFjdHMgc3dhcHBpbmcsIHRoZSBzd2FwIGNhY2hlLCBhbmQgaG93IHRoZSB3b3JraW5nIHNldCBpcyBoYW5kbGVkLiBHaXZlbiB0aGUgc2NvcGUsIGl0J3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBoYXZlIGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLCBhbmQgSSdkIHB1dCB0aGlzIHBhdGNoIGZpcm1seSBpbiB0aGUgXCJuZWVkcyByaWdvcm91cyBmdXp6aW5nXCIgY2F0ZWdvcnkuIExldCdzIHNlZSBpZiB3ZSBjYW4gZmluZCBvdXQgd2hpY2ggY29uZmlnIHRoaXMgYWZmZWN0cy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjaGVjayB0aGF0IHpzd2FwIGlzIGVuYWJsZWQgYnkgdGhlIGtlcm5lbC4gSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Agb3IgbWF5YmUgYG1tL0tjb25maWcuenN3YXBgIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX1pTV0FQYCBpcyBkZWZpbmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgd29ydGggYSBjbG9zZSBleGFtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjExOjU3LjE3MTE1NzE0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDM3ODY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMTo1Ny41MTQ5NTYzMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA2MjkzMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKlpTV0FQIE9wdGltaXphdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHNlcmlvdXNseSBjb25zaWRlciBlbmFibGluZyBgWlNXQVBgIGFsb25nIHdpdGggdGhlIGBaU1dBUF9ERUZBVUxUX09OYCBkaXJlY3RpdmUuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyBvcHRpbWl6YXRpb24sIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBjdXJyZW50IHdvcmtsb2FkIGNoYXJhY3RlcmlzdGljcy4gV2Uga25vdyB0aGUgc3lzdGVtIG5lZWRzIHNvbWUgc3dhcCBzcGFjZSwgc28gd2UnbGwgbmVlZCB0byBjb25maWd1cmUgc3RhbmRhcmQgYFNXQVBgIGFzIHdlbGwuIEJlZm9yZSB3ZSBjb21taXQsIEknbGwgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgZGVwZW5kZW5jaWVzIGZvciBgWlNXQVBgLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBnb2luZyB0byBiZSBjcml0aWNhbCB0byBtYWtpbmcgc3VyZSB0aGlzIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGVsc2UgdGhpcyBjaGFuZ2UgaW1wYWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEyOjAwLjcyMTI1MjY1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyMjI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMjowMC43Njk2ODIxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY0Mzc2MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBtbS9LY29uZmlnIExpbmUgMjIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL0tjb25maWdgIGFuZCB6ZXJvIGluIG9uIGxpbmUgMjIuIE15IGluaXRpYWwgZm9jdXMgaXMgbGlrZWx5IGRyaXZlbiBieSBzb21ldGhpbmcgc3BlY2lmaWMgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgZGVwZW5kZW5jeS4gSSdtIGhvcGluZyBsaW5lIDIyIGhvbGRzIHRoZSBrZXkgdG8gY2xhcmlmeWluZyBhIHBhcnRpY3VsYXIgbWFjcm8sIGNvbmRpdGlvbiwgb3IgZGVmYXVsdCBzZXR0aW5nIHRoYXQncyB0cmlwcGluZyBtZSB1cC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50IChlLmcuLCBgaWZgLCBgc2VsZWN0YCwgYGRlcGVuZHMgb25gKSBvciBhIGRlZmluaXRpb24gdGhhdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBhIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmUgYmVoYXZlcyBhdCBjb21waWxlIHRpbWUuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHNjb3BlIG9mIHRoZSBvcHRpb24sIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIGZlYXR1cmVzLCBvciBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gTW9yZSBzcGVjaWZpY2FsbHksIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmNpZXMgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLCBob3cgaXRzIHN0YXR1cyBpcyBkZXRlcm1pbmVkIGF0IGNvbXBpbGUtdGltZSwgYW5kIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgY29tcGlsZS10aW1lIHNpZGUtZWZmZWN0cyAoZS5nLiBpbmNsdWRpbmcgb3IgZXhjbHVkaW5nIGhlYWRlciBmaWxlcykgYmFzZWQgb24gaXRzIHNlbGVjdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgc2hvdWxkIHByb3ZpZGUgc29tZSBpbnNpZ2h0IGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MDQuNDM0MDYyMzMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MDQuNDM0MTgxOTExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1OTA4NTQ4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgWlNXQVAgUGF0Y2ggRm9jdXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgYWJvdXQgYFpTV0FQYCwgYW5kIGl0IGhpbmdlcyBvbiB0aGUgZXhpc3RpbmcgYFNXQVBgIGZ1bmN0aW9uYWxpdHkuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2UgbmVlZCB0byBlbmFibGUgYFpTV0FQYCwgYFpTV0FQX0RFRkFVTFRfT05gLCBhbmQgb2YgY291cnNlLCBgU1dBUGAgaXRzZWxmIHRvIGdldCB0aGlzIHdvcmtpbmcuXG5cbk5vdywgd2hlcmUgYXJlIHRoZSBjcml0aWNhbCBwb2ludHMgd2l0aGluIHRoaXMgcGF0Y2g/IExldCdzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggYWZmZWN0cyB0aGVzZSBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYHN3YXBpbl9zeW5jYCwgYF9fcmVtb3ZlX21hcHBpbmdgLCBgd29ya2luZ3NldF9yZWZhdWx0YCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLlxuXG5gZG9fc3dhcF9wYWdlYCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGg7IGFsd2F5cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBzaG1lbV9zd2FwaW5fZm9saW9gIGlzIHNvbWV3aGF0IGFjdGl2ZSB0b28sIGFuZCBpdCdzIGFsd2F5cyB1c2VmdWwgZm9yIHNvbWUgZm9jdXNlZCBmdXp6aW5nLiBCdXQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgc2VlbXMgbGlrZSBhIHByaW1hcnkgdGFyZ2V0IGZvciBhbmFseXNpcy4gYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhcmUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIHNvIHRoZXkgc2hvdWxkIGJlIHNjcnV0aW5pemVkIGNhcmVmdWxseS4gIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIGFyZSBhbHNvIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGludmVzdGlnYXRpb24uXG5cbkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYWNjZXNzaWJpbGl0eSBvZiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCdzIHN0YXRpYyBvciBub3QuIExldCBtZSBzZWUuLi4geWVzLCBpdCdzIHN0YXRpYyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBBaCwgYnV0IHdhaXQsIHRoZSBwcm9tcHQgcmVtaW5kcyBtZSB0aGF0IEkgc2hvdWxkIFwiUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXCIuIFJpZ2h0LiBTbyBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBtbS96c3dhcC5jYCB0byBzZWUgaG93IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHVzZWQgYW5kIGlmIHRoZXJlJ3MgYSBub24tc3RhdGljIGFsdGVybmF0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTI6MTcuMDI1MDM5MzE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDkwMjEwMDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz0xMDIyPXZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy0xMDU5LSAqL1xcbm1tL3pzd2FwLmM6MTA2MDpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbm1tL3pzd2FwLmMtMTA2MS1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTExNjY9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTE4OS1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTkwOlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExOTEtXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMjI0LVxcbm1tL3pzd2FwLmM6MTIyNTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMjI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMjoxNy4yNzQwNjkxMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNDIxNzk3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFpzd2FwIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBac3dhcCBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBzY29wZSBvZiBzb21lIGtleSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgZGVjbGFyZWQgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCBtYWtlcyBzZW5zZSwga2VlcHMgdGhpbmdzIG1vZHVsYXIuIEJ1dCBub3cgSSBuZWVkIHRvIGNoZWNrIHNvbWUgcmVsYXRlZCBmdW5jdGlvbnM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIEludGVyZXN0aW5nLCB0aGVzZSBhcmUgKm5vdCogc3RhdGljLCBzbyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgaW1tZWRpYXRlIHNvdXJjZSBmaWxlLiBUaGF0IHN1Z2dlc3RzIGEgYnJvYWRlciByb2xlIG9yIGEgY2FsbCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLlxuXG5Ob3cgbGV0J3MgY29tcGFyZSB0aGF0IHRvIGBzaG1lbV9zd2FwaW5fZm9saW9gLCB3aGljaCAqaXMqIHN0YXRpYy4gVGhpcyBpcyBhbHNvIGZyb20gdGhlIHN3YXBwaW5nIGNvZGUuIFRoZW4gdGhlcmUncyBgZG9fc3dhcF9wYWdlYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCwgd2hpY2ggYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGxpa2VseSBtZWFucyB0aGV5J3JlIGNvcmUgc3dhcCBvcGVyYXRpb25zIHRoYXQgYXJlIHVzZWQgYWNyb3NzIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLlxuXG5UbyB1bmRlcnN0YW5kIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgIGJldHRlciwgaXQgbWFrZXMgc2Vuc2UgdG8gZ28gc3RyYWlnaHQgdG8gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayB0aGVyZSwgc2luY2UgdGhleSBzZWVtIHJlbGF0ZWQgdG8gdGhlIG1vcmUgZ2VuZXJhbCBzd2FwIHN0YXRlIGhhbmRsaW5nLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgc3dhcCBjYWNoaW5nIGFuZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzowNi40MTYyNTE3MzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzQ2OTI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2NhY2hlX3JlYWRfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02MTE9dm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjQzLVxcbm1tL3N3YXBfc3RhdGUuYzo2NDQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTY0NS1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz03Mjg9c3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTc0MS1cXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcXHUwMDI2aWx4KTtcXG5tbS9zd2FwX3N0YXRlLmM6NzQyOlxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCBwbHVnLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTc0My1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTgyOD1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTg1Ni1cXHRcXHRyYV9lbnRyeSA9IHN3cF9lbnRyeShzd3BfdHlwZShlbnRyeSksIG9mZnNldCk7XFxubW0vc3dhcF9zdGF0ZS5jOjg1NzpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhyYV9lbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcXG5tbS9zd2FwX3N0YXRlLmMtODU4LVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzcGx1Zywgb2Zmc2V0ICE9IGVudHJ5X29mZnNldCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtODY3LVxcdC8qIFRoZSBwYWdlIHdhcyBsaWtlbHkgcmVhZCBhYm92ZSwgc28gbm8gbmVlZCBmb3IgcGx1Z2dpbmcgaGVyZSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo4Njg6XFx0cmV0dXJuIHN3YXBfY2FjaGVfcmVhZF9mb2xpbyhlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy04NjktfVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTkyNT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTY3LVxcdFxcdH1cXG5tbS9zd2FwX3N0YXRlLmM6OTY4OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbm1tL3N3YXBfc3RhdGUuYy05NjktXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnNwbHVnLCBhZGRyICE9IHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTgyLVxcdC8qIFRoZSBmb2xpbyB3YXMgbGlrZWx5IHJlYWQgYWJvdmUsIHNvIG5vIG5lZWQgZm9yIHBsdWdnaW5nIGhlcmUgKi9cXG5tbS9zd2FwX3N0YXRlLmM6OTgzOlxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHRhcmdfZW50cnksIGdmcF9tYXNrLCBtcG9sLCB0YXJnX2lseCxcXG5tbS9zd2FwX3N0YXRlLmMtOTg0LVxcdFxcdFxcdFxcdCAgICAgIE5VTEwsIGZhbHNlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6MDYuNjg5NzI5Njk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjQ4OTExNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFN3YXAgRnVuY3Rpb25zIGluIExpbnV4IEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgYW5kIG1ha2luZyBzb21lIG9ic2VydmF0aW9ucy4gRmlyc3QsIEkgc2VlIHRoYXQgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQncyBsaWtlbHkgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBtZWFuaW5nIGl0J3Mgb25seSBtZWFudCB0byBiZSB1c2VkIHdpdGhpbiBpdHMgZGVmaW5pbmcgY29tcGlsYXRpb24gdW5pdCDigJMgcHJvYmFibHkgd2l0aGluIHRoZSBzYW1lIGZpbGUuIEl0J3Mgbm90IHBhcnQgb2YgdGhlIGV4dGVybmFsIEFQSSB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGludGVuZGVkIHRvIGNhbGwgZGlyZWN0bHkuXG5cblRoZW4sIEkgbm90ZSB0aGF0IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YCBhcmUgYWxsICpub24tc3RhdGljKi4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgbWVhbnQgdG8gYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB3aGVyZSB0aGV5IGFyZSBkZWNsYXJlZC4gVGhpcyBzdWdnZXN0cyB0aGV5IGNvdWxkIGJlIHVzZWQgaW4gb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhleSBhcmUsIHRodXMsIHBhcnQgb2YgYSBmdW5jdGlvbmFsIGludGVyZmFjZS4gSSBzaG91bGQga2VlcCBpbiBtaW5kIHdoaWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBJIG1heSBuZWVkIHRvIGJlIGNhbGxpbmcgZm9yIGEgZ2l2ZW4gdXNlLWNhc2UuXG5cbkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byBgbW0vc3dhcF9zdGF0ZS5jYCBmb3Igc29tZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBgc3dhcGluX3N5bmNgIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24sIGl0cyBwYXJhbWV0ZXJzLCBhbmQgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjEwLjcxNDYyNDM1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjUzNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz02NDQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjc4LS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo2Nzk6ICogc3dhcGluX3N5bmMgLSBzd2FwLWluIG9uZSBvciBtdWx0aXBsZSBlbnRyaWVzIHNraXBwaW5nIHJlYWRhaGVhZC5cXG5tbS9zd2FwX3N0YXRlLmMtNjgwLSAqIEBlbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY5My0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6Njk0OnN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxubW0vc3dhcF9zdGF0ZS5jLTY5NS1cXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjEwLjc2MTQ5NjMzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwODM4MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgSW4gb24gS2V5IEFyZWFzIGZvciBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHNvbWUga2V5IHN5bWJvbHMgdGhhdCBhcmUgbGlrZWx5IGltcGFjdGluZyBwZXJmb3JtYW5jZSwgbmFtZWx5IGBzd2FwaW5fc3luY2AsIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGFuZCB0aGF0IGNydWNpYWwgZnVuY3Rpb24sIGB3b3JraW5nc2V0X3JlZmF1bHRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGludGVyYWN0IHdpdGggdGhlIGxhcmdlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkb19zd2FwX3BhZ2VgLCBhcyBJIGtub3cgaXQncyBmcmVxdWVudGx5IGNhbGxlZCBzbyBJIG5lZWQgdG8gYXZvaWQgaXQuXG5cbk5vdywgd2hlcmUgd2FzIHRoYXQgYHdvcmtpbmdzZXRfcmVmYXVsdGAgZnVuY3Rpb24gYWdhaW4/IEFoLCByaWdodCwgdGhhdCdzIGluIGBtbS93b3JraW5nc2V0LmNgLiBJJ2xsIHN0YXJ0IHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFscyBvZiB0aGF0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzoxNC4xODIzMzc3MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMjAyMzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndvcmtpbmdzZXRfcmVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS93b3JraW5nc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNTM5LS8qKlxcbm1tL3dvcmtpbmdzZXQuYzo1NDA6ICogd29ya2luZ3NldF9yZWZhdWx0IC0gRXZhbHVhdGUgdGhlIHJlZmF1bHQgb2YgYSBwcmV2aW91c2x5IGV2aWN0ZWQgZm9saW8uXFxubW0vd29ya2luZ3NldC5jLTU0MS0gKiBAZm9saW86IFRoZSBmcmVzaGx5IGFsbG9jYXRlZCByZXBsYWNlbWVudCBmb2xpby5cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy01NDctICovXFxubW0vd29ya2luZ3NldC5jOjU0ODp2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxubW0vd29ya2luZ3NldC5jLTU0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE0LjIzMjU1ODI4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNjE5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGB3b3JraW5nc2V0X3JlZmF1bHRgIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgdmlzaWJpbGl0eSBhbmQgc2NvcGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgaXQgYmVpbmcgdXNlZD8gSG93IGlzIGl0IGJlaW5nIGFjY2Vzc2VkPyBHaXZlbiB0aGF0IHRoaXMgaXMgbWVtb3J5IG1hbmFnZW1lbnQtcmVsYXRlZCwgSSdsbCBzdGFydCBkaWdnaW5nIGludG8gdGhlIHpzd2FwIGNvbXBvbmVudC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGF0IGBtbS96c3dhcC5jYC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AuIFRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBvZmZlciBjcnVjaWFsIGluc2lnaHRzIGludG8gaG93IGRhdGEgaXMgaGFuZGxlZCBhbmQgcG90ZW50aWFsbHkgcmUtZmF1bHRlZCBvciBjbGVhcmVkIHdpdGhpbiB0aGUgenN3YXAgYXJjaGl0ZWN0dXJlLiBJIGV4cGVjdCB0aGF0IGJ5IHRyYWNpbmcgdGhlaXIgdXNhZ2UsIEkgY2FuIGZpZ3VyZSBvdXQgd2h5IHRoZSBcIm5vbi1zdGF0aWNcIiBjaGFyYWN0ZXJpc3RpYyBvZiBgd29ya2luZ3NldF9yZWZhdWx0YCBpcyBub3Rld29ydGh5LiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAxMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE3Ljg5NTE4MDUwOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTA0MzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk3OC0vKlxcbm1tL3pzd2FwLmM6OTc5OiAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xcbm1tL3pzd2FwLmMtOTgwLSAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXFxuLS1cXG5tbS96c3dhcC5jLTk4OC0gKi9cXG5tbS96c3dhcC5jOjk4OTpib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS96c3dhcC5jLTk5MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjE4LjA3NTI5MTMxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjI1OTIzNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIHRoaW5ncyBhcmVuJ3QganVzdCBmaXhlZDsgdGhleSdyZSBkeW5hbWljLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGhvbmUgaW4gb24gYSBmZXcga2V5IHN5bWJvbHMgdGhhdCBkcml2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUuIFRoZXNlIGxvb2sgbGlrZSB0aGUgY2VudHJhbCBwaWVjZXM6IGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIGBzd2FwaW5fc3luY2AsIGFuZCBgd29ya2luZ3NldF9yZWZhdWx0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aGUgenN3YXAgcHJvY2Vzcy5cblxuTm93LCBhcyBhbiBleHBlcnQsIEkga25vdyB0aGF0IGNvbmZpZ3VyYXRpb24gaXMga2V5LCBzbyBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIGBTV0FQYCwgYFpTV0FQYCwgYW5kIGBaU1dBUF9ERUZBVUxUX09OYCB0byBiZSBlbmFibGVkLiBJIG1heSB3YW50IHRvIHBva2UgYXJvdW5kIGFuZCBjb25maXJtIHRoYXQuXG5cbkl0J3MgdGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBDb3VsZCB3ZSBiZSBtaXNzaW5nIHNvbWV0aGluZz8gVGhpbmtpbmcgbGF0ZXJhbGx5LCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAgbWlnaHQgYmUgcGVydGluZW50IHRvIHRyaWdnZXJpbmcgdGhhdCB3cml0ZWJhY2suIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSwgc28gSSdsbCBjaGVjayBgbW0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjI0LjcwMTIxODA5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDU0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjI0Ljc0ODcyNzQ0NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjUyNzQxODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNDUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHNlY3Rpb24sIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IChgbW1gKSwgaXMgZGVmaW5lZCBvciBoYXMgc29tZSBjcml0aWNhbCBsb2dpYyB0aGVyZS4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyDigJMgbWF5YmUgYSBkZWZhdWx0IHNldHRpbmcsIGEgY29uZGl0aW9uYWwgZGVwZW5kZW5jeSwgb3IgYW4gaW1wb3J0YW50IGNvbW1lbnQgdGhhdCdzIGluZmx1ZW5jaW5nIHNvbWUgYmVoYXZpb3IgSSdtIGludmVzdGlnYXRpbmcuIEkgbmVlZCB0byBiZSBwcmVjaXNlLCBJIGNhbid0IGp1c3Qgc2NhbiB0aGUgZmlsZTsgbXkgZ29hbCBpcyB0byBwaW5wb2ludCB0aGUgZXhhY3QgY29uZmlnIG9wdGlvbiwgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIHRoYXQgZ292ZXJucyBpdC4gSSBleHBlY3QgdGhhdCBJIHdpbGwgYmUgYWJsZSB0byBmb3JtIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIGFzIEkgYXBwcm9hY2ggbGluZSA0NS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozMC40MDE0NzI5NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIFRoZSBzZWxlY3Rpb24gbWFkZSBoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBrZXJuZWxcXG4gIDQzOlxcdFxcdCAgY29tbWFuZCBsaW5lICd6c3dhcC5lbmFibGVkPScgb3B0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbiAgNDY6XFx0XFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4gIDQ3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDQ4OlxcdFxcdGRlZmF1bHQgblxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIHpzd2FwIHNocmlua2VyIHdpbGwgYmUgZW5hYmxlZCwgYW5kIHRoZSBwYWdlc1xcbiAgNTE6XFx0XFx0ICBzdG9yZWQgaW4gdGhlIHpzd2FwIHBvb2wgd2lsbCBiZWNvbWUgYXZhaWxhYmxlIGZvciByZWNsYWltIChpLmVcXG4gIDUyOlxcdFxcdCAgd3JpdHRlbiBiYWNrIHRvIHRoZSBiYWNraW5nIHN3YXAgZGV2aWNlKSBvbiBtZW1vcnkgcHJlc3N1cmUuXFxuICA1MzpcXHRcXG4gIDU0OlxcdFxcdCAgVGhpcyBtZWFucyB0aGF0IHpzd2FwIHdyaXRlYmFjayBjb3VsZCBoYXBwZW4gZXZlbiBpZiB0aGUgcG9vbCBpc1xcbiAgNTU6XFx0XFx0ICBub3QgeWV0IGZ1bGwsIG9yIHRoZSBjZ3JvdXAgenN3YXAgbGltaXQgaGFzIG5vdCBiZWVuIHJlYWNoZWQsXFxuICA1NjpcXHRcXHQgIHJlZHVjaW5nIHRoZSBjaGFuY2UgdGhhdCBjb2xkIHBhZ2VzIHdpbGwgcmVzaWRlIGluIHRoZSB6c3dhcCBwb29sXFxuICA1NzpcXHRcXHQgIGFuZCBjb25zdW1lIG1lbW9yeSBpbmRlZmluaXRlbHkuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNob2ljZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozMC40MDE1ODM2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTAzMjY4OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB3b3JraW5nc2V0IHNoYWRvd3MgY29ycmVjdGx5IGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gRXNzZW50aWFsbHksIGl0J3MgYWJvdXQgZ2V0dGluZyB3cml0ZWJhY2sgdG8gdHJpZ2dlciwgd2hpY2ggaXMgYWNoaWV2ZWQgYnkgdXRpbGl6aW5nIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gU28sIHRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIGluLlxuXG5JJ20gcXVpY2tseSBjaGVja2luZyBpZiBhIHNpbWlsYXIgY29tcHJlc3NvciBjb25maWcgbGlrZSBgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNGAgaXMgbmVjZXNzYXJ5LCBidXQgdGhlIGRlZmF1bHQgY29tcHJlc3NvciBpcyBmaW5lIGluIHRoaXMgaW5zdGFuY2UsIHNvIEknbGwgc2tpcCBpdC5cblxuTGV0IG1lIHJlY2FwIG15IHJlYXNvbmluZzogVGhpcyBtb2RpZmllcyBzd2FwIGFuZCB6c3dhcCB0byBtYW5hZ2UgdGhvc2UgcGVza3kgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIEl0IGRvZXMgdGhpcyB3aXRoIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIHdoaWNoIGFyZSBjcnVjaWFsIGZvciBtYW5hZ2luZyBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlcywgdG91Y2hpbmcgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAgZGlyZWN0bHkuIFRoZXkgYXJlIHJlYWNoYWJsZSBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0LCB3aGljaCBtZWFucyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgYXJlYS5cblxuTG9va2luZyBhdCB0aGUgY29uZmlncyB0aGF0IGFyZSBpbXBhY3RlZDogYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBkZWZpbml0ZWx5IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC5cblxuTm93LCBmb3IgZm9jdXMgc3ltYm9scywgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdtIGZvY3VzaW5nIG9uIGtleSBzeW1ib2xzIHRvIGhpZ2hsaWdodCB0aGUgYXJlYSBvZiBjaGFuZ2UuIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgYXJlIHRoZSBvYnZpb3VzIGNob2ljZXMgYW5kIGFyZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoLiBJIGNvbnNpZGVyZWQgYHN3YXBpbl9zeW5jYCBhcyBhIGdvb2Qgb25lLCBvciBwZXJoYXBzIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBidXQgSSBkaXNtaXNzZWQgdGhlIGxhdHRlciBhcyBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYywgYnV0IGlzIGVzc2VudGlhbCwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiBJIGNhbiB1c2UgaXQgYXMgYSBmb2N1cyBwb2ludC4gVGhlIHByb21wdCBzYWlkIHRvIHByZWZlciBub24tc3RhdGljIGZ1bmN0aW9ucyBvdmVyIHN0YXRpYywgYnV0IGl0IGRvZXNuJ3QgZm9yYmlkIHN0YXRpYyBmdW5jdGlvbnMuXG5cbk9rYXksIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb25zLiBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIGFyZSAqbm9uKi1zdGF0aWMgYW5kIGRlY2xhcmVkIGluIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLCBzbyB0aGV5IGFyZSBwZXJmZWN0LiBUaGV5J3JlIGV4YWN0bHkgd2hhdCBJIG5lZWQuIEknbGwganVzdCBjb25maXJtIGB3b3JraW5nc2V0X3JlZmF1bHRgJ3MgZXhwb3J0IHN0YXR1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzozOC45MDQ4NTc1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODY3MzE5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qd29ya2luZ3NldF9yZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3dvcmtpbmdzZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6MzguOTUzNTQwNDQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDIwNTUwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIENvZGUgVmlzaWJpbGl0eSBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uIGFuZCBJJ20gcmVtaW5kZWQgaXQncyBkZWZpbml0ZWx5IG5vdCBleHBvcnRlZC4gQnV0LCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgaXQgKmlzbid0KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgZGlzdGluY3Rpb24gaXMgY3J1Y2lhbC4gTm9uLXN0YXRpYyBtZWFucyBpdCBtaWdodCBiZSBhY2Nlc3NpYmxlIGluIHdheXMgSSBuZWVkIHRvIGNvbnNpZGVyLCBldmVuIGlmIGl0J3Mgbm90IGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgcHVibGlzaGVkIEFQSS4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZC4gSXMgaXQgYWNjZXNzaWJsZSB0byBsaW5raW5nPyBJcyBpdCBpbiB0aGUgc2FtZSBjb21waWxhdGlvbiB1bml0IG9yIGEgc2VwYXJhdGUgb25lP1xuXG5UaGVyZWZvcmUsIEkgbm93IG5lZWQgdG8gZGV0ZXJtaW5lLCBhbmQgSSdsbCBxdWlja2x5IGNoZWNrLCBpZiBgc3dhcGluX3N5bmNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBJIG5lZWQgdG8ga25vdyBmb3Igc3VyZSBpZiBpdCdzIGJlaW5nIGV4cG9zZWQgdmlhIHNvbWUgb3RoZXIgbWVhbnMgb3IgaWYgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBpbiBhIHdheSB0aGF0ICpzZWVtcyogdG8gYmUgcHJpdmF0ZSBidXQgYWN0dWFsbHkgaXNuJ3QuIFRoZSBzY29waW5nIGlzIGNyaXRpY2FsIGhlcmUuIEl0IGFmZmVjdHMgZXZlcnl0aGluZyBmcm9tIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdG8gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LCBhbmQgb2YgY291cnNlLCB3aGV0aGVyIG9yIG5vdCBhIHNlZW1pbmdseSBpbnRlcm5hbCBmdW5jdGlvbiBpcyBnb2luZyB0byBjYXVzZSB0cm91YmxlIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NDIuNjk1NTk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI5NjU2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3dhcGluX3N5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcF9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo0Mi43NDE5MDI1NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NzU0NzY0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IHBlcnNwZWN0aXZlOlxuXG4qKkZpbmFsIFBhdGNoIFJldmlldzogQ2hlY2tpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCB3b3JrIG9uIHRoaXMgcGF0Y2gsIGZvY3VzaW5nIG9uIHRoZSBzZWxlY3RlZCBzeW1ib2xzIGFuZCBjb25maWdzLCBsb29rcyBzb2xpZC4gSSdtIHBsZWFzZWQgd2l0aCB0aGUgZGlyZWN0aW9uIHdlJ3JlIHRha2luZy5cblxuQmVmb3JlIHdlIGNhbGwgdGhpcyBkb25lLCB0aG91Z2gsIEkgbmVlZCB0byBkbyBhIGZpbmFsIHN3ZWVwIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGFjY291bnRlZCBmb3IgZXZlcnkgZGVwZW5kZW5jeS4gSXQncyBub3QgZXhwb3J0ZWQsIGJ1dCBpdCdzICpub24tc3RhdGljKiwgc28gSSBuZWVkIHRvIGJlIGV4dHJhIHRob3JvdWdoLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX01FTUNHYC4gVGhlIHJlYXNvbiBJJ20gcmFpc2luZyB0aGlzIGZsYWcgaXMgdGhhdCBgc2hyaW5rX21lbWNnX2NiYCBpcyBpbiBgenN3YXAuY2AuIEkndmUgZ290IGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcmFjdGlvbiB0aGVyZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS96c3dhcC5jYCBhbmQgdGFrZSBhIGxvb2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgb24gYE1FTUNHYCB0aGF0IHdlIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGF0IHRoaXMgc3RhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTMyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NDcuMDM5NDU0MjMzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAyMzczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTYxNz1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKnZhbCxcXG4tLVxcbm1tL3pzd2FwLmMtNjUwLS8qIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgUkNVICovXFxubW0venN3YXAuYzo2NTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3pzd2FwLmMtNjUyLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV9lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo0Ny4wODU0ODM0MzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk1MTM4NjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBXcml0ZWJhY2sgQnVmZmVyIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBpbnRlZ3JhdGluZyB0aGlzIHBhdGNoLCBhbmQgSSdtIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIGluIG15IGhlYWQuIGBNRU1DR2AgaXMgdXN1YWxseSBlbmFibGVkLCBhbmQgSSdkIG5vcm1hbGx5IGp1c3QgYXNzdW1lIGl0J3MgdGhlcmUsIGJ1dCBJIHRoaW5rIEkgc2hvdWxkIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCBpbiBjYXNlLiBJdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBOb3csIGBaU1dBUGAgZG9lc24ndCBzdHJpY3RseSBkZXBlbmQgb24gYE1FTUNHYCBpdHNlbGYuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYCBtaWdodCBkZXBlbmQgb24gTUVNQ0csIGJ1dCBpdCBkb2Vzbid0LlxuXG5BbHJpZ2h0LCBsZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNvcmUgYFpTV0FQYCBkZXBlbmRlbmNpZXMuIEl0IG5lZWRzIGBTV0FQYCwgbmF0dXJhbGx5LiBJdCAqc2VsZWN0cyogYENSWVBUT2AgYW5kIGBaU01BTExPQ2AuIE9rYXksIHRob3NlIGFyZSBzdHJhaWdodGZvcndhcmQuIEdpdmVuIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIHdyaXRlYmFjayBidWZmZXJzIGFuZCB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGdvaW5nIHRvIGluY2x1ZGUgYFNXQVBgLCBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIEkgdGhpbmsgdGhhdCBjb3ZlcnMgYWxsIHRoZSBiYXNlcy5cblxuVGhpcyBwYXRjaCwgZnJvbSB3aGF0IEknbSByZWFkaW5nLCBtb2RpZmllcyBob3cgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgd29yaywgcGFydGljdWxhcmx5IHdpdGggYHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJgIGFuZCBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYC4gVGhlc2UgYXJlIGNyaXRpY2FsIGFkZGl0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIHNoYWRvd3Mgd2l0aGluIHRoZSB6c3dhcCB0cmVlLiBJdCdzIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgYW5kIHN3YXAtaW4gb3BlcmF0aW9ucywgc28gd2UncmUgdGFsa2luZyBhYm91dCBkaXJlY3QgZWZmZWN0cyBvbiBwYWdlIHJlY2xhaW0sIHRoZSBzd2FwIGNhY2hlLCBhbmQgenN3YXAgaXRzZWxmLiBUaGlzIGlzIGNvcmUsIHJlYWNoYWJsZSwgYW5kIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudC5cblxuTGV0J3MgY2FsbCB0aGUgYHNldC1yZXN1bHRzYCBmdW5jdGlvbiB0byBzb2xpZGlmeSB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNjYsIk91dHB1dFRva2VucyI6MjAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE1OjEzOjU0LjAzNjg3MzIyOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0Mzg2NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXJcIixcbiAgICBcInpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c1wiLFxuICAgIFwic3dhcGluX3N5bmNcIixcbiAgICBcIndvcmtpbmdzZXRfcmVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIHByb3Blcmx5IGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZm9yIHpzd2FwIHdyaXRlYmFjayBidWZmZXJzLiBJdCBpbnRyb2R1Y2VzIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCBhbmQgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AgdG8gbWFuYWdlIHBhcmtlZCBzaGFkb3dzIGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNoYW5nZXMgdGhhdCBhZmZlY3QgcGFnZSByZWNsYWltLCBzd2FwIGNhY2hlLCBhbmQgenN3YXAsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyXCIsXG4gICAgXCJ6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NcIixcbiAgICBcInN3YXBpbl9zeW5jXCIsXG4gICAgXCJ3b3JraW5nc2V0X3JlZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBwcm9wZXJseSBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGZvciB6c3dhcCB3cml0ZWJhY2sgYnVmZmVycy4gSXQgaW50cm9kdWNlcyBgenN3YXBfZm9saW9faXNfd3JpdGViYWNrX2J1ZmZlcmAgYW5kIGB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3NgIHRvIG1hbmFnZSBwYXJrZWQgc2hhZG93cyBpbiB0aGUgenN3YXAgdHJlZSBkdXJpbmcgd3JpdGViYWNrIGFuZCBzd2FwLWluLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjaGFuZ2VzIHRoYXQgYWZmZWN0IHBhZ2UgcmVjbGFpbSwgc3dhcCBjYWNoZSwgYW5kIHpzd2FwLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxMzo1NC4xMzEyNjk2NDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDc1MzQwODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NTQuMTMyMTIwMjU1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNDc0NDg1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIHN3YXAgYW5kIHpzd2FwIHN1YnN5c3RlbXMgdG8gaGFuZGxlIHdvcmtpbmdzZXQgc2hhZG93cyBkdXJpbmcgenN3YXAgd3JpdGViYWNrLiBJdCBwYXJrcyB0aGUgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGFuZCByZXN0b3JlcyBpdCB1cG9uIHN3YXAtaW4gb3Igc3dhcCBjYWNoZSBkZWxldGlvbi4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHBvaW50ZXIgbWFuaXB1bGF0aW9uLCB4YXJyYXkgb3BlcmF0aW9ucywgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCBhbmQgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgY29tcGxleCBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG1pZ2h0IGJlIHJlYWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcywgc3VjaCBhcyBpbmNvcnJlY3QgcG9pbnRlciBkZXJlZmVyZW5jZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiwgd291bGQgYmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZjMzY0YWJkNWEwNzJkYWNlMjk1MWY1ZjBmMWQxZmNhYmNkOGQzZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAxNToxMToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMS4uZGZiNzE1MzIzNmY1YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsOCBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCAqenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC02OSw2ICs3MSwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKnpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX0xJTlVYX1pTV0FQX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi4xN2U5MDQ2NjJlYjY1IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtNDc1OSw2ICs0NzU5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VfaWR4O1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzO1xuIFx0cHRlX3QgKnB0ZXA7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRpZiAoIXB0ZV91bm1hcF9zYW1lKHZtZikpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTQ4ODAsNiArNDg4MSwxMCBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdFx0Z290byBvdXRfcGFnZTtcbiBcdH1cbiBcbitcdHNoYWRvdyA9IHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93cyhmb2xpbyk7XG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHQvKlxuIFx0ICogS1NNIHNvbWV0aW1lcyBoYXMgdG8gY29weSBvbiByZWFkIGZhdWx0cywgZm9yIGV4YW1wbGUsIGlmXG4gXHQgKiBmb2xpby1cdTAwM2VpbmRleCBvZiBub24ta3NtIGZvbGlvcyB3b3VsZCBiZSBub25saW5lYXIgaW5zaWRlIHRoZVxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA5MDAxYWFmM2I3Yjk0Li5mOTY4YjY4YjYwYzUyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNTAsNiArMjI1MCw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gTlVMTDtcbiBcdGludCBlcnJvciwgbnJfcGFnZXMsIG9yZGVyO1xuIFx0cGdvZmZfdCBvZmZzZXQ7XG4rXHR2b2lkICpzaGFkb3c7XG4gXG4gXHRWTV9CVUdfT04oISpmb2xpb3AgfHwgIXhhX2lzX3ZhbHVlKCpmb2xpb3ApKTtcbiBcdGluZGV4X2VudHJ5ID0gcmFkaXhfdG9fc3dwX2VudHJ5KCpmb2xpb3ApO1xuQEAgLTIzNjEsNiArMjM2MiwxMCBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0ICovXG4gXHRhcmNoX3N3YXBfcmVzdG9yZShmb2xpb19zd2FwKHN3YXAsIGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0c2hhZG93ID0genN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzKGZvbGlvKTtcbitcdGlmIChzaGFkb3cpXG4rXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbitcbiBcdGlmIChzaG1lbV9zaG91bGRfcmVwbGFjZV9mb2xpbyhmb2xpbywgZ2ZwKSkge1xuIFx0XHRlcnJvciA9IHNobWVtX3JlcGxhY2VfZm9saW8oXHUwMDI2Zm9saW8sIGdmcCwgaW5mbywgaW5kZXgsIHZtYSk7XG4gXHRcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYuLjdlYTRhMmJhMDg0MTYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwX3RhYmxlLmhcIlxuICNpbmNsdWRlIFwic3dhcC5oXCJcbkBAIC0yNTcsMTIgKzI1OCwyMSBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xuIFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHZvaWQgKnNoYWRvd19wYXJrZWQ7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoX19zd2FwX2VudHJ5X3RvX2NsdXN0ZXIoZW50cnkpICE9IGNpKTtcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7XG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuK1x0LypcbitcdCAqIEEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciBwYXJrZWQgdGhlIHNsb3QncyBvcmlnaW5hbCBzaGFkb3cgaW4gdGhlXG4rXHQgKiB6c3dhcCB0cmVlOiByZXN0b3JlIGl0IGludG8gdGhlIHNsb3QgZm9yIGxhdGVyIHN3YXAtaW4uXG4rXHQgKi9cbitcdHNoYWRvd19wYXJrZWQgPSB6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3MoZm9saW8pO1xuK1x0aWYgKHNoYWRvd19wYXJrZWQpXG4rXHRcdHNoYWRvdyA9IHNoYWRvd19wYXJrZWQ7XG4rXG4gXHRzaSA9IF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KTtcbiBcdGNpX3N0YXJ0ID0gc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KTtcbiBcdGNpX2VuZCA9IGNpX3N0YXJ0ICsgbnJfcGFnZXM7XG5AQCAtNDc3LDggKzQ4Nyw2IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFxuIFx0LyogbWVtc3cgdW5jaGFyZ2VzIHN3YXAgd2hlbiBmb2xpbyBpcyBhZGRlZCB0byBzd2FwIGNhY2hlICovXG4gXHRtZW1jZzFfc3dhcGluKGZvbGlvKTtcbi1cdGlmIChzaGFkb3cpXG4tXHRcdHdvcmtpbmdzZXRfcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiBcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG5AQCAtNjM4LDE3ICs2NDYsMjYgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBzd2FwX2lvY2IgKipwbHVnLCBib29sIHJlYWRhaGVhZClcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbiBcbiBcdGRvIHtcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4rXHRcdC8qXG4rXHRcdCAqIENhcHR1cmUgdGhlIHNsb3QncyBzaGFkb3cgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIG92ZXJ3cml0ZXMgaXQsXG4rXHRcdCAqIHNvIGEgZnJlc2ggc3dhcC1pbiBjYW4gYmUgZXZhbHVhdGVkIGFzIGEgcmVmYXVsdCBiZWxvdy5cbitcdFx0ICovXG4rXHRcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhlbnRyeSk7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKHNoYWRvdylcbitcdFx0d29ya2luZ3NldF9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xuK1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjc4LDE3ICs2OTUsMjYgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHZvaWQgKnNoYWRvdyA9IE5VTEw7XG4gXG4gXHRkbyB7XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuK1x0XHQvKlxuK1x0XHQgKiBDYXB0dXJlIHRoZSBzbG90J3Mgc2hhZG93IGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBvdmVyd3JpdGVzIGl0LFxuK1x0XHQgKiBzbyBhIGZyZXNoIHN3YXAtaW4gY2FuIGJlIGV2YWx1YXRlZCBhcyBhIHJlZmF1bHQgYmVsb3cuXG4rXHRcdCAqL1xuK1x0XHRzaGFkb3cgPSBzd2FwX2NhY2hlX2dldF9zaGFkb3coZW50cnkpO1xuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRpZiAoc2hhZG93KVxuK1x0XHR3b3JraW5nc2V0X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7XG4rXG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1NjcwOGQxZDJkZmQ1Li5jMjdlOTU3MzIyYjgyIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDgsNiArNDgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmludGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RheC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZXdhbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbkBAIC03MzAsNyArNzMxLDggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuIFx0XHRzd3BfZW50cnlfdCBzd2FwID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbi1cdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbitcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyKGZvbGlvKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuIFx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4gXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xuaW5kZXggZjM1MTc5OGU3MjNhYy4uN2MzMGNmMDkxY2JmYiAxMDA2NDRcbi0tLSBhL21tL3dvcmtpbmdzZXQuY1xuKysrIGIvbW0vd29ya2luZ3NldC5jXG5AQCAtNTc3LDcgKzU3NywxMCBAQCB2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4gXHRpZiAoIXdvcmtpbmdzZXRfdGVzdF9yZWNlbnQoc2hhZG93LCBmaWxlLCBcdTAwMjZ3b3JraW5nc2V0LCB0cnVlKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2xydShmb2xpbykpKVxuK1x0XHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XG4rXHRlbHNlXG4rXHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuIFx0d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCBucik7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgZmlsZSwgbnIpO1xuIFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5mMDU5MjA2OTQ4YWJhIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk3Miw2ICs5NzIsNzkgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitcbisjZGVmaW5lIFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cgeGFfbWtfdmFsdWUoMClcbitcbisvKlxuKyAqIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIgLSBpcyBAZm9saW8gYSB6c3dhcCB3cml0ZWJhY2sgYnVmZmVyP1xuKyAqIEBmb2xpbzogdGhlIGZvbGlvIGJlaW5nIGV4YW1pbmVkICh0eXBpY2FsbHkgYSBzd2FwIGNhY2hlIGZvbGlvIHVuZGVyIHJlY2xhaW0pXG4rICpcbisgKiBBIGZvbGlvIGlzIGEgenN3YXAgd3JpdGViYWNrIGJ1ZmZlciB3aGVuIGV2ZXJ5IG9uZSBvZiBpdHMgc3dhcCBvZmZzZXRzIGhvbGRzXG4rICogYSBwYXJrZWQgd3JpdGViYWNrIHNoYWRvdyAoYSByZWFsIHNoYWRvdyBvciB0aGUgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV1xuKyAqIHNlbnRpbmVsKSBpbiB0aGUgenN3YXAgdHJlZSByYXRoZXIgdGhhbiBhIGxpdmUgenN3YXAgZW50cnkuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgQGZvbGlvIGlzIGEgd3JpdGViYWNrIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjbGFpbSBwYXRoXG4rICogbXVzdCBub3QgbWludCBhIGZyZXNoIHdvcmtpbmdzZXQgc2hhZG93IGZvciBpdC5cbisgKi9cbitib29sIHpzd2FwX2ZvbGlvX2lzX3dyaXRlYmFja19idWZmZXIoc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0aWYgKHpzd2FwX25ldmVyX2VuYWJsZWQoKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHhhX2xvYWQoc3dhcF96c3dhcF90cmVlKGUpLCBvZmZzZXQgKyBpKSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzIC0gcmV0cmlldmUgYW5kIGNsZWFyIEBmb2xpbydzIHBhcmtlZCBzaGFkb3cocylcbisgKiBAZm9saW86IHRoZSB3cml0ZWJhY2sgYnVmZmVyIGZvbGlvIChvciB0aGUgc3dhcGluIGZvbGlvIHRoYXQgY29uc3VtZWQgaXQpXG4rICpcbisgKiBSZW1vdmUgYW55IHBhcmtlZCB3cml0ZWJhY2sgc2hhZG93cyBmb3IgQGZvbGlvJ3Mgc3dhcCBvZmZzZXQocykgZnJvbSB0aGVcbisgKiB6c3dhcCB0cmVlLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHJlc2VydmVkIHdvcmtpbmdzZXQgc2hhZG93LCBvciBOVUxMIGlmIHRoZSBzbG90KHMpIGhhZCBubyBzaGFkb3dcbisgKiAoc2VudGluZWwgb25seSkgb3Igbm90aGluZyBwYXJrZWQuIFRoZSBjYWxsZXIgZWl0aGVyIHJlc3RvcmVzIHRoZSByZXR1cm5lZFxuKyAqIHNoYWRvdyBpbnRvIHRoZSBzd2FwIHNsb3QgKGJ1ZmZlciBkcm9wcGVkKSBvciBmZWVkcyBpdCB0byB3b3JraW5nc2V0X3JlZmF1bHQoKVxuKyAqIChidWZmZXIgY29uc3VtZWQgYnkgYSBzd2FwaW4pOyBjbGVhcmluZyBoZXJlIGVuc3VyZXMgdGhlIHR3byBwYXRocyBuZXZlclxuKyAqIGRvdWJsZS1jb3VudC5cbisgKi9cbit2b2lkICp6c3dhcF9sb29rdXBfYW5kX2NsZWFyX3NoYWRvd3Moc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzd3BfZW50cnlfdCBzd3AgPSBmb2xpby1cdTAwM2Vzd2FwO1xuK1x0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbitcdHBnb2ZmX3Qgb2Zmc2V0ID0gc3dwX29mZnNldChzd3ApO1xuK1x0dm9pZCAqc2hhZG93ID0gTlVMTDtcbitcdHVuc2lnbmVkIGxvbmcgaTtcbitcbitcdGlmICh6c3dhcF9uZXZlcl9lbmFibGVkKCkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuK1x0XHRzd3BfZW50cnlfdCBlID0gc3dwX2VudHJ5KHN3cF90eXBlKHN3cCksIG9mZnNldCArIGkpO1xuK1x0XHRzdHJ1Y3QgeGFycmF5ICp0cmVlID0gc3dhcF96c3dhcF90cmVlKGUpO1xuK1x0XHR2b2lkICpwYXJrZWQgPSB4YV9sb2FkKHRyZWUsIG9mZnNldCArIGkpO1xuK1xuK1x0XHRpZiAoIXhhX2lzX3ZhbHVlKHBhcmtlZCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHhhX2VyYXNlKHRyZWUsIG9mZnNldCArIGkpO1xuK1x0XHRpZiAocGFya2VkICE9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1cpXG4rXHRcdFx0c2hhZG93ID0gcGFya2VkO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHNoYWRvdztcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsNiArMTA2NSw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbitcdHZvaWQgKnNoYWRvdztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbkBAIC05OTksNiArMTA3Myw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRpZiAoIXNpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbitcdHNoYWRvdyA9IHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSk7XG4rXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4gXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG5AQCAtMTAzNCw3ICsxMTEwLDkgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHR4YV9lcmFzZSh0cmVlLCBvZmZzZXQpO1xuK1x0aWYgKCFzaGFkb3cpXG4rXHRcdHNoYWRvdyA9IFpTV0FQX1dSSVRFQkFDS19OT19TSEFET1c7XG4rXHR4YV9zdG9yZSh0cmVlLCBvZmZzZXQsIHNoYWRvdywgR0ZQX0tFUk5FTCk7XG4gXG4gXHRjb3VudF92bV9ldmVudChaU1dQV0IpO1xuIFx0aWYgKGVudHJ5LVx1MDAzZW9iamNnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTU6MTM6NTQuMTMyMTI2NzU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDc0NDU1NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBtb2RpZnlpbmcgenN3YXAsIHN3YXBfc3RhdGUsIHNobWVtLCBtZW1vcnksIHZtc2NhbiwgYW5kIHdvcmtpbmdzZXQgbGlrZWx5ICpkb2Vzbid0KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIG1vZGlmaWNhdGlvbnMgY2VudGVyIGFyb3VuZCBtYW5hZ2luZyB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gV2UncmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGB6c3dhcF9mb2xpb19pc193cml0ZWJhY2tfYnVmZmVyYCwgYHpzd2FwX2xvb2t1cF9hbmRfY2xlYXJfc2hhZG93c2AsIHRoZSBwYXJraW5nIGFuZCByZXN0b3Jpbmcgb2YgdGhlIHdvcmtpbmdzZXQgc2hhZG93IGluIHRoZSB6c3dhcCB0cmVlIGR1cmluZyB3cml0ZWJhY2sgYW5kIHN3YXAtaW4vY2FjaGUgZGVsZXRpb24sIGFuZCBob29raW5nIHRoaXMgaW50byBleGlzdGluZyBmdW5jdGlvbnMgbGlrZSBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfcmVhZF9mb2xpb2AsIGFuZCBgc3dhcGluX3N5bmNgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSG93ZXZlciwgZnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhlIHNoYWRvdyB2YXJpYWJsZSBpcyBhIGB2b2lkICpgLCB3aGljaCBpcyBiYXNpY2FsbHkgYW4gZW5jb2RlZCB2YWx1ZS4gSXQgbG9va3MgbGlrZSBpdCdzIGNyZWF0ZWQgdmlhIGB4YV9ta192YWx1ZWAgKG9yIGEgc2ltaWxhciBtZWNoYW5pc20gaW4gdGhlIHdvcmtpbmdzZXQgY29kZSkgYW5kIHN0b3JlZCBpbiB0aGUgeGFycmF5IChgc3dhcF96c3dhcF90cmVlKGUpYCkuIFRoZXJlIGFyZW4ndCBhbnkgbmV3IHN0cnVjdHVyZXMgYmVpbmcgaW50cm9kdWNlZCB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlIG9yIGFueSBhbGxvY2F0ZWQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgbWVhbnMgdGhlIHJpc2sgb2YgYWNjaWRlbnRhbGx5IHJlYWRpbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgaXMgbWluaW1hbCwgZXNwZWNpYWxseSBzaW5jZSBpdCBkb2Vzbid0IGNoYW5nZSBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy5cblxuRXNzZW50aWFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGRlZXBseSBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgc3dhcCBjYWNoZSBpbnRlcmFjdGlvbnMsIGFuZCB3b3JraW5nc2V0IHNoYWRvd3MuIEFueSBidWdzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgYXJlICpwcmVjaXNlbHkqIHRoZSB0eXBlcyBvZiBpc3N1ZXMgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBhcmUgZGVzaWduZWQgdG8gY2F0Y2guXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBhdGggbm93LCBqdXN0IHRvIGJlIHN1cmUuIEkgc2VlIHRoYXQgYHNoYWRvd2AgaXMgaW5pdGlhbGl6ZWQgdG8gYE5VTExgIGluIGBzd2FwX2NhY2hlX3JlYWRfZm9saW9gIGFuZCBgc3dhcGluX3N5bmNgLiBgenN3YXBfbG9va3VwX2FuZF9jbGVhcl9zaGFkb3dzYCBhbHNvIGluaXRpYWxpemVzIHRoZSByZXRyaWV2ZWQgc2hhZG93IHRvIGBOVUxMYCBhbmQgdXBkYXRlcyBpdCBpZiBhIHBhcmtlZCBzaGFkb3cgaXMgZm91bmQuIEluc2lkZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhlIGBzaGFkb3dgIGlzIGVpdGhlciBkZXJpdmVkIGZyb20gYHN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BlbnRyeSlgIG9yIHNldCB0byBgWlNXQVBfV1JJVEVCQUNLX05PX1NIQURPV2AuIEl0IGFsbCBsb29rcyBzYWZlLlxuXG5TbywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyAocG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSwgYW5kIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQpLCB0aGUgYWJzZW5jZSBvZiBuZXcsIGNvbXBsaWNhdGVkLCB1c2VyLWZhY2luZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgaGlnaCBsaWtlbGlob29kIHRoYXQgYW55IGVycm9ycyB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4sIEknbSBjb21mb3J0YWJsZSBzYXlpbmcgdGhhdCB0aGlzIGRvZXNuJ3QgbmVjZXNzaXRhdGUgYSBzcGVjaWFsIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZDogc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudC4gSSdtIGdvaW5nIHRvIHNldCBgTmVlZHNLTVNBTmAgdG8gYGZhbHNlYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxMiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNToxNDowNS42MDY1ODU3OThaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgc3dhcCBhbmQgenN3YXAgc3Vic3lzdGVtcyB0byBoYW5kbGUgd29ya2luZ3NldCBzaGFkb3dzIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIEl0IHBhcmtzIHRoZSBzaGFkb3cgaW4gdGhlIHpzd2FwIHRyZWUgYW5kIHJlc3RvcmVzIGl0IHVwb24gc3dhcC1pbiBvciBzd2FwIGNhY2hlIGRlbGV0aW9uLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgcG9pbnRlciBtYW5pcHVsYXRpb24sIHhhcnJheSBvcGVyYXRpb25zLCBhbmQgZm9saW8gc3RhdGUgbWFuYWdlbWVudC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgbWlnaHQgYmUgcmVhZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLCBzdWNoIGFzIGluY29ycmVjdCBwb2ludGVyIGRlcmVmZXJlbmNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLCB3b3VsZCBiZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBzd2FwIGFuZCB6c3dhcCBzdWJzeXN0ZW1zIHRvIGhhbmRsZSB3b3JraW5nc2V0IHNoYWRvd3MgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gSXQgcGFya3MgdGhlIHNoYWRvdyBpbiB0aGUgenN3YXAgdHJlZSBhbmQgcmVzdG9yZXMgaXQgdXBvbiBzd2FwLWluIG9yIHN3YXAgY2FjaGUgZGVsZXRpb24uIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBwb2ludGVyIG1hbmlwdWxhdGlvbiwgeGFycmF5IG9wZXJhdGlvbnMsIGFuZCBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBtaWdodCBiZSByZWFkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMsIHN1Y2ggYXMgaW5jb3JyZWN0IHBvaW50ZXIgZGVyZWZlcmVuY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24sIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowrncn2[1] Phase: Succeeded StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 15:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 15:14:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2] Phase: Succeeded StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 15:14:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 15:14:16 +0000 UTC FinishedAt: 2026-08-17 15:14:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrncn2/series-workflowrncn2-convert-artifact-2418603350/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 15:14:26 +0000 UTC FinishedAt: 2026-08-17 15:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 15:14:26 +0000 UTC FinishedAt: 2026-08-17 15:31:26 +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:*d9d255cb-ee9d-4505-be6b-63dd6b7fbef8,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-workflowrncn2/series-workflowrncn2-convert-artifact-2418603350/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": "6fd0017f-e596-49ce-8ae4-740bf4a5b279", "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-workflowrncn2/series-workflowrncn2-build-action-3377320428/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 15:14:26 +0000 UTC FinishedAt: 2026-08-17 15:31:16 +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:*d9d255cb-ee9d-4505-be6b-63dd6b7fbef8,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-workflowrncn2/series-workflowrncn2-convert-artifact-2418603350/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": "6fd0017f-e596-49ce-8ae4-740bf4a5b279", "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-workflowrncn2/series-workflowrncn2-build-action-3377320428/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 15:31:26 +0000 UTC FinishedAt: 2026-08-17 15:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 15:31:26 +0000 UTC FinishedAt: 2026-08-17 15:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 15:31:26 +0000 UTC FinishedAt: 2026-08-17 15:31:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 15:31:26 +0000 UTC FinishedAt: 2026-08-17 15:31:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrncn2/series-workflowrncn2-convert-artifact-176944105/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 15:31:36 +0000 UTC FinishedAt: 2026-08-17 15:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 15:31:36 +0000 UTC FinishedAt: 2026-08-17 15:33:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fd0017f-e596-49ce-8ae4-740bf4a5b279,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-workflowrncn2/series-workflowrncn2-build-action-3377320428/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-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 15:33:47 +0000 UTC FinishedAt: 2026-08-17 15:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 15:33:47 +0000 UTC FinishedAt: 2026-08-17 15:33:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 15:33:47 +0000 UTC FinishedAt: 2026-08-17 15:50:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 15:33:47 +0000 UTC FinishedAt: 2026-08-17 15:50:15 +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:*d9d255cb-ee9d-4505-be6b-63dd6b7fbef8,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-workflowrncn2/series-workflowrncn2-convert-artifact-176944105/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": "0525d946-5d08-4ade-9d5f-c3dcdf88d66d", "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-workflowrncn2/series-workflowrncn2-build-action-373306309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 15:33:47 +0000 UTC FinishedAt: 2026-08-17 15:50:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d9d255cb-ee9d-4505-be6b-63dd6b7fbef8,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-workflowrncn2/series-workflowrncn2-convert-artifact-176944105/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": "0525d946-5d08-4ade-9d5f-c3dcdf88d66d", "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-workflowrncn2/series-workflowrncn2-build-action-373306309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 15:50:15 +0000 UTC FinishedAt: 2026-08-17 15:50:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 15:50:15 +0000 UTC FinishedAt: 2026-08-17 15:50:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 15:50:15 +0000 UTC FinishedAt: 2026-08-17 15:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 15:50:15 +0000 UTC FinishedAt: 2026-08-17 15:52:09 +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:*0525d946-5d08-4ade-9d5f-c3dcdf88d66d,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-workflowrncn2/series-workflowrncn2-build-action-373306309/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-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},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:*6fd0017f-e596-49ce-8ae4-740bf4a5b279,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0525d946-5d08-4ade-9d5f-c3dcdf88d66d,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-workflowrncn2/series-workflowrncn2-build-action-3377320428/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-workflowrncn2/series-workflowrncn2-build-action-373306309/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 15:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 15:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},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-workflowrncn2/series-workflowrncn2-convert-artifact-3614852414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 15:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 15:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 15:52:18 +0000 UTC FinishedAt: 2026-08-17 15:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 15:52:29 +0000 UTC FinishedAt: 2026-08-17 18:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrncn2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zswap_folio_is_writeback_buffer","zswap_lookup_and_clear_shadows","swapin_sync","workingset_refault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON"],"series_id":"f2672dec-e407-40e2-b79a-7c0b99b163bf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 15:52:29 +0000 UTC FinishedAt: 2026-08-17 18:56:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fd0017f-e596-49ce-8ae4-740bf4a5b279,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0525d946-5d08-4ade-9d5f-c3dcdf88d66d,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-workflowrncn2/series-workflowrncn2-build-action-3377320428/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-workflowrncn2/series-workflowrncn2-build-action-373306309/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-workflowrncn2/series-workflowrncn2-convert-artifact-3614852414/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,}