Name: series-workflowjzckr Phase: Succeeded StartedAt: 2026-08-18 10:33:09 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[0] Phase: Succeeded StartedAt: 2026-08-18 10:33:09 +0000 UTC FinishedAt: 2026-08-18 10:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 10:33:09 +0000 UTC FinishedAt: 2026-08-18 10:51:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "b9c86c2c-65ed-46b9-88c1-e9c01c625016" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_swap_page", "get_swap_device", "read_swap_cache_async", "swap_retry_table_alloc", "swp_swapcount", "swap_put_entries_direct" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIGJhZCBzd2FwIGVudHJpZXMsIGFuZCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBldGMuKSB0byBoYW5kbGUgdGhpcyBuZXcgZXJyb3IgcmV0dXJuIHZpYSBgSVNfRVJSX09SX05VTExgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzd2FwIGxvZ2ljIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBzd2FwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTA6NTA6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNDEzNGFjNjA3ZWUwZi4uYmU5ODBiYjJlMzM0NyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTQsMTAgJiM0Mzs0OTU0LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiYjNDM7XHQvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMsIGFuZCByZWplY3QgYSBiYWQgZW50cnkuICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHNpKSlcbiYjNDM7XHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuIFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpbylcbkBAIC01MjY2LDcgJiM0Mzs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbiBcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBvdXQ6XG4tXHRpZiAoc2kpXG4mIzQzO1x0aWYgKCFJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9ub21hcDpcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcbmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0XG4tLS0gYS9tbS9taW5jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pbmNvcmUuY1xuQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbiYjNDM7XHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNTUzYzk1ZDMzNDFkMiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0yMjc3LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcbiBcdG9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSkge1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0bXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgXHUwMDI2aWx4KTtcbkBAIC05NTIsNyAmIzQzOzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbiYjNDM7XHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICYjNDM7MTUwNCw3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyAmIzQzOzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxuLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC5cbiYjNDM7ICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGFcbiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5JiMzOTtzIHR5cGVcbiYjNDM7ICogbmFtZXMgbm8gc3dhcCBkZXZpY2Ugb3IgaXRzIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2Ygb25lLiBUaGVzZSBFSU9zXG4mIzQzOyAqIGFyZSBwcmVjZWRlZCBieSBwcl9lcnIoKS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xOTAwLDEyICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cmV0dXJuIHNpO1xuIGJhZF9ub2ZpbGU6XG4gXHRwcl9lcnIoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBvdXQ6XG4gXHRyZXR1cm4gTlVMTDtcbiBwdXRfb3V0OlxuIFx0cHJfZXJyKFwmIzM0OyVzOiAlcyUwOGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiBcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNnNpLVx1MDAzZXVzZXJzKTtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIH1cbiBcbiAvKlxuQEAgLTIwMDEsNyAmIzQzOzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5AQCAtMjEyNyw3ICYjNDM7MjEzMSw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDIzZmI2OGZjZTAwMGUuLjg3OGUyN2Y1NzE2MzggMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICYjNDM7MTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRcdH1cbiBcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAodW5saWtlbHkoIXNpKSkge1xuJiM0MztcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuIFx0XHRcdHJldCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNzU3LDcgJiM0MzsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdGlmIChkc3RfcHRlKVxuIFx0XHRwdGVfdW5tYXAoZHN0X3B0ZSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLVx0aWYgKHNpKVxuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTNkMTJmZGM2ZDE4MDUwODI5NGIxYTAzNmVkOTExYmRiZTk2ZGZiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA0MTM0YWM2MDdlZTBmLi5iZTk4MGJiMmUzMzQ3IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDk1NCwxMCAmIzQzOzQ5NTQsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi8KJiM0MzsJLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJaWYgKElTX0VSUihzaSkpCiYjNDM7CQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvKQpAQCAtNTI2Niw3ICYjNDM7NTI2OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWlmICh2bWYtJmd0O3B0ZSkKIAkJcHRlX3VubWFwX3VubG9jayh2bWYtJmd0O3B0ZSwgdm1mLSZndDtwdGwpOwogb3V0OgotCWlmIChzaSkKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTChzaSkpCiAJCXB1dF9zd2FwX2RldmljZShzaSk7CiAJcmV0dXJuIHJldDsKIG91dF9ub21hcDoKZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuYwppbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NAotLS0gYS9tbS9taW5jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pCiAJICovCiAJaWYgKHNobWVtKSB7CiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKCFzaSkKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQlyZXR1cm4gMDsKIAl9CiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi41NTNjOTVkMzM0MWQyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNzcsNyAmIzQzOzIyNzcsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpOwogCW9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQlpZiAob3JkZXIgJmx0OyAwKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiBOVUxMOwogCiAJbXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgJmFtcDtpbHgpOwpAQCAtOTUyLDcgJiM0Mzs5NTIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCSAqLwogCQlpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7CiAJCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCQlpZiAoIXNpKQomIzQzOwkJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQkJY29udGludWU7CiAJCX0KIAkJZm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oJmFtcDtjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZjVkZmM3ZTU5MTkxZS4uODA2YzA0OGFiNmY3ZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7CkBAIC0xODU5LDcgJiM0MzsxODU5LDEwIEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sCiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZAogICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWwKLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4KJiM0MzsgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYQomIzQzOyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU8pIGlmIHRoZSBlbnRyeSYjMzk7cyB0eXBlCiYjNDM7ICogbmFtZXMgbm8gc3dhcCBkZXZpY2Ugb3IgaXRzIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2Ygb25lLiBUaGVzZSBFSU9zCiYjNDM7ICogYXJlIHByZWNlZGVkIGJ5IHByX2VycigpLgogICoKICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZQogICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZQpAQCAtMTkwMCwxMiAmIzQzOzE5MDMsMTMgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIAlyZXR1cm4gc2k7CiBiYWRfbm9maWxlOgogCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIG91dDoKIAlyZXR1cm4gTlVMTDsKIHB1dF9vdXQ6CiAJcHJfZXJyKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTsKIAlwZXJjcHVfcmVmX3B1dCgmYW1wO3NpLSZndDt1c2Vycyk7Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU8pOwogfQogCiAvKgpAQCAtMjAwMSw3ICYjNDM7MjAwNSw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KQogCWludCBjb3VudDsKIAogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAoIXNpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKQogCQlyZXR1cm4gMDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTsKQEAgLTIxMjcsNyAmIzQzOzIxMzEsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpCiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmIChXQVJOX09OX09OQ0UoIXNpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKQogCQlyZXR1cm47CiAJaWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0ICZndDsgc2ktJmd0O21heCkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmMKaW5kZXggMjNmYjY4ZmNlMDAwZS4uODc4ZTI3ZjU3MTYzOCAxMDA2NDQKLS0tIGEvbW0vdXNlcmZhdWx0ZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jCkBAIC0xNzAwLDcgJiM0MzsxNzAwLDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQKIAkJfQogCiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTc1Nyw3ICYjNDM7MTc1Nyw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kCiAJaWYgKGRzdF9wdGUpCiAJCXB0ZV91bm1hcChkc3RfcHRlKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJmFtcDtyYW5nZSk7Ci0JaWYgKHNpKQomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi4xZDExZjM1MGFjMWUxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5Nyw3ICYjNDM7OTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5MgoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBTd2FwIFN1YnN5c3RlbSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGFuZCBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24g4oCTIHRoZXNlIGFyZSBjb3JlIGNvbXBvbmVudHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGdldF9zd2FwX2RldmljZSgpYC4gSXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgd2hlbiBpdCBlbmNvdW50ZXJzIGEgYmFkIGZpbGUgb3Igb2Zmc2V0LCB3aGljaCBpcyB0aGVuIGxlYWRpbmcgdG8gdXBkYXRlZCBjaGVja3MgdXNpbmcgYElTX0VSUl9PUl9OVUxMKHNpKWAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYCFzaWAuCgpTcGVjaWZpY2FsbHksIGluIGBkb19zd2FwX3BhZ2UoKWAsIGEgc3dhcCBlbnRyeSB0aGF0IHByZXZpb3VzbHkgbWlnaHQgaGF2ZSBiZWVuIHNpbGVudGx5IGlnbm9yZWQgb3IgdHJlYXRlZCBhcyBlbXB0eSBub3cgdHJpZ2dlcnMgYSBgVk1fRkFVTFRfU0lHQlVTYCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgd2UmIzM5O3JlIG5vdyBleHBsaWNpdGx5IHNpZ25hbGluZyBhbiBlcnJvciByYXRoZXIgdGhhbiBpbXBsaWNpdGx5IGhhbmRsaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgaW1wYWN0cyBlcnJvciBoYW5kbGluZyBhbmQgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSB1bmRlciB0aGVzZSBzd2FwIGNvbmRpdGlvbnMuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBzdGFydGVkLCBJJiMzOTttIGlkZW50aWZ5aW5nIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gSW5pdGlhbGx5LCBJIG5vdGVkIGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIHJlbWluZGluZyBtZSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgdG8gYXZvaWQgaW5saW5lZCBoZWxwZXJzLiBCYXNlZCBvbiB0aGlzLCBJJiMzOTtsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHByb3ZpZGUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgZWFjaCBvZiB0aGVzZSBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdHJ1Y3QgZm9saW8gXFwqfGludHx2b2lkfHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IFxcKnx2bV9mYXVsdF90KSAoZG9fc3dhcF9wYWdlfGdldF9zd2FwX2RldmljZXxyZWFkX3N3YXBfY2FjaGVfYXN5bmN8c3dhcF9yZXRyeV90YWJsZV9hbGxvY3xzd3Bfc3dhcGNvdW50fHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD0zOTg9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozOTk6dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwMC1cbi0tXG5tbS9pbnRlcm5hbC5oPTU2Nz1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9pbnRlcm5hbC5oLTU3NS1cbm1tL2ludGVybmFsLmg6NTc2OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNTc3LXZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE0NjM9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNDk4LVxubW0vc3dhcGZpbGUuYzoxNDk5OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTE1MDAte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTk4Mz1ib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMTk5OS0gKi9cbm1tL3N3YXBmaWxlLmM6MjAwMDppbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbm1tL3N3YXBmaWxlLmMtMjAwMS17XG4tLVxubW0vc3dhcGZpbGUuYz0yMTAxPWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0yMTI1LSAqL1xubW0vc3dhcGZpbGUuYzoyMTI2OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbm1tL3N3YXBmaWxlLmMtMjEyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6CgoqKkFuYWx5emluZyBTd2FwIERldmljZSBhbmQgQ2FjaGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGdldF9zd2FwX2RldmljZWAgYW5kIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLiBJIHdhbnQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgcm9sZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gYGdldF9zd2FwX2RldmljZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2U7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogaG93IHJvYnVzdCBpcyBpdHMgZGV2aWNlIGRldGVjdGlvbj8gRG9lcyBpdCBoYW5kbGUgbXVsdGlwbGUgc3dhcCBwYXJ0aXRpb25zIGdyYWNlZnVsbHk/IERvZXMgaXQgYWxsb3cgZm9yIGR5bmFtaWMgYWRkaXRpb24vcmVtb3ZhbCBvZiBzd2FwIGRldmljZXM/IEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gbG9vayBmb3IgZWRnZSBjYXNlcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgY2FsbHMgb3Igc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoZSAmIzM0O2FzeW5jJiMzNDsgdGFnIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhpcyBzdWdnZXN0cyBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIHVzZWQuIElzIGl0IGxldmVyYWdpbmcgdGhyZWFkcywgb3IgcGVyaGFwcyBhbiBldmVudC1kcml2ZW4gYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBhc3luY2hyb25vdXMgSS9PPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBvciBwcm9wYWdhdGUgdGhlIGVycm9yPyBBbmQgaG93IGlzIGl0IGludGVncmF0aW5nIHdpdGggdGhlIGNhY2hlIGl0c2VsZj8gSXMgaXQgYW4gTFJVIGNhY2hlLCBhIHdyaXRlLWJhY2sgY2FjaGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBkdXJhYmlsaXR5IGluIGNhc2Ugb2YgYSBjcmFzaD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MsIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3MgYXN5bmNocm9ub3VzLiBVbHRpbWF0ZWx5LCB0aGUgZWZmaWNpZW5jeSBvZiB0aGlzIGFzeW5jaHJvbm91cyByZWFkIGlzIHBhcmFtb3VudCB0byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgc3dhcCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RydWN0IGZvbGlvIFxcKnxzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCBcXCopIChnZXRfc3dhcF9kZXZpY2V8cmVhZF9zd2FwX2NhY2hlX2FzeW5jKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBTd2FwIERldmljZSBJZGVudGlmaWNhdGlvbioqCgpSaWdodCwgc28gYGdldF9zd2FwX2RldmljZWAgaXNuJiMzOTt0IHNob3dpbmcgdXAgYXMgZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBlaXRoZXIgYW4gYGlubGluZSBzdGF0aWNgIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgYXMgYSBzdGFuZGFsb25lIHN5bWJvbCwgb3IgcGVyaGFwcyBteSByZWdleCBmb3Igc3ltYm9sIG1hdGNoaW5nIGlzIHRvbyBzcGVjaWZpYyBhbmQgSSYjMzk7bSBtaXNzaW5nIGl0IGVudGlyZWx5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBzd2FwIGZpbGUgbWFuYWdlbWVudCBsb2dpYyBhbmQgc3RhdGUgaGFuZGxpbmcuIFRob3NlIGFyZSBsaWtlbHkgY2FuZGlkYXRlcyBnaXZlbiB0aGUgbmFtZSwgc28gSSYjMzk7bGwgc2VlIHdoYXQmIzM5O3Mgd2hhdCBpbiB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgcmVsZXZhbnQgY29kZSBpcyBkZWNsYXJlZCBkaXJlY3RseSBpbiB0aG9zZSBmaWxlcyBvciBpZiB0aGV5IGFyZSBjYWxsaW5nIHNvbWUgb3RoZXIgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3N3YXBfZGV2aWNlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE0OTk9aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTE1MDUtXG5tbS9zd2FwZmlsZS5jOjE1MDY6XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG5tbS9zd2FwZmlsZS5jLTE1MDctXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg1MS0gKiBiZWNhdXNlIG9mIHN3YXBvZmYuICBUaGVuLCB3ZSBuZWVkIHRvIGVuY2xvc2UgYWxsIHN3YXAgcmVsYXRlZFxubW0vc3dhcGZpbGUuYzoxODUyOiAqIGZ1bmN0aW9ucyB3aXRoIGdldF9zd2FwX2RldmljZSgpIGFuZCBwdXRfc3dhcF9kZXZpY2UoKSwgdW5sZXNzIHRoZVxubW0vc3dhcGZpbGUuYy0xODUzLSAqIHN3YXAgZnVuY3Rpb25zIGNhbGwgZ2V0L3B1dF9zd2FwX2RldmljZSgpIGJ5IHRoZW1zZWx2ZXMuXG4tLVxubW0vc3dhcGZpbGUuYy0xODY3LSAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxubW0vc3dhcGZpbGUuYzoxODY4OiAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbm1tL3N3YXBmaWxlLmMtMTg2OS0gKiBwZXJjcHVfcmVmX3B1dCgpIGluIHB1dF9zd2FwX2RldmljZSgpIGlmIHRoZXJlIGlzbiYjMzk7dCBhbnkgb3RoZXIgd2F5XG4tLVxubW0vc3dhcGZpbGUuYy0xODg2LSAqL1xubW0vc3dhcGZpbGUuYzoxODg3OnN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTE4ODgte1xuLS1cbm1tL3N3YXBmaWxlLmM9MjAwMD1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTIwMDYtXG5tbS9zd2FwZmlsZS5jOjIwMDc6XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG5tbS9zd2FwZmlsZS5jLTIwMDgtXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuLS1cbm1tL3N3YXBmaWxlLmM9MjEyNj12b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTMyLVxubW0vc3dhcGZpbGUuYzoyMTMzOlx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xubW0vc3dhcGZpbGUuYy0yMTM0LVx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYXMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBTd2FwIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIHN3YXAgY29kZSBoZXJlLiBTbywgYHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0ICp3aGljaCogc3dhcCBkZXZpY2UgYSBwYXJ0aWN1bGFyIHBhZ2UgZW50cnksIGBlbnRyeWAsIGNvcnJlc3BvbmRzIHRvLiBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGxvZ2ljIG9mIG1hcHBpbmcgYSBzd2FwIGVudHJ5IHRvIGEgcGh5c2ljYWwgc3dhcCBwYXJ0aXRpb24sIHRha2luZyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYm9va2tlZXBpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vc3dhcGZpbGUuY2AgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXTigJlzIHRoZSBsb3ctbGV2ZWwgc3R1ZmYsIHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHN3YXAgY29udGV4dC4gR290dGEgbG92ZSB0aG9zZSBuYW1pbmcgY29udmVudGlvbnMuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGhhbmdpbmcgb3V0IGluIGBtbS9zd2FwX3N0YXRlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgYF9hc3luY2Agc3VmZml4IG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgc3dhcCBvcGVyYXRpb25zIOKAkyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgcmVhZC1haGVhZCBvciBzb21lIGZvcm0gb2YgSS9PIGNvbXBsZXRpb24uIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSBwcm9jZXNzIG9mIGZldGNoaW5nIHRoZSBzd2FwcGVkIHBhZ2UgZnJvbSBkaXNrIGludG8gdGhlIHBhZ2UgY2FjaGUsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlLiBTbywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHN3YXAgc3BhY2UgYW5kIHRoZSBwYWdlIGNhY2hlIGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgd2F5LCB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LiBMb29rcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgZGVzaWduIGNvdWxkIHByb3ZpZGUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdC4gSW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luY1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NjgzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcwOS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo3MTA6c3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxubW0vc3dhcF9zdGF0ZS5jLTcxMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBnZXRfc3dhcF9kZXZpY2VgIHNvIGl0JiMzOTtzIHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgd2hlbiBpdCBoaXRzIGEgYmFkIHN3YXAgZW50cnkuIFRoYXQmIzM5O3MgYSBnb29kIGFwcHJvYWNoOyBlcnJvciBwcm9wYWdhdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50IGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIGNvZGUsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gU28sIGZ1bmN0aW9uYWxseSwgd2UmIzM5O3ZlIGdvdCBhIHNsaWdodGx5IG1vcmUgcm9idXN0IHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0gaGVyZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXAgaGFuZGxpbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdfYCBvcHRpb24gZW5hYmxlcyB0aGUgc3dhcCBmdW5jdGlvbnMsIGFuZCB0aHVzLCB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYG1tL01ha2VmaWxlYCBvciBgbW0vS2NvbmZpZ2AgdG8gcGlucG9pbnQgd2hldGhlciBgQ09ORklHX1NXQVBgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IG9uZSwgb3IgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGEgbW9yZSBzcGVjaWZpYyBzdWItb3B0aW9uLiBJJiMzOTtsbCBkaWcgaW50byB0aGUgYnVpbGQgZmlsZXMgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBpbXBhY3QgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZyBhbmQgc2hhcmVkIG1lbW9yeS4gVGhlIGluaXRpYWwgdHJpZ2dlciB3YXMgYENPTkZJR19TV0FQYCwgb2YgY291cnNlLCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBCdXQgdGhlbiBpdCBicmFuY2hlcyBvdXQuIFdlIGFsc28gbmVlZCB0byBmYWN0b3IgaW4gYENPTkZJR19aU1dBUGAuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBpbXBhY3QgdGhlIGJ1aWxkIHByb2Nlc3Mgb2YgYG1tL3pzd2FwLmNgLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCBvZiBob3cgdGhhdCBjb21waWxlcy4KCk5vdywgbXkgbWluZCBtb3ZlcyB0byBgQ09ORklHX1NITUVNYC4gVGhlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhhdCBhbHdheXMgY29tcGlsZXMgYG1tL3NobWVtLmNgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBhbnN3ZXIgaXMgeWVzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFRoZXJlIG1heSBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIGFtIG92ZXJsb29raW5nLCBzbyBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgaW1wbGljYXRpb25zIGhlcmUgdG8gYXZvaWQgYW55IHVud2FudGVkIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01My1cdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBzaG1lbS5vYCBpcyBhIGdpdmVuOyB0aGF0JiMzOTtzIGFsd2F5cyBidWlsdC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1hcC4uLiB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYHVzZXJmYXVsdGZkLm9gPyBEb2VzIHRoYXQgYWx3YXlzIGdldCBjb21waWxlZCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgYnVpbGQgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgJiM0Mzs9IGNtYV9zeXNmcy5vXG5tbS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSAmIzQzOz0gdXNlcmZhdWx0ZmQub1xubW0vTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICYjNDM7PSBwYWdlX2lkbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ2CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19VU0VSRkFVTFRGRGAgcG9wcyBvdXQgYmVjYXVzZSBpdCB0aWVzIGludG8gYG1tL3VzZXJmYXVsdGZkLmNgLiBCdXQgdGhlIG1lYXQgb2YgdGhpcyBjaGFuZ2UgcmVhbGx5IGxvb2tzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgYGRvX3N3YXBfcGFnZWAsIGFuZCB0aG9zZSBhcmUgY2xlYXJseSB1bmRlciBgQ09ORklHX1NXQVBgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIGVuYWJsaW5nIGBTV0FQYCBpbiBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtleSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBrZWVwIGFuIGV5ZSBvbjogYGRvX3N3YXBfcGFnZWAsIGBnZXRfc3dhcF9kZXZpY2VgLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLgoKRmlyc3QsIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBhcmUgc3RhdGljLiBOb3BlLCB0aGV5JiMzOTtyZSBhbGwgZXhwb3J0ZWQuIEdvb2QsIHRoYXQgbWFrZXMgdGhpbmdzIGVhc2llci4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG9fc3dhcF9wYWdlYC4gQWhhLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgbW0vbWVtb3J5LmNgLCBhIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLgoKVGhpcyBpcyBzaWduaWZpY2FudC4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IGBnZXRfc3dhcF9kZXZpY2UoKWAgaGFuZGxlcyBlcnJvcnMuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAuIEFuZCwgY3JpdGljYWxseSwgaXQgdXBkYXRlcyBhbGwgdGhlIHJlbGV2YW50IGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB1c2luZyBgSVNfRVJSX09SX05VTExgLiBUaGlzIGNoYW5nZSBpbiB0aGUgY29yZSBzd2FwIGxvZ2ljIHdoaWNoIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSBzd2FwIGVycm9ycyBhcmUgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGJlY2F1c2UgdGhpcyBjaGFuZ2UgaGFzIGRpcmVjdCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2dldF9zd2FwX2RldmljZSYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcF9yZXRyeV90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzd3Bfc3dhcGNvdW50JiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTA6NTA6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDQxMzRhYzYwN2VlMGYuLmJlOTgwYmIyZTMzNDcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00OTU0LDEwICYjNDM7NDk1NCwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqLwomIzQzOwkvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMsIGFuZCByZWplY3QgYSBiYWQgZW50cnkuICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICh1bmxpa2VseSghc2kpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiYjNDM7CQlpZiAoSVNfRVJSKHNpKSkKJiM0MzsJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAlpZiAoZm9saW8pCkBAIC01MjY2LDcgJiM0Mzs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHZtZi0mZ3Q7cHRlKQogCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7CiBvdXQ6Ci0JaWYgKHNpKQomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAlyZXR1cm4gcmV0Owogb3V0X25vbWFwOgpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taW5jb3JlLmMKQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSkKIAkgKi8KIAlpZiAoc2htZW0pIHsKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAoIXNpKQomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCXJldHVybiAwOwogCX0KIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjU1M2M5NWQzMzQxZDIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjI3Nyw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7CiAJb3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiAJCWlmIChvcmRlciAmbHQ7IDApCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLjJlZGJkMmFhZmQ2NjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTcxNiw3ICYjNDM7NzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCAmYW1wO2lseCk7CkBAIC05NTIsNyAmIzQzOzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIAkJICovCiAJCWlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHsKIAkJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJCWlmICghc2kpCiYjNDM7CQkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCQljb250aW51ZTsKIAkJfQogCQlmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbygmYW1wO2N0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBmNWRmYzdlNTkxOTFlLi44MDZjMDQ4YWI2ZjdlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE1MDQsNyAmIzQzOzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKQogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTsKQEAgLTE4NTksNyAmIzQzOzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbywKICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkCiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbAotICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLgomIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhCiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5JiMzOTtzIHR5cGUKJiM0MzsgKiBuYW1lcyBubyBzd2FwIGRldmljZSBvciBpdHMgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiBvbmUuIFRoZXNlIEVJT3MKJiM0MzsgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuCiAgKgogICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmJiM0Mztzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlCiAgKiBwZXJjcHVfcmVmX3RyeWdldF9saXZlKCkgaW4gZ2V0X3N3YXBfZGV2aWNlKCkgb3IgYWZ0ZXIgdGhlCkBAIC0xOTAwLDEyICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogCXJldHVybiBzaTsKIGJhZF9ub2ZpbGU6CiAJcHJfZXJyKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX2ZpbGUsIGVudHJ5LnZhbCk7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU8pOwogb3V0OgogCXJldHVybiBOVUxMOwogcHV0X291dDoKIAlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwogCXBlcmNwdV9yZWZfcHV0KCZhbXA7c2ktJmd0O3VzZXJzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiB9CiAKIC8qCkBAIC0yMDAxLDcgJiM0MzsyMDA1LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpCiAJaW50IGNvdW50OwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpOwpAQCAtMjEyNyw3ICYjNDM7MjEzMSw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucikKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKFdBUk5fT05fT05DRSghc2kpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpCiAJCXJldHVybjsKIAlpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgJmd0OyBzaS0mZ3Q7bWF4KSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTE3MDAsNyAmIzQzOzE3MDAsNyBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZAogCQl9CiAKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNzU3LDcgJiM0MzsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQKIAlpZiAoZHN0X3B0ZSkKIAkJcHRlX3VubWFwKGRzdF9wdGUpOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmYW1wO3JhbmdlKTsKLQlpZiAoc2kpCiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoc2kpKQogCQlwdXRfc3dhcF9kZXZpY2Uoc2kpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjFkMTFmMzUwYWMxZTEgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTk3LDcgJiM0Mzs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KIAlzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4OQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBEZXZpY2UgUmV0dXJuIFZhbHVlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IGBnZXRfc3dhcF9kZXZpY2UoKWAgYmVoYXZlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBpdHMgcmV0dXJuIHZhbHVlcy4gUHJldmlvdXNseSwgYSBgTlVMTGAgcmV0dXJuIHNpZ25hbGVkIGZhaWx1cmUuIE5vdywgaXQgY2FuIHJldHVybiBlaXRoZXIgYEVSUl9QVFIoLUVJTylgIGZvciBwcm9ibGVtYXRpYyBlbnRyaWVzLCBvciBzdGlsbCBgTlVMTGAgZm9yIGVtcHR5IG9yIGRpc2FwcGVhcmluZyBkZXZpY2VzLiBUaGUgY2FsbGluZyBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBJU19FUlJfT1JfTlVMTChzaSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgIXNpYCBjaGVjay4gQ3JpdGljYWxseSwgaW4gYGRvX3N3YXBfcGFnZWAsIGlmIGBJU19FUlIoc2kpYCBldmFsdWF0ZXMgdG8gdHJ1ZSwgaXQgc2V0cyBgcmV0ID0gVk1fRkFVTFRfU0lHQlVTYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBzd2FwIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZywgZW5zdXJpbmcgdGhhdCBiYWQgc3dhcCBlbnRyaWVzIGRvbiYjMzk7dCBnZXQgc2lsZW50bHkgaWdub3JlZCBhbmQgcG90ZW50aWFsbHkgY2F1c2UgYmlnZ2VyIHByb2JsZW1zLiBJbnN0ZWFkLCB3ZSBub3cgZ2V0IGEgYFZNX0ZBVUxUX1NJR0JVU2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHJlc3BvbnNlIGluIHRoaXMgc2l0dWF0aW9uLiBJdCYjMzk7cyBtdWNoIGJldHRlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBlcnJvcnMuCgpNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSB3b3JraW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZnVuY3Rpb24gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIG5vdyBhbiBlcnJvciBwb2ludGVyIGluIHNvbWUgc2l0dWF0aW9ucywgYnV0IHRoZSBjYWxsZXJzIGFyZSBhZGFwdGVkIHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIGEgbG9naWMgZml4IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN3YXAgc3Vic3lzdGVtLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuIFRoZXJlJiMzOTtzIG5vIHJlYXNvbiB0byBjb25zaWRlciBLTVNBTiBoZXJlIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgaXQuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2Ugd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBmb3IgYmFkIHN3YXAgZW50cmllcyBpbnN0ZWFkIG9mIGp1c3QgYE5VTExgLCBhbmQgdXBkYXRlcyBhbGwgY2FsbGVycyB0byBjaGVjayBmb3IgYElTX0VSUl9PUl9OVUxMKHNpKWAuIEluIGBkb19zd2FwX3BhZ2UoKWAsIGl0IHRyYW5zbGF0ZXMgdGhlIGVycm9yIGludG8gYSBgVk1fRkFVTFRfU0lHQlVTYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBlcnJvciBwcm9wYWdhdGlvbiBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwIGhhbmRsaW5nKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDMuODkxOTA1NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MjQzODYxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZ2V0X3N3YXBfZGV2aWNlXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDMuODkxOTEwNzAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3ODc2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA0MTM0YWM2MDdlZTBmLi5iZTk4MGJiMmUzMzQ3IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDk1NCwxMCArNDk1NCwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cXG4rXFx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqL1xcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2kpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XFxuK1xcdFxcdGlmIChJU19FUlIoc2kpKVxcbitcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0aWYgKGZvbGlvKVxcbkBAIC01MjY2LDcgKzUyNjksNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbiBcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuIG91dDpcXG4tXFx0aWYgKHNpKVxcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gb3V0X25vbWFwOlxcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxcbi0tLSBhL21tL21pbmNvcmUuY1xcbisrKyBiL21tL21pbmNvcmUuY1xcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG4gXFx0ICovXFxuIFxcdGlmIChzaG1lbSkge1xcbiBcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdGlmICghc2kpXFxuK1xcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjU1M2M5NWQzMzQxZDIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI3Nyw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcXG4gXFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcXG4tXFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC03MTYsNyArNzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFxcdTAwMjZpbHgpO1xcbkBAIC05NTIsNyArOTUyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xcbiBcXHRcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdFxcdGlmICghc2kpXFxuK1xcdFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG4gXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcXG5AQCAtMTg1OSw3ICsxODU5LDEwIEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxcbisgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYVxcbisgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlPKSBpZiB0aGUgZW50cnkncyB0eXBlXFxuKyAqIG5hbWVzIG5vIHN3YXAgZGV2aWNlIG9yIGl0cyBvZmZzZXQgaXMgcGFzdCB0aGUgZW5kIG9mIG9uZS4gVGhlc2UgRUlPc1xcbisgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuXFxuICAqXFxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXFxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcXG5AQCAtMTkwMCwxMiArMTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbiBcXHRyZXR1cm4gc2k7XFxuIGJhZF9ub2ZpbGU6XFxuIFxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIHB1dF9vdXQ6XFxuIFxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xcbiBcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMDAxLDcgKzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5AQCAtMjEyNyw3ICsyMTMxLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIFxcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcXHUwMDNlIHNpLVxcdTAwM2VtYXgpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTE3MDAsNyArMTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC0xNzU3LDcgKzE3NTcsNyBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZFxcbiBcXHRpZiAoZHN0X3B0ZSlcXG4gXFx0XFx0cHRlX3VubWFwKGRzdF9wdGUpO1xcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4tXFx0aWYgKHNpKVxcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDowNC4zNjgzNjQ5NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjE1OTcwMjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJnZXRfc3dhcF9kZXZpY2VcIixcbiAgICBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICAgIFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICAgIFwic3dwX3N3YXBjb3VudFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIGJhZCBzd2FwIGVudHJpZXMsIGFuZCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBldGMuKSB0byBoYW5kbGUgdGhpcyBuZXcgZXJyb3IgcmV0dXJuIHZpYSBgSVNfRVJSX09SX05VTExgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzd2FwIGxvZ2ljIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBzd2FwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzZDEyZmRjNmQxODA1MDgyOTRiMWEwMzZlZDkxMWJkYmU5NmRmYmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDo1MDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDQxMzRhYzYwN2VlMGYuLmJlOTgwYmIyZTMzNDcgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC00OTU0LDEwICs0OTU0LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbitcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cywgYW5kIHJlamVjdCBhIGJhZCBlbnRyeS4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHRpZiAoSVNfRVJSKHNpKSlcbitcdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW8pXG5AQCAtNTI2Niw3ICs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbiBcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBvdXQ6XG4tXHRpZiAoc2kpXG4rXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcdHJldHVybiByZXQ7XG4gb3V0X25vbWFwOlxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuKysrIGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXG4gXHQgKi9cbiBcdGlmIChzaG1lbSkge1xuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICghc2kpXG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNTUzYzk1ZDMzNDFkMiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdGlmIChvcmRlciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggYjc2ZWIzZDg3NmZkNy4uMmVkYmQyYWFmZDY2OSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNzE2LDcgKzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7XG4gXHRcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRcdGlmICghc2kpXG4rXHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcbkBAIC0xODU5LDcgKzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxuLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC5cbisgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYVxuKyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU8pIGlmIHRoZSBlbnRyeSdzIHR5cGVcbisgKiBuYW1lcyBubyBzd2FwIGRldmljZSBvciBpdHMgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiBvbmUuIFRoZXNlIEVJT3NcbisgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuXG4gICpcbiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYrc3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xOTAwLDEyICsxOTAzLDEzIEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gc2k7XG4gYmFkX25vZmlsZTpcbiBcdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIG91dDpcbiBcdHJldHVybiBOVUxMO1xuIHB1dF9vdXQ6XG4gXHRwcl9lcnIoXCIlczogJXMlMDhseFxcblwiLCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiBcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNnNpLVx1MDAzZXVzZXJzKTtcbi1cdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gfVxuIFxuIC8qXG5AQCAtMjAwMSw3ICsyMDA1LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRpbnQgY291bnQ7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5AQCAtMjEyNyw3ICsyMTMxLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2kpKVxuK1x0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgXHUwMDNlIHNpLVx1MDAzZW1heCkpXG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTE3MDAsNyArMTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRcdH1cbiBcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAodW5saWtlbHkoIXNpKSkge1xuK1x0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTE3NTcsNyArMTc1Nyw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRpZiAoZHN0X3B0ZSlcbiBcdFx0cHRlX3VubWFwKGRzdF9wdGUpO1xuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbi1cdGlmIChzaSlcbitcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDQuMzY4MzY2ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0NjU0MjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBTd2FwIFN1YnN5c3RlbSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGFuZCBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24g4oCTIHRoZXNlIGFyZSBjb3JlIGNvbXBvbmVudHMgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZ2V0X3N3YXBfZGV2aWNlKClgLiBJdCdzIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIHdoZW4gaXQgZW5jb3VudGVycyBhIGJhZCBmaWxlIG9yIG9mZnNldCwgd2hpY2ggaXMgdGhlbiBsZWFkaW5nIHRvIHVwZGF0ZWQgY2hlY2tzIHVzaW5nIGBJU19FUlJfT1JfTlVMTChzaSlgIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGAhc2lgLlxuXG5TcGVjaWZpY2FsbHksIGluIGBkb19zd2FwX3BhZ2UoKWAsIGEgc3dhcCBlbnRyeSB0aGF0IHByZXZpb3VzbHkgbWlnaHQgaGF2ZSBiZWVuIHNpbGVudGx5IGlnbm9yZWQgb3IgdHJlYXRlZCBhcyBlbXB0eSBub3cgdHJpZ2dlcnMgYSBgVk1fRkFVTFRfU0lHQlVTYCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgd2UncmUgbm93IGV4cGxpY2l0bHkgc2lnbmFsaW5nIGFuIGVycm9yIHJhdGhlciB0aGFuIGltcGxpY2l0bHkgaGFuZGxpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbXBhY3RzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIHVuZGVyIHRoZXNlIHN3YXAgY29uZGl0aW9ucy5cblxuSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBzdGFydGVkLCBJJ20gaWRlbnRpZnlpbmcga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LiBJbml0aWFsbHksIEkgbm90ZWQgYGRvX3N3YXBfcGFnZWAsIGBnZXRfc3dhcF9kZXZpY2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3ZtYV9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYG1vdmVfcGFnZXNfcHRlc2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyByZW1pbmRpbmcgbWUgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRvIGF2b2lkIGlubGluZWQgaGVscGVycy4gQmFzZWQgb24gdGhpcywgSSdsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHByb3ZpZGUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIHZlcmlmeSBlYWNoIG9mIHRoZXNlIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MiwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjEzLjUxNDkxMTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTkzNDMwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZm9saW8gXFxcXCp8aW50fHZvaWR8c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgXFxcXCp8dm1fZmF1bHRfdCkgKGRvX3N3YXBfcGFnZXxnZXRfc3dhcF9kZXZpY2V8cmVhZF9zd2FwX2NhY2hlX2FzeW5jfHN3YXBfcmV0cnlfdGFibGVfYWxsb2N8c3dwX3N3YXBjb3VudHxzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdClcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD0zOTg9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzk5OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDAwLVxcbi0tXFxubW0vaW50ZXJuYWwuaD01Njc9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS1cXG5tbS9pbnRlcm5hbC5oOjU3Njp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01Nzctdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODYzPXN0YXRpYyB2b2lkIGNoZWNrX3N3YXBfZXhjbHVzaXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LFxcbi0tXFxubW0vbWVtb3J5LmMtNDg4MC0gKi9cXG5tbS9tZW1vcnkuYzo0ODgxOnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTQ4ODIte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNDYzPXN0YXRpYyBpbnQgc3dhcF9leHRlbmRfdGFibGVfYWxsb2Moc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNDk4LVxcbm1tL3N3YXBmaWxlLmM6MTQ5OTppbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxcbm1tL3N3YXBmaWxlLmMtMTUwMC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5ODM9Ym9vbCBzd2FwX2VudHJ5X3N3YXBwZWQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk5OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjIwMDA6aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0yMDAxLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjEwMT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTI1LSAqL1xcbm1tL3N3YXBmaWxlLmM6MjEyNjp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXFxubW0vc3dhcGZpbGUuYy0yMTI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MTYuNzM0MjU5NzY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NDEyNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6XG5cbioqQW5hbHl6aW5nIFN3YXAgRGV2aWNlIGFuZCBDYWNoZSBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGdldF9zd2FwX2RldmljZWAgYW5kIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLiBJIHdhbnQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgcm9sZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gYGdldF9zd2FwX2RldmljZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2U7IGl0J3MgdGhlIGdhdGVrZWVwZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBob3cgcm9idXN0IGlzIGl0cyBkZXZpY2UgZGV0ZWN0aW9uPyBEb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBzd2FwIHBhcnRpdGlvbnMgZ3JhY2VmdWxseT8gRG9lcyBpdCBhbGxvdyBmb3IgZHluYW1pYyBhZGRpdGlvbi9yZW1vdmFsIG9mIHN3YXAgZGV2aWNlcz8gSSdsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgZm9yIGVkZ2UgY2FzZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJIHdvbmRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGNhbGxzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhlIFwiYXN5bmNcIiB0YWcgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIGEgbm9uLWJsb2NraW5nIG9wZXJhdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgbW9kZWwgdXNlZC4gSXMgaXQgbGV2ZXJhZ2luZyB0aHJlYWRzLCBvciBwZXJoYXBzIGFuIGV2ZW50LWRyaXZlbiBhcmNoaXRlY3R1cmU/IEknbGwgbmVlZCB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGVtcGxveWVkIOKAkyBhcmUgd2UgdGFsa2luZyBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBmb3IgYXN5bmNocm9ub3VzIEkvTz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBvciBwcm9wYWdhdGUgdGhlIGVycm9yPyBBbmQgaG93IGlzIGl0IGludGVncmF0aW5nIHdpdGggdGhlIGNhY2hlIGl0c2VsZj8gSXMgaXQgYW4gTFJVIGNhY2hlLCBhIHdyaXRlLWJhY2sgY2FjaGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBkdXJhYmlsaXR5IGluIGNhc2Ugb2YgYSBjcmFzaD8gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGFzeW5jaHJvbm91cy4gVWx0aW1hdGVseSwgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyBhc3luY2hyb25vdXMgcmVhZCBpcyBwYXJhbW91bnQgdG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIHN3YXAgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjAuNTk4Mzg3MTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg3NjA1NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RydWN0IGZvbGlvIFxcXFwqfHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IFxcXFwqKSAoZ2V0X3N3YXBfZGV2aWNlfHJlYWRfc3dhcF9jYWNoZV9hc3luYylcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjMuMDM3MTU2NDg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDkzNDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIFN3YXAgRGV2aWNlIElkZW50aWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBnZXRfc3dhcF9kZXZpY2VgIGlzbid0IHNob3dpbmcgdXAgYXMgZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGVpdGhlciBhbiBgaW5saW5lIHN0YXRpY2AgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgbm90IGJlaW5nIGdlbmVyYXRlZCBhcyBhIHN0YW5kYWxvbmUgc3ltYm9sLCBvciBwZXJoYXBzIG15IHJlZ2V4IGZvciBzeW1ib2wgbWF0Y2hpbmcgaXMgdG9vIHNwZWNpZmljIGFuZCBJJ20gbWlzc2luZyBpdCBlbnRpcmVseS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc3dhcCBmaWxlIG1hbmFnZW1lbnQgbG9naWMgYW5kIHN0YXRlIGhhbmRsaW5nLiBUaG9zZSBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZ2l2ZW4gdGhlIG5hbWUsIHNvIEknbGwgc2VlIHdoYXQncyB3aGF0IGluIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlIHJlbGV2YW50IGNvZGUgaXMgZGVjbGFyZWQgZGlyZWN0bHkgaW4gdGhvc2UgZmlsZXMgb3IgaWYgdGhleSBhcmUgY2FsbGluZyBzb21lIG90aGVyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjYuNDAyMDkzNjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zd2FwX2RldmljZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNDk5PWludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1MDUtXFxubW0vc3dhcGZpbGUuYzoxNTA2OlxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG5tbS9zd2FwZmlsZS5jLTE1MDctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODUxLSAqIGJlY2F1c2Ugb2Ygc3dhcG9mZi4gIFRoZW4sIHdlIG5lZWQgdG8gZW5jbG9zZSBhbGwgc3dhcCByZWxhdGVkXFxubW0vc3dhcGZpbGUuYzoxODUyOiAqIGZ1bmN0aW9ucyB3aXRoIGdldF9zd2FwX2RldmljZSgpIGFuZCBwdXRfc3dhcF9kZXZpY2UoKSwgdW5sZXNzIHRoZVxcbm1tL3N3YXBmaWxlLmMtMTg1My0gKiBzd2FwIGZ1bmN0aW9ucyBjYWxsIGdldC9wdXRfc3dhcF9kZXZpY2UoKSBieSB0aGVtc2VsdmVzLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODY3LSAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXFxubW0vc3dhcGZpbGUuYzoxODY4OiAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcXG5tbS9zd2FwZmlsZS5jLTE4NjktICogcGVyY3B1X3JlZl9wdXQoKSBpbiBwdXRfc3dhcF9kZXZpY2UoKSBpZiB0aGVyZSBpc24ndCBhbnkgb3RoZXIgd2F5XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4ODYtICovXFxubW0vc3dhcGZpbGUuYzoxODg3OnN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0xODg4LXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjAwMD1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjAwNi1cXG5tbS9zd2FwZmlsZS5jOjIwMDc6XFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbm1tL3N3YXBmaWxlLmMtMjAwOC1cXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTI2PXZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjEzMi1cXG5tbS9zd2FwZmlsZS5jOjIxMzM6XFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbm1tL3N3YXBmaWxlLmMtMjEzNC1cXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjI2LjQ0NjE3NDkwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Njk3MzQyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJJ2QgYXBwcm9hY2ggdGhpcyBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgU3dhcCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi5JJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBzd2FwIGNvZGUgaGVyZS4gU28sIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KWAg4oCTIHRoYXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0ICp3aGljaCogc3dhcCBkZXZpY2UgYSBwYXJ0aWN1bGFyIHBhZ2UgZW50cnksIGBlbnRyeWAsIGNvcnJlc3BvbmRzIHRvLiBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG9naWMgb2YgbWFwcGluZyBhIHN3YXAgZW50cnkgdG8gYSBwaHlzaWNhbCBzd2FwIHBhcnRpdGlvbiwgdGFraW5nIGNhcmUgb2YgYW55IG5lY2Vzc2FyeSBib29ra2VlcGluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGRlZmluZWQgaW4gYG1tL3N3YXBmaWxlLmNgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl04oCZcyB0aGUgbG93LWxldmVsIHN0dWZmLCB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBzd2FwIGNvbnRleHQuIEdvdHRhIGxvdmUgdGhvc2UgbmFtaW5nIGNvbnZlbnRpb25zLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgaGFuZ2luZyBvdXQgaW4gYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGBfYXN5bmNgIHN1ZmZpeCBtYWtlcyBtZSB0aGluayBpdCdzIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgc3dhcCBvcGVyYXRpb25zIOKAkyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgcmVhZC1haGVhZCBvciBzb21lIGZvcm0gb2YgSS9PIGNvbXBsZXRpb24uIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhlIHByb2Nlc3Mgb2YgZmV0Y2hpbmcgdGhlIHN3YXBwZWQgcGFnZSBmcm9tIGRpc2sgaW50byB0aGUgcGFnZSBjYWNoZSwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4gU28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHN3YXAgc3BhY2UgYW5kIHRoZSBwYWdlIGNhY2hlIGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgd2F5LCB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LiBMb29rcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgZGVzaWduIGNvdWxkIHByb3ZpZGUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdC4gSW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozMC40MTU5MTEzOTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDQyNDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTY4Mz1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwOS0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzEwOnN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcXG5tbS9zd2FwX3N0YXRlLmMtNzExLVxcdFxcdGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozMC42MjAzNDE4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI4Nzk0MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcGF0Y2g6XG5cbioqQW5hbHl6aW5nIHRoZSBTd2FwIERldmljZSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGNoYW5nZS4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgZ2V0X3N3YXBfZGV2aWNlYCBzbyBpdCdzIHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgd2hlbiBpdCBoaXRzIGEgYmFkIHN3YXAgZW50cnkuIFRoYXQncyBhIGdvb2QgYXBwcm9hY2g7IGVycm9yIHByb3BhZ2F0aW9uIGlzIGFsd2F5cyBpbXBvcnRhbnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGUgY2FsbGVycyBoYXZlIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gY29kZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFNvLCBmdW5jdGlvbmFsbHksIHdlJ3ZlIGdvdCBhIHNsaWdodGx5IG1vcmUgcm9idXN0IHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0gaGVyZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXAgaGFuZGxpbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdfYCBvcHRpb24gZW5hYmxlcyB0aGUgc3dhcCBmdW5jdGlvbnMsIGFuZCB0aHVzLCB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgbW0vTWFrZWZpbGVgIG9yIGBtbS9LY29uZmlnYCB0byBwaW5wb2ludCB3aGV0aGVyIGBDT05GSUdfU1dBUGAgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3Qgb25lLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIG1vcmUgc3BlY2lmaWMgc3ViLW9wdGlvbi4gSSdsbCBkaWcgaW50byB0aGUgYnVpbGQgZmlsZXMgYW5kIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM1LjY0OTEzOTY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGZpbGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozNS42OTE5ODM3NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODM1Nzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgaW1wYWN0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgc3dhcHBpbmcgYW5kIHNoYXJlZCBtZW1vcnkuIFRoZSBpbml0aWFsIHRyaWdnZXIgd2FzIGBDT05GSUdfU1dBUGAsIG9mIGNvdXJzZSwgdGhhdCdzIGZ1bmRhbWVudGFsLiBCdXQgdGhlbiBpdCBicmFuY2hlcyBvdXQuIFdlIGFsc28gbmVlZCB0byBmYWN0b3IgaW4gYENPTkZJR19aU1dBUGAuIFRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGltcGFjdCB0aGUgYnVpbGQgcHJvY2VzcyBvZiBgbW0venN3YXAuY2AuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IG9mIGhvdyB0aGF0IGNvbXBpbGVzLlxuXG5Ob3csIG15IG1pbmQgbW92ZXMgdG8gYENPTkZJR19TSE1FTWAuIFRoZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IHRoYXQgYWx3YXlzIGNvbXBpbGVzIGBtbS9zaG1lbS5jYC4gSSdtIHByZXR0eSBzdXJlIHRoZSBhbnN3ZXIgaXMgeWVzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFRoZXJlIG1heSBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIGFtIG92ZXJsb29raW5nLCBzbyBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGltcGxpY2F0aW9ucyBoZXJlIHRvIGF2b2lkIGFueSB1bndhbnRlZCBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM5LjE2MDM0NzcxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzU2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM5LjIwNjMzMjI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwMTcyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYHNobWVtLm9gIGlzIGEgZ2l2ZW47IHRoYXQncyBhbHdheXMgYnVpbHQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IG1lbnRhbCBtYXAuLi4gd2hhdCdzIHRoZSBkZWFsIHdpdGggYHVzZXJmYXVsdGZkLm9gPyBEb2VzIHRoYXQgYWx3YXlzIGdldCBjb21waWxlZCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgYnVpbGQgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzc3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NDIuMTg2NTA3MzUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgKz0gY21hX3N5c2ZzLm9cXG5tbS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSArPSB1c2VyZmF1bHRmZC5vXFxubW0vTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjQyLjIzMjE2NzY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIzOTc0NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3dhcCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19VU0VSRkFVTFRGRGAgcG9wcyBvdXQgYmVjYXVzZSBpdCB0aWVzIGludG8gYG1tL3VzZXJmYXVsdGZkLmNgLiBCdXQgdGhlIG1lYXQgb2YgdGhpcyBjaGFuZ2UgcmVhbGx5IGxvb2tzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgYGRvX3N3YXBfcGFnZWAsIGFuZCB0aG9zZSBhcmUgY2xlYXJseSB1bmRlciBgQ09ORklHX1NXQVBgLiBSaWdodCwgdGhhdCdzIHRoZSBrZXkuIEknbGwgZGVmaW5pdGVseSBiZSBlbmFibGluZyBgU1dBUGAgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9ucy4gSSd2ZSBnb3QgdG8ga2VlcCBhbiBleWUgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC5cblxuRmlyc3QsIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBhcmUgc3RhdGljLiBOb3BlLCB0aGV5J3JlIGFsbCBleHBvcnRlZC4gR29vZCwgdGhhdCBtYWtlcyB0aGluZ3MgZWFzaWVyLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG9fc3dhcF9wYWdlYC4gQWhhLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBtbS9tZW1vcnkuY2AsIGEgY29yZSBwYWdlIGZhdWx0IGhhbmRsZXIuIEl0J3MgY2xlYXIgdGhhdCBgZ2V0X3N3YXBfZGV2aWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5UaGlzIGlzIHNpZ25pZmljYW50LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgYGdldF9zd2FwX2RldmljZSgpYCBoYW5kbGVzIGVycm9ycy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBpdCdzIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTylgLiBBbmQsIGNyaXRpY2FsbHksIGl0IHVwZGF0ZXMgYWxsIHRoZSByZWxldmFudCBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBhbmQgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdXNpbmcgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBjaGFuZ2UgaW4gdGhlIGNvcmUgc3dhcCBsb2dpYyB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSBzd2FwIGVycm9ycyBhcmUgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYmVjYXVzZSB0aGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ2LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDo1MC40NTYxNDQ2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkxMjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZ2V0X3N3YXBfZGV2aWNlXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zd2FwX3BhZ2VcIixcbiAgICBcImdldF9zd2FwX2RldmljZVwiLFxuICAgIFwicmVhZF9zd2FwX2NhY2hlX2FzeW5jXCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCIsXG4gICAgXCJzd3Bfc3dhcGNvdW50XCIsXG4gICAgXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NTAuNTI4MDcwODc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg4MjAwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NTAuNTI4NTczNDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg4ODc2OTI5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgZm9yIGJhZCBzd2FwIGVudHJpZXMgaW5zdGVhZCBvZiBqdXN0IGBOVUxMYCwgYW5kIHVwZGF0ZXMgYWxsIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGBJU19FUlJfT1JfTlVMTChzaSlgLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBpdCB0cmFuc2xhdGVzIHRoZSBlcnJvciBpbnRvIGEgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24gaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCBoYW5kbGluZykuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBpbiB0aGlzIGFyZWEuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTNkMTJmZGM2ZDE4MDUwODI5NGIxYTAzNmVkOTExYmRiZTk2ZGZiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNDEzNGFjNjA3ZWUwZi4uYmU5ODBiYjJlMzM0NyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTQsMTAgKzQ5NTQsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqL1xuK1x0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4rXHRcdGlmIChJU19FUlIoc2kpKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbiBcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpbylcbkBAIC01MjY2LDcgKzUyNjksNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmICh2bWYtXHUwMDNlcHRlKVxuIFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuIG91dDpcbi1cdGlmIChzaSlcbitcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFx0cmV0dXJuIHJldDtcbiBvdXRfbm9tYXA6XG5kaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxuLS0tIGEvbW0vbWluY29yZS5jXG4rKysgYi9tbS9taW5jb3JlLmNcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi41NTNjOTVkMzM0MWQyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNzcsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7XG4gXHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRleCwgaW5kZXhfZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTYsNyArNzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFx1MDAyNmlseCk7XG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbitcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZjVkZmM3ZTU5MTkxZS4uODA2YzA0OGFiNmY3ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyArMTg1OSwxMCBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxuICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4rICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5J3MgdHlwZVxuKyAqIG5hbWVzIG5vIHN3YXAgZGV2aWNlIG9yIGl0cyBvZmZzZXQgaXMgcGFzdCB0aGUgZW5kIG9mIG9uZS4gVGhlc2UgRUlPc1xuKyAqIGFyZSBwcmVjZWRlZCBieSBwcl9lcnIoKS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxuQEAgLTE5MDAsMTIgKzE5MDMsMTMgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbiBcdHJldHVybiBzaTtcbiBiYWRfbm9maWxlOlxuIFx0cHJfZXJyKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gb3V0OlxuIFx0cmV0dXJuIE5VTEw7XG4gcHV0X291dDpcbiBcdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiB9XG4gXG4gLypcbkBAIC0yMDAxLDcgKzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgKzIxMzEsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFzaSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDIzZmI2OGZjZTAwMGUuLjg3OGUyN2Y1NzE2MzggMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICsxNzAwLDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtMTc1Nyw3ICsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdGlmIChkc3RfcHRlKVxuIFx0XHRwdGVfdW5tYXAoZHN0X3B0ZSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLVx0aWYgKHNpKVxuK1x0aWYgKCFJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi4xZDExZjM1MGFjMWUxIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5Nyw3ICs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDo1MC41Mjg1NzQ0MDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg4NzY3NDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTd2FwIERldmljZSBSZXR1cm4gVmFsdWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBgZ2V0X3N3YXBfZGV2aWNlKClgIGJlaGF2ZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgaXRzIHJldHVybiB2YWx1ZXMuIFByZXZpb3VzbHksIGEgYE5VTExgIHJldHVybiBzaWduYWxlZCBmYWlsdXJlLiBOb3csIGl0IGNhbiByZXR1cm4gZWl0aGVyIGBFUlJfUFRSKC1FSU8pYCBmb3IgcHJvYmxlbWF0aWMgZW50cmllcywgb3Igc3RpbGwgYE5VTExgIGZvciBlbXB0eSBvciBkaXNhcHBlYXJpbmcgZGV2aWNlcy4gVGhlIGNhbGxpbmcgY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYCFzaWAgY2hlY2suIENyaXRpY2FsbHksIGluIGBkb19zd2FwX3BhZ2VgLCBpZiBgSVNfRVJSKHNpKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IHNldHMgYHJldCA9IFZNX0ZBVUxUX1NJR0JVU2AuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBzd2FwIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyB0aGF0IGJhZCBzd2FwIGVudHJpZXMgZG9uJ3QgZ2V0IHNpbGVudGx5IGlnbm9yZWQgYW5kIHBvdGVudGlhbGx5IGNhdXNlIGJpZ2dlciBwcm9ibGVtcy4gSW5zdGVhZCwgd2Ugbm93IGdldCBhIGBWTV9GQVVMVF9TSUdCVVNgLCB3aGljaCBpcyB0aGUgY29ycmVjdCByZXNwb25zZSBpbiB0aGlzIHNpdHVhdGlvbi4gSXQncyBtdWNoIGJldHRlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBlcnJvcnMuXG5cbk15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUncyBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSB3b3JraW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZnVuY3Rpb24gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIG5vdyBhbiBlcnJvciBwb2ludGVyIGluIHNvbWUgc2l0dWF0aW9ucywgYnV0IHRoZSBjYWxsZXJzIGFyZSBhZGFwdGVkIHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIGEgbG9naWMgZml4IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN3YXAgc3Vic3lzdGVtLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgd291bGQgcmVxdWlyZSBpdC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2Ugd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg5LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjU5LjQxNjI1MTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgZm9yIGJhZCBzd2FwIGVudHJpZXMgaW5zdGVhZCBvZiBqdXN0IGBOVUxMYCwgYW5kIHVwZGF0ZXMgYWxsIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGBJU19FUlJfT1JfTlVMTChzaSlgLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBpdCB0cmFuc2xhdGVzIHRoZSBlcnJvciBpbnRvIGEgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24gaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCBoYW5kbGluZykuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBpbiB0aGlzIGFyZWEuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 10:33:09 +0000 UTC FinishedAt: 2026-08-18 10:51:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "b9c86c2c-65ed-46b9-88c1-e9c01c625016" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_swap_page", "get_swap_device", "read_swap_cache_async", "swap_retry_table_alloc", "swp_swapcount", "swap_put_entries_direct" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIGJhZCBzd2FwIGVudHJpZXMsIGFuZCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBldGMuKSB0byBoYW5kbGUgdGhpcyBuZXcgZXJyb3IgcmV0dXJuIHZpYSBgSVNfRVJSX09SX05VTExgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzd2FwIGxvZ2ljIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBzd2FwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTA6NTA6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNDEzNGFjNjA3ZWUwZi4uYmU5ODBiYjJlMzM0NyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTQsMTAgJiM0Mzs0OTU0LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiYjNDM7XHQvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMsIGFuZCByZWplY3QgYSBiYWQgZW50cnkuICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHNpKSlcbiYjNDM7XHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuIFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpbylcbkBAIC01MjY2LDcgJiM0Mzs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbiBcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBvdXQ6XG4tXHRpZiAoc2kpXG4mIzQzO1x0aWYgKCFJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXHRyZXR1cm4gcmV0O1xuIG91dF9ub21hcDpcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcbmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0XG4tLS0gYS9tbS9taW5jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pbmNvcmUuY1xuQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbiYjNDM7XHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNTUzYzk1ZDMzNDFkMiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmNcbkBAIC0yMjc3LDcgJiM0MzsyMjc3LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcbiBcdG9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSkge1xuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0bXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgXHUwMDI2aWx4KTtcbkBAIC05NTIsNyAmIzQzOzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbiYjNDM7XHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICYjNDM7MTUwNCw3IEBAIGludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG4gXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyAmIzQzOzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxuLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC5cbiYjNDM7ICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGFcbiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5JiMzOTtzIHR5cGVcbiYjNDM7ICogbmFtZXMgbm8gc3dhcCBkZXZpY2Ugb3IgaXRzIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2Ygb25lLiBUaGVzZSBFSU9zXG4mIzQzOyAqIGFyZSBwcmVjZWRlZCBieSBwcl9lcnIoKS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xOTAwLDEyICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cmV0dXJuIHNpO1xuIGJhZF9ub2ZpbGU6XG4gXHRwcl9lcnIoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiBvdXQ6XG4gXHRyZXR1cm4gTlVMTDtcbiBwdXRfb3V0OlxuIFx0cHJfZXJyKFwmIzM0OyVzOiAlcyUwOGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiBcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNnNpLVx1MDAzZXVzZXJzKTtcbi1cdHJldHVybiBOVUxMO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIH1cbiBcbiAvKlxuQEAgLTIwMDEsNyAmIzQzOzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5AQCAtMjEyNyw3ICYjNDM7MjEzMSw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDIzZmI2OGZjZTAwMGUuLjg3OGUyN2Y1NzE2MzggMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICYjNDM7MTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRcdH1cbiBcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAodW5saWtlbHkoIXNpKSkge1xuJiM0MztcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuIFx0XHRcdHJldCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbkBAIC0xNzU3LDcgJiM0MzsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdGlmIChkc3RfcHRlKVxuIFx0XHRwdGVfdW5tYXAoZHN0X3B0ZSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLVx0aWYgKHNpKVxuJiM0MztcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmNcbkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTNkMTJmZGM2ZDE4MDUwODI5NGIxYTAzNmVkOTExYmRiZTk2ZGZiYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA0MTM0YWM2MDdlZTBmLi5iZTk4MGJiMmUzMzQ3IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDk1NCwxMCAmIzQzOzQ5NTQsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi8KJiM0MzsJLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJaWYgKElTX0VSUihzaSkpCiYjNDM7CQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvKQpAQCAtNTI2Niw3ICYjNDM7NTI2OSw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCWlmICh2bWYtJmd0O3B0ZSkKIAkJcHRlX3VubWFwX3VubG9jayh2bWYtJmd0O3B0ZSwgdm1mLSZndDtwdGwpOwogb3V0OgotCWlmIChzaSkKJiM0MzsJaWYgKCFJU19FUlJfT1JfTlVMTChzaSkpCiAJCXB1dF9zd2FwX2RldmljZShzaSk7CiAJcmV0dXJuIHJldDsKIG91dF9ub21hcDoKZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuYwppbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NAotLS0gYS9tbS9taW5jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pCiAJICovCiAJaWYgKHNobWVtKSB7CiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKCFzaSkKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQlyZXR1cm4gMDsKIAl9CiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA1OTk2NjVhM2Q2ZTdiLi41NTNjOTVkMzM0MWQyIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNzcsNyAmIzQzOzIyNzcsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpOwogCW9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQlpZiAob3JkZXIgJmx0OyAwKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC03MTYsNyAmIzQzOzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiBOVUxMOwogCiAJbXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgJmFtcDtpbHgpOwpAQCAtOTUyLDcgJiM0Mzs5NTIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCSAqLwogCQlpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7CiAJCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCQlpZiAoIXNpKQomIzQzOwkJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQkJY29udGludWU7CiAJCX0KIAkJZm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oJmFtcDtjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZjVkZmM3ZTU5MTkxZS4uODA2YzA0OGFiNmY3ZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7CkBAIC0xODU5LDcgJiM0MzsxODU5LDEwIEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sCiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZAogICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWwKLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC4KJiM0MzsgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYQomIzQzOyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU8pIGlmIHRoZSBlbnRyeSYjMzk7cyB0eXBlCiYjNDM7ICogbmFtZXMgbm8gc3dhcCBkZXZpY2Ugb3IgaXRzIG9mZnNldCBpcyBwYXN0IHRoZSBlbmQgb2Ygb25lLiBUaGVzZSBFSU9zCiYjNDM7ICogYXJlIHByZWNlZGVkIGJ5IHByX2VycigpLgogICoKICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZQogICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZQpAQCAtMTkwMCwxMiAmIzQzOzE5MDMsMTMgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIAlyZXR1cm4gc2k7CiBiYWRfbm9maWxlOgogCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIG91dDoKIAlyZXR1cm4gTlVMTDsKIHB1dF9vdXQ6CiAJcHJfZXJyKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTsKIAlwZXJjcHVfcmVmX3B1dCgmYW1wO3NpLSZndDt1c2Vycyk7Ci0JcmV0dXJuIE5VTEw7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU8pOwogfQogCiAvKgpAQCAtMjAwMSw3ICYjNDM7MjAwNSw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KQogCWludCBjb3VudDsKIAogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAoIXNpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKQogCQlyZXR1cm4gMDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTsKQEAgLTIxMjcsNyAmIzQzOzIxMzEsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpCiAJc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmIChXQVJOX09OX09OQ0UoIXNpKSkKJiM0MzsJaWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKQogCQlyZXR1cm47CiAJaWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0ICZndDsgc2ktJmd0O21heCkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmMKaW5kZXggMjNmYjY4ZmNlMDAwZS4uODc4ZTI3ZjU3MTYzOCAxMDA2NDQKLS0tIGEvbW0vdXNlcmZhdWx0ZmQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91c2VyZmF1bHRmZC5jCkBAIC0xNzAwLDcgJiM0MzsxNzAwLDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQKIAkJfQogCiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpIHsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMTc1Nyw3ICYjNDM7MTc1Nyw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kCiAJaWYgKGRzdF9wdGUpCiAJCXB0ZV91bm1hcChkc3RfcHRlKTsKIAltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoJmFtcDtyYW5nZSk7Ci0JaWYgKHNpKQomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi4xZDExZjM1MGFjMWUxIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5Nyw3ICYjNDM7OTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5MgoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBTd2FwIFN1YnN5c3RlbSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGVkIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGFuZCBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24g4oCTIHRoZXNlIGFyZSBjb3JlIGNvbXBvbmVudHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGdldF9zd2FwX2RldmljZSgpYC4gSXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgd2hlbiBpdCBlbmNvdW50ZXJzIGEgYmFkIGZpbGUgb3Igb2Zmc2V0LCB3aGljaCBpcyB0aGVuIGxlYWRpbmcgdG8gdXBkYXRlZCBjaGVja3MgdXNpbmcgYElTX0VSUl9PUl9OVUxMKHNpKWAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYCFzaWAuCgpTcGVjaWZpY2FsbHksIGluIGBkb19zd2FwX3BhZ2UoKWAsIGEgc3dhcCBlbnRyeSB0aGF0IHByZXZpb3VzbHkgbWlnaHQgaGF2ZSBiZWVuIHNpbGVudGx5IGlnbm9yZWQgb3IgdHJlYXRlZCBhcyBlbXB0eSBub3cgdHJpZ2dlcnMgYSBgVk1fRkFVTFRfU0lHQlVTYCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgd2UmIzM5O3JlIG5vdyBleHBsaWNpdGx5IHNpZ25hbGluZyBhbiBlcnJvciByYXRoZXIgdGhhbiBpbXBsaWNpdGx5IGhhbmRsaW5nIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgaXQgaW1wYWN0cyBlcnJvciBoYW5kbGluZyBhbmQgdGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbSB1bmRlciB0aGVzZSBzd2FwIGNvbmRpdGlvbnMuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBzdGFydGVkLCBJJiMzOTttIGlkZW50aWZ5aW5nIGtleSBzeW1ib2xzIHRvIHRhcmdldC4gSW5pdGlhbGx5LCBJIG5vdGVkIGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuCgpIb3dldmVyLCB0aGUgcHJvbXB0IGlzIHJlbWluZGluZyBtZSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgdG8gYXZvaWQgaW5saW5lZCBoZWxwZXJzLiBCYXNlZCBvbiB0aGlzLCBJJiMzOTtsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHByb3ZpZGUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgZWFjaCBvZiB0aGVzZSBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdHJ1Y3QgZm9saW8gXFwqfGludHx2b2lkfHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IFxcKnx2bV9mYXVsdF90KSAoZG9fc3dhcF9wYWdlfGdldF9zd2FwX2RldmljZXxyZWFkX3N3YXBfY2FjaGVfYXN5bmN8c3dhcF9yZXRyeV90YWJsZV9hbGxvY3xzd3Bfc3dhcGNvdW50fHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD0zOTg9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozOTk6dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwMC1cbi0tXG5tbS9pbnRlcm5hbC5oPTU2Nz1zdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9pbnRlcm5hbC5oLTU3NS1cbm1tL2ludGVybmFsLmg6NTc2OnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNTc3LXZvaWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE0NjM9c3RhdGljIGludCBzd2FwX2V4dGVuZF90YWJsZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNDk4LVxubW0vc3dhcGZpbGUuYzoxNDk5OmludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXG5tbS9zd2FwZmlsZS5jLTE1MDAte1xuLS1cbm1tL3N3YXBmaWxlLmM9MTk4Mz1ib29sIHN3YXBfZW50cnlfc3dhcHBlZChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMTk5OS0gKi9cbm1tL3N3YXBmaWxlLmM6MjAwMDppbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbm1tL3N3YXBmaWxlLmMtMjAwMS17XG4tLVxubW0vc3dhcGZpbGUuYz0yMTAxPWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0yMTI1LSAqL1xubW0vc3dhcGZpbGUuYzoyMTI2OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbm1tL3N3YXBmaWxlLmMtMjEyNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA2NQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6CgoqKkFuYWx5emluZyBTd2FwIERldmljZSBhbmQgQ2FjaGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGdldF9zd2FwX2RldmljZWAgYW5kIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLiBJIHdhbnQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgcm9sZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gYGdldF9zd2FwX2RldmljZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2U7IGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogaG93IHJvYnVzdCBpcyBpdHMgZGV2aWNlIGRldGVjdGlvbj8gRG9lcyBpdCBoYW5kbGUgbXVsdGlwbGUgc3dhcCBwYXJ0aXRpb25zIGdyYWNlZnVsbHk/IERvZXMgaXQgYWxsb3cgZm9yIGR5bmFtaWMgYWRkaXRpb24vcmVtb3ZhbCBvZiBzd2FwIGRldmljZXM/IEkmIzM5O2xsIHByb2JhYmx5IHdhbnQgdG8gbG9vayBmb3IgZWRnZSBjYXNlcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgd29uZGVyIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBrZXJuZWwgY2FsbHMgb3Igc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoZSAmIzM0O2FzeW5jJiMzNDsgdGFnIGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi4gVGhpcyBzdWdnZXN0cyBhIG5vbi1ibG9ja2luZyBvcGVyYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmN1cnJlbmN5IG1vZGVsIHVzZWQuIElzIGl0IGxldmVyYWdpbmcgdGhyZWFkcywgb3IgcGVyaGFwcyBhbiBldmVudC1kcml2ZW4gYXJjaGl0ZWN0dXJlPyBJJiMzOTtsbCBuZWVkIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgZW1wbG95ZWQg4oCTIGFyZSB3ZSB0YWxraW5nIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGZvciBhc3luY2hyb25vdXMgSS9PPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBvciBwcm9wYWdhdGUgdGhlIGVycm9yPyBBbmQgaG93IGlzIGl0IGludGVncmF0aW5nIHdpdGggdGhlIGNhY2hlIGl0c2VsZj8gSXMgaXQgYW4gTFJVIGNhY2hlLCBhIHdyaXRlLWJhY2sgY2FjaGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBkdXJhYmlsaXR5IGluIGNhc2Ugb2YgYSBjcmFzaD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MsIGVzcGVjaWFsbHkgc2luY2UgaXQmIzM5O3MgYXN5bmNocm9ub3VzLiBVbHRpbWF0ZWx5LCB0aGUgZWZmaWNpZW5jeSBvZiB0aGlzIGFzeW5jaHJvbm91cyByZWFkIGlzIHBhcmFtb3VudCB0byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvZiB0aGUgc3dhcCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCBlZmZpY2llbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RydWN0IGZvbGlvIFxcKnxzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCBcXCopIChnZXRfc3dhcF9kZXZpY2V8cmVhZF9zd2FwX2NhY2hlX2FzeW5jKVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUwNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBTd2FwIERldmljZSBJZGVudGlmaWNhdGlvbioqCgpSaWdodCwgc28gYGdldF9zd2FwX2RldmljZWAgaXNuJiMzOTt0IHNob3dpbmcgdXAgYXMgZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBlaXRoZXIgYW4gYGlubGluZSBzdGF0aWNgIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IG5vdCBiZWluZyBnZW5lcmF0ZWQgYXMgYSBzdGFuZGFsb25lIHN5bWJvbCwgb3IgcGVyaGFwcyBteSByZWdleCBmb3Igc3ltYm9sIG1hdGNoaW5nIGlzIHRvbyBzcGVjaWZpYyBhbmQgSSYjMzk7bSBtaXNzaW5nIGl0IGVudGlyZWx5LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBzd2FwIGZpbGUgbWFuYWdlbWVudCBsb2dpYyBhbmQgc3RhdGUgaGFuZGxpbmcuIFRob3NlIGFyZSBsaWtlbHkgY2FuZGlkYXRlcyBnaXZlbiB0aGUgbmFtZSwgc28gSSYjMzk7bGwgc2VlIHdoYXQmIzM5O3Mgd2hhdCBpbiB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgcmVsZXZhbnQgY29kZSBpcyBkZWNsYXJlZCBkaXJlY3RseSBpbiB0aG9zZSBmaWxlcyBvciBpZiB0aGV5IGFyZSBjYWxsaW5nIHNvbWUgb3RoZXIgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3N3YXBfZGV2aWNlXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE0OTk9aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbi0tXG5tbS9zd2FwZmlsZS5jLTE1MDUtXG5tbS9zd2FwZmlsZS5jOjE1MDY6XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG5tbS9zd2FwZmlsZS5jLTE1MDctXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuLS1cbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg1MS0gKiBiZWNhdXNlIG9mIHN3YXBvZmYuICBUaGVuLCB3ZSBuZWVkIHRvIGVuY2xvc2UgYWxsIHN3YXAgcmVsYXRlZFxubW0vc3dhcGZpbGUuYzoxODUyOiAqIGZ1bmN0aW9ucyB3aXRoIGdldF9zd2FwX2RldmljZSgpIGFuZCBwdXRfc3dhcF9kZXZpY2UoKSwgdW5sZXNzIHRoZVxubW0vc3dhcGZpbGUuYy0xODUzLSAqIHN3YXAgZnVuY3Rpb25zIGNhbGwgZ2V0L3B1dF9zd2FwX2RldmljZSgpIGJ5IHRoZW1zZWx2ZXMuXG4tLVxubW0vc3dhcGZpbGUuYy0xODY3LSAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxubW0vc3dhcGZpbGUuYzoxODY4OiAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbm1tL3N3YXBmaWxlLmMtMTg2OS0gKiBwZXJjcHVfcmVmX3B1dCgpIGluIHB1dF9zd2FwX2RldmljZSgpIGlmIHRoZXJlIGlzbiYjMzk7dCBhbnkgb3RoZXIgd2F5XG4tLVxubW0vc3dhcGZpbGUuYy0xODg2LSAqL1xubW0vc3dhcGZpbGUuYzoxODg3OnN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTE4ODgte1xuLS1cbm1tL3N3YXBmaWxlLmM9MjAwMD1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTIwMDYtXG5tbS9zd2FwZmlsZS5jOjIwMDc6XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG5tbS9zd2FwZmlsZS5jLTIwMDgtXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuLS1cbm1tL3N3YXBmaWxlLmM9MjEyNj12b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTMyLVxubW0vc3dhcGZpbGUuYzoyMTMzOlx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xubW0vc3dhcGZpbGUuYy0yMTM0LVx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgYXMgYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBTd2FwIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhlIHN3YXAgY29kZSBoZXJlLiBTbywgYHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0ICp3aGljaCogc3dhcCBkZXZpY2UgYSBwYXJ0aWN1bGFyIHBhZ2UgZW50cnksIGBlbnRyeWAsIGNvcnJlc3BvbmRzIHRvLiBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGxvZ2ljIG9mIG1hcHBpbmcgYSBzd2FwIGVudHJ5IHRvIGEgcGh5c2ljYWwgc3dhcCBwYXJ0aXRpb24sIHRha2luZyBjYXJlIG9mIGFueSBuZWNlc3NhcnkgYm9va2tlZXBpbmcuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vc3dhcGZpbGUuY2AgbWFrZXMgcGVyZmVjdCBzZW5zZS4gSXTigJlzIHRoZSBsb3ctbGV2ZWwgc3R1ZmYsIHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIHN3YXAgY29udGV4dC4gR290dGEgbG92ZSB0aG9zZSBuYW1pbmcgY29udmVudGlvbnMuCgpUaGVuIHdlJiMzOTt2ZSBnb3QgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGhhbmdpbmcgb3V0IGluIGBtbS9zd2FwX3N0YXRlLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBUaGUgYF9hc3luY2Agc3VmZml4IG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgc3dhcCBvcGVyYXRpb25zIOKAkyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgcmVhZC1haGVhZCBvciBzb21lIGZvcm0gb2YgSS9PIGNvbXBsZXRpb24uIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRoZSBwcm9jZXNzIG9mIGZldGNoaW5nIHRoZSBzd2FwcGVkIHBhZ2UgZnJvbSBkaXNrIGludG8gdGhlIHBhZ2UgY2FjaGUsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QgZ2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlLiBTbywgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHN3YXAgc3BhY2UgYW5kIHRoZSBwYWdlIGNhY2hlIGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgd2F5LCB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LiBMb29rcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgZGVzaWduIGNvdWxkIHByb3ZpZGUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdC4gSW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luY1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NjgzPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcwOS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo3MTA6c3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxubW0vc3dhcF9zdGF0ZS5jLTcxMS1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcGF0Y2g6CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZXZpY2UgUGF0Y2gqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgY2hhbmdlLiBUaGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBnZXRfc3dhcF9kZXZpY2VgIHNvIGl0JiMzOTtzIHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgd2hlbiBpdCBoaXRzIGEgYmFkIHN3YXAgZW50cnkuIFRoYXQmIzM5O3MgYSBnb29kIGFwcHJvYWNoOyBlcnJvciBwcm9wYWdhdGlvbiBpcyBhbHdheXMgaW1wb3J0YW50IGluIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlIGNhbGxlcnMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIGNvZGUsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdC4gU28sIGZ1bmN0aW9uYWxseSwgd2UmIzM5O3ZlIGdvdCBhIHNsaWdodGx5IG1vcmUgcm9idXN0IHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0gaGVyZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXAgaGFuZGxpbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdfYCBvcHRpb24gZW5hYmxlcyB0aGUgc3dhcCBmdW5jdGlvbnMsIGFuZCB0aHVzLCB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBlaXRoZXIgYG1tL01ha2VmaWxlYCBvciBgbW0vS2NvbmZpZ2AgdG8gcGlucG9pbnQgd2hldGhlciBgQ09ORklHX1NXQVBgIGlzIGFjdHVhbGx5IHRoZSBjb3JyZWN0IG9uZSwgb3IgaWYgaXQmIzM5O3MgZGVwZW5kZW50IG9uIGEgbW9yZSBzcGVjaWZpYyBzdWItb3B0aW9uLiBJJiMzOTtsbCBkaWcgaW50byB0aGUgYnVpbGQgZmlsZXMgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcGZpbGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NzY9ZW5kaWZcbm1tL01ha2VmaWxlLTc3LVxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzQ4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCBpbXBhY3QgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBzd2FwcGluZyBhbmQgc2hhcmVkIG1lbW9yeS4gVGhlIGluaXRpYWwgdHJpZ2dlciB3YXMgYENPTkZJR19TV0FQYCwgb2YgY291cnNlLCB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsLiBCdXQgdGhlbiBpdCBicmFuY2hlcyBvdXQuIFdlIGFsc28gbmVlZCB0byBmYWN0b3IgaW4gYENPTkZJR19aU1dBUGAuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSBnb2luZyB0byBpbXBhY3QgdGhlIGJ1aWxkIHByb2Nlc3Mgb2YgYG1tL3pzd2FwLmNgLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCBvZiBob3cgdGhhdCBjb21waWxlcy4KCk5vdywgbXkgbWluZCBtb3ZlcyB0byBgQ09ORklHX1NITUVNYC4gVGhlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhhdCBhbHdheXMgY29tcGlsZXMgYG1tL3NobWVtLmNgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoZSBhbnN3ZXIgaXMgeWVzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFRoZXJlIG1heSBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIGFtIG92ZXJsb29raW5nLCBzbyBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgaW1wbGljYXRpb25zIGhlcmUgdG8gYXZvaWQgYW55IHVud2FudGVkIHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01My1cdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxubW0vTWFrZWZpbGU6NTQ6XHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxubW0vTWFrZWZpbGUtNTUtXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBzaG1lbS5vYCBpcyBhIGdpdmVuOyB0aGF0JiMzOTtzIGFsd2F5cyBidWlsdC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgbm93IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1hcC4uLiB3aGF0JiMzOTtzIHRoZSBkZWFsIHdpdGggYHVzZXJmYXVsdGZkLm9gPyBEb2VzIHRoYXQgYWx3YXlzIGdldCBjb21waWxlZCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgYnVpbGQgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyZmF1bHRmZFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgJiM0Mzs9IGNtYV9zeXNmcy5vXG5tbS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSAmIzQzOz0gdXNlcmZhdWx0ZmQub1xubW0vTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICYjNDM7PSBwYWdlX2lkbGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ2CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDQ0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19VU0VSRkFVTFRGRGAgcG9wcyBvdXQgYmVjYXVzZSBpdCB0aWVzIGludG8gYG1tL3VzZXJmYXVsdGZkLmNgLiBCdXQgdGhlIG1lYXQgb2YgdGhpcyBjaGFuZ2UgcmVhbGx5IGxvb2tzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgYGRvX3N3YXBfcGFnZWAsIGFuZCB0aG9zZSBhcmUgY2xlYXJseSB1bmRlciBgQ09ORklHX1NXQVBgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2V5LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGJlIGVuYWJsaW5nIGBTV0FQYCBpbiBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtleSBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBrZWVwIGFuIGV5ZSBvbjogYGRvX3N3YXBfcGFnZWAsIGBnZXRfc3dhcF9kZXZpY2VgLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLgoKRmlyc3QsIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBhcmUgc3RhdGljLiBOb3BlLCB0aGV5JiMzOTtyZSBhbGwgZXhwb3J0ZWQuIEdvb2QsIHRoYXQgbWFrZXMgdGhpbmdzIGVhc2llci4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG9fc3dhcF9wYWdlYC4gQWhhLCBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiBgbW0vbWVtb3J5LmNgLCBhIGNvcmUgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLgoKVGhpcyBpcyBzaWduaWZpY2FudC4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IGBnZXRfc3dhcF9kZXZpY2UoKWAgaGFuZGxlcyBlcnJvcnMuIEluc3RlYWQgb2YgcmV0dXJuaW5nIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAuIEFuZCwgY3JpdGljYWxseSwgaXQgdXBkYXRlcyBhbGwgdGhlIHJlbGV2YW50IGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGFuZCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgdG8gcHJvcGVybHkgaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB1c2luZyBgSVNfRVJSX09SX05VTExgLiBUaGlzIGNoYW5nZSBpbiB0aGUgY29yZSBzd2FwIGxvZ2ljIHdoaWNoIGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSBzd2FwIGVycm9ycyBhcmUgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgIGJlY2F1c2UgdGhpcyBjaGFuZ2UgaGFzIGRpcmVjdCBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19zd2FwX3BhZ2UmIzM0OywKICAgICYjMzQ7Z2V0X3N3YXBfZGV2aWNlJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgICAmIzM0O2dldF9zd2FwX2RldmljZSYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcF9yZXRyeV90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzd3Bfc3dhcGNvdW50JiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTA6NTA6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDQxMzRhYzYwN2VlMGYuLmJlOTgwYmIyZTMzNDcgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00OTU0LDEwICYjNDM7NDk1NCwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqLwomIzQzOwkvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMsIGFuZCByZWplY3QgYSBiYWQgZW50cnkuICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICh1bmxpa2VseSghc2kpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiYjNDM7CQlpZiAoSVNfRVJSKHNpKSkKJiM0MzsJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAlpZiAoZm9saW8pCkBAIC01MjY2LDcgJiM0Mzs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJaWYgKHZtZi0mZ3Q7cHRlKQogCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7CiBvdXQ6Ci0JaWYgKHNpKQomIzQzOwlpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAlyZXR1cm4gcmV0Owogb3V0X25vbWFwOgpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taW5jb3JlLmMKQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSkKIAkgKi8KIAlpZiAoc2htZW0pIHsKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAoIXNpKQomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCXJldHVybiAwOwogCX0KIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDU5OTY2NWEzZDZlN2IuLjU1M2M5NWQzMzQxZDIgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjI3Nyw3ICYjNDM7MjI3Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7CiAJb3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiAJCWlmIChvcmRlciAmbHQ7IDApCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IGI3NmViM2Q4NzZmZDcuLjJlZGJkMmFhZmQ2NjkgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTcxNiw3ICYjNDM7NzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCAmYW1wO2lseCk7CkBAIC05NTIsNyAmIzQzOzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIAkJICovCiAJCWlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHsKIAkJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJCWlmICghc2kpCiYjNDM7CQkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCQljb250aW51ZTsKIAkJfQogCQlmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbygmYW1wO2N0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBmNWRmYzdlNTkxOTFlLi44MDZjMDQ4YWI2ZjdlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE1MDQsNyAmIzQzOzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKQogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTsKQEAgLTE4NTksNyAmIzQzOzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbywKICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkCiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbAotICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLgomIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhCiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5JiMzOTtzIHR5cGUKJiM0MzsgKiBuYW1lcyBubyBzd2FwIGRldmljZSBvciBpdHMgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiBvbmUuIFRoZXNlIEVJT3MKJiM0MzsgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuCiAgKgogICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmJiM0Mztzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlCiAgKiBwZXJjcHVfcmVmX3RyeWdldF9saXZlKCkgaW4gZ2V0X3N3YXBfZGV2aWNlKCkgb3IgYWZ0ZXIgdGhlCkBAIC0xOTAwLDEyICYjNDM7MTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogCXJldHVybiBzaTsKIGJhZF9ub2ZpbGU6CiAJcHJfZXJyKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX2ZpbGUsIGVudHJ5LnZhbCk7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU8pOwogb3V0OgogCXJldHVybiBOVUxMOwogcHV0X291dDoKIAlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwogCXBlcmNwdV9yZWZfcHV0KCZhbXA7c2ktJmd0O3VzZXJzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiB9CiAKIC8qCkBAIC0yMDAxLDcgJiM0MzsyMDA1LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpCiAJaW50IGNvdW50OwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpOwpAQCAtMjEyNyw3ICYjNDM7MjEzMSw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucikKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKFdBUk5fT05fT05DRSghc2kpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpCiAJCXJldHVybjsKIAlpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgJmd0OyBzaS0mZ3Q7bWF4KSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTE3MDAsNyAmIzQzOzE3MDAsNyBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZAogCQl9CiAKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNzU3LDcgJiM0MzsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQKIAlpZiAoZHN0X3B0ZSkKIAkJcHRlX3VubWFwKGRzdF9wdGUpOwogCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgmYW1wO3JhbmdlKTsKLQlpZiAoc2kpCiYjNDM7CWlmICghSVNfRVJSX09SX05VTEwoc2kpKQogCQlwdXRfc3dhcF9kZXZpY2Uoc2kpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjFkMTFmMzUwYWMxZTEgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtOTk3LDcgJiM0Mzs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCiAJLyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi8KIAlzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIC1FRVhJU1Q7CiAKIAltcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE4OQoJCQkJCQkJb3V0cHV0OiAxODYKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBEZXZpY2UgUmV0dXJuIFZhbHVlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IGBnZXRfc3dhcF9kZXZpY2UoKWAgYmVoYXZlcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBpdHMgcmV0dXJuIHZhbHVlcy4gUHJldmlvdXNseSwgYSBgTlVMTGAgcmV0dXJuIHNpZ25hbGVkIGZhaWx1cmUuIE5vdywgaXQgY2FuIHJldHVybiBlaXRoZXIgYEVSUl9QVFIoLUVJTylgIGZvciBwcm9ibGVtYXRpYyBlbnRyaWVzLCBvciBzdGlsbCBgTlVMTGAgZm9yIGVtcHR5IG9yIGRpc2FwcGVhcmluZyBkZXZpY2VzLiBUaGUgY2FsbGluZyBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIGBJU19FUlJfT1JfTlVMTChzaSlgIGluc3RlYWQgb2YgdGhlIG9sZCBgIXNpYCBjaGVjay4gQ3JpdGljYWxseSwgaW4gYGRvX3N3YXBfcGFnZWAsIGlmIGBJU19FUlIoc2kpYCBldmFsdWF0ZXMgdG8gdHJ1ZSwgaXQgc2V0cyBgcmV0ID0gVk1fRkFVTFRfU0lHQlVTYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBzd2FwIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2UgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZywgZW5zdXJpbmcgdGhhdCBiYWQgc3dhcCBlbnRyaWVzIGRvbiYjMzk7dCBnZXQgc2lsZW50bHkgaWdub3JlZCBhbmQgcG90ZW50aWFsbHkgY2F1c2UgYmlnZ2VyIHByb2JsZW1zLiBJbnN0ZWFkLCB3ZSBub3cgZ2V0IGEgYFZNX0ZBVUxUX1NJR0JVU2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHJlc3BvbnNlIGluIHRoaXMgc2l0dWF0aW9uLiBJdCYjMzk7cyBtdWNoIGJldHRlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBlcnJvcnMuCgpNeSBpbW1lZGlhdGUgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlJiMzOTtzIG5vIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSB3b3JraW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZnVuY3Rpb24gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIG5vdyBhbiBlcnJvciBwb2ludGVyIGluIHNvbWUgc2l0dWF0aW9ucywgYnV0IHRoZSBjYWxsZXJzIGFyZSBhZGFwdGVkIHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIGEgbG9naWMgZml4IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN3YXAgc3Vic3lzdGVtLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuIFRoZXJlJiMzOTtzIG5vIHJlYXNvbiB0byBjb25zaWRlciBLTVNBTiBoZXJlIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucyBvciBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgaXQuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2Ugd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBmb3IgYmFkIHN3YXAgZW50cmllcyBpbnN0ZWFkIG9mIGp1c3QgYE5VTExgLCBhbmQgdXBkYXRlcyBhbGwgY2FsbGVycyB0byBjaGVjayBmb3IgYElTX0VSUl9PUl9OVUxMKHNpKWAuIEluIGBkb19zd2FwX3BhZ2UoKWAsIGl0IHRyYW5zbGF0ZXMgdGhlIGVycm9yIGludG8gYSBgVk1fRkFVTFRfU0lHQlVTYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBlcnJvciBwcm9wYWdhdGlvbiBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwIGhhbmRsaW5nKS4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeSwgYXMgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBidWdzIGluIHRoaXMgYXJlYS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDMuODkxOTA1NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU1MjQzODYxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZ2V0X3N3YXBfZGV2aWNlXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDMuODkxOTEwNzAzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3ODc2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5M2QxMmZkYzZkMTgwNTA4Mjk0YjFhMDM2ZWQ5MTFiZGJlOTZkZmJiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA0MTM0YWM2MDdlZTBmLi5iZTk4MGJiMmUzMzQ3IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDk1NCwxMCArNDk1NCwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cXG4rXFx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqL1xcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2kpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XFxuK1xcdFxcdGlmIChJU19FUlIoc2kpKVxcbitcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0aWYgKGZvbGlvKVxcbkBAIC01MjY2LDcgKzUyNjksNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4gXFx0aWYgKHZtZi1cXHUwMDNlcHRlKVxcbiBcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuIG91dDpcXG4tXFx0aWYgKHNpKVxcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gb3V0X25vbWFwOlxcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxcbi0tLSBhL21tL21pbmNvcmUuY1xcbisrKyBiL21tL21pbmNvcmUuY1xcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG4gXFx0ICovXFxuIFxcdGlmIChzaG1lbSkge1xcbiBcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdGlmICghc2kpXFxuK1xcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDU5OTY2NWEzZDZlN2IuLjU1M2M5NWQzMzQxZDIgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI3Nyw3ICsyMjc3LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcXG4gXFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcXG4tXFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC03MTYsNyArNzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFxcdTAwMjZpbHgpO1xcbkBAIC05NTIsNyArOTUyLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xcbiBcXHRcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdFxcdGlmICghc2kpXFxuK1xcdFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG4gXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcXG5AQCAtMTg1OSw3ICsxODU5LDEwIEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxcbisgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYVxcbisgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlPKSBpZiB0aGUgZW50cnkncyB0eXBlXFxuKyAqIG5hbWVzIG5vIHN3YXAgZGV2aWNlIG9yIGl0cyBvZmZzZXQgaXMgcGFzdCB0aGUgZW5kIG9mIG9uZS4gVGhlc2UgRUlPc1xcbisgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuXFxuICAqXFxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXFxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcXG5AQCAtMTkwMCwxMiArMTkwMywxMyBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbiBcXHRyZXR1cm4gc2k7XFxuIGJhZF9ub2ZpbGU6XFxuIFxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcXG4rXFx0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XFxuIG91dDpcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIHB1dF9vdXQ6XFxuIFxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xcbiBcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMDAxLDcgKzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5AQCAtMjEyNyw3ICsyMTMxLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIFxcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcXHUwMDNlIHNpLVxcdTAwM2VtYXgpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTE3MDAsNyArMTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbkBAIC0xNzU3LDcgKzE3NTcsNyBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZFxcbiBcXHRpZiAoZHN0X3B0ZSlcXG4gXFx0XFx0cHRlX3VubWFwKGRzdF9wdGUpO1xcbiBcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXFx1MDAyNnJhbmdlKTtcXG4tXFx0aWYgKHNpKVxcbitcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDowNC4zNjgzNjQ5NjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NjE1OTcwMjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fc3dhcF9wYWdlXCIsXG4gICAgXCJnZXRfc3dhcF9kZXZpY2VcIixcbiAgICBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICAgIFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICAgIFwic3dwX3N3YXBjb3VudFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIGJhZCBzd2FwIGVudHJpZXMsIGFuZCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGluY2x1ZGluZyBgZG9fc3dhcF9wYWdlYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBldGMuKSB0byBoYW5kbGUgdGhpcyBuZXcgZXJyb3IgcmV0dXJuIHZpYSBgSVNfRVJSX09SX05VTExgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBzd2FwIGxvZ2ljIHRoYXQgZGlyZWN0bHkgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBzd2FwIG9wZXJhdGlvbnMsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkzZDEyZmRjNmQxODA1MDgyOTRiMWEwMzZlZDkxMWJkYmU5NmRmYmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDo1MDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDQxMzRhYzYwN2VlMGYuLmJlOTgwYmIyZTMzNDcgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC00OTU0LDEwICs0OTU0LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbitcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cywgYW5kIHJlamVjdCBhIGJhZCBlbnRyeS4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHRpZiAoSVNfRVJSKHNpKSlcbitcdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW8pXG5AQCAtNTI2Niw3ICs1MjY5LDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRpZiAodm1mLVx1MDAzZXB0ZSlcbiBcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbiBvdXQ6XG4tXHRpZiAoc2kpXG4rXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcdHJldHVybiByZXQ7XG4gb3V0X25vbWFwOlxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuKysrIGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXG4gXHQgKi9cbiBcdGlmIChzaG1lbSkge1xuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICghc2kpXG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTk5NjY1YTNkNmU3Yi4uNTUzYzk1ZDMzNDFkMiAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdGlmIChvcmRlciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggYjc2ZWIzZDg3NmZkNy4uMmVkYmQyYWFmZDY2OSAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNzE2LDcgKzcxNiw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1Miw3ICs5NTIsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7XG4gXHRcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRcdGlmICghc2kpXG4rXHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGY1ZGZjN2U1OTE5MWUuLjgwNmMwNDhhYjZmN2UgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcbkBAIC0xODU5LDcgKzE4NTksMTAgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiBDaGVjayB3aGV0aGVyIHN3YXAgZW50cnkgaXMgdmFsaWQgaW4gdGhlIHN3YXAgZGV2aWNlLiAgSWYgc28sXG4gICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWRcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxuLSAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIE90aGVyd2lzZSByZXR1cm4gTlVMTC5cbisgKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBSZXR1cm4gTlVMTCBmb3IgYW4gZW1wdHkgZW50cnkgb3IgYVxuKyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU8pIGlmIHRoZSBlbnRyeSdzIHR5cGVcbisgKiBuYW1lcyBubyBzd2FwIGRldmljZSBvciBpdHMgb2Zmc2V0IGlzIHBhc3QgdGhlIGVuZCBvZiBvbmUuIFRoZXNlIEVJT3NcbisgKiBhcmUgcHJlY2VkZWQgYnkgcHJfZXJyKCkuXG4gICpcbiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYrc3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xOTAwLDEyICsxOTAzLDEzIEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gc2k7XG4gYmFkX25vZmlsZTpcbiBcdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHJldHVybiBFUlJfUFRSKC1FSU8pO1xuIG91dDpcbiBcdHJldHVybiBOVUxMO1xuIHB1dF9vdXQ6XG4gXHRwcl9lcnIoXCIlczogJXMlMDhseFxcblwiLCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiBcdHBlcmNwdV9yZWZfcHV0KFx1MDAyNnNpLVx1MDAzZXVzZXJzKTtcbi1cdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gfVxuIFxuIC8qXG5AQCAtMjAwMSw3ICsyMDA1LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRpbnQgY291bnQ7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5AQCAtMjEyNyw3ICsyMTMxLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2kpKVxuK1x0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxuIFx0XHRyZXR1cm47XG4gXHRpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgXHUwMDNlIHNpLVx1MDAzZW1heCkpXG4gXHRcdGdvdG8gb3V0O1xuZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jXG5pbmRleCAyM2ZiNjhmY2UwMDBlLi44NzhlMjdmNTcxNjM4IDEwMDY0NFxuLS0tIGEvbW0vdXNlcmZhdWx0ZmQuY1xuKysrIGIvbW0vdXNlcmZhdWx0ZmQuY1xuQEAgLTE3MDAsNyArMTcwMCw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRcdH1cbiBcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAodW5saWtlbHkoIXNpKSkge1xuK1x0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuQEAgLTE3NTcsNyArMTc1Nyw3IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXG4gXHRpZiAoZHN0X3B0ZSlcbiBcdFx0cHRlX3VubWFwKGRzdF9wdGUpO1xuIFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbi1cdGlmIChzaSlcbitcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uMWQxMWYzNTBhYzFlMSAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcbiBcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShzd3BlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MDQuMzY4MzY2ODg1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE0NjU0MjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBTd2FwIFN1YnN5c3RlbSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGVkIHF1aXRlIGEgZmV3IGZpbGVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtOiBgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGFuZCBgbW0venN3YXAuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdGhhdCB0aGlzIHdhcnJhbnRzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24g4oCTIHRoZXNlIGFyZSBjb3JlIGNvbXBvbmVudHMgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZ2V0X3N3YXBfZGV2aWNlKClgLiBJdCdzIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIHdoZW4gaXQgZW5jb3VudGVycyBhIGJhZCBmaWxlIG9yIG9mZnNldCwgd2hpY2ggaXMgdGhlbiBsZWFkaW5nIHRvIHVwZGF0ZWQgY2hlY2tzIHVzaW5nIGBJU19FUlJfT1JfTlVMTChzaSlgIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzIGAhc2lgLlxuXG5TcGVjaWZpY2FsbHksIGluIGBkb19zd2FwX3BhZ2UoKWAsIGEgc3dhcCBlbnRyeSB0aGF0IHByZXZpb3VzbHkgbWlnaHQgaGF2ZSBiZWVuIHNpbGVudGx5IGlnbm9yZWQgb3IgdHJlYXRlZCBhcyBlbXB0eSBub3cgdHJpZ2dlcnMgYSBgVk1fRkFVTFRfU0lHQlVTYCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZS4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdDsgd2UncmUgbm93IGV4cGxpY2l0bHkgc2lnbmFsaW5nIGFuIGVycm9yIHJhdGhlciB0aGFuIGltcGxpY2l0bHkgaGFuZGxpbmcgaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgYW5kIGhvdyBpdCBpbXBhY3RzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgb3ZlcmFsbCBiZWhhdmlvciBvZiB0aGUgc3lzdGVtIHVuZGVyIHRoZXNlIHN3YXAgY29uZGl0aW9ucy5cblxuSSdtIHRoaW5raW5nIHRoaXMgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRvIGdldCBzdGFydGVkLCBJJ20gaWRlbnRpZnlpbmcga2V5IHN5bWJvbHMgdG8gdGFyZ2V0LiBJbml0aWFsbHksIEkgbm90ZWQgYGRvX3N3YXBfcGFnZWAsIGBnZXRfc3dhcF9kZXZpY2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3ZtYV9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYG1vdmVfcGFnZXNfcHRlc2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC5cblxuSG93ZXZlciwgdGhlIHByb21wdCBpcyByZW1pbmRpbmcgbWUgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHRvIGF2b2lkIGlubGluZWQgaGVscGVycy4gQmFzZWQgb24gdGhpcywgSSdsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cyB0aGF0IHByb3ZpZGUgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbi4gSSdsbCBuZWVkIHRvIHZlcmlmeSBlYWNoIG9mIHRoZXNlIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MiwiT3V0cHV0VG9rZW5zIjo4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjEzLjUxNDkxMTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTkzNDMwMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdHJ1Y3QgZm9saW8gXFxcXCp8aW50fHZvaWR8c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgXFxcXCp8dm1fZmF1bHRfdCkgKGRvX3N3YXBfcGFnZXxnZXRfc3dhcF9kZXZpY2V8cmVhZF9zd2FwX2NhY2hlX2FzeW5jfHN3YXBfcmV0cnlfdGFibGVfYWxsb2N8c3dwX3N3YXBjb3VudHxzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdClcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD0zOTg9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzk5OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDAwLVxcbi0tXFxubW0vaW50ZXJuYWwuaD01Njc9c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTU3NS1cXG5tbS9pbnRlcm5hbC5oOjU3Njp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaC01Nzctdm9pZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODYzPXN0YXRpYyB2b2lkIGNoZWNrX3N3YXBfZXhjbHVzaXZlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LFxcbi0tXFxubW0vbWVtb3J5LmMtNDg4MC0gKi9cXG5tbS9tZW1vcnkuYzo0ODgxOnZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL21lbW9yeS5jLTQ4ODIte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNDYzPXN0YXRpYyBpbnQgc3dhcF9leHRlbmRfdGFibGVfYWxsb2Moc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNDk4LVxcbm1tL3N3YXBmaWxlLmM6MTQ5OTppbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxcbm1tL3N3YXBmaWxlLmMtMTUwMC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5ODM9Ym9vbCBzd2FwX2VudHJ5X3N3YXBwZWQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk5OS0gKi9cXG5tbS9zd2FwZmlsZS5jOjIwMDA6aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0yMDAxLXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjEwMT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTI1LSAqL1xcbm1tL3N3YXBmaWxlLmM6MjEyNjp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXFxubW0vc3dhcGZpbGUuYy0yMTI3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MTYuNzM0MjU5NzY0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2NDEyNTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnM6XG5cbioqQW5hbHl6aW5nIFN3YXAgRGV2aWNlIGFuZCBDYWNoZSBPcGVyYXRpb25zKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9uczogYGdldF9zd2FwX2RldmljZWAgYW5kIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLiBJIHdhbnQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlaXIgcm9sZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZS4gYGdldF9zd2FwX2RldmljZWAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBvZiBjb3Vyc2U7IGl0J3MgdGhlIGdhdGVrZWVwZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBob3cgcm9idXN0IGlzIGl0cyBkZXZpY2UgZGV0ZWN0aW9uPyBEb2VzIGl0IGhhbmRsZSBtdWx0aXBsZSBzd2FwIHBhcnRpdGlvbnMgZ3JhY2VmdWxseT8gRG9lcyBpdCBhbGxvdyBmb3IgZHluYW1pYyBhZGRpdGlvbi9yZW1vdmFsIG9mIHN3YXAgZGV2aWNlcz8gSSdsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgZm9yIGVkZ2UgY2FzZXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nLiBJIHdvbmRlciBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcga2VybmVsIGNhbGxzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9uIGZpbGVzLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhlIFwiYXN5bmNcIiB0YWcgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGlzIHN1Z2dlc3RzIGEgbm9uLWJsb2NraW5nIG9wZXJhdGlvbiwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIG1haW50YWluaW5nIHBlcmZvcm1hbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uY3VycmVuY3kgbW9kZWwgdXNlZC4gSXMgaXQgbGV2ZXJhZ2luZyB0aHJlYWRzLCBvciBwZXJoYXBzIGFuIGV2ZW50LWRyaXZlbiBhcmNoaXRlY3R1cmU/IEknbGwgbmVlZCB0byBzZWUgdGhlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGVtcGxveWVkIOKAkyBhcmUgd2UgdGFsa2luZyBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBmb3IgYXN5bmNocm9ub3VzIEkvTz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGlmIHRoZSByZWFkIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBvciBwcm9wYWdhdGUgdGhlIGVycm9yPyBBbmQgaG93IGlzIGl0IGludGVncmF0aW5nIHdpdGggdGhlIGNhY2hlIGl0c2VsZj8gSXMgaXQgYW4gTFJVIGNhY2hlLCBhIHdyaXRlLWJhY2sgY2FjaGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBkYXRhIGNvbnNpc3RlbmN5IGFuZCBkdXJhYmlsaXR5IGluIGNhc2Ugb2YgYSBjcmFzaD8gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGFzeW5jaHJvbm91cy4gVWx0aW1hdGVseSwgdGhlIGVmZmljaWVuY3kgb2YgdGhpcyBhc3luY2hyb25vdXMgcmVhZCBpcyBwYXJhbW91bnQgdG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIHN3YXAgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIGVmZmljaWVudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjAuNTk4Mzg3MTI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg3NjA1NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RydWN0IGZvbGlvIFxcXFwqfHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IFxcXFwqKSAoZ2V0X3N3YXBfZGV2aWNlfHJlYWRfc3dhcF9jYWNoZV9hc3luYylcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjMuMDM3MTU2NDg3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NDkzNDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIFN3YXAgRGV2aWNlIElkZW50aWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIGBnZXRfc3dhcF9kZXZpY2VgIGlzbid0IHNob3dpbmcgdXAgYXMgZXhwZWN0ZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCdzIGVpdGhlciBhbiBgaW5saW5lIHN0YXRpY2AgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgbm90IGJlaW5nIGdlbmVyYXRlZCBhcyBhIHN0YW5kYWxvbmUgc3ltYm9sLCBvciBwZXJoYXBzIG15IHJlZ2V4IGZvciBzeW1ib2wgbWF0Y2hpbmcgaXMgdG9vIHNwZWNpZmljIGFuZCBJJ20gbWlzc2luZyBpdCBlbnRpcmVseS4gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgc3dhcCBmaWxlIG1hbmFnZW1lbnQgbG9naWMgYW5kIHN0YXRlIGhhbmRsaW5nLiBUaG9zZSBhcmUgbGlrZWx5IGNhbmRpZGF0ZXMgZ2l2ZW4gdGhlIG5hbWUsIHNvIEknbGwgc2VlIHdoYXQncyB3aGF0IGluIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlIHJlbGV2YW50IGNvZGUgaXMgZGVjbGFyZWQgZGlyZWN0bHkgaW4gdGhvc2UgZmlsZXMgb3IgaWYgdGhleSBhcmUgY2FsbGluZyBzb21lIG90aGVyIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6MjYuNDAyMDkzNjI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDc0NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9zd2FwX2RldmljZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNDk5PWludCBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnApXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1MDUtXFxubW0vc3dhcGZpbGUuYzoxNTA2OlxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG5tbS9zd2FwZmlsZS5jLTE1MDctXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODUxLSAqIGJlY2F1c2Ugb2Ygc3dhcG9mZi4gIFRoZW4sIHdlIG5lZWQgdG8gZW5jbG9zZSBhbGwgc3dhcCByZWxhdGVkXFxubW0vc3dhcGZpbGUuYzoxODUyOiAqIGZ1bmN0aW9ucyB3aXRoIGdldF9zd2FwX2RldmljZSgpIGFuZCBwdXRfc3dhcF9kZXZpY2UoKSwgdW5sZXNzIHRoZVxcbm1tL3N3YXBmaWxlLmMtMTg1My0gKiBzd2FwIGZ1bmN0aW9ucyBjYWxsIGdldC9wdXRfc3dhcF9kZXZpY2UoKSBieSB0aGVtc2VsdmVzLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODY3LSAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXFxubW0vc3dhcGZpbGUuYzoxODY4OiAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcXG5tbS9zd2FwZmlsZS5jLTE4NjktICogcGVyY3B1X3JlZl9wdXQoKSBpbiBwdXRfc3dhcF9kZXZpY2UoKSBpZiB0aGVyZSBpc24ndCBhbnkgb3RoZXIgd2F5XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4ODYtICovXFxubW0vc3dhcGZpbGUuYzoxODg3OnN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0xODg4LXtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjAwMD1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjAwNi1cXG5tbS9zd2FwZmlsZS5jOjIwMDc6XFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbm1tL3N3YXBmaWxlLmMtMjAwOC1cXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTI2PXZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjEzMi1cXG5tbS9zd2FwZmlsZS5jOjIxMzM6XFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbm1tL3N3YXBmaWxlLmMtMjEzNC1cXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjI2LjQ0NjE3NDkwMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Njk3MzQyODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgc25pcHBldHMsIHRoaW5raW5nIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhcyBJJ2QgYXBwcm9hY2ggdGhpcyBhcyBhbiBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgU3dhcCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi5JJ20gdHJhY2luZyB0aHJvdWdoIHRoZSBzd2FwIGNvZGUgaGVyZS4gU28sIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KWAg4oCTIHRoYXQncyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZmlndXJpbmcgb3V0ICp3aGljaCogc3dhcCBkZXZpY2UgYSBwYXJ0aWN1bGFyIHBhZ2UgZW50cnksIGBlbnRyeWAsIGNvcnJlc3BvbmRzIHRvLiBJJ2QgZXhwZWN0IGl0IHRvIGhhbmRsZSB0aGUgbG9naWMgb2YgbWFwcGluZyBhIHN3YXAgZW50cnkgdG8gYSBwaHlzaWNhbCBzd2FwIHBhcnRpdGlvbiwgdGFraW5nIGNhcmUgb2YgYW55IG5lY2Vzc2FyeSBib29ra2VlcGluZy4gVGhlIGZhY3QgdGhhdCBpdCdzIGRlZmluZWQgaW4gYG1tL3N3YXBmaWxlLmNgIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEl04oCZcyB0aGUgbG93LWxldmVsIHN0dWZmLCB0aGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBzd2FwIGNvbnRleHQuIEdvdHRhIGxvdmUgdGhvc2UgbmFtaW5nIGNvbnZlbnRpb25zLlxuXG5UaGVuIHdlJ3ZlIGdvdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgaGFuZ2luZyBvdXQgaW4gYG1tL3N3YXBfc3RhdGUuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGBfYXN5bmNgIHN1ZmZpeCBtYWtlcyBtZSB0aGluayBpdCdzIGRlYWxpbmcgd2l0aCBhc3luY2hyb25vdXMgc3dhcCBvcGVyYXRpb25zIOKAkyBsaWtlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgcmVhZC1haGVhZCBvciBzb21lIGZvcm0gb2YgSS9PIGNvbXBsZXRpb24uIEl0J3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdGhlIHByb2Nlc3Mgb2YgZmV0Y2hpbmcgdGhlIHN3YXBwZWQgcGFnZSBmcm9tIGRpc2sgaW50byB0aGUgcGFnZSBjYWNoZSwgd2hpY2ggaXMgd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlsZS4gU28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHN3YXAgc3BhY2UgYW5kIHRoZSBwYWdlIGNhY2hlIGluIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgd2F5LCB3aXRoIGFuIGV5ZSB0b3dhcmRzIGNvbmN1cnJlbmN5LiBMb29rcyBsaWtlIHRoZSBhc3luY2hyb25vdXMgZGVzaWduIGNvdWxkIHByb3ZpZGUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdC4gSW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozMC40MTU5MTEzOTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDQyNDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTY4Mz1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwOS0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzEwOnN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcXG5tbS9zd2FwX3N0YXRlLmMtNzExLVxcdFxcdGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozMC42MjAzNDE4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI4Nzk0MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcGF0Y2g6XG5cbioqQW5hbHl6aW5nIHRoZSBTd2FwIERldmljZSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGNoYW5nZS4gVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgZ2V0X3N3YXBfZGV2aWNlYCBzbyBpdCdzIHJldHVybmluZyBgRVJSX1BUUigtRUlPKWAgd2hlbiBpdCBoaXRzIGEgYmFkIHN3YXAgZW50cnkuIFRoYXQncyBhIGdvb2QgYXBwcm9hY2g7IGVycm9yIHByb3BhZ2F0aW9uIGlzIGFsd2F5cyBpbXBvcnRhbnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGFsc28gbG9va3MgbGlrZSB0aGUgY2FsbGVycyBoYXZlIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gY29kZSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEknZCBleHBlY3QuIFNvLCBmdW5jdGlvbmFsbHksIHdlJ3ZlIGdvdCBhIHNsaWdodGx5IG1vcmUgcm9idXN0IHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0gaGVyZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN3YXAgaGFuZGxpbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb24gZW5hYmxlcyB0aGlzIGZlYXR1cmU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGBDT05GSUdfYCBvcHRpb24gZW5hYmxlcyB0aGUgc3dhcCBmdW5jdGlvbnMsIGFuZCB0aHVzLCB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGNoZWNrIGVpdGhlciBgbW0vTWFrZWZpbGVgIG9yIGBtbS9LY29uZmlnYCB0byBwaW5wb2ludCB3aGV0aGVyIGBDT05GSUdfU1dBUGAgaXMgYWN0dWFsbHkgdGhlIGNvcnJlY3Qgb25lLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIG1vcmUgc3BlY2lmaWMgc3ViLW9wdGlvbi4gSSdsbCBkaWcgaW50byB0aGUgYnVpbGQgZmlsZXMgYW5kIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM1LjY0OTEzOTY1MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcGZpbGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDozNS42OTE5ODM3NjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2ODM1Nzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgaW1wYWN0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgc3dhcHBpbmcgYW5kIHNoYXJlZCBtZW1vcnkuIFRoZSBpbml0aWFsIHRyaWdnZXIgd2FzIGBDT05GSUdfU1dBUGAsIG9mIGNvdXJzZSwgdGhhdCdzIGZ1bmRhbWVudGFsLiBCdXQgdGhlbiBpdCBicmFuY2hlcyBvdXQuIFdlIGFsc28gbmVlZCB0byBmYWN0b3IgaW4gYENPTkZJR19aU1dBUGAuIFRoYXQncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGltcGFjdCB0aGUgYnVpbGQgcHJvY2VzcyBvZiBgbW0venN3YXAuY2AuIFdlIG5lZWQgdG8gYmUgY29uZmlkZW50IG9mIGhvdyB0aGF0IGNvbXBpbGVzLlxuXG5Ob3csIG15IG1pbmQgbW92ZXMgdG8gYENPTkZJR19TSE1FTWAuIFRoZSBxdWVzdGlvbiBoZXJlIGlzIHdoZXRoZXIgb3Igbm90IHRoYXQgYWx3YXlzIGNvbXBpbGVzIGBtbS9zaG1lbS5jYC4gSSdtIHByZXR0eSBzdXJlIHRoZSBhbnN3ZXIgaXMgeWVzLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIFRoZXJlIG1heSBiZSBzb21lIGVkZ2UgY2FzZXMgdGhhdCBJIGFtIG92ZXJsb29raW5nLCBzbyBsZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGltcGxpY2F0aW9ucyBoZXJlIHRvIGF2b2lkIGFueSB1bndhbnRlZCBzdXJwcmlzZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM5LjE2MDM0NzcxN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzU2MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1cXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTUzLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NDpcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG5tbS9NYWtlZmlsZS01NS1cXHRcXHRcXHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjM5LjIwNjMzMjI0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgwMTcyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgc28gYHNobWVtLm9gIGlzIGEgZ2l2ZW47IHRoYXQncyBhbHdheXMgYnVpbHQuIE5vIHN1cnByaXNlcyB0aGVyZS4gQnV0IG5vdyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IG1lbnRhbCBtYXAuLi4gd2hhdCdzIHRoZSBkZWFsIHdpdGggYHVzZXJmYXVsdGZkLm9gPyBEb2VzIHRoYXQgYWx3YXlzIGdldCBjb21waWxlZCwgb3IgaXMgaXQgY29uZGl0aW9uYWw/IEkgbmVlZCB0byByZW1lbWJlciB0aGUgc3BlY2lmaWMgYnVpbGQgZmxhZ3MgYW5kIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGV0ZXJtaW5lIGl0cyBpbmNsdXNpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhhdCBwYXJ0aWN1bGFyIG1vZHVsZS4gVGltZSB0byBkaWcgaW4gYW5kIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzc3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NDIuMTg2NTA3MzUxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY1NjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZFxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMzE9b2JqLSQoQ09ORklHX0NNQV9TWVNGUykgKz0gY21hX3N5c2ZzLm9cXG5tbS9NYWtlZmlsZToxMzI6b2JqLSQoQ09ORklHX1VTRVJGQVVMVEZEKSArPSB1c2VyZmF1bHRmZC5vXFxubW0vTWFrZWZpbGUtMTMzLW9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjQyLjIzMjE2NzY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIzOTc0NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3dhcCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19VU0VSRkFVTFRGRGAgcG9wcyBvdXQgYmVjYXVzZSBpdCB0aWVzIGludG8gYG1tL3VzZXJmYXVsdGZkLmNgLiBCdXQgdGhlIG1lYXQgb2YgdGhpcyBjaGFuZ2UgcmVhbGx5IGxvb2tzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgYGRvX3N3YXBfcGFnZWAsIGFuZCB0aG9zZSBhcmUgY2xlYXJseSB1bmRlciBgQ09ORklHX1NXQVBgLiBSaWdodCwgdGhhdCdzIHRoZSBrZXkuIEknbGwgZGVmaW5pdGVseSBiZSBlbmFibGluZyBgU1dBUGAgaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUga2V5IGZ1bmN0aW9ucy4gSSd2ZSBnb3QgdG8ga2VlcCBhbiBleWUgb246IGBkb19zd2FwX3BhZ2VgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC5cblxuRmlyc3QsIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBhcmUgc3RhdGljLiBOb3BlLCB0aGV5J3JlIGFsbCBleHBvcnRlZC4gR29vZCwgdGhhdCBtYWtlcyB0aGluZ3MgZWFzaWVyLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZG9fc3dhcF9wYWdlYC4gQWhhLCBpdCdzIHJpZ2h0IHRoZXJlIGluIGBtbS9tZW1vcnkuY2AsIGEgY29yZSBwYWdlIGZhdWx0IGhhbmRsZXIuIEl0J3MgY2xlYXIgdGhhdCBgZ2V0X3N3YXBfZGV2aWNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLlxuXG5UaGlzIGlzIHNpZ25pZmljYW50LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgYGdldF9zd2FwX2RldmljZSgpYCBoYW5kbGVzIGVycm9ycy4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBpdCdzIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTylgLiBBbmQsIGNyaXRpY2FsbHksIGl0IHVwZGF0ZXMgYWxsIHRoZSByZWxldmFudCBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBhbmQgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIHRvIHByb3Blcmx5IGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdXNpbmcgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBjaGFuZ2UgaW4gdGhlIGNvcmUgc3dhcCBsb2dpYyB3aGljaCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIHdheSBzd2FwIGVycm9ycyBhcmUgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsLiBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAgYmVjYXVzZSB0aGlzIGNoYW5nZSBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgc3RhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ2LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDo1MC40NTYxNDQ2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTkxMjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX3N3YXBfcGFnZVwiLFxuICAgIFwiZ2V0X3N3YXBfZGV2aWNlXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLCBhbmQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChpbmNsdWRpbmcgYGRvX3N3YXBfcGFnZWAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgZXRjLikgdG8gaGFuZGxlIHRoaXMgbmV3IGVycm9yIHJldHVybiB2aWEgYElTX0VSUl9PUl9OVUxMYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgc3dhcCBsb2dpYyB0aGF0IGRpcmVjdGx5IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgc3dhcCBvcGVyYXRpb25zLCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19zd2FwX3BhZ2VcIixcbiAgICBcImdldF9zd2FwX2RldmljZVwiLFxuICAgIFwicmVhZF9zd2FwX2NhY2hlX2FzeW5jXCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCIsXG4gICAgXCJzd3Bfc3dhcGNvdW50XCIsXG4gICAgXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU8pYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcywgYW5kIHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoaW5jbHVkaW5nIGBkb19zd2FwX3BhZ2VgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGV0Yy4pIHRvIGhhbmRsZSB0aGlzIG5ldyBlcnJvciByZXR1cm4gdmlhIGBJU19FUlJfT1JfTlVMTGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIHN3YXAgbG9naWMgdGhhdCBkaXJlY3RseSBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIHN3YXAgb3BlcmF0aW9ucywgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NTAuNTI4MDcwODc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg4MjAwMDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6NTA6NTAuNTI4NTczNDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg4ODc2OTI5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgZm9yIGJhZCBzd2FwIGVudHJpZXMgaW5zdGVhZCBvZiBqdXN0IGBOVUxMYCwgYW5kIHVwZGF0ZXMgYWxsIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGBJU19FUlJfT1JfTlVMTChzaSlgLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBpdCB0cmFuc2xhdGVzIHRoZSBlcnJvciBpbnRvIGEgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24gaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCBoYW5kbGluZykuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBpbiB0aGlzIGFyZWEuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTNkMTJmZGM2ZDE4MDUwODI5NGIxYTAzNmVkOTExYmRiZTk2ZGZiYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjUwOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNDEzNGFjNjA3ZWUwZi4uYmU5ODBiYjJlMzM0NyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTQsMTAgKzQ5NTQsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqL1xuK1x0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLCBhbmQgcmVqZWN0IGEgYmFkIGVudHJ5LiAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4rXHRcdGlmIChJU19FUlIoc2kpKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbiBcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdGlmIChmb2xpbylcbkBAIC01MjY2LDcgKzUyNjksNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcdGlmICh2bWYtXHUwMDNlcHRlKVxuIFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuIG91dDpcbi1cdGlmIChzaSlcbitcdGlmICghSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFx0cmV0dXJuIHJldDtcbiBvdXRfbm9tYXA6XG5kaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxuLS0tIGEvbW0vbWluY29yZS5jXG4rKysgYi9tbS9taW5jb3JlLmNcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA1OTk2NjVhM2Q2ZTdiLi41NTNjOTVkMzM0MWQyIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNzcsNyArMjI3Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7XG4gXHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRleCwgaW5kZXhfZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li4yZWRiZDJhYWZkNjY5IDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTYsNyArNzE2LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFx1MDAyNmlseCk7XG5AQCAtOTUyLDcgKzk1Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbitcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZjVkZmM3ZTU5MTkxZS4uODA2YzA0OGFiNmY3ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyArMTg1OSwxMCBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxuICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4rICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTykgaWYgdGhlIGVudHJ5J3MgdHlwZVxuKyAqIG5hbWVzIG5vIHN3YXAgZGV2aWNlIG9yIGl0cyBvZmZzZXQgaXMgcGFzdCB0aGUgZW5kIG9mIG9uZS4gVGhlc2UgRUlPc1xuKyAqIGFyZSBwcmVjZWRlZCBieSBwcl9lcnIoKS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxuQEAgLTE5MDAsMTIgKzE5MDMsMTMgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbiBcdHJldHVybiBzaTtcbiBiYWRfbm9maWxlOlxuIFx0cHJfZXJyKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTyk7XG4gb3V0OlxuIFx0cmV0dXJuIE5VTEw7XG4gcHV0X291dDpcbiBcdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRUlPKTtcbiB9XG4gXG4gLypcbkBAIC0yMDAxLDcgKzIwMDUsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgKzIxMzEsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFzaSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDIzZmI2OGZjZTAwMGUuLjg3OGUyN2Y1NzE2MzggMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICsxNzAwLDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5AQCAtMTc1Nyw3ICsxNzU3LDcgQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdGlmIChkc3RfcHRlKVxuIFx0XHRwdGVfdW5tYXAoZHN0X3B0ZSk7XG4gXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLVx0aWYgKHNpKVxuK1x0aWYgKCFJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi4xZDExZjM1MGFjMWUxIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5Nyw3ICs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDo1MDo1MC41Mjg1NzQ0MDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg4NzY3NDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTd2FwIERldmljZSBSZXR1cm4gVmFsdWUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBgZ2V0X3N3YXBfZGV2aWNlKClgIGJlaGF2ZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgaXRzIHJldHVybiB2YWx1ZXMuIFByZXZpb3VzbHksIGEgYE5VTExgIHJldHVybiBzaWduYWxlZCBmYWlsdXJlLiBOb3csIGl0IGNhbiByZXR1cm4gZWl0aGVyIGBFUlJfUFRSKC1FSU8pYCBmb3IgcHJvYmxlbWF0aWMgZW50cmllcywgb3Igc3RpbGwgYE5VTExgIGZvciBlbXB0eSBvciBkaXNhcHBlYXJpbmcgZGV2aWNlcy4gVGhlIGNhbGxpbmcgY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYCBpbnN0ZWFkIG9mIHRoZSBvbGQgYCFzaWAgY2hlY2suIENyaXRpY2FsbHksIGluIGBkb19zd2FwX3BhZ2VgLCBpZiBgSVNfRVJSKHNpKWAgZXZhbHVhdGVzIHRvIHRydWUsIGl0IHNldHMgYHJldCA9IFZNX0ZBVUxUX1NJR0JVU2AuXG5cbkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBzd2FwIGhhbmRsaW5nIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIGEgY29udHJvbCBmbG93IGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGhhbmRsaW5nLCBlbnN1cmluZyB0aGF0IGJhZCBzd2FwIGVudHJpZXMgZG9uJ3QgZ2V0IHNpbGVudGx5IGlnbm9yZWQgYW5kIHBvdGVudGlhbGx5IGNhdXNlIGJpZ2dlciBwcm9ibGVtcy4gSW5zdGVhZCwgd2Ugbm93IGdldCBhIGBWTV9GQVVMVF9TSUdCVVNgLCB3aGljaCBpcyB0aGUgY29ycmVjdCByZXNwb25zZSBpbiB0aGlzIHNpdHVhdGlvbi4gSXQncyBtdWNoIGJldHRlciB0aGFuIHNpbGVudGx5IGlnbm9yaW5nIHRoZSBlcnJvcnMuXG5cbk15IGltbWVkaWF0ZSBpbXByZXNzaW9uIGlzIHRoYXQgdGhlcmUncyBubyBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIGhlcmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBmaWVsZHMsIG5vciBkb2VzIGl0IGFwcGVhciB0byBiZSB3b3JraW5nIHdpdGggYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZnVuY3Rpb24gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIG5vdyBhbiBlcnJvciBwb2ludGVyIGluIHNvbWUgc2l0dWF0aW9ucywgYnV0IHRoZSBjYWxsZXJzIGFyZSBhZGFwdGVkIHRvIGhhbmRsZSB0aGlzLiBJdCBzZWVtcyBsaWtlIGEgbG9naWMgZml4IHRvIGltcHJvdmUgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN3YXAgc3Vic3lzdGVtLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYXJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIHRoaXMga2luZCBvZiBjaGFuZ2UuIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zIG9yIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgd291bGQgcmVxdWlyZSBpdC5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCBpcyBhIGNvbnRyb2wgZmxvdyBjaGFuZ2Ugd2l0aCBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg5LCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjUwOjU5LjQxNjI1MTU0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTylgIGZvciBiYWQgc3dhcCBlbnRyaWVzIGluc3RlYWQgb2YganVzdCBgTlVMTGAsIGFuZCB1cGRhdGVzIGFsbCBjYWxsZXJzIHRvIGNoZWNrIGZvciBgSVNfRVJSX09SX05VTEwoc2kpYC4gSW4gYGRvX3N3YXBfcGFnZSgpYCwgaXQgdHJhbnNsYXRlcyB0aGUgZXJyb3IgaW50byBhIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIGVycm9yIHByb3BhZ2F0aW9uIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAgaGFuZGxpbmcpLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LCBhcyBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGJ1Z3MgaW4gdGhpcyBhcmVhLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlPKWAgZm9yIGJhZCBzd2FwIGVudHJpZXMgaW5zdGVhZCBvZiBqdXN0IGBOVUxMYCwgYW5kIHVwZGF0ZXMgYWxsIGNhbGxlcnMgdG8gY2hlY2sgZm9yIGBJU19FUlJfT1JfTlVMTChzaSlgLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBpdCB0cmFuc2xhdGVzIHRoZSBlcnJvciBpbnRvIGEgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgZXJyb3IgcHJvcGFnYXRpb24gaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCBoYW5kbGluZykuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnksIGFzIHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgYnVncyBpbiB0aGlzIGFyZWEuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[1] Phase: Succeeded StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 10:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 10:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2] Phase: Succeeded StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 10:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 10:51:43 +0000 UTC FinishedAt: 2026-08-18 10:51:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjzckr/series-workflowjzckr-convert-artifact-2690048701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 10:51:53 +0000 UTC FinishedAt: 2026-08-18 11:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 10:51:53 +0000 UTC FinishedAt: 2026-08-18 11:11:45 +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:*453ddcb0-3694-4719-9442-fd4e1daa6f2f,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-workflowjzckr/series-workflowjzckr-convert-artifact-2690048701/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": "81d5bb74-188f-4349-b093-dda84bea57dc", "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-workflowjzckr/series-workflowjzckr-build-action-3266317299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 10:51:53 +0000 UTC FinishedAt: 2026-08-18 11:11:35 +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:*453ddcb0-3694-4719-9442-fd4e1daa6f2f,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-workflowjzckr/series-workflowjzckr-convert-artifact-2690048701/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": "81d5bb74-188f-4349-b093-dda84bea57dc", "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-workflowjzckr/series-workflowjzckr-build-action-3266317299/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 11:11:45 +0000 UTC FinishedAt: 2026-08-18 11:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 11:11:45 +0000 UTC FinishedAt: 2026-08-18 11:11:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 11:11:45 +0000 UTC FinishedAt: 2026-08-18 11:11:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 11:11:45 +0000 UTC FinishedAt: 2026-08-18 11:11:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjzckr/series-workflowjzckr-convert-artifact-874678040/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 11:11:55 +0000 UTC FinishedAt: 2026-08-18 11:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 11:11:55 +0000 UTC FinishedAt: 2026-08-18 11:13:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81d5bb74-188f-4349-b093-dda84bea57dc,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-workflowjzckr/series-workflowjzckr-build-action-3266317299/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-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 11:13:58 +0000 UTC FinishedAt: 2026-08-18 11:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 11:13:58 +0000 UTC FinishedAt: 2026-08-18 11:13:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 11:13:58 +0000 UTC FinishedAt: 2026-08-18 11:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 11:13:58 +0000 UTC FinishedAt: 2026-08-18 11:35:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*453ddcb0-3694-4719-9442-fd4e1daa6f2f,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-workflowjzckr/series-workflowjzckr-convert-artifact-874678040/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": "615b124a-4693-4fd4-9c4e-165381f193d6", "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-workflowjzckr/series-workflowjzckr-build-action-3432374148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 11:13:58 +0000 UTC FinishedAt: 2026-08-18 11:35:07 +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:*453ddcb0-3694-4719-9442-fd4e1daa6f2f,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-workflowjzckr/series-workflowjzckr-convert-artifact-874678040/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": "615b124a-4693-4fd4-9c4e-165381f193d6", "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-workflowjzckr/series-workflowjzckr-build-action-3432374148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 11:35:17 +0000 UTC FinishedAt: 2026-08-18 11:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 11:35:17 +0000 UTC FinishedAt: 2026-08-18 11:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 11:35:17 +0000 UTC FinishedAt: 2026-08-18 11:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 11:35:17 +0000 UTC FinishedAt: 2026-08-18 11:37:16 +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:*615b124a-4693-4fd4-9c4e-165381f193d6,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-workflowjzckr/series-workflowjzckr-build-action-3432374148/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-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +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":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"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:*81d5bb74-188f-4349-b093-dda84bea57dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*615b124a-4693-4fd4-9c4e-165381f193d6,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-workflowjzckr/series-workflowjzckr-build-action-3266317299/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-workflowjzckr/series-workflowjzckr-build-action-3432374148/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 11:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 11:37:31 +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":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"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-workflowjzckr/series-workflowjzckr-convert-artifact-1938836721/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 11:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 11:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 11:37:26 +0000 UTC FinishedAt: 2026-08-18 11:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 11:37:36 +0000 UTC FinishedAt: 2026-08-18 14:39:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzckr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_swap_page","get_swap_device","read_swap_cache_async","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"b9c86c2c-65ed-46b9-88c1-e9c01c625016","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 11:37:36 +0000 UTC FinishedAt: 2026-08-18 14:39:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81d5bb74-188f-4349-b093-dda84bea57dc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*615b124a-4693-4fd4-9c4e-165381f193d6,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-workflowjzckr/series-workflowjzckr-build-action-3266317299/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-workflowjzckr/series-workflowjzckr-build-action-3432374148/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-workflowjzckr/series-workflowjzckr-convert-artifact-1938836721/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,}