Name: series-workflowq6d5g Phase: Succeeded StartedAt: 2026-08-25 21:26:53 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[0] Phase: Succeeded StartedAt: 2026-08-25 21:26:53 +0000 UTC FinishedAt: 2026-08-25 22:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 21:26:53 +0000 UTC FinishedAt: 2026-08-25 22:15:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_SELFTESTS", "STMMAC_PCI", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_SELFTESTS", "STMMAC_PCI", "NET_CLS_ACT" ], "series_id": "f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_selftest_run", "stmmac_test_l4filt_da_tcp", "stmmac_test_l4filt_sa_tcp", "stmmac_test_l4filt_da_udp", "stmmac_test_l4filt_sa_udp", "__stmmac_test_l4filt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJiMzOTtzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIHNpbmNlIHRoZXJlIGlzIGEgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUbyByZWFjaCB0aGUgbW9kaWZpZWQgY29kZSwgdGhlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5AQCAtMTQzMiwxMSAmIzQzOzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMga2V5O1xuLVx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XG4mIzQzO1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XG4tXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7XG4mIzQzO1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xuIFx0dW5zaWduZWQgbG9uZyBkdW1teV9jb29raWUgPSAweGRlYWRiZWVmO1xuIFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcbiBcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xuQEAgLTE0ODksNiAmIzQzOzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiBcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4gXHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuIFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbiYjNDM7XHQvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqL1xuJiM0MztcdG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtcbiBcdG1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7XG4gXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19TRUxGVEVTVFMmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0bW1hY19zZWxmdGVzdF9ydW4mIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcCYjMzQ7LAogICAgJiMzNDtfX3N0bW1hY190ZXN0X2w0ZmlsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJiMzOTtzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIHNpbmNlIHRoZXJlIGlzIGEgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUbyByZWFjaCB0aGUgbW9kaWZpZWQgY29kZSwgdGhlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCmluZGV4IDFkZjI2YzIxN2Y5YTcuLmEyYjkxN2RkNjBlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKQEAgLTE0MzIsMTEgJiM0MzsxNDMyLDExIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLAogCXN0cnVjdCB7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYmtleTsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBrZXk7Ci0JfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7CiYjNDM7CX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9OwogCXN0cnVjdCB7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMgbWFzazsKLQl9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7CiYjNDM7CX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcyA9IHsgfTsKIAl1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7CiAJc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTsKIAlzdHJ1Y3QgZmxvd19kaXNzZWN0b3IgKmRpc3NlY3RvcjsKQEAgLTE0ODksNiAmIzQzOzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYywKIAlrZXlzLmJrZXkuaXBfcHJvdG8gPSB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQOwogCWtleXMua2V5LnNyYyA9IGh0b25zKHNyYyk7CiAJa2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTsKJiM0MzsJLyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi8KJiM0MzsJbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmOwogCW1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7CiAJbWFza3MubWFzay5kc3QgPSBkc3RfbWFzazsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoIGZvciB0aGUgc3RtbWFjIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgaW5pdGlhbGl6aW5nIHNvbWUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBzZXR0aW5nIGBtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXMgdGhpcyBldmVuIGEgY29kZSBwYXRoIHRoYXQmIzM5O3MgcmVhbGlzdGljYWxseSByZWFjaGFibGU/CgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgaXMgdGhlIEV0aGVybmV0IGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzJiMzOTsgcmFuZ2Ugb2YgRXRoZXJuZXQgTUFDcy4gTm93LCBjYW4gdGhpcyBkcml2ZXIgYmUgcmVhY2hlZCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIFFFTVU/IEFuZCBpcyBpdCBlbXVsYXRlZCBhdCBhbGw/IEkgcmVtZW1iZXIgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IGRlc2lnbmVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4gIE1vc3Qgb2YgdGhlIHRpbWUgaXQgaXMgdXNlZCBpbiB2YXJpb3VzIEFSTSBTb0NzLCBsaWtlIEFsbHdpbm5lciBhbmQgUm9ja2NoaXAuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYHN0bW1hY2AgZHJpdmVyIG5hdGl2ZWx5LCBidXQgaXMgdGhlcmUgc29tZSBraW5kIG9mIHZpcnR1YWwgcGxhdGZvcm0gd2hlcmUgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZT8KCkEga2V5IHRoaW5nIGlzIHRoYXQgdGhpcyBpcyB3aXRoaW4gdGhlICpzZWxmdGVzdCogY29kZSwgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFNlbGZ0ZXN0cyBhcmUgdHlwaWNhbGx5IHRyaWdnZXJlZCB0aHJvdWdoIHRvb2xzIGxpa2UgYGV0aHRvb2xgLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIgaGFzIHRvIHByb2JlLCBhbmQgaWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgc2VsZnRlc3Qgd29uJiMzOTt0IGV2ZW4gcnVuLgoKSG1tLCBtYXliZSB0aGVyZSYjMzk7cyBhIFBDSSB2ZXJzaW9uIG9mIGBzdG1tYWNgPyBUaGF0IG1pZ2h0IGJlIGEgY2x1ZS4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBQQ0kgdmVyc2lvbiBtaWdodCBvZmZlciBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoaXMgc2VsZnRlc3QgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgaW52b2tlZCBhbmQgaWYgaXQmIzM5O3MgZmVhc2libGUgdG8gdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3Q9MTA3PXN5bnRheCAoZS5nLiBmb3IgUENJIG1vZHVsZSk6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMDgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXHUwMDNjb3B0aW9uXHUwMDNlPVx1MDAzY1ZBTDFcdTAwM2UsXHUwMDNjVkFMMlx1MDAzZSwuLi5dXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTExMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVx0JiM0Mzs9IGR3bWFjLW1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZTo1NDpzdG1tYWMtcGNpLW9ianM6PSBzdG1tYWNfcGNpLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQxLVx0dW5zaWduZWQgaW50IGZ1bmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDU6c3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDctXHRzaXplX3QgbmZ1bmNzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy01MS1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxPXN0YXRpYyBjb25zdCBpbnQgYWRsbl90c25fbGFuZV9yZWdzW10gPSB7Nn07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaV9saXN0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhICpmdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgKmRtaV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OC1cdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz03ODY9c3RhdGljIGludCBlaGxfc2dtaWlfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODA2OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cdC5zZXR1cCA9IGVobF9zZ21paV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjItXHQuc2V0dXAgPSBlaGxfcmdtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTg0MT1zdGF0aWMgaW50IGVobF9wc2UwX3JnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODQ4OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQ5LVx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODUyPXN0YXRpYyBpbnQgZWhsX3BzZTBfc2dtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NzA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTBfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXHQuc2V0dXAgPSBlaGxfcHNlMF9zZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5OC1cdC5zZXR1cCA9IGVobF9wc2UxX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkwMT1zdGF0aWMgaW50IGVobF9wc2UxX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTE5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UxX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIwLVx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTQ0PXN0YXRpYyBpbnQgdGdsX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTUzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHRnbF9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2Ny1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NzA9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTgwOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4MS1cdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTg0PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk5NDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTFfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0My1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA0NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTQtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1OS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTIwOlx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTE0NTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNUTU1BQyBUZXN0aW5nIGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX3BjaS5jYCBkcml2ZXIuIFRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXM6IGhvdyBpcyB0aGlzIHRlc3RlZCBieSBTeXprYWxsZXI/IElzIGl0IGVtdWxhdGVkIHdpdGhpbiBRRU1VPyBObywgUUVNVSBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlIHRoZSBTVE1NQUMgUENJIGludGVyZmFjZSwgSSBrbm93IHRoYXQuIEJ1dCBgc3RtbWFjYCBpcyB1c2VkIGFjcm9zcyBtYW55IHBsYXRmb3Jtcywgc28gdGhlcmUgKm11c3QqIGJlIGEgd2F5IHRvIHRlc3QgaXQuIEkgcXVpY2tseSBkaXNtaXNzIHZpcnR1YWwgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCBhbmQgYG1hY3NlY2A7IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIHRob3NlIHdvdWxkbiYjMzk7dCBiZSByZWxldmFudC4KClRoZW4gSSByZWFsaXplZCBTeXprYWxsZXIgbWlnaHQgYmUgaGl0dGluZyBhIGxpbWl0YXRpb24uIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRpb24gb3Igc29tZSBraW5kIG9mIHZpcnR1YWwgZGV2aWNlLCB0aGUgZnV6emVyIHdvdWxkbiYjMzk7dCBoYXZlIGFjY2Vzcy4gV2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgYW5kIGEgUENJIGZ1enplciwgZG9lc24mIzM5O3QgaXQ/IFRoZSBQQ0kgb25lIHdvcmtzIGJ5IGludGVyY2VwdGluZyBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzIGFuZCB3cml0ZXMuCgpCdXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciAqZG9lc24mIzM5O3QqIGRvIGZ1bGwgUENJIGVtdWxhdGlvbiBpbnNpZGUgUUVNVSwgbGlrZSBpdCBkb2VzIHdpdGggVVNCIGFuZCBgdmhjaWAuIEl0IHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxsLCBkb2VzbiYjMzk7dCBpdD8gQnV0ICp0aGF0KiBkb2VzbiYjMzk7dCBlbXVsYXRlIERNQSBvciBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9uczsgaXQmIzM5O3MgbW9yZSBvZiBhIHByb2JlIHRyaWdnZXIuIFNvLCBob3cgYXJlIGNvbXBsZXggZHJpdmVycyBsaWtlIGBzdG1tYWNgIHRlc3RlZD8KCkFoLCByaWdodC4gSWYgaXQmIzM5O3MgcGFydCBvZiBhIHNlbGZ0ZXN0LCBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIGBldGh0b29sYC4gU28sIHRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgc2VsZnRlc3Qgd2UgY2FuIHJlYWNoLiBMZXQmIzM5O3MgY2hlY2sgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFllcywgaGVyZSB3ZSBhcmUsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgbG9va3MgbGlrZSBhIHNlbGZ0ZXN0LiBUaGlzIGlzIHRoZSBwYXRoIGZvcndhcmQhIEkmIzM5O2xsIGxvb2sgYXQgdGhhdCB0ZXN0IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOC0jaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU0MDpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTQ3PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTU0PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTYxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2NTpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1Njg9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIDAsIGR1bW15X3BvcnQsIDAsIH4wLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMwMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBzdG1tYWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIGBrZXlzYCBhbmQgYG1hc2tzYCB0byBlbXB0eSBkaWN0aW9uYXJpZXMsIGFuZCB0aGVuIHNldHRpbmcgYG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZmAuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsICYjMzQ7UmlnaHQsIHRoaXMgc2VlbXMgbGlrZSBhIGZpeCBmb3Igc29tZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aXRoaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YC4mIzM0OwoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCBgc3RtbWFjYCBpcyBhICpoYXJkd2FyZSogZHJpdmVyLCBteSBpbnN0aW5jdCBpcyAmIzM0O25vLCBub3QgZGlyZWN0bHkuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgaGFyZHdhcmUuJiMzNDsgVW5sZXNzLCBvZiBjb3Vyc2UsIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBoYXMgZm91bmQgYSBjbGV2ZXIgd2F5IHRvIGFjY2VzcyBpdC4gQnV0IHdhaXQsIEkgdGhvdWdodCBzeXprYWxsZXIgZGlkbiYjMzk7dCB0eXBpY2FsbHkgZG8gZnVsbCBoYXJkd2FyZSBlbXVsYXRpb24gd2l0aCwgc2F5LCBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0cyB0eXBpY2FsIE1PLgoKQnV0IGhvbGQgb24uLi5zeXprYWxsZXIgKmRpZCogcmVwb3J0IHRoaXMgYnVnLiBIb3cgaXMgdGhhdCBwb3NzaWJsZT8gTWF5YmUgaXQmIzM5O3MgdXNpbmcgc29tZSBzb3J0IG9mIHZpcnR1YWwgaGFyZHdhcmUgdHJpY2suIEhtbW0sIGNvdWxkIGl0IGJlIGB2aGNpYCBvciBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhpcyBpcyBkZWZpbml0ZWx5IHN0bW1hYy4uLnNvIHRoYXQmIzM5O3Mgbm90IHRoZSBhbnN3ZXIuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBkcml2ZXIgY29tcG9uZW50IGludm9sdmVkLCBvciBpZiBzeXprYWxsZXIgaXMgc29tZWhvdyB0cmlnZ2VyaW5nIHRoaXMgcGF0aC4gVGhlbiBpdCBoaXRzIG1lLCBzeXprYWxsZXIgKmNhbiogdHJpZ2dlciBQQ0kgcHJvYmUgdXNpbmcgYHN5el9wY2lgIG9yIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi9iaW5kYC4KCkJ1dCwgdG8gZ2V0IHRvIHRoZSBzZWxmdGVzdHMsIEkga25vdyB0aGUgZHJpdmVyIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgYSBuZXRkZXYuIE5vdyB0aGF04oCZcyB0aGUgcmVhbCBxdWVzdGlvbi4gQ2FuIGBzdG1tYWNgIGFjdHVhbGx5IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSByZWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIG1vcmUgY2xlYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTg6c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMTI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE1Olx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTYtXHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0ODgKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBQcm9iZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3I7IHRoaXMgaXMgd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIGluaXRpYWxpemUgdGhlIFNUTU1BQyBkcml2ZXIgd2hlbiBpdCYjMzk7cyBpZGVudGlmaWVkIG9uIGEgUENJIGJ1cy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtIGZpcnN0LCBob3cgaXQgZmluZHMgdGhlIFNUTU1BQyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgUENJIHByb2JlIHByb2Nlc3M6IHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBtYXBwaW5nIEkvTyByZWdpb25zLCBhbmQgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgaW50ZXJydXB0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCB1c2VzIHRoZSBQQ0kgZGV2aWNlIElEIHRhYmxlIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBTVE1NQUMgY2hpcC4gQW55IGNsZXZlciB0cmlja3MgaW4gdGhlcmUgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCB2YXJpYW50cz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWNjb3VudGVkIGZvciwgYW5kIHdoZXJlPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiDigJMgaG93IG11Y2ggbWVtb3J5IGlzIGl0IHJlcXVlc3Rpbmc/IEhvdyBpcyBpdCBoYW5kbGluZyBETUE/IEFyZSB0aGVyZSBhbnkgRE1BIGNvaGVyZW50IG1lbW9yeSBhbGxvY2F0aW9ucz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgdGhlIFBDSSBidXMgaXRzZWxmLCBsaWtlIGJ1cyBtYXN0ZXJpbmcgb3IgbGF0ZW5jeSByZXF1aXJlbWVudHMsIGJlaW5nIGFkZHJlc3NlZD8gQW5kIGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByZXNvdXJjZSBjb25mbGljdHMgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5PwoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgaW50ZXJydXB0IHNldHVwLiBIb3cgaXMgdGhlIGludGVycnVwdCBiZWluZyBjb25maWd1cmVkPyBJcyBpdCB1c2luZyBNU0kgb3IgbGVnYWN5IGludGVycnVwdHM/IEFueSBpbnRlcnJ1cHQgbWFza2luZyBvciBzaGFyaW5nIGNvbnNpZGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVycyBvciBlZGdlLXRyaWdnZXJlZCBjb25zaWRlcmF0aW9ucyBmb3IgdGhpcyBoYXJkd2FyZT8gQW55IGFkdmFuY2VkIGNvbmZpZ3VyYXRpb25zIG9yIGNvbnNpZGVyYXRpb25zIGZvciBoYW5kbGluZyBpbnRlcnJ1cHQgY29hbGVzY2luZywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgaXQ/CgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIEhvdyBpcyB0aGUgTUFDIGFkZHJlc3MgYmVpbmcgZGVyaXZlZD8gQXJlIHRoZXJlIGFueSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIGhlcmU/IEhvdyYjMzk7cyB0aGUgY2xvY2sgc2V0dXAgaGFuZGxlZD8gSSYjMzk7bGwgYmUgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIHRoZSBwcm9wZXIgcG93ZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBvbiBhIG1vYmlsZSBvciBwb3dlci1zZW5zaXRpdmUgZGV2aWNlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgYW55IG9mIHRoZSByZXNvdXJjZSByZXF1ZXN0cyBmYWlsPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkLCBhbmQgYXJlIHRoZXkgcmVwb3J0ZWQgY29ycmVjdGx5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwIGlmIHRoZSBwcm9iZSBmYWlscyBtaWR3YXk/IEFueSBjaGFuY2VzIGZvciBhIGJ1ZmZlciBvdmVyZmxvdz8KCknigJltIGV4cGVjdGluZyB0byBzZWUgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBoZXJlLCBidXQgSSYjMzk7bSBlYWdlciB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE4Olx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIDExOTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gMTIyOlx0XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4gMTIzOlx0XHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcbiAxMjQ6XHRcdGludCByZXQ7XG4gMTI1Olx0XHRpbnQgaTtcbiAxMjY6XHRcbiAxMjc6XHRcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDEyODpcdFx0aWYgKCFwbGF0KVxuIDEyOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzA6XHRcbiAxMzE6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMzI6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKCpwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEpLFxuIDEzMzpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiAxMzQ6XHRcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuIDEzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzY6XHRcbiAxMzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDEzODpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqcGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxuIDEzOTpcdFx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIDE0MDpcdFx0aWYgKCFwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZylcbiAxNDE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTQyOlx0XG4gMTQzOlx0XHQvKiBFbmFibGUgcGNpIGRldmljZSAqL1xuIDE0NDpcdFx0cmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDE0NTpcdFx0aWYgKHJldCkge1xuIDE0NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxuXCYjMzQ7LFxuIDE0NzpcdFx0XHRcdF9fZnVuY19fKTtcbiAxNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIGRldmljZSAqL1xuIDE1MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiAxNTM6XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMClcbiAxNTQ6XHRcdFx0XHRjb250aW51ZTtcbiAxNTU6XHRcdFx0cmVzLmFkZHIgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCBpLCBTVE1NQUNfUkVTT1VSQ0VfTkFNRSk7XG4gMTU2Olx0XHRcdGlmIChJU19FUlIocmVzLmFkZHIpKVxuIDE1NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcy5hZGRyKTtcbiAxNTg6XHRcdFx0YnJlYWs7XG4gMTU5Olx0XHR9XG4gMTYwOlx0XG4gMTYxOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAxNjI6XHRcbiAxNjM6XHRcdHJldCA9IGluZm8tXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0cmVzLndvbF9pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjg6XHRcdHJlcy5pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjk6XHRcbiAxNzA6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXRzb2VlID0gMTtcbiAxNzE6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZW1yeHBlZSA9IDE7XG4gMTcyOlx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VtZXN0ZWUgPSAxO1xuIDE3MzpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXJ4ZWUgPSAxO1xuIDE3NDpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXR4ZWUgPSAxO1xuIDE3NTpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlZXBzaSA9IDE7XG4gMTc2Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VlZHBwID0gMTtcbiAxNzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXBydHllbiA9IDE7XG4gMTc4Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2V0bW91dGVuID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdHBsYXQtXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuIDE4MTpcdFx0cGxhdC1cdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG4gMTg0Olx0fVxuIDE4NTpcdFxuIDE4NjpcdC8qKlxuIDE4NzpcdCAqIHN0bW1hY19wY2lfcmVtb3ZlXG4gMTg4Olx0ICpcbiAxODk6XHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcbiAxOTA6XHQgKiBEZXNjcmlwdGlvbjogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgbWFpbiB0byBmcmVlIHRoZSBuZXQgcmVzb3VyY2VzLlxuIDE5MTpcdCAqL1xuIDE5MjpcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDE5MzpcdHtcbiAxOTQ6XHRcdHN0bW1hY19kdnJfcmVtb3ZlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cbiAxOTg6XHQjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXHRcdDB4MDcwMFxuIDE5OTpcdFxuIDIwMDpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TVE1NQUNfU1RNTUFDXHRcdDB4MTEwOFxuIDIwMTpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFx0XHQweDcxMDJcbiAyMDI6XHRcbiAyMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XG4gMjA0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuIDIwNTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG4gMjA2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShTWU5PUFNZUywgR01BQzVfSUQsIFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXG4gMjA3Olx0XHR7fVxuIDIwODpcdH07XG4gMjA5Olx0XG4gMjEwOlx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XG4gMjExOlx0XG4gMjEyOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuIDIxMzpcdFx0Lm5hbWUgPSBTVE1NQUNfUkVTT1VSQ0VfTkFNRSxcbiAyMTQ6XHRcdC5pZF90YWJsZSA9IHN0bW1hY19pZF90YWJsZSxcbiAyMTU6XHRcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG4gMjE2Olx0XHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXG4gMjE3Olx0XHQuZHJpdmVyICAgICAgICAgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzM2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGYWxzZWx5IFRyaWdnZXJlZCBEcml2ZXIgUHJvYmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHN0bW1hY2AgZHJpdmVyIHdvcmtzLCBzcGVjaWZpY2FsbHkgdGhlIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyB1c2luZyBgc3RtbWFjX2R2cl9wcm9iZWAsIGFuZCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgdnVsbmVyYWJpbGl0eSB0byBhdHRhY2tzIHRocm91Z2ggdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCB0aGF0IFN5emthbGxlciBpcyB1c2luZy4gSSBrbm93IHRoYXQgYHN5el9wY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgaW4gdGhpcyBjYXNlLCBgMHgwNzAwYCBhbmQgYDB4MTEwOGAsIHdoaWNoIGhhcHBlbnMgdG8gbWF0Y2ggdGhlIGBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNgIGRlZmluaXRpb24uCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBoYXBwZW5zIHdoZW4gU3l6a2FsbGVyIGluamVjdHMgdGhpcyAmIzM0O2Zha2UmIzM0OyBkZXZpY2U/IEJlY2F1c2UgYHN0bW1hY19wY2lfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhhdCBpbiB0dXJuICp3aWxsKiBjYWxsIGBzdG1tYWNfZHZyX3Byb2JlYC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGBzdG1tYWNfZHZyX3Byb2JlYCBpcyByb2J1c3QgZW5vdWdoLiBEb2VzIGl0IGNvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnRoZXJlKj8gSWYgaXQgZG9lc24mIzM5O3QsIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBwcm9iaW5nIG9uIG5vbi1leGlzdGVudCBoYXJkd2FyZS4gVGltZSB0byBnbyBvdmVyIGBzdG1tYWNfZHZyX3Byb2JlYCYjMzk7cyBzb3VyY2UgY29kZSwgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYz00Mj1zdGF0aWMgaW50IGludGVsX2V0aF9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYzoxMTg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNDItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yOTM9c3RhdGljIGludCBtb3RvcmNvbW1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNTk6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM9MTQ3PXN0YXRpYyBpbnQgc3BhY2VtaXRfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM6MjA3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYz01MjU9c3RhdGljIGludCBzdG0zMl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo1Nzk6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XHQvKiB0aGUgTUFDIGlzIHJ1bnRpbWUgc3VzcGVuZGVkIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKSwgc28gd2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDk6XHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XHRlcnIgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNS1cdFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc4OT1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NzkxOnN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5Mi1cdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA5My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA5NDogKiBzdG1tYWNfZHZyX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTUtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDM6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTA0LVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE0Olx0cmV0ID0gX19zdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwbGF0X2RhdC1cdTAwM2VleGl0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODExOS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg0Nj1pbnQgc3RtbWFjX3BsdGZyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODU1Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAuIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGhhcmR3YXJlIGlzIGlkZW50aWZpZWQsIGluaXRpYWxpemVkLCBhbmQgdWx0aW1hdGVseSBicm91Z2h0IG9ubGluZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZXZpY2UgdHJlZSBwYXJzaW5nLCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgdGhlIGNsb2NrIGFuZCBQSFkgc2V0dXAsIHRoZSBETUEgY29uZmlndXJhdGlvbiAtIGV2ZXJ5dGhpbmcuIEtub3dpbmcgdGhlIGNvcmUgb2YgdGhpcyBwcm9iZSBmdW5jdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCBob3cgd2VsbCBpdCBoYW5kbGVzIGEgdmFyaWV0eSBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIHByb2Jpbmcgc2VxdWVuY2UgaGVyZSwgY2hlY2tpbmcgZm9yIGNvbXBhdGlibGUgZGV2aWNlIElEcywgbWFwcGluZyBtZW1vcnksIGFuZCBob3BlZnVsbHkgc29tZSBuaWNlIGVycm9yIGhhbmRsaW5nIHRvIGVuc3VyZSBhIHJvYnVzdCBzeXN0ZW0uIExldOKAmXMgc2VlIHdoYXQgc3VycHJpc2VzIGFyZSBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzc5MTpcdHN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbjc3OTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuNzc5MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG43Nzk0Olx0e1xuNzc5NTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMO1xuNzc5NjpcdFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2O1xuNzc5NzpcdFx0aW50IGksIHJldCA9IDA7XG43Nzk4Olx0XHR1OCByeHE7XG43Nzk5Olx0XG43ODAwOlx0XHRpZiAoIXBsYXRfZGF0LVx1MDAzZWRtYV9jZmcgfHwgIXBsYXRfZGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlcGJsKSB7XG43ODAxOlx0XHRcdGRldl9lcnIoZGV2aWNlLCBcJiMzNDtpbnZhbGlkIERNQSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbjc4MDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODAzOlx0XHR9XG43ODA0Olx0XG43ODA1Olx0XHRuZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZGV2aWNlLCBzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSxcbjc4MDY6XHRcdFx0XHRcdCAgICAgICBNVExfTUFYX1RYX1FVRVVFUywgTVRMX01BWF9SWF9RVUVVRVMpO1xuNzgwNzpcdFx0aWYgKCFuZGV2KVxuNzgwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjc4MDk6XHRcbjc4MTA6XHRcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldmljZSk7XG43ODExOlx0XG43ODEyOlx0XHRwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG43ODEzOlx0XHRwcml2LVx1MDAzZWRldmljZSA9IGRldmljZTtcbjc4MTQ6XHRcdHByaXYtXHUwMDNlZGV2ID0gbmRldjtcbjc4MTU6XHRcbjc4MTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpJiM0MzsmIzQzOylcbjc4MTc6XHRcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMucnhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xuNzgxODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVRMX01BWF9UWF9RVUVVRVM7IGkmIzQzOyYjNDM7KSB7XG43ODE5Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcbjc4MjA6XHRcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xuNzgyMTpcdFx0fVxuNzgyMjpcdFxuNzgyMzpcdFx0cHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XG43ODI0Olx0XHRcdGRldm1fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoZGV2aWNlLCBzdHJ1Y3Qgc3RtbWFjX3BjcHVfc3RhdHMpO1xuNzgyNTpcdFx0aWYgKCFwcml2LVx1MDAzZXhzdGF0cy5wY3B1X3N0YXRzKVxuNzgyNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjc4Mjc6XHRcbjc4Mjg6XHRcdHN0bW1hY19zZXRfZXRodG9vbF9vcHMobmRldik7XG43ODI5Olx0XHRwcml2LVx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcbjc4MzA6XHRcdHByaXYtXHUwMDNlcGxhdCA9IHBsYXRfZGF0O1xuNzgzMTpcdFx0cHJpdi1cdTAwM2Vpb2FkZHIgPSByZXMtXHUwMDNlYWRkcjtcbjc4MzI6XHRcdHByaXYtXHUwMDNlZGV2LVx1MDAzZWJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJlcy1cdTAwM2VhZGRyO1xuNzgzMzpcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlbXVsdGlfbXNpX2VuID1cbjc4MzQ6XHRcdFx0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKTtcbjc4MzU6XHRcbjc4MzY6XHRcdHByaXYtXHUwMDNlZGV2LVx1MDAzZWlycSA9IHJlcy1cdTAwM2VpcnE7XG43ODM3Olx0XHRwcml2LVx1MDAzZXdvbF9pcnEgPSByZXMtXHUwMDNld29sX2lycTtcbjc4Mzg6XHRcdHByaXYtXHUwMDNlc2Z0eV9pcnEgPSByZXMtXHUwMDNlc2Z0eV9pcnE7XG43ODM5Olx0XG43ODQwOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcbjc4NDE6XHRcdFx0cmV0ID0gc3RtbWFjX21zaV9pbml0KHByaXYsIHJlcyk7XG43ODQyOlx0XHRcdGlmIChyZXQpXG43ODQzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjc4NDQ6XHRcdH1cbjc4NDU6XHRcbjc4NDY6XHRcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cdTAwM2VtYWMpKVxuNzg0NzpcdFx0XHRldGhfaHdfYWRkcl9zZXQocHJpdi1cdTAwM2VkZXYsIHJlcy1cdTAwM2VtYWMpO1xuNzg0ODpcdFxuNzg0OTpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cdTAwM2VkZXYpO1xuNzg1MDpcdFxuNzg1MTpcdFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cbjc4NTI6XHRcdHN0bW1hY192ZXJpZnlfYXJncygpO1xuNzg1MzpcdFxuNzg1NDpcdFx0cHJpdi1cdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XG43ODU1Olx0XHRpZiAoIXByaXYtXHUwMDNlYWZfeGRwX3pjX3Fwcylcbjc4NTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODU3Olx0XG43ODU4Olx0XHQvKiBBbGxvY2F0ZSB3b3JrcXVldWUgKi9cbjc4NTk6XHRcdHByaXYtXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcJiMzNDtzdG1tYWNfd3FcJiMzNDspO1xuNzg2MDpcdFx0aWYgKCFwcml2LVx1MDAzZXdxKSB7XG43ODYxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbjc4NjI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjc4NjM6XHRcdFx0Z290byBlcnJvcl93cV9pbml0O1xuNzg2NDpcdFx0fVxuNzg2NTpcdFxuNzg2NjpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlc2VydmljZV90YXNrLCBzdG1tYWNfc2VydmljZV90YXNrKTtcbjc4Njc6XHRcbjc4Njg6XHRcdHRpbWVyX3NldHVwKFx1MDAyNnByaXYtXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XG43ODY5Olx0XG43ODcwOlx0XHQvKiBPdmVycmlkZSB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzIGlmIHN1cHBsaWVkIFhYWCBDUlMgWFhYXG43ODcxOlx0XHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXG43ODcyOlx0XHQgKi9cbjc4NzM6XHRcdGlmICgocGh5YWRkciBcdTAwM2U9IDApIFx1MDAyNlx1MDAyNiAocGh5YWRkciBcdTAwM2M9IDMxKSlcbjc4NzQ6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9hZGRyID0gcGh5YWRkcjtcbjc4NzU6XHRcbjc4NzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCkge1xuNzg3NzpcdFx0XHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODc4Olx0XHRcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg3OTpcdFx0XHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXG43ODgwOlx0XHRcdCAqIGFzc2VydCAmIzQzOyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cbjc4ODE6XHRcdFx0ICovXG43ODgyOlx0XHRcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxuNzg4MzpcdFx0XHRcdHJlc2V0X2NvbnRyb2xfcmVzZXQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg4NDpcdFx0fVxuNzg4NTpcdFxuNzg4NjpcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX2FoYl9yc3QpO1xuNzg4NzpcdFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXG43ODg4Olx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O3VuYWJsZSB0byBicmluZyBvdXQgb2YgYWhiIHJlc2V0OiAlcGVcXG5cJiMzNDssXG43ODg5Olx0XHRcdFx0RVJSX1BUUihyZXQpKTtcbjc4OTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNDUKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIG1vcmUgb2YgdGhlIGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHdlIHdlcmUgbG9va2luZyBhdCB0aGF0IGVhcmxpZXIsIGFuZCBJIG5lZWQgYSBiZXR0ZXIgZ3Jhc3Agb24gZXhhY3RseSBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGluaXRpYWwgcHJvYmUgYW5kIHNldHVwLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSB2YXJpb3VzIGRldmljZSByZXNvdXJjZXMuIE1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgYWxsb2NhdGlvbiwgY2xvY2sgZW5hYmxlbWVudCDigJMgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGF0IGFsbCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBvYnNlcnZlIGFsbCB0aGUgZGlmZmVyZW50IGVycm9yIHBhdGhzIGl0IGNvdWxkIHRha2UgZHVyaW5nIHRoZSBpbml0aWFsIHByb2JpbmcgcGhhc2UuIFdoYXQgZG9lcyBpdCBkbyBpZiBpdCBjYW4mIzM5O3QgbWFwIHRoZSByZWdpc3RlcnMgY29ycmVjdGx5PyBXaGF0IGhhcHBlbnMgaWYgdGhlIGludGVycnVwdHMgZG9uJiMzOTt0IHJlZ2lzdGVyPyBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGVkZ2UgY2FzZXMgaXMganVzdCBhcyBpbXBvcnRhbnQgYXMgdGhlIGhhcHB5IHBhdGguIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgZHJpdmVyJiMzOTtzIGxpZmVjeWNsZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXQgbGluZSBieSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODkxOlx0XHQvKiBXYWl0IGEgYml0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi9cbjc4OTI6XHRcdHVkZWxheSgxMCk7XG43ODkzOlx0XG43ODk0Olx0XHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cbjc4OTU6XHRcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xuNzg5NjpcdFx0aWYgKHJldClcbjc4OTc6XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzg5ODpcdFxuNzg5OTpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43OTAwOlx0XHQgKi9cbjc5MDE6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43OTAyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc5MDM6XHRcbjc5MDQ6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzkwNTpcdFxuNzkwNjpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43OTA3Olx0XG43OTA4Olx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc5MDk6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzkxMDpcdFxuNzkxMTpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTEyOlx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkxMzpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MTQ6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MTU6XHRcbjc5MTY6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkxNzpcdFx0aWYgKCFyZXQpIHtcbjc5MTg6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkxOTpcdFx0fVxuNzkyMDpcdFxuNzkyMTpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTIyOlx0XG43OTIzOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkyNDpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MjU6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MjY6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTI3Olx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTI4Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5Mjk6XHRcdH1cbjc5MzA6XHRcbjc5MzE6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkzMjpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkzMzpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkzNDpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTM1Olx0XHQgKi9cbjc5MzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTM3Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5Mzg6XHRcdGVsc2Vcbjc5Mzk6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5NDA6XHRcbjc5NDE6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5NDI6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTQzOlx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTQ0Olx0XHRcdGlmICghcmV0KSB7XG43OTQ1Olx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzk0NjpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTQ3Olx0XG43OTQ4Olx0XHRcdFx0Lypcbjc5NDk6XHRcdFx0XHQgKiBJZiBtb3JlIHRoYW4gMzIgYml0cyBjYW4gYmUgYWRkcmVzc2VkLCBtYWtlIHN1cmUgdG9cbjc5NTA6XHRcdFx0XHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxuNzk1MTpcdFx0XHRcdCAqL1xuNzk1MjpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQpKVxuNzk1MzpcdFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlZWFtZSA9IHRydWU7XG43OTU0Olx0XHRcdH0gZWxzZSB7XG43OTU1Olx0XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuNzk1NjpcdFx0XHRcdGlmIChyZXQpIHtcbjc5NTc6XHRcdFx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0ZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXG5cJiMzNDspO1xuNzk1ODpcdFx0XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzk1OTpcdFx0XHRcdH1cbjc5NjA6XHRcbjc5NjE6XHRcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcbjc5NjI6XHRcdFx0fVxuNzk2MzpcdFx0fVxuNzk2NDpcdFxuNzk2NTpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xuNzk2NjpcdFx0bmRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xuNzk2NzpcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxuNzk2ODpcdFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xuNzk2OTpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuNzk3MDpcdFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpIHtcbjc5NzE6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbjc5NzI6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2Vod192bGFuX2VuID0gdHJ1ZTtcbjc5NzM6XHRcdH1cbjc5NzQ6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XG43OTc1Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuNzk3NjpcdFx0XHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcbjc5Nzc6XHRcdH1cbjc5Nzg6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxpbnMpXG43OTc5Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XG43OTgwOlx0I2VuZGlmXG43OTgxOlx0XHRwcml2LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xuNzk4MjpcdFxuNzk4MzpcdFx0cHJpdi1cdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XG43OTg0Olx0XG43OTg1Olx0XHQvKiBJbml0aWFsaXplIFJTUyAqL1xuNzk4NjpcdFx0cnhxID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG43OTg3Olx0XHRuZXRkZXZfcnNzX2tleV9maWxsKHByaXYtXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXHUwMDNlcnNzLmtleSkpO1xuNzk4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXJzcy50YWJsZSk7IGkmIzQzOyYjNDM7KVxuNzk4OTpcdFx0XHRwcml2LVx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XG43OTkwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHN0bW1hY19od19pbml0IEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyBhcmUgYmVpbmcgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIFNUTU1BQyYjMzk7cyBzcGVjaWZpYyBvcGVyYXRpb25hbCBtb2RlIGFuZCB0aGUgZXhwZWN0ZWQgZGF0YXBhdGguIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcyByZWxhdGVkIHRvIGNsb2NrIGdhdGluZywgUEhZIGluaXRpYWxpemF0aW9uLCBETUEgZW5naW5lIHNldHVwIChkZXNjcmlwdG9ycywgYnVyc3Qgc2l6ZXMsIHRocmVzaG9sZHMpLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFzIHRoZXJlIGFyZSBvZnRlbiBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBzZXR0aW5ncy4gQW55IHVuZXhwZWN0ZWQgcmVnaXN0ZXIgdmFsdWVzIG9yIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBjb3VsZCBoaW50IGF0IHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciYjMzk7cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYW55IG5lY2Vzc2FyeSBwb3dlci11cCBzZXF1ZW5jZXMgY29ycmVjdGx5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIFBIWSBvciBpbnRlcm5hbCBjbG9ja3MsIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgdGhhdCB0aGUgaW5pdGlhbCBoYXJkd2FyZSBzdGF0ZSBpcyBjb2hlcmVudCBhbmQgcmVhZHkgZm9yIHRoZSBNQUMmIzM5O3Mgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNjA9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTU6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzk2LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAyOnN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTE9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg5NC1cdC8qIEluaXQgTUFDIGFuZCBnZXQgdGhlIGNhcGFiaWxpdGllcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODk1Olx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4OTYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTEzMgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggYHN0bW1hY19od19pbml0YC4KCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgc3RtbWFjX2h3X2luaXRgKioKCkFscmlnaHQsIGRpdmluZyBpbnRvIGBzdG1tYWNfaHdfaW5pdGAuIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciB0YWtlcyBwbGFjZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIGEgaGlnaC1sZXZlbCBmdW5jdGlvbiB0aGF0IGNhbGxzIHNldmVyYWwgb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIG9yIGlzIGl0IGEgZGVlcCBkaXZlIGludG8gdGhlIHJlZ2lzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24/IEnigJltIGJldHRpbmcgb24gdGhlIGZvcm1lciwgYnV0IHlvdSBuZXZlciBrbm93LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgaWYgaXQgaGFuZGxlcyB0aGUgY2xvY2sgc2V0dXAsIERNQSBjb25maWd1cmF0aW9uLCBNQUMgYWRkcmVzcyBwcm9ncmFtbWluZywgYW5kIGludGVycnVwdCBlbmFibGluZy4gVGhlIHBvd2VyIG1hbmFnZW1lbnQgc2VxdWVuY2Ugd2lsbCBiZSBpbXBvcnRhbnQgdG9vLiBJIGFudGljaXBhdGUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBoZXJlLCB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgU1RNTUFDIGhhcmR3YXJlIHJldmlzaW9uIGFuZCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBhc3NlZCBpbiBhdCBib290LiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRvIGVuc3VyZSB0aGlzIHJvdXRpbmUgbGVhdmVzIHRoZSBoYXJkd2FyZSBpbiBhIGRlZmluZWQsIG9wZXJhdGlvbmFsIHN0YXRlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZSBhdXRob3IgYXBwcm9hY2hlZCB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NDAyOlx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG43NDAzOlx0e1xuNzQwNDpcdFx0aW50IHJldDtcbjc0MDU6XHRcbjc0MDY6XHRcdC8qIGR3bWFjLXN1bjhpIG9ubHkgd29yayBpbiBjaGFpbiBtb2RlICovXG43NDA3Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19IQVNfU1VOOEkpXG43NDA4Olx0XHRcdGNoYWluX21vZGUgPSAxO1xuNzQwOTpcdFx0cHJpdi1cdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xuNzQxMDpcdFxuNzQxMTpcdFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cbjc0MTI6XHRcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XG43NDEzOlx0XHRpZiAocmV0KVxuNzQxNDpcdFx0XHRyZXR1cm4gcmV0O1xuNzQxNTpcdFxuNzQxNjpcdFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xuNzQxNzpcdFx0cHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XG43NDE4Olx0XHRpZiAocHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCkge1xuNzQxOTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7RE1BIEhXIGNhcGFiaWxpdHkgcmVnaXN0ZXIgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0MjA6XHRcbjc0MjE6XHRcdFx0LyogV2UgY2FuIG92ZXJyaWRlIHNvbWUgZ21hYy9kbWEgY29uZmlndXJhdGlvbiBmaWVsZHM6IGUuZy5cbjc0MjI6XHRcdFx0ICogZW5oX2Rlc2MsIHR4X2NvZSAoZS5nLiB0aGF0IGFyZSBwYXNzZWQgdGhyb3VnaCB0aGVcbjc0MjM6XHRcdFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XG43NDI0Olx0XHRcdCAqIHJlZ2lzdGVyIChpZiBzdXBwb3J0ZWQpLlxuNzQyNTpcdFx0XHQgKi9cbjc0MjY6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWVuaF9kZXNjID0gcHJpdi1cdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xuNzQyNzpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcG10ID0gcHJpdi1cdTAwM2VkbWFfY2FwLnBtdF9yZW1vdGVfd2FrZV91cCBcdTAwMjZcdTAwMjZcbjc0Mjg6XHRcdFx0XHRcdCEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XG43NDI5Olx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikge1xuNzQzMDpcdFx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cbjc0MzE6XHRcdFx0XHRcdFx0KEJJVChwcml2LVx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikgXHUwMDNjXHUwMDNjIDUpO1xuNzQzMjpcdFx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlbWNhc3RfYml0c19sb2cyID1cbjc0MzM6XHRcdFx0XHRcdFx0aWxvZzIocHJpdi1cdTAwM2Vody1cdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMpO1xuNzQzNDpcdFx0XHR9XG43NDM1Olx0XG43NDM2Olx0XHRcdC8qIFRYQ09FIGRvZXNuJiMzOTt0IHdvcmsgaW4gdGhyZXNoIERNQSBtb2RlICovXG43NDM3Olx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZm9yY2VfdGhyZXNoX2RtYV9tb2RlKVxuNzQzODpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UgPSBmYWxzZTtcbjc0Mzk6XHRcdFx0ZWxzZVxuNzQ0MDpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAudHhfY29lO1xuNzQ0MTpcdFxuNzQ0MjpcdFx0XHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cbjc0NDM6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2U7XG43NDQ0Olx0XG43NDQ1Olx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUyKVxuNzQ0NjpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xuNzQ0NzpcdFx0XHRlbHNlIGlmIChwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUxKVxuNzQ0ODpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xuNzQ0OTpcdFxuNzQ1MDpcdFx0XHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XG43NDUxOlx0XHR9IGVsc2Uge1xuNzQ1MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Tm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NTM6XHRcdH1cbjc0NTQ6XHRcbjc0NTU6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lKSB7XG43NDU2Olx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2U7XG43NDU3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1ODpcdFx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxuNzQ1OTpcdFx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtDT0UgVHlwZSAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtKTtcbjc0NjA6XHRcdH1cbjc0NjE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lKVxuNzQ2MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VFggQ2hlY2tzdW0gaW5zZXJ0aW9uIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDYzOlx0XG43NDY0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCkge1xuNzQ2NTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7V2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NjY6XHRcdFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShwcml2LVx1MDAzZWRldmljZSwgMSk7XG43NDY3Olx0XHRcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXHUwMDNlZGV2aWNlLCBwcml2LVx1MDAzZXdvbF9pcnEpO1xuNzQ2ODpcdFx0fVxuNzQ2OTpcdFxuNzQ3MDpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzIFx1MDAyNlx1MDAyNlxuNzQ3MTpcdFx0ICAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcykge1xuNzQ3MjpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0NzM6XHRcdFx0XHQgXCYjMzQ7TnVtYmVyIG9mIFJ4IHF1ZXVlcyAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXG5cJiMzNDssXG43NDc0Olx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlKTtcbjc0NzU6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcbjc0NzY6XHRcdH1cbjc0Nzc6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcyBcdTAwMjZcdTAwMjZcbjc0Nzg6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMpIHtcbjc0Nzk6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXZpY2UsXG43NDgwOlx0XHRcdFx0IFwmIzM0O051bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ4MTpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSk7XG43NDgyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXM7XG43NDgzOlx0XHR9XG43NDg0Olx0XG43NDg1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSBcdTAwMjZcdTAwMjZcbjc0ODY6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfZmlmb19zaXplIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplKSB7XG43NDg3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ4ODpcdFx0XHRcdCBcJiMzNDtSeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ4OTpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfZmlmb19zaXplKTtcbjc0OTA6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemU7XG43NDkxOlx0XHR9XG43NDkyOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSBcdTAwMjZcdTAwMjZcbjc0OTM6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfZmlmb19zaXplIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplKSB7XG43NDk0Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ5NTpcdFx0XHRcdCBcJiMzNDtUeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ5NjpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfZmlmb19zaXplKTtcbjc0OTc6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemU7XG43NDk4Olx0XHR9XG43NDk5Olx0XG43NTAwOlx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXZsYW5fZmFpbF9xX2VuID1cbjc1MDE6XHRcdFx0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVkxBTl9GQUlMX1FfRU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTVE1NQUMgSW5pdGlhbGl6YXRpb24gaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uIHdvcmtzLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCBraWNrcyBpbiwgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXR5IHJlZ2lzdGVyLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0FoYSEgVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0b3IgbWlnaHQgdHJpcCB1cyB1cC4mIzM0OyBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudCDigJMgd2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzIHRoZSBjYXNlIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzeXprYWxsZXIgYW5kIGl0cyBlbXVsYXRlZCBlbnZpcm9ubWVudCDigJMgdGhhdCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHJlYWQgd2lsbCBsaWtlbHkgcmV0dXJuIGdhcmJhZ2UuIEVpdGhlciB6ZXJvLCBvciBhIHBvdGVudGlhbGx5IHJhbmRvbSB2YWx1ZSBvZiAweGZmZmZmZmZmLgoKTm93LCBJJiMzOTttIHJlbWVtYmVyaW5nIHN5emthbGxlciYjMzk7cyBgc3l6X3BjaWAgY2FsbHMuIEl0IGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUgdGhlIFBDSSBkZXZpY2UmIzM5O3MgbWVtb3J5IHNwYWNlOyBpdCBqdXN0IG1hcHMgKnNvbWUqIGR1bW15IG1lbW9yeSBmb3IgdGhvc2UgQkFScyAoQmFzZSBBZGRyZXNzIFJlZ2lzdGVycykuIFNvLCByZWFkaW5nIGZyb20gdGhvc2UgQkFScyBpcyBnb2luZyB0byBnaXZlIHVzIGJhY2sgd2hhdGV2ZXImIzM5O3MgaW4gdGhhdCBkdW1teSBtZW1vcnkgc3BhY2UsIHByb2JhYmx5IHplcm8sIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIGlmIHdlIGdldCBhIHplcm8gYmFjaywgd2UgYXJlIGdvaW5nIHRvIHNldCBgcHJpdi0mZ3Q7aHdfY2FwX3N1cHBvcnRgIHRvIHplcm8sIHdoaWNoIG1lYW5zIHdlIGFyZSBnb2luZyB0byBjb250aW51ZSBkb3duIHRoZSBwYXRoIG9mIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgoKQnV0IHRoZW4sIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgc3RtbWFjX2R2cl9wcm9iZWAsIHdoaWNoIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IERvZXMgdGhlIGxhY2sgb2YgcmVhbCBoYXJkd2FyZSBjYXVzZSB0aGUgZHJpdmVyIHByb2JlIHRvIGZhaWw/IERvZXMgaXQgY2hlY2sgdGhlc2UgdmFsdWVzPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHJlYWxseSB0aGVyZS4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gYHN0bW1hY19od2lmX2luaXRgIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzE3OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD02OTc9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5ODppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDI9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDExLVx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQxMjpcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTMtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgaW5pdGlhbGl6ZWQuIFdoYXQgYXJlIHRoZSBrZXkgc3RlcHMgaW52b2x2ZWQ/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpbmdzIG1pZ2h0IGdvIHdyb25nLCBvciBwbGFjZXMgd2hlcmUgdGhlIGRyaXZlciBjb3VsZCBiZSBvcHRpbWl6ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMsIG9mIGNvdXJzZSDigJMgaG93IGl0IHRhbGtzIHRvIHRoZSBNQUMsIHdoYXQgcmVnaXN0ZXJzIGl0JiMzOTtzIHNldHRpbmcgdXAsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE1BIGVuZ2luZSBpZiBpdCBoYXMgb25lLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgdG9vLiBIb3cgcm9idXN0IGlzIHRoaXMgaW5pdGlhbGl6YXRpb24/IERvZXMgaXQgaGFuZGxlIHZhcmlvdXMgaGFyZHdhcmUgcmV2aXNpb25zIGdyYWNlZnVsbHk/IEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIGNsZWFyIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIHNvIEkgY2FuIG1lbnRhbGx5IG1hcCBpdCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgY29uc2lkZXJpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zOyBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgTUFDIGZvciBsb3ctcG93ZXIgc3RhdGVzLCBpZiBhcHBsaWNhYmxlPyBGaW5hbGx5LCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBtYWdpYyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLCB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgY291bGQgYmUgZWFzaWx5IG1pc3NlZCBhbmQgY2F1c2UgaXNzdWVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgaW5pdGlhbGl6YXRpb24gb3JkZXJzLCBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3ViLWNvbXBvbmVudHMgb2YgdGhlIGRyaXZlciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNzpcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAzMTg6XHR7XG4gMzE5Olx0XHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlO1xuIDMyMDpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAzMjE6XHRcdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xuIDMyMjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjO1xuIDMyMzpcdFx0Ym9vbCBuZWVkc19zZXR1cCA9IHRydWU7XG4gMzI0Olx0XHRpbnQgcmV0O1xuIDMyNTpcdFxuIDMyNjpcdFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuIDMyNzpcdFxuIDMyODpcdFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXG4gMzI5Olx0XHRwcml2LVx1MDAzZXN5bm9wc3lzX2lkID0gdmVyc2lvbi5zbnBzdmVyO1xuIDMzMDpcdFxuIDMzMTpcdFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXHUwMDNlZGV2aWNlLCBzaXplb2YoKm1hYyksIEdGUF9LRVJORUwpO1xuIDMzMjpcdFx0aWYgKCFtYWMpXG4gMzMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzNDpcdFxuIDMzNTpcdFx0LyogQ2hlY2sgZm9yIEhXIHNwZWNpZmljIHNldHVwIGZpcnN0ICovXG4gMzM2Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1hY19zZXR1cCkge1xuIDMzNzpcdFx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XG4gMzM4Olx0XHRcdGlmIChyZXQpXG4gMzM5Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzNDA6XHRcbiAzNDE6XHRcdFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcbiAzNDI6XHRcdH1cbiAzNDM6XHRcbiAzNDQ6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1hYy1cdTAwM2VpcnFfY3RybF9sb2NrKTtcbiAzNDU6XHRcbiAzNDY6XHRcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cbiAzNDc6XHRcbiAzNDg6XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDM0OTpcdFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xuIDM1MDpcdFx0aWYgKCFlbnRyeSkge1xuIDM1MTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLFxuIDM1MjpcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcblwmIzM0OyxcbiAzNTM6XHRcdFx0XHR2ZXJzaW9uLnNucHN2ZXIsIGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMsXG4gMzU0Olx0XHRcdFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xuIDM1NTpcdFxuIDM1NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcbiAzNTk6XHRcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cbiAzNjA6XHRcdG1hYy1cdTAwM2VkZXNjID0gbWFjLVx1MDAzZWRlc2MgPyA6IGVudHJ5LVx1MDAzZWRlc2M7XG4gMzYxOlx0XHRtYWMtXHUwMDNlZG1hID0gbWFjLVx1MDAzZWRtYSA/IDogZW50cnktXHUwMDNlZG1hO1xuIDM2MjpcdFx0bWFjLVx1MDAzZW1hYyA9IG1hYy1cdTAwM2VtYWMgPyA6IGVudHJ5LVx1MDAzZW1hYztcbiAzNjM6XHRcdG1hYy1cdTAwM2VwdHAgPSBtYWMtXHUwMDNlcHRwID8gOiBlbnRyeS1cdTAwM2Vod3RpbWVzdGFtcDtcbiAzNjQ6XHRcdG1hYy1cdTAwM2Vtb2RlID0gbWFjLVx1MDAzZW1vZGUgPyA6IGVudHJ5LVx1MDAzZW1vZGU7XG4gMzY1Olx0XHRtYWMtXHUwMDNldGMgPSBtYWMtXHUwMDNldGMgPyA6IGVudHJ5LVx1MDAzZXRjO1xuIDM2NjpcdFx0bWFjLVx1MDAzZW1tYyA9IG1hYy1cdTAwM2VtbWMgPyA6IGVudHJ5LVx1MDAzZW1tYztcbiAzNjc6XHRcdG1hYy1cdTAwM2Vlc3QgPSBtYWMtXHUwMDNlZXN0ID8gOiBlbnRyeS1cdTAwM2Vlc3Q7XG4gMzY4Olx0XHRtYWMtXHUwMDNldmxhbiA9IG1hYy1cdTAwM2V2bGFuID8gOiBlbnRyeS1cdTAwM2V2bGFuO1xuIDM2OTpcdFxuIDM3MDpcdFx0cHJpdi1cdTAwM2VodyA9IG1hYztcbiAzNzE6XHRcdHByaXYtXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cdTAwM2VyZWdzLmZwZV9yZWc7XG4gMzcyOlx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLnB0cF9vZmY7XG4gMzczOlx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLm1tY19vZmY7XG4gMzc0Olx0XHRtZW1jcHkoXHUwMDI2cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLCBlbnRyeS1cdTAwM2VwdHAsXG4gMzc1Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xuIDM3NjpcdFxuIDM3NzpcdFx0aWYgKGVudHJ5LVx1MDAzZWVzdClcbiAzNzg6XHRcdFx0cHJpdi1cdTAwM2Vlc3RhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgZW50cnktXHUwMDNlcmVncy5lc3Rfb2ZmO1xuIDM3OTpcdFxuIDM4MDpcdFx0LyogRW50cnkgZm91bmQgKi9cbiAzODE6XHRcdGlmIChuZWVkc19zZXR1cCkge1xuIDM4MjpcdFx0XHRyZXQgPSBlbnRyeS1cdTAwM2VzZXR1cChwcml2KTtcbiAzODM6XHRcdFx0aWYgKHJldClcbiAzODQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xuIDM4ODpcdFx0cHJpdi1cdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVx1MDAzZXF1aXJrcztcbiAzODk6XHRcbiAzOTA6XHRcdHJldHVybiAwO1xuIDM5MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpZ2dpbmcgaW50byBQb3RlbnRpYWwgYHN0bW1hY2AgRHJpdmVyIElzc3VlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgYSBwb3NzaWJsZSBmYWlsdXJlIHBvaW50LiBUaGUgcm91dGluZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBpcyByZXNwb25zaWJsZSBmb3IgZ3JhYmJpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24sIHdoaWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgYW5kIGhlcmUmIzM5O3MgdGhlIHJ1Yiwgd2hhdCBpZiBpdCByZXR1cm5zIHplcm8/IFRoYXQmIzM5O3Mgd2hlbiB0aGluZ3MgY291bGQgZ2V0IGludGVyZXN0aW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSB2ZXJzaW9uIHplcm8gY291bGQgcG9zc2libHkgY2F1c2UgaXNzdWVzIHdpdGggdGhlIGBzdG1tYWNfaHdpZl9maW5kYCBmdW5jdGlvbiwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBgc3RtbWFjX2h3aWZfZmluZGAgbWlnaHQgdGhlbiBmYWlsLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHRoZSBjb3JyZWN0IGhhcmR3YXJlIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgbG9naWMgb2YgYHN0bW1hY19od2lmX2ZpbmRgIGFuZCBgc3RtbWFjX2dldF92ZXJzaW9uYCwgZG91YmxlLWNoZWNraW5nIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZGVwZW5kZW5jaWVzIHRoZXJlLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBwbGF5aW5nIG5pY2VseSB0b2dldGhlciwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTE2PXN0cnVjdCBzdG1tYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIxOnN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzI2Olx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NDQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYHN0bW1hY19nZXRfdmVyc2lvbmAgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGNydWNpYWwgY29tcG9uZW50IGZvciBhbnkgbmV0d29ya2luZyBkZXZpY2UuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGRyaXZlciByZXBvcnRzIGl0cyBvd24gdmVyc2lvbiwgcGVyaGFwcyBmb3IgY29tcGF0aWJpbGl0eSBjaGVja3Mgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgb2J0YWluZWQsIHN0b3JlZCwgYW5kIHByZXNlbnRlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgU1RNTUFDIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBwcmV0dHkgZ29vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaGVyZSBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIEkgYW0gcmVhZHkgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igc3VidGxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBpcyByb2J1c3QsIGhhbmRsaW5nIGFueSBwb3NzaWJsZSBlcnJvcnMgZ3JhY2VmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIxOlx0c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiAgMjI6XHRcdFx0XHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXG4gIDIzOlx0e1xuICAyNDpcdFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbiAgMjU6XHRcdHVuc2lnbmVkIGludCB2ZXJzaW9uX29mZnNldDtcbiAgMjY6XHRcdHUzMiB2ZXJzaW9uO1xuICAyNzpcdFxuICAyODpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSAwO1xuICAyOTpcdFx0dmVyLVx1MDAzZWRldl9pZCA9IDA7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfTUFDMTAwKVxuICAzMjpcdFx0XHRyZXR1cm47XG4gIDMzOlx0XG4gIDM0Olx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQylcbiAgMzU6XHRcdFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDX1ZFUlNJT047XG4gIDM2Olx0XHRlbHNlXG4gIDM3Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcbiAgMzg6XHRcbiAgMzk6XHRcdHZlcnNpb24gPSByZWFkbChwcml2LVx1MDAzZWlvYWRkciAmIzQzOyB2ZXJzaW9uX29mZnNldCk7XG4gIDQwOlx0XHRpZiAodmVyc2lvbiA9PSAwKSB7XG4gIDQxOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtWZXJzaW9uIElEIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuICA0MjpcdFx0XHRyZXR1cm47XG4gIDQzOlx0XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXG5cJiMzNDssXG4gIDQ2Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbiksXG4gIDQ3Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xuICA0ODpcdFxuICA0OTpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG4gIDUwOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gIDUxOlx0XHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIHN0bW1hY19kd21hY19tb2RlX3F1aXJrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVx1MDAzZWh3O1xuICA1NzpcdFxuICA1ODpcdFx0aWYgKHByaXYtXHUwMDNlY2hhaW5fbW9kZSkge1xuICA1OTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q2hhaW4gbW9kZSBlbmFibGVkXFxuXCYjMzQ7KTtcbiAgNjA6XHRcdFx0cHJpdi1cdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfQ0hBSU5fTU9ERTtcbiAgNjE6XHRcdFx0bWFjLVx1MDAzZW1vZGUgPSBcdTAwMjZjaGFpbl9tb2RlX29wcztcbiAgNjI6XHRcdH0gZWxzZSB7XG4gIDYzOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtSaW5nIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gIDY0Olx0XHRcdHByaXYtXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX1JJTkdfTU9ERTtcbiAgNjU6XHRcdFx0bWFjLVx1MDAzZW1vZGUgPSBcdTAwMjZyaW5nX21vZGVfb3BzO1xuICA2NjpcdFx0fVxuICA2NzpcdH1cbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHN0bW1hY19kd21hYzFfcXVpcmtzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNzA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgVmVyc2lvbiBDaGVjayAmYW1wOyBIYXJkd2FyZSBJbnRlcmZhY2UgRGlzY292ZXJ5KioKCkFscmlnaHQsIHNvIGlmIHRoZSBzeXN0ZW0mIzM5O3Mgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDAsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGB2ZXItJmd0O3NucHN2ZXJgIGlzIGluaXRpYWxpemVkIHRvIDAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgYmFzZSBjb25kaXRpb24uIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgd2hlbiB3ZSB0aGVuIGNhbGwgdGhlIGBzdG1tYWNfaHdpZl9maW5kYCBmdW5jdGlvbiwgd2UmIzM5O3JlIHBhc3NpbmcgaW4gdGhhdCBgc25wc3ZlcmAgdmFyaWFibGUsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGhhcyBiZWVuIGRlbGliZXJhdGVseSBpbml0aWFsaXplZCB0byB6ZXJvLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRoaW5rIGFib3V0IGhvdyB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIHJvdXRpbmUgb3BlcmF0ZXMgb24gYSBuZXcsIHVuY29uZmlndXJlZCwgcG9zc2libHkgZXZlbiB1bmluaXRpYWxpemVkIGhhcmR3YXJlLiBJcyB0aGUgaW50ZW50aW9uIHRvIGhhdmUgYHN0bW1hY19od2lmX2ZpbmRgIGZpZ3VyZSBvdXQgdGhlIHZlcnNpb24sIG9yIGhhcyB0aGlzIGFscmVhZHkgYmVlbiBwcmUtZGV0ZXJtaW5lZD8gQW5kIGlmIGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGlzIHRoYXQgYXNzdW1lZCBpbml0aWFsaXphdGlvbiBzdWZmaWNpZW50IGZvciBjb3JyZWN0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgaW50ZXJmYWNlIHNldHVwPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhhdCB6ZXJvIHZhbHVlIGlzIGludGVycHJldGVkIHdpdGhpbiB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uIGl0c2VsZiwgc3BlY2lmaWNhbGx5LCBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2ZpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyOTQ6c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zNDgtXHQvKiBVc2Ugc3lub3BzeXNfaWQgdmFyIGJlY2F1c2Ugc29tZSBzZXR1cHMgY2FuIG92ZXJyaWRlIHRoaXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozNDk6XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzUwLVx0aWYgKCFlbnRyeSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RtbWFjX2h3aWZfZmluZGAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgc3RtbWFjX2h3aWZfZmluZGAuIEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGludm9sdmVkIGluIHByb2JpbmcgdGhlIGRldmljZSB0cmVlIG9yIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBvciBtYXliZSBldmVuIHVzaW5nIHBsYXRmb3JtIGRhdGEsIHRvIGlkZW50aWZ5IGFuZCBjb25maWd1cmUgdGhlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgaW5zdGFuY2UuIEkgYW50aWNpcGF0ZSBzZWVpbmcgbG9naWMgZm9yIHRyYXZlcnNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwb3NzaWJseSBpdGVyYXRpbmcgdGhyb3VnaCBhIGxpc3Qgb2YgcG90ZW50aWFsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgdXNpbmcgYSBtb3JlIGRpcmVjdCBtZXRob2QgaWYgdGhlIGhhcmR3YXJlIGlzIHRpZ2h0bHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUgLSB3aGF0IGhhcHBlbnMgaWYgaXQgZmFpbHMgdG8gZmluZCBhIHZhbGlkIGhhcmR3YXJlIGludGVyZmFjZT8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gU3BlY2lmaWMgZXJyb3IgY29kZXMgdGhhdCBhcmUgcmV0dXJuZWQ/IExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIGhvcGUgdGhlIG5hbWluZyBjb252ZW50aW9uIGhlcmUgaXMgaW50dWl0aXZlLCBnaXZlbiB0aGF0IHRoZXNlIGhhcmR3YXJlIGludGVyZmFjZXMgY2FuIGJlIGEgYml0IHRyaWNreS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuIDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRyZXR1cm4gTlVMTDtcbiAzMTU6XHR9XG4gMzE2Olx0XG4gMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uIGFuZCBQb3RlbnRpYWwgRGF0YSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgbG9naWMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiB0aGUgdmFyaWFibGUgYHNucHN2ZXJgIGlzIHplcm8sIHRoZW4gYW55IHZhbHVlIG9mIGBlbnRyeS0mZ3Q7bWluX2lkYCBncmVhdGVyIHRoYW4gemVybyB3aWxsIGF1dG9tYXRpY2FsbHkgc2F0aXNmeSB0aGUgY29uZGl0aW9uIGBzbnBzdmVyICZsdDsgZW50cnktJmd0O21pbl9pZGAuIFRoYXQmIzM5O3MganVzdCBiYXNpYyBhcml0aG1ldGljLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBjb2RlLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHRoZSBgc3RtbWFjX2h3YCBhcnJheS4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYXMgc29tZSBpbXBvcnRhbmNlIG9yIHJlbGV2YW5jZSBnaXZlbiBpdHMgcHJlc2VuY2UsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY29uZGl0aW9uYWwgc3RhdGVtZW50JiMzOTtzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGNvZGUgdG8gZXZhbHVhdGUgaXRzIHVzZSBhbmQgc2lnbmlmaWNhbmNlIGluIHJlbGF0aW9uIHRvIGBzbnBzdmVyYCBhbmQgYGVudHJ5LSZndDttaW5faWRgIC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3XFxbXFxdJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyNy1cdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjktXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDc5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfaHdgIEFycmF5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGFycmF5IGxpa2VseSBob2xkcyBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzIGFuZCBwb3RlbnRpYWxseSBiaXRmaWVsZCBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBjb250cm9sbGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIHBhdHRlcm5zOiBBcmUgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGdyb3VwZWQgYnkgZnVuY3Rpb24gKGUuZy4sIHRyYW5zbWl0LCByZWNlaXZlLCBjb250cm9sKT8gSXMgdGhlcmUgYW55IG9idmlvdXMgYWRkcmVzc2luZyBzY2hlbWUgdXNlZCB3aXRoaW4gdGhlIGFycmF5PyBEb2VzIGl0IGVtcGxveSBhbnkgbG9va3VwIHRhYmxlcyB0byB0cmFuc2xhdGUgYmV0d2VlbiBsb2dpY2FsIHJlZ2lzdGVyIG5hbWVzIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0aW5nIHRvIERNQSBzZXR1cCwgZGVzY3JpcHRvciByaW5nIGNvbnRyb2wsIGludGVycnVwdCBtYXNrcywgYW5kIFBIWSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbnMsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyB1c2VkIGZvciBlYWNoIGFycmF5IGVsZW1lbnTigJRhcmUgdGhleSBqdXN0IGludGVnZXJzIG9yIGN1c3RvbSBzdHJ1Y3RzIHJlZmxlY3RpbmcgbW9yZSBjb21wbGV4IHJlZ2lzdGVyIGxheW91dHM/IEFuZCBjcnVjaWFsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGRlZmluaXRpb25zIGFyZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zIChgcmVhZGxgLCBgd3JpdGVsYCwgZXRjLikuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGFycmF5JiMzOTtzIGNvbnRlbnRzIHRvIHRoZSBTVE1NQUMmIzM5O3MgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCB0aGUgbG93ZXN0IGxldmVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjg6XHR9IHN0bW1hY19od1tdID0ge1xuIDEyOTpcdFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xuIDEzMDpcdFx0e1xuIDEzMTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9NQUMxMDAsXG4gMTMyOlx0XHRcdC5taW5faWQgPSAwLFxuIDEzMzpcdFx0XHQucmVncyA9IHtcbiAxMzQ6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDM19YX09GRlNFVCxcbiAxMzU6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDM19YX09GRlNFVCxcbiAxMzY6XHRcdFx0fSxcbiAxMzc6XHRcdFx0LmRlc2MgPSBOVUxMLFxuIDEzODpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWMxMDBfZG1hX29wcyxcbiAxMzk6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjMTAwX29wcyxcbiAxNDA6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHdtYWMxMDAwX3B0cCxcbiAxNDE6XHRcdFx0LnB0cCA9IFx1MDAyNmR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzLFxuIDE0MjpcdFx0XHQubW9kZSA9IE5VTEwsXG4gMTQzOlx0XHRcdC50YyA9IE5VTEwsXG4gMTQ0Olx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDE0NTpcdFx0XHQuc2V0dXAgPSBkd21hYzEwMF9zZXR1cCxcbiAxNDY6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzFfcXVpcmtzLFxuIDE0NzpcdFx0fSwge1xuIDE0ODpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxuIDE0OTpcdFx0XHQubWluX2lkID0gMCxcbiAxNTA6XHRcdFx0LnJlZ3MgPSB7XG4gMTUxOlx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfR01BQzNfWF9PRkZTRVQsXG4gMTUyOlx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXG4gMTUzOlx0XHRcdH0sXG4gMTU0Olx0XHRcdC5kZXNjID0gTlVMTCxcbiAxNTU6XHRcdFx0LmRtYSA9IFx1MDAyNmR3bWFjMTAwMF9kbWFfb3BzLFxuIDE1NjpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWMxMDAwX29wcyxcbiAxNTc6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHdtYWMxMDAwX3B0cCxcbiAxNTg6XHRcdFx0LnB0cCA9IFx1MDAyNmR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzLFxuIDE1OTpcdFx0XHQubW9kZSA9IE5VTEwsXG4gMTYwOlx0XHRcdC50YyA9IE5VTEwsXG4gMTYxOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDE2MjpcdFx0XHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXG4gMTYzOlx0XHRcdC5xdWlya3MgPSBzdG1tYWNfZHdtYWMxX3F1aXJrcyxcbiAxNjQ6XHRcdH0sIHtcbiAxNjU6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4gMTY2Olx0XHRcdC5taW5faWQgPSAwLFxuIDE2NzpcdFx0XHQucmVncyA9IHtcbiAxNjg6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXG4gMTY5Olx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfR01BQzRfT0ZGU0VULFxuIDE3MDpcdFx0XHRcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcbiAxNzE6XHRcdFx0fSxcbiAxNzI6XHRcdFx0LmRlc2MgPSBcdTAwMjZkd21hYzRfZGVzY19vcHMsXG4gMTczOlx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzRfZG1hX29wcyxcbiAxNzQ6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNF9vcHMsXG4gMTc1Olx0XHRcdC52bGFuID0gXHUwMDI2ZHdtYWNfdmxhbl9vcHMsXG4gMTc2Olx0XHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4gMTc3Olx0XHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiAxNzg6XHRcdFx0Lm1vZGUgPSBOVUxMLFxuIDE3OTpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzRfdGNfb3BzLFxuIDE4MDpcdFx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbiAxODE6XHRcdFx0LmVzdCA9IFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXG4gMTgyOlx0XHRcdC5zZXR1cCA9IGR3bWFjNF9zZXR1cCxcbiAxODM6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzRfcXVpcmtzLFxuIDE4NDpcdFx0fSwge1xuIDE4NTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcbiAxODY6XHRcdFx0Lm1pbl9pZCA9IERXTUFDX0NPUkVfNF8wMCxcbiAxODc6XHRcdFx0LnJlZ3MgPSB7XG4gMTg4Olx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfR01BQzRfT0ZGU0VULFxuIDE4OTpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcbiAxOTA6XHRcdFx0XHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXG4gMTkxOlx0XHRcdFx0LmZwZV9yZWcgPSBcdTAwMjZkd21hYzVfZnBlX3JlZyxcbiAxOTI6XHRcdFx0fSxcbiAxOTM6XHRcdFx0LmRlc2MgPSBcdTAwMjZkd21hYzRfZGVzY19vcHMsXG4gMTk0Olx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzRfZG1hX29wcyxcbiAxOTU6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNDEwX29wcyxcbiAxOTY6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAxOTc6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAxOTg6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIDE5OTpcdFx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuIDIwMDpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG4gMjAxOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDIwMjpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyMDM6XHRcdFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxuIDIwNDpcdFx0XHQucXVpcmtzID0gTlVMTCxcbiAyMDU6XHRcdH0sIHtcbiAyMDY6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4gMjA3Olx0XHRcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMTAsXG4gMjA4Olx0XHRcdC5yZWdzID0ge1xuIDIwOTpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcbiAyMTA6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXG4gMjExOlx0XHRcdFx0LmVzdF9vZmYgPSBFU1RfR01BQzRfT0ZGU0VULFxuIDIxMjpcdFx0XHRcdC5mcGVfcmVnID0gXHUwMDI2ZHdtYWM1X2ZwZV9yZWcsXG4gMjEzOlx0XHRcdH0sXG4gMjE0Olx0XHRcdC5kZXNjID0gXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxuIDIxNTpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWM0MTBfZG1hX29wcyxcbiAyMTY6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNDEwX29wcyxcbiAyMTc6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAyMTg6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAyMTk6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIDIyMDpcdFx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuIDIyMTpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG4gMjIyOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDIyMzpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyMjQ6XHRcdFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxuIDIyNTpcdFx0XHQucXVpcmtzID0gTlVMTCxcbiAyMjY6XHRcdH0sIHtcbiAyMjc6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhlIGBzbnBzdmVyYCB2YWx1ZSBpcyB6ZXJvLCB3aWxsIHN0aWxsIGZpbmQgYSBtYXRjaCwgd2hpY2ggc2VlbXMgb2RkIGJ1dCBtYWtlcyBzZW5zZSBiZWNhdXNlIG9mIHRoZSBgbWluX2lkID0gMGAgZW50cnkgZm9yIGBEV01BQ19DT1JFX0dNQUNgIGFuZCBgRFdNQUNfQ09SRV9HTUFDNGAuIFRoaXMgYWxsb3dzIGBzdG1tYWNfaHdpZl9pbml0YCB0byBzdWNjZWVkLCBhbmQgY29uc2VxdWVudGx5LCBgc3RtbWFjX2h3X2luaXRgIGFsc28gd29ya3MuCgpGcm9tIHRoZXJlLCBgc3RtbWFjX2R2cl9wcm9iZWAgcHJvY2VlZHMgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGJhY2t0cmFjayBzbGlnaHRseS4gYHN0bW1hY19od19pbml0YCBkb2VzIGNhbGwgYHN0bW1hY19od2lmX2luaXRgLCBhbmQgdGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AuIEl0IHNlZW1zIHRoYXQgaWYgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIHJldHVybnMgMCwgaXQgc2ltcGx5IHByaW50cyBhIG1lc3NhZ2UgYWJvdXQgbWlzc2luZyBIVyBETUEgZmVhdHVyZSByZWdpc3RlcnMgYW5kIGNvbnRpbnVlcy4gTm8gZmF0YWwgZXJyb3IgaXMgdHJpZ2dlcmVkLgoKU28sICp0aGVuKiBgc3RtbWFjX2R2cl9wcm9iZWAgcmVnaXN0ZXJzIHRoZSBuZXRkZXYgdXNpbmcgYHJlZ2lzdGVyX25ldGRldmAuIEJ1dCBJIHNob3VsZCBiZSBjZXJ0YWluOyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY2FsbCBleHBsaWNpdGx5IGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24gYWdhaW4sIHRvIGNvbmZpcm0gaG93IGByZWdpc3Rlcl9uZXRkZXZgIGlzIGJlaW5nIGNhbGxlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBmbG93IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5MT1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDU0Olx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDU1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODEyOD12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMzc6XHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTg0MDQ9c3RhdGljIGludCBfX2luaXQgc3RtbWFjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MDktXHRcdHN0bW1hY19mc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoU1RNTUFDX1JFU09VUkNFX05BTUUsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4NDEwOlx0cmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnN0bW1hY19ub3RpZmllcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTEtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04NDE2PXN0YXRpYyB2b2lkIF9fZXhpdCBzdG1tYWNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODQxOC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjg0MTk6XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZzdG1tYWNfbm90aWZpZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04NDIwLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN0bW1hY19mc19kaXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBUZXN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgaXQgdXNlcyBgcmVnaXN0ZXJfbmV0ZGV2YC4gVGhlIGZhY3QgdGhhdCBgc3l6a2FsbGVyYCBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBtZWFucyB0aGUgYHN0bW1hY19wY2lfcHJvYmVgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHRoYXQgaW4gdHVybiByZWdpc3RlcnMgYSBuZXR3b3JrIGRldmljZSwgcmlnaHQ/IEludGVyZXN0aW5nLiBUaGlzIGNvbmZpcm1zIHRoYXQgYHN5emthbGxlcmAgY2FuIHRoZW4gbGV2ZXJhZ2UgYGV0aHRvb2xgIHRvIHJ1biB0ZXN0cyBvbiB0aGlzIG5ld2x5IHJlZ2lzdGVyZWQgbmV0ZGV2LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIGhvdyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBldGh0b29sYCBpcyB0aGUga2V5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBzZWxmdGVzdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgZnJhbWV3b3JrLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IHRvIGFzc2VzcyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSBob3cgcm9idXN0bHkgdGhleSYjMzk7cmUgaW50ZWdyYXRlZCBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIHRoYXQgY3JlYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOC0jaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU0MDpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDc6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTUxOlx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIGR1bW15X3BvcnQsIDAsIH4wLCAwLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTU0OnN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2MTpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjU6XHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2ODpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1Njkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NzI6XHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgMCwgZHVtbXlfcG9ydCwgMCwgfjAsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODcyLVx0XHQubmFtZSA9IFwmIzM0O0w0IERBIFRDUCBGaWx0ZXJpbmcgICAgICAgIFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODczOlx0XHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzQtXHR9LCB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3NS1cdFx0Lm5hbWUgPSBcJiMzNDtMNCBTQSBUQ1AgRmlsdGVyaW5nICAgICAgICBcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTg3NjpcdFx0LmZuID0gc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODc3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzgtXHRcdC5uYW1lID0gXCYjMzQ7TDQgREEgVURQIEZpbHRlcmluZyAgICAgICAgXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE4Nzk6XHRcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg4MC1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODgxLVx0XHQubmFtZSA9IFwmIzM0O0w0IFNBIFVEUCBGaWx0ZXJpbmcgICAgICAgIFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODgyOlx0XHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4ODMtXHR9LCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0bW1hY2AgU2VsZnRlc3QgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IGFkZHJlc3NlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aXRoaW4gdGhlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgZnVuY3Rpb24gb2YgdGhlIGBzdG1tYWNgIGRyaXZlci4gSSBzZWUgdGhhdCB0aGUgdGVzdCBmdW5jdGlvbnMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBzdG1tYWNfdGVzdGAgYXJyYXksIGFuZCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGV4ZWN1dGVzIHRoZW0uIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBhbmQgZXRodG9vbCwgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZXMgYGtleXNgIGFuZCBgbWFza3NgIHRvIGJlIGVtcHR5IGFuZCBzZXRzIHRoZSBgaXBfcHJvdG9gIG1hc2sgdG8gYDB4ZmZgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXgsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGFyZSBkZWZpbml0ZWx5IGZ1enotd29ydGh5LgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIGFsb25nIHdpdGggaXRzIGNhbGxlcnM6IGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAsIGFuZCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAuIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG93ZXZlciwgaXQgKmlzKiBjYWxsZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgc3RhdGljIGZ1bmN0aW9ucywgYWxsIG9mIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycy4gCgpBaCwgcmlnaHQuIFRoZSBhZGRyZXNzZXMgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGV0Yy4g4oCTIGFyZSB0YWtlbiBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheS4gU28sIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBidXQgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCAqbWlnaHQqIGJlIGlubGluZWQgd2l0aGluIHRob3NlIG90aGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19zZWxmdGVzdF9ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDM0PXN0cnVjdCB0aW1lc3BlYzY0IHN0bW1hY19jYWxjX3Rhc19iYXNldGltZShrdGltZV90IG9sZF9iYXNlX3RpbWUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDM4LSNpZiBJU19FTkFCTEVEKENPTkZJR19TVE1NQUNfU0VMRlRFU1RTKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDM5OnZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDQwLVx0XHRcdCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGVzdCwgdTY0ICpidWYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQ0Mj1pbnQgc3RtbWFjX3NlbGZ0ZXN0X2dldF9jb3VudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDQzLSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0NDQ6c3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19zZWxmdGVzdF9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGVzdCwgdTY0ICpidWYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTEwOC1cdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTEwOTpcdC5zZWxmX3Rlc3QgPSBzdG1tYWNfc2VsZnRlc3RfcnVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVx0LmdldF9ldGh0b29sX3N0YXRzID0gc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xOTAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE5MDE6dm9pZCBzdG1tYWNfc2VsZnRlc3RfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTkwMi1cdFx0XHQgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU3OQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBTZWxmLVRlc3QgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGhvb2tlZCBpbnRvIGV0aHRvb2wmIzM5O3MgYC5zZWxmX3Rlc3RgIGNhbGxiYWNrLiBNYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUgYXBwZWFyIHRvIGJlIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpdHNlbGYsIGFuZCB0aGVuIHRob3NlIHNwZWNpZmljIEw0IGZpbHRlcmluZyB0ZXN0czogYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwYCwgYW5kIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBzaG91bGQgZm9jdXMgb24gdG8gdW5kZXJzdGFuZCB0aGUgdGVzdCBsb2dpYy4KCkhvbGQgb24uLi4gSSYjMzk7bSBub3RpY2luZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGEgYml0IG9mIGEgY29kZSBzbWVsbCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhlIHNpemUgb2YgdGhhdCBmdW5jdGlvbiwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCBnZXRzIGlubGluZWQgb3Igbm90IGJ5IGxvb2tpbmcgYXQgdGhlIG9iamVjdCBjb2RlIHNpemUuIElmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCB3aGVuIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHRlc3RzLiBJZiBpdCBpcyBpbmxpbmVkIHRoZW4gSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGF0IG92ZXJoZWFkLCBhbmQgY2FuIGV2YWx1YXRlIHRoZSB0ZXN0cyBpbiB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI5Olx0c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4xNDMwOlx0XHRcdFx0XHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXG4xNDMxOlx0e1xuMTQzMjpcdFx0c3RydWN0IHtcbjE0MzM6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xuMTQzNDpcdFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcbjE0MzU6XHRcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xuMTQzNjpcdFx0c3RydWN0IHtcbjE0Mzc6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBibWFzaztcbjE0Mzg6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBtYXNrO1xuMTQzOTpcdFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xuMTQ0MDpcdFx0dW5zaWduZWQgbG9uZyBkdW1teV9jb29raWUgPSAweGRlYWRiZWVmO1xuMTQ0MTpcdFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcbjE0NDI6XHRcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xuMTQ0MzpcdFx0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNscztcbjE0NDQ6XHRcdGludCByZXQsIG9sZF9lbmFibGUgPSAwO1xuMTQ0NTpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcbjE0NDY6XHRcbjE0NDc6XHRcdGlmICghdGNfY2FuX29mZmxvYWQocHJpdi1cdTAwM2VkZXYpKVxuMTQ0ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNDQ5Olx0XHRpZiAoIXByaXYtXHUwMDNlZG1hX2NhcC5sM2w0Zm51bSlcbjE0NTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTQ1MTpcdFx0aWYgKHByaXYtXHUwMDNlcnNzLmVuYWJsZSkge1xuMTQ1MjpcdFx0XHRvbGRfZW5hYmxlID0gcHJpdi1cdTAwM2Vyc3MuZW5hYmxlO1xuMTQ1MzpcdFx0XHRwcml2LVx1MDAzZXJzcy5lbmFibGUgPSBmYWxzZTtcbjE0NTQ6XHRcdFx0c3RtbWFjX3Jzc19jb25maWd1cmUocHJpdiwgcHJpdi1cdTAwM2VodywgTlVMTCxcbjE0NTU6XHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xuMTQ1NjpcdFx0fVxuMTQ1NzpcdFxuMTQ1ODpcdFx0ZGlzc2VjdG9yID0ga3phbGxvY19vYmooKmRpc3NlY3Rvcik7XG4xNDU5Olx0XHRpZiAoIWRpc3NlY3Rvcikge1xuMTQ2MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTQ2MTpcdFx0XHRnb3RvIGNsZWFudXBfcnNzO1xuMTQ2MjpcdFx0fVxuMTQ2MzpcdFxuMTQ2NDpcdFx0ZGlzc2VjdG9yLVx1MDAzZXVzZWRfa2V5cyB8PSAoMVVMTCBcdTAwM2NcdTAwM2MgRkxPV19ESVNTRUNUT1JfS0VZX0JBU0lDKTtcbjE0NjU6XHRcdGRpc3NlY3Rvci1cdTAwM2V1c2VkX2tleXMgfD0gKDFVTEwgXHUwMDNjXHUwMDNjIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUyk7XG4xNDY2Olx0XHRkaXNzZWN0b3ItXHUwMDNlb2Zmc2V0W0ZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQ10gPSAwO1xuMTQ2NzpcdFx0ZGlzc2VjdG9yLVx1MDAzZW9mZnNldFtGTE9XX0RJU1NFQ1RPUl9LRVlfUE9SVFNdID0gb2Zmc2V0b2YodHlwZW9mKGtleXMpLCBrZXkpO1xuMTQ2ODpcdFxuMTQ2OTpcdFx0Y2xzID0ga3phbGxvY19vYmooKmNscyk7XG4xNDcwOlx0XHRpZiAoIWNscykge1xuMTQ3MTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTQ3MjpcdFx0XHRnb3RvIGNsZWFudXBfZGlzc2VjdG9yO1xuMTQ3MzpcdFx0fVxuMTQ3NDpcdFxuMTQ3NTpcdFx0Y2xzLVx1MDAzZWNvbW1vbi5jaGFpbl9pbmRleCA9IDA7XG4xNDc2Olx0XHRjbHMtXHUwMDNlY29tbWFuZCA9IEZMT1dfQ0xTX1JFUExBQ0U7XG4xNDc3Olx0XHRjbHMtXHUwMDNlY29va2llID0gZHVtbXlfY29va2llO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIDEpO1xuMTQ4MDpcdFx0aWYgKCFydWxlKSB7XG4xNDgxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xNDgyOlx0XHRcdGdvdG8gY2xlYW51cF9jbHM7XG4xNDgzOlx0XHR9XG4xNDg0Olx0XG4xNDg1Olx0XHRydWxlLVx1MDAzZW1hdGNoLmRpc3NlY3RvciA9IGRpc3NlY3RvcjtcbjE0ODY6XHRcdHJ1bGUtXHUwMDNlbWF0Y2gua2V5ID0gKHZvaWQgKilcdTAwMjZrZXlzO1xuMTQ4NzpcdFx0cnVsZS1cdTAwM2VtYXRjaC5tYXNrID0gKHZvaWQgKilcdTAwMjZtYXNrcztcbjE0ODg6XHRcbjE0ODk6XHRcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4xNDkwOlx0XHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuMTQ5MTpcdFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbjE0OTI6XHRcdC8qIE1hdGNoIHRoZSBmdWxsIElQIHByb3RvIGZpZWxkICovXG4xNDkzOlx0XHRtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7XG4xNDk0Olx0XHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xuMTQ5NTpcdFx0bWFza3MubWFzay5kc3QgPSBkc3RfbWFzaztcbjE0OTY6XHRcbjE0OTc6XHRcdGNscy1cdTAwM2VydWxlID0gcnVsZTtcbjE0OTg6XHRcbjE0OTk6XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLmVudHJpZXNbMF0uaWQgPSBGTE9XX0FDVElPTl9EUk9QO1xuMTUwMDpcdFx0cnVsZS1cdTAwM2VhY3Rpb24uZW50cmllc1swXS5od19zdGF0cyA9IEZMT1dfQUNUSU9OX0hXX1NUQVRTX0FOWTtcbjE1MDE6XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzID0gMTtcbjE1MDI6XHRcbjE1MDM6XHRcdGF0dHIuZHN0ID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHI7XG4xNTA0Olx0XHRhdHRyLnRjcCA9ICF1ZHA7XG4xNTA1Olx0XHRhdHRyLnNwb3J0ID0gc3JjO1xuMTUwNjpcdFx0YXR0ci5kcG9ydCA9IGRzdDtcbjE1MDc6XHRcdGF0dHIuaXBfZHN0ID0gMDtcbjE1MDg6XHRcbjE1MDk6XHRcdC8qIFNoYWxsIHJlY2VpdmUgcGFja2V0ICovXG4xNTEwOlx0XHRyZXQgPSBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHByaXYsIFx1MDAyNmF0dHIpO1xuMTUxMTpcdFx0aWYgKHJldClcbjE1MTI6XHRcdFx0Z290byBjbGVhbnVwX3J1bGU7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXQgPSBzdG1tYWNfdGNfc2V0dXBfY2xzKHByaXYsIHByaXYsIGNscyk7XG4xNTE1Olx0XHRpZiAocmV0KVxuMTUxNjpcdFx0XHRnb3RvIGNsZWFudXBfcnVsZTtcbjE1MTc6XHRcbjE1MTg6XHRcdC8qIFNoYWxsIE5PVCByZWNlaXZlIHBhY2tldCAqL1xuMTUxOTpcdFx0cmV0ID0gX19zdG1tYWNfdGVzdF9sb29wYmFjayhwcml2LCBcdTAwMjZhdHRyKTtcbjE1MjA6XHRcdHJldCA9IHJldCA/IDAgOiAtRUlOVkFMO1xuMTUyMTpcdFxuMTUyMjpcdFx0Y2xzLVx1MDAzZWNvbW1hbmQgPSBGTE9XX0NMU19ERVNUUk9ZO1xuMTUyMzpcdFx0c3RtbWFjX3RjX3NldHVwX2Nscyhwcml2LCBwcml2LCBjbHMpO1xuMTUyNDpcdGNsZWFudXBfcnVsZTpcbjE1MjU6XHRcdGtmcmVlKHJ1bGUpO1xuMTUyNjpcdGNsZWFudXBfY2xzOlxuMTUyNzpcdFx0a2ZyZWUoY2xzKTtcbjE1Mjg6XHRjbGVhbnVwX2Rpc3NlY3RvcjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWxmLVRlc3QgU3RydWN0dXJlKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHN1YnN0YW50aWFsIHBpZWNlIG9mIGNvZGU7IGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIHN0YXRpYywgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBpdHMgc3ltYm9sIHdvbiYjMzk7dCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlLCBvciBpdCBtaWdodCBiZSBtYW5nbGVkIHdpdGggc29tZXRoaW5nIGxpa2UgYC5pc3JhLlhgLiBJIHRoaW5rIGl0JiMzOTtzIHNtYXJ0ZXIgdG8gZm9jdXMgb24gdGhvc2Ugd3JhcHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBhcnJheSwgYXMgd2UmIzM5O3JlIGdyYWJiaW5nIHRoZWlyIGFkZHJlc3Nlcywgd2hpY2ggbWVhbnMgdGhleSAqc2hvdWxkKiBoYXZlIGNsZWFyLCB1c2FibGUgc3ltYm9scy4gSG1tLCBoYW5nIG9uLi4uIGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCBpcyBhbHNvIHN0YXRpYywgYnV0IHdlJiMzOTtyZSB0YWtpbmcgaXRzIGFkZHJlc3MuIEludGVyZXN0aW5nLiBNYXliZSBsaXN0aW5nIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgYmVzdCBhcHByb2FjaC4gWWVzLCB0aGF0JiMzOTtzIGl0ISBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgbG9va3MgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGFsbCBvZiB0aGVzZSBzZWxmLXRlc3RzLiBOb3csIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYFNUTU1BQ19FVEhgLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBzdG1tYWNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX0VUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE4MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDX0VUSCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBTVE1NQUNfRVRIYCBLY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4Li4uIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzLCB0aGUgdHJpc3RhdGUgdmFsdWVzLCBhbmQgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbW1vbiBFdGhlcm5ldCBQSFkgY29uZmlndXJhdGlvbnMsIHByb2JhYmx5IHNvbWUgTUFDIGFkZHJlc3Mgb3ZlcnJpZGVzLCBhbmQgcG90ZW50aWFsbHkgb3B0aW9ucyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gdG9vLCBzdWNoIGFzIGJ1ZmZlciBzaXplcyBvciBkZXNjcmlwdG9yIHNldHRpbmdzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBob3cgdGhleSBpbnRlcnBsYXkgYW5kIHdoYXQgY3VzdG9taXphdGlvbnMgYXJlIHBvc3NpYmxlIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgdmFyaWFudHMgYW5kIHVzZS1jYXNlcy4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBwb3RlbnRpYWwgZGV2aWNlIHRyZWUgYmluZGluZ3MgSSBuZWVkIHRvIHdyaXRlIGFuZCBhbnkgZnVydGhlciBkcml2ZXIgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nLiBJJiMzOTttIGFsc28ga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgaGlkZGVuIGdvdGNoYXMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNUTU1BQ19FVEhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgIDY6XHRcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXG4gICA3Olx0XHRzZWxlY3QgTUlJXG4gICA4Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgIDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDEzOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXG4gIDE2Olx0XHQgIFN5bm9wc3lzIElQIENvcmUuXG4gIDE3Olx0XG4gIDE4Olx0aWYgU1RNTUFDX0VUSFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG4gIDIxOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHNcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAyMzpcdFx0ZGVmYXVsdCBuXG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXG4gIDI2Olx0XHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcbiAgMjc6XHRcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgU1RNTUFDX1BMQVRGT1JNXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUGxhdGZvcm0gYnVzIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gIDM1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcbiAgMzY6XHRcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxuICAzNzpcdFxuICAzODpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGlmIFNUTU1BQ19QTEFURk9STVxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3Igc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IENSQzMyXG4gIDQ3Olx0XHRzZWxlY3QgTUlJXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIFN1cHBvcnQgZm9yIGNoaXBzIHVzaW5nIHRoZSBzbnBzLGR3Yy1xb3MtZXRoZXJuZXQudHh0IERUIGJpbmRpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBTVE1NQUMgZHJpdmVyIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1NFTEZURVNUU2AgZW5hYmxlZC4gVGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgYXNzdW1pbmcgdGhpcyBpcyBhIHN0YW5kYXJkIEV0aGVybmV0IGludGVyZmFjZS4gSSB3YW50IHRvIGVuc3VyZSB0aGUgYmFzZSBFdGhlcm5ldCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIHRoYXQgd2UgY2FuIHBlcmZvcm0gc29tZSBiYXNpYyB2ZXJpZmljYXRpb24gb2YgdGhlIGhhcmR3YXJlLgoKTm93LCBpZiB3ZSYjMzk7cmUgYWNjZXNzaW5nIHRoaXMgU1RNTUFDIHRocm91Z2ggYSBQQ0kgaW50ZXJmYWNlIOKAkyB3aGljaCBpcyBsaWtlbHkgaW4gbWFueSBtb2Rlcm4gc3lzdGVtcyDigJMgd2UmIzM5O2xsIGFsc28gcmVxdWlyZSBgU1RNTUFDX1BDSWAuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBQQ0kgc3VwcG9ydCBpcyBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgY29tbXVuaWNhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCBjb25maWd1cmVkLCBhbmQgaWYgc28sIGhvdz8gTGV0JiMzOTtzIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YgYFNUTU1BQ19QQ0lgLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBpZiB0aGlzIGNydWNpYWwgY29tcG9uZW50IGlzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQ19QQ0kgS2NvbmZpZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBTVE1NQUNfUENJYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHRoYXQgZ292ZXJuIHRoaXMgZHJpdmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBXaGF0IHVuZGVybHlpbmcgUENJIGRldmljZXMgb3IgZmFtaWxpZXMgaXMgdGhpcyBkcml2ZXIgaW50ZW5kZWQgZm9yPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgUENJIElEcyBvciBkZXZpY2UgY2xhc3NlcyBpdCBzdXBwb3J0cy4gQXJlIHRoZXJlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgcmV2aXNpb25zIG9yIFNvQ3MgdGFyZ2V0ZWQ/CiogICAqKkZlYXR1cmUgRmxhZ3M6KiogQXJlIHRoZXJlIGNvbmZpZ3VyYWJsZSBvcHRpb25zPyBJJiMzOTtsbCBzY2FuIGZvciB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBWTEFOIG9mZmxvYWQsIGNoZWNrc3VtIG9mZmxvYWQsIGFuZCBhbnkgZmxvdyBjb250cm9sIGZlYXR1cmVzLiBUaGVzZSB1c3VhbGx5IHRlbGwgbWUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIG9wdGltYWwgdXNlIG9mIGhhcmR3YXJlIG9mZmxvYWQgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMuCiogICAqKlBsYXRmb3JtLVNwZWNpZmljczoqKiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGRlZmluZXMgb3IgZGVwZW5kZW5jaWVzPyBUaGlzIHdvdWxkIHJldmVhbCBpZiB0aGUgZHJpdmVyIGlzIHRpZ2h0bHkgY291cGxlZCB0byBhIHBhcnRpY3VsYXIgU1Qgc3lzdGVtIG9yIGlmIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIG1vcmUgZ2VuZXJpYy4gSSYjMzk7bGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIGFueSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29uZmlndXJhdGlvbiBvciBETUEtcmVsYXRlZCBvcHRpb25zLgoqICAgKipEZWZhdWx0IENvbmZpZ3VyYXRpb246KiogV2hhdCBhcmUgdGhlIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzPyBLbm93aW5nIHRoaXMgZ2l2ZXMgbWUgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZ2V0cyBjb25maWd1cmVkIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gQXJlIHRoZXkgYWdncmVzc2l2ZSwgY29uc2VydmF0aXZlLCBvciBiYWxhbmNlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHNjZW5hcmlvcyBmb3IgYSBiYXNpYyBzZXR1cD8KKiAgICoqUmVsYXRpb25zaGlwIHRvIG90aGVyIENvbmZpZyBPcHRpb25zOioqIEkgd2FudCB0byBjaGVjayBob3cgYFNUTU1BQ19QQ0lgIHJlbGF0ZXMgdG8gb3RoZXIgU1RNTUFDIHZhcmlhbnRzIGluIGBLY29uZmlnYC4gQXJlIHRoZXJlIGFueSBtdXR1YWwgZXhjbHVzaW9ucyBvciBjb25mbGljdHM/IElzIHRoZXJlIGEgY2xlYXJseSBkZWZpbmVkIGhpZXJhcmNoeSBvZiBvcHRpb25zLCBhbmQgaG93IGRvZXMgdGhlIFBDSS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGludGVyYWN0IHdpdGggdGhlIGNvcmUgU1RNTUFDIHNldHRpbmdzPwoqICAgKipQb3RlbnRpYWwgaXNzdWVzOioqIEJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24sIEkgd2FudCB0byBmb3JtIGFuIGluaXRpYWwgbWVudGFsIG1vZGVsIG9mIGhvdyBhIGRldmljZSB3b3VsZCBiZSBjb25maWd1cmVkLiBJJiMzOTtsbCBtZW50YWxseSAmIzM0O3Rlc3QmIzM0OyB0aGUgY29uZmlndXJhdGlvbiBieSBzdGVwcGluZyB0aHJvdWdoIHRoZSBvcHRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGFuIGlkZWEgb2YgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGhvdyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbnMgd2lsbCBsaWtlbHkgYmUgYSBtYWludGVuYW5jZSBoZWFkYWNoZS4KKiAgICoqRnV0dXJlIEltcHJvdmVtZW50czoqKiBUaGlzIGFuYWx5c2lzIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgbWFraW5nIGluZm9ybWVkIHJlY29tbWVuZGF0aW9ucyB0byBpbXByb3ZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaWYgbmVjZXNzYXJ5LiBGb3IgaW5zdGFuY2UsIGlzIHRoZXJlIGFuIG9wcG9ydHVuaXR5IHRvIGVuYWJsZS9kaXNhYmxlIGZlYXR1cmVzIG1vcmUgZ3JhbnVsYXJseT8gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSByZXZpc2l0ZWQgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGJlIHN0cmVhbWxpbmVkPwoKSSBuZWVkIHRoaXMgcXVpY2sgb3ZlcnZpZXcgdG8gZm9ybSBhIGJldHRlciBpZGVhIG9mIHRoZSBTVE1NQUMgUENJIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBNeSBnb2FsIGlzIHRvIHVzZSB0aGlzIGtub3dsZWRnZSB0byBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzIG9yIGltcHJvdmVtZW50cyBmb3IgYSBzeXN0ZW0gdGhhdCB1c2VzIHRoaXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNzpcdGNvbmZpZyBTVE1NQUNfUENJXG4gNDA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gNDA5Olx0XHRkZXBlbmRzIG9uIFBDSVxuIDQxMDpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gNDExOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQxMjpcdFx0aGVscFxuIDQxMzpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiA0MTQ6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIHRlc3RlZCBvbiBYTElOWCBYQzJWMzAwMCBGRjExNTJBTVQwMjIxXG4gNDE1Olx0XHQgIEQxMjE1OTk0QSBWSVJURVggRlBHQSBib2FyZCBhbmQgU05QUyBRb1MgSVBLIFByb3RvdHlwaW5nIEtpdC5cbiA0MTY6XHRcbiA0MTc6XHRcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiA0MTg6XHRcbiA0MTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA0MjA6XHRlbmRpZiAjIFNUTU1BQ19FVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MzEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gdGhlIFNUTU1BQyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpSaWdodCwgc28gdG8gZ2V0IHRoaXMgYWxsIHdvcmtpbmcsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhlc2UgdGhyZWUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYW5kIGBTVE1NQUNfUENJYC4gVGhvc2UgYXJlIGZvdW5kYXRpb25hbCwgb2J2aW91c2x5LgoKTm93LCBJJiMzOTttIHNlZWluZyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgYW5kIHRoYXQgZnVuY3Rpb24gbGl2ZXMgKmluc2lkZSogYW4gYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgIGJsb2NrLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgY29uZGl0aW9uYWwgaW4gbWluZC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCB0aWVkIHRvIHRoZSBuZXR3b3JrIGNsYXNzaWZpZXIvYWN0dWF0b3Igc3R1ZmYuCgpJIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBzdG1tYWNfc2VsZnRlc3RzLmNgIGFnYWluLiBNYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcGVydGluZW50IGluIHRoZSB0ZXN0aW5nIGZyYW1ld29yayBpdHNlbGYsIGFuZCBtYXliZSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW50ZXJhY3RzIHdpdGggdGhlIHNlbGYtdGVzdCBwcm9jZWR1cmVzLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiBob3cgdGhvc2UgYWxsIHBsYXkgdG9nZXRoZXIsIHdoaWNoIEkgY2FuIG9ubHkgZ2V0IGJ5IHNlZWluZyBhbGwgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEwNDc9c3RhdGljIGludCBzdG1tYWNfdGVzdF9kdmxhbmZpbHRfcGVyZmVjdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEwNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTA2MTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTA2Mi1zdGF0aWMgaW50IHN0bW1hY190ZXN0X3J4cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEzMDI9c3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEzMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTMwOTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTMxMC1zdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDNmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTQyMT1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2wzZmlsdF9zYShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyODojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOS1zdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNTEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgLiAgU28sIG9idmlvdXNseSwgYE5FVF9DTFNfQUNUYCAod2hpY2ggaXMgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW4gdGhlIEtjb25maWcpIGlzIGEgbXVzdC1oYXZlIGNvbmZpZy4gTm93LCBsZXQmIzM5O3MgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZS4uLiAgUmlnaHQsIEkgc2VlIHRoYXQgYFNUTU1BQ19TRUxGVEVTVFNgIHJlcXVpcmVzIGBJTkVUYCBhbmQgYFNUTU1BQ19QQ0lgIHdhbnRzIGBQQ0lgLiBTbywgbGV0JiMzOTtzIGxpc3QgdGhlIGNvbmZpZ3Mgd2UgbmVlZCB0byBlbmFibGUuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgY29uZmlnczogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kLCBjcnVjaWFsbHksIGBORVRfQ0xTX0FDVGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhY3R1YWxseSByZWFjaGFibGU/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAsIGFuZCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAuIFRob3NlIGFyZSBhbGwgaW4gdGhlIGBzdG1tYWNfdGVzdGAgYXJyYXkuIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpdGVyYXRlcyB0aHJvdWdoIHRoaXMgYXJyYXkgYW5kIGNhbGxzIHRoZSByZWxldmFudCBgZm5gLiBTbywgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbi4KCkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgYWRkaW5nIGFsbCBvZiB0aGVtIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGFuZCBsYXJnZSBmdW5jdGlvbnMgbWFya2VkIGBzdGF0aWNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gIEl0JiMzOTtzIGJlc3QgdG8gbGlzdCB0aGUgZnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4gdGhvdWdoLiAgVGhlbiwgSSByZW1lbWJlcmVkLCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGdldHMgbW9kaWZpZWQuIFNvIGl0JiMzOTtzIHZlcnkgaW1wb3J0YW50LiBIb3dldmVyLCBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCBhbGwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuCgpUaGVuIHRoZSBjb3ZlcmFnZS1iYXNlZCBTeXprYWxsZXIgYXBwcm9hY2ggY2FtZSB0byBtaW5kLiBJZiB3ZSBqdXN0IGxpc3QgYHN0bW1hY19zZWxmdGVzdF9ydW5gLCBTeXprYWxsZXIgd2lsbCB0cnkgdG8gZ2V0IHRvIHRoYXQgZnVuY3Rpb24sIHdoaWNoIHdpbGwgKm5hdHVyYWxseSogbGVhZCBpdCB0byBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIChpZiB0aGF0JiMzOTtzIHRoZSBjb2RlIHBhdGggd2Ugd2FudCB0byB0cmlnZ2VyKS4gQWN0dWFsbHksIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyBhbiBldGh0b29sIGNhbGxiYWNrLiBJdCYjMzk7cyByZWFjaGVkIHRocm91Z2ggYGRldl9ldGh0b29sYCBhbmQgdGhlbiBgZXRodG9vbF9zZWxmX3Rlc3RgLiBTbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkFscmlnaHQsIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgd2hhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGZ1enppbmc6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAKICAgICogICBgX19zdG1tYWNfdGVzdF9sNGZpbHRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgU1RNTUFDX0VUSGAKICAgICogICBgU1RNTUFDX1NFTEZURVNUU2AKICAgICogICBgU1RNTUFDX1BDSWAKICAgICogICBgTkVUX0NMU19BQ1RgCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyAqY29uZGl0aW9uYWxseSogY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAuIElmIHRoYXQmIzM5O3MgKm5vdCogc2V0LCB0aGUgYCNlbHNlYCBibG9jayB3aWxsIGhhdmUgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiB0aGF0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBjb3VsZCBoaWRlIGEgdnVsbmVyYWJpbGl0eSwgc28gSSBoYXZlIHRvIGNoZWNrIHRoYXQgYCNlbHNlYCBibG9jayB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTM1Olx0XHR9XG4xNTM2Olx0XG4xNTM3Olx0XHRyZXR1cm4gcmV0O1xuMTUzODpcdH1cbjE1Mzk6XHQjZWxzZVxuMTU0MDpcdHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxuMTU0MTpcdFx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuMTU0MjpcdHtcbjE1NDM6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE1NDQ6XHR9XG4xNTQ1Olx0I2VuZGlmXG4xNTQ2Olx0XG4xNTQ3Olx0c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjE1NDg6XHR7XG4xNTQ5Olx0XHR1MTYgZHVtbXlfcG9ydCA9IDB4MTIzO1xuMTU1MDpcdFxuMTU1MTpcdFx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIGR1bW15X3BvcnQsIDAsIH4wLCAwLCBmYWxzZSk7XG4xNTUyOlx0fVxuMTU1MzpcdFxuMTU1NDpcdHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4Mzc3CgkJCQkJCQlvdXRwdXQ6IDI5MAoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFZ1bG5lcmFiaWxpdHkgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgI2Vsc2VgIGJsb2NrIGlzIGluZGVlZCBhIHBsYWNlaG9sZGVyLCBtZWFuaW5nIGBORVRfQ0xTX0FDVGAgaXMgZXNzZW50aWFsIHRvIGhpdCB0aGUgbW9kaWZpZWQgY29kZS4gR29vZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGBORVRfQ0xTX0FDVGAgZmFsbHMgdW5kZXIgJiMzNDtOZXR3b3JraW5nIG9wdGlvbnMmIzM0OyAtJmd0OyAmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZywmIzM0OyBhIHByZXR0eSBzdGFuZGFyZCBjb25maWcsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbWFqb3IgaHVyZGxlLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB3ZSB0cmlnZ2VyIHRoaXMgd2l0aCBqdXN0IGBTVE1NQUNfUENJYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBpbnRlcmVzdGluZyBiaXQuIFN5emthbGxlciBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLCB3aGljaCBpcyBrZXkuIFNwZWNpZmljYWxseSwgdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBjYW4gdHJpZ2dlciBgc3RtbWFjX3BjaV9wcm9iZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgKnRoYXQqIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBPbmNlIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgc3l6a2FsbGVyIGNhbiBlbXBsb3kgYGV0aHRvb2xgIHRvIHJ1biB0aGUgc2VsZi10ZXN0cy4gU28sIHRoZSBwYXRoIGlzIHRoZXJlIOKAkyBpdCYjMzk7cyByZWFjaGFibGUuCgpMZXQgbWUganVzdCBzeW50aGVzaXplIHRoaXMgcmVhc29uaW5nIGFnYWluLiBUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciYjMzk7cyBzZWxmdGVzdHMuIFRoZXNlIHRlc3RzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGV0aHRvb2xgIGludGVyZmFjZSBhZnRlciB0aGUgZHJpdmVyIGlzIHByb2JlZC4gV2UgY2FuIHByb2JlIHRoZSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHN5emthbGxlciYjMzk7cyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyAoYHN5el9wY2lgIG9yIHN5c2ZzIGJpbmQpLCBnaXZlbiB0aGUgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUaGVyZWZvcmUsIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYC4KCkhtbSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLiBJcyBgU1RNTUFDX1BDSWAgdGhlICpvbmx5KiB3YXk/IFRoZXJlIGFyZSBhbHNvIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFNUTU1BQywgYnV0IFBDSSBpcyBjbGVhcmx5IHRoZSBlYXNpZXN0IHJvdXRlIGZvciBzeXprYWxsZXIgdG8gaW5qZWN0LiBTbywgYFNUTU1BQ19QQ0lgIGlzIHRoZSBjbGVhbmVzdCwgZWFzaWVzdCB0cmlnZ2VyLgoKTm93IGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuLi5sZXQmIzM5O3MgY29uZmlybSB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBJcyBpdCB3b3J0aHdoaWxlIHRvIG9taXQgaXQ/IFN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgZGlzdGluY3Qgc3ltYm9scyBpbiB0aGUga2VybmVsIGltYWdlIChpLmUuLCBub3QgaW5saW5lZCkuIFNpbmNlIGl0IHNlZW1zIHJlbGF0aXZlbHkgbGFyZ2UsIGl0JiMzOTtzICpsaWtlbHkqIG5vdCBpbmxpbmVkLCBidXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgaXQgaGFzIGEgYC5pc3JhYCBzdWZmaXguIFRvIGJlIHNhZmUsIEkmIzM5O2xsIGluY2x1ZGUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGFuZCB0aGUgd3JhcHBlciBmdW5jdGlvbnMgbGlrZSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAsIGFuZCBJICp3aWxsKiBpbmNsdWRlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAganVzdCB0byBiZSBjZXJ0YWluLgoKT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNDY0Y2QxNzA0MDAzNWQ2MTY5OGU0ZTE2ZmI5NWViMjU3MTFiOWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwpAQCAtMTQzMiwxMSAmIzQzOzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsCiAJc3RydWN0IHsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5OwogCQlzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTsKLQl9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkga2V5czsKJiM0MzsJfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07CiAJc3RydWN0IHsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBibWFzazsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBtYXNrOwotCX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrczsKJiM0MzsJfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9OwogCXVuc2lnbmVkIGxvbmcgZHVtbXlfY29va2llID0gMHhkZWFkYmVlZjsKIAlzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9OwogCXN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yOwpAQCAtMTQ4OSw2ICYjNDM7MTQ4OSw4IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLAogCWtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7CiAJa2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTsKIAlrZXlzLmtleS5kc3QgPSBodG9ucyhkc3QpOwomIzQzOwkvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqLwomIzQzOwltYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7CiAJbWFza3MubWFzay5zcmMgPSBzcmNfbWFzazsKIAltYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEwCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDEzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBmb3IgX19zdG1tYWNfdGVzdF9sNGZpbHQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBzdG1tYWNfc2VsZnRlc3RzLmNgIG1vZGlmaWVzIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgYW5kIEkgc2VlIHRoYXQgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0cy4gIFByZXZpb3VzbHksIHRoZXNlIHN0cnVjdHMgd2VyZSBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuICBOb3csIHRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGVtIHdpdGggYD0geyB9YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzICpmaXhpbmcqIHNvbWV0aGluZyBvciAqY3JlYXRpbmcqIGEgbmV3IHJpc2s/JiMzNDsgIFRoZSBwcm9tcHQgaXMgdmVyeSBzcGVjaWZpYzogJiMzNDtPTkxZIHNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzIHRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uJiMzNDsgIFNpbmNlIHRoaXMgcGF0Y2ggZXhwbGljaXRseSAqZml4ZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIEtNU0FOIHdhcyBsaWtlbHkgKmFscmVhZHkqIGNhdGNoaW5nIHRoZSBpc3N1ZSAqYmVmb3JlKiB0aGlzIHBhdGNoLiAgVGhlIHF1ZXN0aW9uIGlzbiYjMzk7dCB3aGV0aGVyIEtNU0FOICpjb3VsZCBoYXZlKiBmb3VuZCBhIGJ1ZyBwcmUtcGF0Y2g7IHRoZSBxdWVzdGlvbiBpcyBpZiB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNlcyBhICpuZXcqIEtNU0FOLXNwZWNpZmljIHJpc2suCgpMZXQmIzM5O3MgcmVhZCB0aGUgZGlmZiBjYXJlZnVsbHkuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgPSB7IH1gIHRvIHRoZSBzdHJ1Y3QgZGVjbGFyYXRpb25zLiAgVGhpcyBpcyBhIGRpcmVjdCwgY29tcGxldGUgaW5pdGlhbGl6YXRpb24uICBaZXJvaW5nIHRoZW0gb3V0IGVuc3VyZXMgdGhhdCAqYWxsKiBmaWVsZHMsIGluY2x1ZGluZyBhbnkgcGFkZGluZywgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGlzIGNoYW5nZT8gTm8uCgpUaGUgcHJvbXB0IGxpc3RzIHNldmVyYWwgc2NlbmFyaW9zIHRoYXQgKndvdWxkKiB3YXJyYW50IE5lZWRzS01TQU46IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjaGFuZ2VzIGluIGJvdW5kcyBjaGVja3MgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy4gIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlIGNoYW5nZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0dXJlcy4KClRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogc3RhdGVzIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgJiMzNDtBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuJiMzNDsgIFRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZSBwYXRjaCBkb2VzIHdpdGggdGhlIGA9IHsgfWAuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBjb2RlIG9uZSBsYXN0IHRpbWUgdG8gY29uZmlybS4gIFllcywgdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm93IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBhZGRpdGlvbmFsIGxpbmUgc2V0dGluZyBgbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO2Agc2ltcGx5IGFzc2lnbnMgYSB2YWx1ZSB0byBhIGZpZWxkIHdpdGhpbiB0aGUgbm93IHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgKmV4cGxpY2l0bHkgemVyb2luZyogdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMsIGl0ICpyZW1vdmVzKiBhIHBvdGVudGlhbCBLTVNBTi1kZXRlY3RhYmxlIHByb2JsZW0uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgYW5zd2VyIGlzICoqTmVlZHNLTVNBTj1mYWxzZSoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjExOjQ2LjI3MjgwODQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjIyNzUzMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfU0VMRlRFU1RTXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19zZWxmdGVzdF9ydW5cIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBcIixcbiAgICBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlcidzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjExOjQ2LjI3MjgxNTMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDIyNTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0NjRjZDE3MDQwMDM1ZDYxNjk4ZTRlMTZmYjk1ZWIyNTcxMWI5Y2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXFxuaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG5AQCAtMTQzMiwxMSArMTQzMiwxMSBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcXG4tXFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XFxuK1xcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XFxuLVxcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcztcXG4rXFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xcbiBcXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XFxuIFxcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XFxuIFxcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xcbkBAIC0xNDg5LDYgKzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4gXFx0a2V5cy5ia2V5LmlwX3Byb3RvID0gdWRwID8gSVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDtcXG4gXFx0a2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTtcXG4gXFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcXG4rXFx0LyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi9cXG4rXFx0bWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO1xcbiBcXHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xcbiBcXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NDcuODM3NzIzNzY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE3MjE3MTgwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19TRUxGVEVTVFNcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX3NlbGZ0ZXN0X3J1blwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcFwiLFxuICAgIFwiX19zdG1tYWNfdGVzdF9sNGZpbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJ3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXIncyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBzaW5jZSB0aGVyZSBpcyBhIFBDSSBmcm9udGVuZCAoYHN0bW1hY19wY2kuY2ApIGZvciB0aGUgU1RNTUFDIGRyaXZlci4gVG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWdzIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5pbmRleCAxZGYyNmMyMTdmOWE3Li5hMmI5MTdkZDYwZTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbkBAIC0xNDMyLDExICsxNDMyLDExIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcbi1cdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzO1xuK1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XG4tXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7XG4rXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3MgPSB7IH07XG4gXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9O1xuIFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yICpkaXNzZWN0b3I7XG5AQCAtMTQ4OSw2ICsxNDg5LDggQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRrZXlzLmJrZXkuaXBfcHJvdG8gPSB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQO1xuIFx0a2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTtcbiBcdGtleXMua2V5LmRzdCA9IGh0b25zKGRzdCk7XG4rXHQvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqL1xuK1x0bWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO1xuIFx0bWFza3MubWFzay5zcmMgPSBzcmNfbWFzaztcbiBcdG1hc2tzLm1hc2suZHN0ID0gZHN0X21hc2s7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMTo0Ny44Mzc3MjUyOTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDc2MDQ4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoIGZvciB0aGUgc3RtbWFjIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGluaXRpYWxpemluZyBzb21lIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgc2V0dGluZyBgbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIElzIHRoaXMgZXZlbiBhIGNvZGUgcGF0aCB0aGF0J3MgcmVhbGlzdGljYWxseSByZWFjaGFibGU/XG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBpcyB0aGUgRXRoZXJuZXQgZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MnIHJhbmdlIG9mIEV0aGVybmV0IE1BQ3MuIE5vdywgY2FuIHRoaXMgZHJpdmVyIGJlIHJlYWNoZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBRRU1VPyBBbmQgaXMgaXQgZW11bGF0ZWQgYXQgYWxsPyBJIHJlbWVtYmVyIGBzdG1tYWNgIGlzIHR5cGljYWxseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuICBNb3N0IG9mIHRoZSB0aW1lIGl0IGlzIHVzZWQgaW4gdmFyaW91cyBBUk0gU29DcywgbGlrZSBBbGx3aW5uZXIgYW5kIFJvY2tjaGlwLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgYHN0bW1hY2AgZHJpdmVyIG5hdGl2ZWx5LCBidXQgaXMgdGhlcmUgc29tZSBraW5kIG9mIHZpcnR1YWwgcGxhdGZvcm0gd2hlcmUgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZT9cblxuQSBrZXkgdGhpbmcgaXMgdGhhdCB0aGlzIGlzIHdpdGhpbiB0aGUgKnNlbGZ0ZXN0KiBjb2RlLCBgc3RtbWFjX3NlbGZ0ZXN0cy5jYC4gU2VsZnRlc3RzIGFyZSB0eXBpY2FsbHkgdHJpZ2dlcmVkIHRocm91Z2ggdG9vbHMgbGlrZSBgZXRodG9vbGAuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciBoYXMgdG8gcHJvYmUsIGFuZCBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIHNlbGZ0ZXN0IHdvbid0IGV2ZW4gcnVuLlxuXG5IbW0sIG1heWJlIHRoZXJlJ3MgYSBQQ0kgdmVyc2lvbiBvZiBgc3RtbWFjYD8gVGhhdCBtaWdodCBiZSBhIGNsdWUuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNgLiBMZXQncyBzZWUgaWYgdGhpcyBQQ0kgdmVyc2lvbiBtaWdodCBvZmZlciBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoaXMgc2VsZnRlc3QgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgaW52b2tlZCBhbmQgaWYgaXQncyBmZWFzaWJsZSB0byB0cmlnZ2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NTQuMzEzNzc3MDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk0NTUxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc4Nj1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4MDY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIyLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NDE9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg0ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDktXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTI9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg3MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTgtXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MDE9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkxOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjAtXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NDQ9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NTM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjctXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTcwPXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk4MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgxLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05ODQ9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTk0OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDMtXFx0LnNldHVwID0gYWRsbl9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGdhbGlsZW9fc3RtbWFjX2RtaV9kYXRhID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NC1cXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTktXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA2OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgaW90MjA0MF9zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVxcdC5mdW5jID0gaW90MjA0MF9zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE5LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTEyMDpcXHRyZXQgPSBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIocGRldiwgcXVhcmtfcGNpX2RtaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTQ1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHF1YXJrX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVxcdC5zZXR1cCA9IHF1YXJrX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyNjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVxcdHN0cnVjdCBpbnRlbF9wcml2X2RhdGEgKmludGVsX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgzLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTMyPXN0YXRpYyBpbnQgbG9vbmdzb25fZ21hY19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ21hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0My1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTE2NT1zdGF0aWMgaW50IGxvb25nc29uX2duZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MTc3OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGxvb25nc29uX2duZXRfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXFx0LnNldHVwID0gbG9vbmdzb25fZ25ldF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01MDEtXFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1MDI6XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cXHRzdHJ1Y3QgbG9vbmdzb25fZGF0YSAqbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cXHRwbGF0LVxcdTAwM2VmaXhfc29jX3Jlc2V0ID0gbG9vbmdzb25fZHdtYWNfZml4X3Jlc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVxcdGxkLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NDM6XFx0aW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQ0LVxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MTg4PXN0YXRpYyBpbnQgbW90b3Jjb21tX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjE5MzpcXHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTE5NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjA4PW1vdG9yY29tbV9kZWZhdWx0X3BsYXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGVcXHRcXHQ9IERXTUFDX0NPUkVfR01BQzQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MjQ5OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmRcXHRcXHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI1MC1cXHRwbGF0LVxcdTAwM2VyZXN1bWVcXHRcXHQ9IG1vdG9yY29tbV9yZXN1bWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjEyOmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjUtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyODppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6OTppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oOjEwOmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE4OnN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTkyOnN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxMjpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTU6XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2OlxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE3LVxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NTYuNTgzMjM4Njk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3MDE0Mjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTVE1NQUMgVGVzdGluZyBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfcGNpLmNgIGRyaXZlci4gVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpczogaG93IGlzIHRoaXMgdGVzdGVkIGJ5IFN5emthbGxlcj8gSXMgaXQgZW11bGF0ZWQgd2l0aGluIFFFTVU/IE5vLCBRRU1VIGRvZXNuJ3QgZGlyZWN0bHkgZW11bGF0ZSB0aGUgU1RNTUFDIFBDSSBpbnRlcmZhY2UsIEkga25vdyB0aGF0LiBCdXQgYHN0bW1hY2AgaXMgdXNlZCBhY3Jvc3MgbWFueSBwbGF0Zm9ybXMsIHNvIHRoZXJlICptdXN0KiBiZSBhIHdheSB0byB0ZXN0IGl0LiBJIHF1aWNrbHkgZGlzbWlzcyB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBgdmV0aGAgYW5kIGBtYWNzZWNgOyB0aGlzIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLCBzbyB0aG9zZSB3b3VsZG4ndCBiZSByZWxldmFudC5cblxuVGhlbiBJIHJlYWxpemVkIFN5emthbGxlciBtaWdodCBiZSBoaXR0aW5nIGEgbGltaXRhdGlvbi4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0aW9uIG9yIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZSwgdGhlIGZ1enplciB3b3VsZG4ndCBoYXZlIGFjY2Vzcy4gV2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgYW5kIGEgUENJIGZ1enplciwgZG9lc24ndCBpdD8gVGhlIFBDSSBvbmUgd29ya3MgYnkgaW50ZXJjZXB0aW5nIFBDSSBjb25maWcgc3BhY2UgcmVhZHMgYW5kIHdyaXRlcy5cblxuQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciAqZG9lc24ndCogZG8gZnVsbCBQQ0kgZW11bGF0aW9uIGluc2lkZSBRRU1VLCBsaWtlIGl0IGRvZXMgd2l0aCBVU0IgYW5kIGB2aGNpYC4gSXQgdXNlcyBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIGRvZXNuJ3QgaXQ/IEJ1dCAqdGhhdCogZG9lc24ndCBlbXVsYXRlIERNQSBvciBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9uczsgaXQncyBtb3JlIG9mIGEgcHJvYmUgdHJpZ2dlci4gU28sIGhvdyBhcmUgY29tcGxleCBkcml2ZXJzIGxpa2UgYHN0bW1hY2AgdGVzdGVkP1xuXG5BaCwgcmlnaHQuIElmIGl0J3MgcGFydCBvZiBhIHNlbGZ0ZXN0LCBpdCdzIHRyaWdnZXJlZCB2aWEgYGV0aHRvb2xgLiBTbywgdGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhIHNlbGZ0ZXN0IHdlIGNhbiByZWFjaC4gTGV0J3MgY2hlY2sgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFllcywgaGVyZSB3ZSBhcmUsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgbG9va3MgbGlrZSBhIHNlbGZ0ZXN0LiBUaGlzIGlzIHRoZSBwYXRoIGZvcndhcmQhIEknbGwgbG9vayBhdCB0aGF0IHRlc3QgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjA1LjU1MzM4MzQ0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NTA2ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDI4LSNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQzMC1cXHRcXHRcXHRcXHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTUzOS0jZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTQwOnN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTQ3PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTU1ND1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3Aoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NTg6XFx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIDAsIGR1bW15X3BvcnQsIDAsIH4wLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1NjE9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTY1OlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1Njg9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjowNy45NDA5MDA1MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzNzkwOTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBzdG1tYWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGluaXRpYWxpemluZyBga2V5c2AgYW5kIGBtYXNrc2AgdG8gZW1wdHkgZGljdGlvbmFyaWVzLCBhbmQgdGhlbiBzZXR0aW5nIGBtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmZgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCBcIlJpZ2h0LCB0aGlzIHNlZW1zIGxpa2UgYSBmaXggZm9yIHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2l0aGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAuXCJcblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCBgc3RtbWFjYCBpcyBhICpoYXJkd2FyZSogZHJpdmVyLCBteSBpbnN0aW5jdCBpcyBcIm5vLCBub3QgZGlyZWN0bHkuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBoYXJkd2FyZS5cIiBVbmxlc3MsIG9mIGNvdXJzZSwgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGhhcyBmb3VuZCBhIGNsZXZlciB3YXkgdG8gYWNjZXNzIGl0LiBCdXQgd2FpdCwgSSB0aG91Z2h0IHN5emthbGxlciBkaWRuJ3QgdHlwaWNhbGx5IGRvIGZ1bGwgaGFyZHdhcmUgZW11bGF0aW9uIHdpdGgsIHNheSwgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLCB0aGF0J3Mgbm90IGl0cyB0eXBpY2FsIE1PLlxuXG5CdXQgaG9sZCBvbi4uLnN5emthbGxlciAqZGlkKiByZXBvcnQgdGhpcyBidWcuIEhvdyBpcyB0aGF0IHBvc3NpYmxlPyBNYXliZSBpdCdzIHVzaW5nIHNvbWUgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHRyaWNrLiBIbW1tLCBjb3VsZCBpdCBiZSBgdmhjaWAgb3IgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoaXMgaXMgZGVmaW5pdGVseSBzdG1tYWMuLi5zbyB0aGF0J3Mgbm90IHRoZSBhbnN3ZXIuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHZpcnR1YWwgZHJpdmVyIGNvbXBvbmVudCBpbnZvbHZlZCwgb3IgaWYgc3l6a2FsbGVyIGlzIHNvbWVob3cgdHJpZ2dlcmluZyB0aGlzIHBhdGguIFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgUENJIHByb2JlIHVzaW5nIGBzeXpfcGNpYCBvciBieSB3cml0aW5nIHRvIGAvc3lzL2J1cy9wY2kvZHJpdmVycy8uLi4vYmluZGAuXG5cbkJ1dCwgdG8gZ2V0IHRvIHRoZSBzZWxmdGVzdHMsIEkga25vdyB0aGUgZHJpdmVyIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgYSBuZXRkZXYuIE5vdyB0aGF04oCZcyB0aGUgcmVhbCBxdWVzdGlvbi4gQ2FuIGBzdG1tYWNgIGFjdHVhbGx5IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSByZWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIG1vcmUgY2xlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6MTkuMzc4ODEyNjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTQxMDUwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaV9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMDc6ICogc3RtbWFjX3BjaV9wcm9iZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMTctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIxMj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVxcdC5pZF90YWJsZSA9IHN0bW1hY19pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE1OlxcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNi1cXHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjIxLjQ5MjkyMjk1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTEyOTEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgUHJvYmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvcjsgdGhpcyBpcyB3aGVyZSB3ZSdyZSBnb2luZyB0byBpbml0aWFsaXplIHRoZSBTVE1NQUMgZHJpdmVyIHdoZW4gaXQncyBpZGVudGlmaWVkIG9uIGEgUENJIGJ1cy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtIGZpcnN0LCBob3cgaXQgZmluZHMgdGhlIFNUTU1BQyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBkZXZpY2Ugc3RydWN0dXJlLlxuXG5JJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIFBDSSBwcm9iZSBwcm9jZXNzOiByZWdpc3RlcmluZyB0aGUgZGV2aWNlLCBhbGxvY2F0aW5nIHJlc291cmNlcywgbWFwcGluZyBJL08gcmVnaW9ucywgYW5kIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGludGVycnVwdC4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCB1c2VzIHRoZSBQQ0kgZGV2aWNlIElEIHRhYmxlIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBTVE1NQUMgY2hpcC4gQW55IGNsZXZlciB0cmlja3MgaW4gdGhlcmUgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCB2YXJpYW50cz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWNjb3VudGVkIGZvciwgYW5kIHdoZXJlP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlc291cmNlIGFsbG9jYXRpb24g4oCTIGhvdyBtdWNoIG1lbW9yeSBpcyBpdCByZXF1ZXN0aW5nPyBIb3cgaXMgaXQgaGFuZGxpbmcgRE1BPyBBcmUgdGhlcmUgYW55IERNQSBjb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBQQ0kgYnVzIGl0c2VsZiwgbGlrZSBidXMgbWFzdGVyaW5nIG9yIGxhdGVuY3kgcmVxdWlyZW1lbnRzLCBiZWluZyBhZGRyZXNzZWQ/IEFuZCBpbXBvcnRhbnRseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIGJlaW5nIGhhbmRsZWQgZ3JhY2VmdWxseT9cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBpbnRlcnJ1cHQgc2V0dXAuIEhvdyBpcyB0aGUgaW50ZXJydXB0IGJlaW5nIGNvbmZpZ3VyZWQ/IElzIGl0IHVzaW5nIE1TSSBvciBsZWdhY3kgaW50ZXJydXB0cz8gQW55IGludGVycnVwdCBtYXNraW5nIG9yIHNoYXJpbmcgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXJzIG9yIGVkZ2UtdHJpZ2dlcmVkIGNvbnNpZGVyYXRpb25zIGZvciB0aGlzIGhhcmR3YXJlPyBBbnkgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgZm9yIGhhbmRsaW5nIGludGVycnVwdCBjb2FsZXNjaW5nLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBpdD9cblxuVGhlbiwgSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIEhvdyBpcyB0aGUgTUFDIGFkZHJlc3MgYmVpbmcgZGVyaXZlZD8gQXJlIHRoZXJlIGFueSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIGhlcmU/IEhvdydzIHRoZSBjbG9jayBzZXR1cCBoYW5kbGVkPyBJJ2xsIGJlIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHRoZSBwcm9wZXIgcG93ZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpZiBpdCdzIG9uIGEgbW9iaWxlIG9yIHBvd2VyLXNlbnNpdGl2ZSBkZXZpY2UuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgYW55IG9mIHRoZSByZXNvdXJjZSByZXF1ZXN0cyBmYWlsPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkLCBhbmQgYXJlIHRoZXkgcmVwb3J0ZWQgY29ycmVjdGx5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwIGlmIHRoZSBwcm9iZSBmYWlscyBtaWR3YXk/IEFueSBjaGFuY2VzIGZvciBhIGJ1ZmZlciBvdmVyZmxvdz9cblxuSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuIGhlcmUsIGJ1dCBJJ20gZWFnZXIgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6MjkuMjg0MjE3MzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExODpcXHRzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIDExOTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiAxMjA6XFx0e1xcbiAxMjE6XFx0XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbiAxMjI6XFx0XFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0O1xcbiAxMjM6XFx0XFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuIDEyNDpcXHRcXHRpbnQgcmV0O1xcbiAxMjU6XFx0XFx0aW50IGk7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDEyODpcXHRcXHRpZiAoIXBsYXQpXFxuIDEyOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiAxMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKCpwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhKSxcXG4gMTMzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiAxMzQ6XFx0XFx0aWYgKCFwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhKVxcbiAxMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZyksXFxuIDEzOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiAxNDA6XFx0XFx0aWYgKCFwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0LyogRW5hYmxlIHBjaSBkZXZpY2UgKi9cXG4gMTQ0OlxcdFxcdHJldCA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpIHtcXG4gMTQ2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBFUlJPUjogZmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXFxcblxcXCIsXFxuIDE0NzpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDE0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiBkZXZpY2UgKi9cXG4gMTUyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQQ0lfU1REX05VTV9CQVJTOyBpKyspIHtcXG4gMTUzOlxcdFxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID09IDApXFxuIDE1NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTU1OlxcdFxcdFxcdHJlcy5hZGRyID0gcGNpbV9pb21hcF9yZWdpb24ocGRldiwgaSwgU1RNTUFDX1JFU09VUkNFX05BTUUpO1xcbiAxNTY6XFx0XFx0XFx0aWYgKElTX0VSUihyZXMuYWRkcikpXFxuIDE1NzpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMuYWRkcik7XFxuIDE1ODpcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdH1cXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbiAxNjQ6XFx0XFx0aWYgKHJldClcXG4gMTY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdHJlcy53b2xfaXJxID0gcGRldi1cXHUwMDNlaXJxO1xcbiAxNjg6XFx0XFx0cmVzLmlycSA9IHBkZXYtXFx1MDAzZWlycTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2V0c29lZSA9IDE7XFxuIDE3MTpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1yeHBlZSA9IDE7XFxuIDE3MjpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1lc3RlZSA9IDE7XFxuIDE3MzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1yeGVlID0gMTtcXG4gMTc0OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlbXR4ZWUgPSAxO1xcbiAxNzU6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VlcHNpID0gMTtcXG4gMTc2OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlZWRwcCA9IDE7XFxuIDE3NzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZXBydHllbiA9IDE7XFxuIDE3ODpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZXRtb3V0ZW4gPSAxO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRwbGF0LVxcdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuIDE4MTpcXHRcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG4gMTg0OlxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0LyoqXFxuIDE4NzpcXHQgKiBzdG1tYWNfcGNpX3JlbW92ZVxcbiAxODg6XFx0ICpcXG4gMTg5OlxcdCAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgcG9pbnRlclxcbiAxOTA6XFx0ICogRGVzY3JpcHRpb246IHRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIG1haW4gdG8gZnJlZSB0aGUgbmV0IHJlc291cmNlcy5cXG4gMTkxOlxcdCAqL1xcbiAxOTI6XFx0c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDE5MzpcXHR7XFxuIDE5NDpcXHRcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gMTk1OlxcdH1cXG4gMTk2OlxcdFxcbiAxOTc6XFx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cXG4gMTk4OlxcdCNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TVE1NQUNcXHRcXHQweDA3MDBcXG4gMTk5OlxcdFxcbiAyMDA6XFx0I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG4gMjAxOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuIDIwNDpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG4gMjA1OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG4gMjA2OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuIDIwNzpcXHRcXHR7fVxcbiAyMDg6XFx0fTtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcXG4gMjEzOlxcdFxcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXFxuIDIxNDpcXHRcXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXFxuIDIxNTpcXHRcXHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxcbiAyMTY6XFx0XFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxcbiAyMTc6XFx0XFx0LmRyaXZlciAgICAgICAgID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjoyOS4yODQ0MTE1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzI1NzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRmFsc2VseSBUcmlnZ2VyZWQgRHJpdmVyIFByb2JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgc3RtbWFjYCBkcml2ZXIgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEl0J3MgdXNpbmcgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgdnVsbmVyYWJpbGl0eSB0byBhdHRhY2tzIHRocm91Z2ggdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCB0aGF0IFN5emthbGxlciBpcyB1c2luZy4gSSBrbm93IHRoYXQgYHN5el9wY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgaW4gdGhpcyBjYXNlLCBgMHgwNzAwYCBhbmQgYDB4MTEwOGAsIHdoaWNoIGhhcHBlbnMgdG8gbWF0Y2ggdGhlIGBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNgIGRlZmluaXRpb24uXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2hlbiBTeXprYWxsZXIgaW5qZWN0cyB0aGlzIFwiZmFrZVwiIGRldmljZT8gQmVjYXVzZSBgc3RtbWFjX3BjaV9wcm9iZWAgd2lsbCBiZSBjYWxsZWQsIGFuZCB0aGF0IGluIHR1cm4gKndpbGwqIGNhbGwgYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYHN0bW1hY19kdnJfcHJvYmVgIGlzIHJvYnVzdCBlbm91Z2guIERvZXMgaXQgY29ycmVjdGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBoYXJkd2FyZSBpcyBhY3R1YWxseSAqdGhlcmUqPyBJZiBpdCBkb2Vzbid0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBwcm9iaW5nIG9uIG5vbi1leGlzdGVudCBoYXJkd2FyZS4gVGltZSB0byBnbyBvdmVyIGBzdG1tYWNfZHZyX3Byb2JlYCdzIHNvdXJjZSBjb2RlLCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjM0LjMxNzY3MTkzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMDg3NDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM9MjgzPXN0YXRpYyBpbnQgZHdjX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozMzA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM9Mzc0PXN0YXRpYyBpbnQgaXBxODA2eF9nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYzo0ODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jPTQyPXN0YXRpYyBpbnQgbHBjMTh4eF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYzo2ODpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM9NDc9c3RhdGljIGludCBtZXNvbjZfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYzo3MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9NDg9c3RhdGljIGludCByem4xX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjY4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM9MzU9c3RhdGljIGludCBzb3BoZ29fZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jOjY1OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XFx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAzLVxcdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjA4LVxcdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5OlxcdCAqIHNvIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XFx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3Ny1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxMz12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTUtXFx0XFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzg5PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6Nzc5MTpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDk0OiAqIHN0bW1hY19kdnJfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTUtICogQGRldjogZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwMi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDM6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNC1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE0OlxcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODExNS1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBsYXRfZGF0LVxcdTAwM2VleGl0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE5LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjM2LjYyODU1NDI2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY1MTYyNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYC4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIFNUTU1BQyBkcml2ZXIsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgaWRlbnRpZmllZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IGJyb3VnaHQgb25saW5lLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZGV2aWNlIHRyZWUgcGFyc2luZywgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBjbG9jayBhbmQgUEhZIHNldHVwLCB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gLSBldmVyeXRoaW5nLiBLbm93aW5nIHRoZSBjb3JlIG9mIHRoaXMgcHJvYmUgZnVuY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgaG93IHdlbGwgaXQgaGFuZGxlcyBhIHZhcmlldHkgb2YgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBwcm9iaW5nIHNlcXVlbmNlIGhlcmUsIGNoZWNraW5nIGZvciBjb21wYXRpYmxlIGRldmljZSBJRHMsIG1hcHBpbmcgbWVtb3J5LCBhbmQgaG9wZWZ1bGx5IHNvbWUgbmljZSBlcnJvciBoYW5kbGluZyB0byBlbnN1cmUgYSByb2J1c3Qgc3lzdGVtLiBMZXTigJlzIHNlZSB3aGF0IHN1cnByaXNlcyBhcmUgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjk1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6NDAuOTkzNzE5NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3OTE6XFx0c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbjc3OTI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG43NzkzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuNzc5NDpcXHR7XFxuNzc5NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7XFxuNzc5NjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXY7XFxuNzc5NzpcXHRcXHRpbnQgaSwgcmV0ID0gMDtcXG43Nzk4OlxcdFxcdHU4IHJ4cTtcXG43Nzk5OlxcdFxcbjc4MDA6XFx0XFx0aWYgKCFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZyB8fCAhcGxhdF9kYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZXBibCkge1xcbjc4MDE6XFx0XFx0XFx0ZGV2X2VycihkZXZpY2UsIFxcXCJpbnZhbGlkIERNQSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG43ODAyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4MDM6XFx0XFx0fVxcbjc4MDQ6XFx0XFxuNzgwNTpcXHRcXHRuZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZGV2aWNlLCBzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSxcXG43ODA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNVExfTUFYX1RYX1FVRVVFUywgTVRMX01BWF9SWF9RVUVVRVMpO1xcbjc4MDc6XFx0XFx0aWYgKCFuZGV2KVxcbjc4MDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzgwOTpcXHRcXG43ODEwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldmljZSk7XFxuNzgxMTpcXHRcXG43ODEyOlxcdFxcdHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG43ODEzOlxcdFxcdHByaXYtXFx1MDAzZWRldmljZSA9IGRldmljZTtcXG43ODE0OlxcdFxcdHByaXYtXFx1MDAzZWRldiA9IG5kZXY7XFxuNzgxNTpcXHRcXG43ODE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSsrKVxcbjc4MTc6XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cy5yeHFfc3RhdHNbaV0ubmFwaV9zeW5jcCk7XFxuNzgxODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVRMX01BWF9UWF9RVUVVRVM7IGkrKykge1xcbjc4MTk6XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XFxuNzgyMDpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODIxOlxcdFxcdH1cXG43ODIyOlxcdFxcbjc4MjM6XFx0XFx0cHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxcbjc4MjQ6XFx0XFx0XFx0ZGV2bV9uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhkZXZpY2UsIHN0cnVjdCBzdG1tYWNfcGNwdV9zdGF0cyk7XFxuNzgyNTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXhzdGF0cy5wY3B1X3N0YXRzKVxcbjc4MjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzgyNzpcXHRcXG43ODI4OlxcdFxcdHN0bW1hY19zZXRfZXRodG9vbF9vcHMobmRldik7XFxuNzgyOTpcXHRcXHRwcml2LVxcdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XFxuNzgzMDpcXHRcXHRwcml2LVxcdTAwM2VwbGF0ID0gcGxhdF9kYXQ7XFxuNzgzMTpcXHRcXHRwcml2LVxcdTAwM2Vpb2FkZHIgPSByZXMtXFx1MDAzZWFkZHI7XFxuNzgzMjpcXHRcXHRwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJlcy1cXHUwMDNlYWRkcjtcXG43ODMzOlxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZW11bHRpX21zaV9lbiA9XFxuNzgzNDpcXHRcXHRcXHQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pO1xcbjc4MzU6XFx0XFxuNzgzNjpcXHRcXHRwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWlycSA9IHJlcy1cXHUwMDNlaXJxO1xcbjc4Mzc6XFx0XFx0cHJpdi1cXHUwMDNld29sX2lycSA9IHJlcy1cXHUwMDNld29sX2lycTtcXG43ODM4OlxcdFxcdHByaXYtXFx1MDAzZXNmdHlfaXJxID0gcmVzLVxcdTAwM2VzZnR5X2lycTtcXG43ODM5OlxcdFxcbjc4NDA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XFxuNzg0MTpcXHRcXHRcXHRyZXQgPSBzdG1tYWNfbXNpX2luaXQocHJpdiwgcmVzKTtcXG43ODQyOlxcdFxcdFxcdGlmIChyZXQpXFxuNzg0MzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc4NDQ6XFx0XFx0fVxcbjc4NDU6XFx0XFxuNzg0NjpcXHRcXHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXFx1MDAzZW1hYykpXFxuNzg0NzpcXHRcXHRcXHRldGhfaHdfYWRkcl9zZXQocHJpdi1cXHUwMDNlZGV2LCByZXMtXFx1MDAzZW1hYyk7XFxuNzg0ODpcXHRcXG43ODQ5OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXFx1MDAzZWRldik7XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXFxuNzg1MjpcXHRcXHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0cHJpdi1cXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xcbjc4NTU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzKVxcbjc4NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzg1NzpcXHRcXG43ODU4OlxcdFxcdC8qIEFsbG9jYXRlIHdvcmtxdWV1ZSAqL1xcbjc4NTk6XFx0XFx0cHJpdi1cXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwic3RtbWFjX3dxXFxcIik7XFxuNzg2MDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXdxKSB7XFxuNzg2MTpcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcImZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG43ODYyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuNzg2MzpcXHRcXHRcXHRnb3RvIGVycm9yX3dxX2luaXQ7XFxuNzg2NDpcXHRcXHR9XFxuNzg2NTpcXHRcXG43ODY2OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlc2VydmljZV90YXNrLCBzdG1tYWNfc2VydmljZV90YXNrKTtcXG43ODY3OlxcdFxcbjc4Njg6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHQvKiBPdmVycmlkZSB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzIGlmIHN1cHBsaWVkIFhYWCBDUlMgWFhYXFxuNzg3MTpcXHRcXHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuNzg3MjpcXHRcXHQgKi9cXG43ODczOlxcdFxcdGlmICgocGh5YWRkciBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNiAocGh5YWRkciBcXHUwMDNjPSAzMSkpXFxuNzg3NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XFxuNzg3NTpcXHRcXG43ODc2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KSB7XFxuNzg3NzpcXHRcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODc4OlxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg3OTpcXHRcXHRcXHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXFxuNzg4MDpcXHRcXHRcXHQgKiBhc3NlcnQgKyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cXG43ODgxOlxcdFxcdFxcdCAqL1xcbjc4ODI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg4MzpcXHRcXHRcXHRcXHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4ODQ6XFx0XFx0fVxcbjc4ODU6XFx0XFxuNzg4NjpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19haGJfcnN0KTtcXG43ODg3OlxcdFxcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxcbjc4ODg6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxcXG5cXFwiLFxcbjc4ODk6XFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG43ODkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0MC45OTQwMTQzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI5NDYyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gbW9yZSBvZiB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgd2Ugd2VyZSBsb29raW5nIGF0IHRoYXQgZWFybGllciwgYW5kIEkgbmVlZCBhIGJldHRlciBncmFzcCBvbiBleGFjdGx5IGhvdyBpdCdzIGhhbmRsaW5nIHRoZSBpbml0aWFsIHByb2JlIGFuZCBzZXR1cC4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHZhcmlvdXMgZGV2aWNlIHJlc291cmNlcy4gTWVtb3J5IG1hcHBpbmcsIGludGVycnVwdCBhbGxvY2F0aW9uLCBjbG9jayBlbmFibGVtZW50IOKAkyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoYXQgYWxsIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBvYnNlcnZlIGFsbCB0aGUgZGlmZmVyZW50IGVycm9yIHBhdGhzIGl0IGNvdWxkIHRha2UgZHVyaW5nIHRoZSBpbml0aWFsIHByb2JpbmcgcGhhc2UuIFdoYXQgZG9lcyBpdCBkbyBpZiBpdCBjYW4ndCBtYXAgdGhlIHJlZ2lzdGVycyBjb3JyZWN0bHk/IFdoYXQgaGFwcGVucyBpZiB0aGUgaW50ZXJydXB0cyBkb24ndCByZWdpc3Rlcj8gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBlZGdlIGNhc2VzIGlzIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBoYXBweSBwYXRoLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIGRyaXZlcidzIGxpZmVjeWNsZS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdCBsaW5lIGJ5IGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjQ1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0NS45MjM0ODAwMjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4OTE6XFx0XFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXFxuNzg5MjpcXHRcXHR1ZGVsYXkoMTApO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG43ODk1OlxcdFxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbjc4OTY6XFx0XFx0aWYgKHJldClcXG43ODk3OlxcdFxcdFxcdGdvdG8gZXJyb3JfaHdfaW5pdDtcXG43ODk4OlxcdFxcbjc4OTk6XFx0XFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXFxuNzkwMDpcXHRcXHQgKi9cXG43OTAxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNV8yMClcXG43OTAyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWRjaGUgPSBmYWxzZTtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0c3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIocHJpdik7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XFxuNzkwNzpcXHRcXG43OTA4OlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XFxuNzkwOTpcXHRcXHRuZGV2LVxcdTAwM2V4c2tfdHhfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xcbjc5MTA6XFx0XFxuNzkxMTpcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFxuNzkxMjpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9SWENTVU07XFxuNzkxMzpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXG43OTE0OlxcdFxcdFxcdFxcdCAgICAgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZO1xcbjc5MTU6XFx0XFxuNzkxNjpcXHRcXHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcXG43OTE3OlxcdFxcdGlmICghcmV0KSB7XFxuNzkxODpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbjc5MTk6XFx0XFx0fVxcbjc5MjA6XFx0XFxuNzkyMTpcXHRcXHRzdG1tYWNfc2V0X2dzb19mZWF0dXJlcyhuZGV2KTtcXG43OTIyOlxcdFxcbjc5MjM6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuc3BoZW4gXFx1MDAyNlxcdTAwMjZcXG43OTI0OlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XFxuNzkyNTpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcXG43OTI2OlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlID0gdHJ1ZTtcXG43OTI3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVxcdTAwM2VzcGhfY2FwYWJsZTtcXG43OTI4OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlNQSCBmZWF0dXJlIGVuYWJsZWRcXFxcblxcXCIpO1xcbjc5Mjk6XFx0XFx0fVxcbjc5MzA6XFx0XFxuNzkzMTpcXHRcXHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcXG43OTMyOlxcdFxcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcXG43OTMzOlxcdFxcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3JcXG43OTM0OlxcdFxcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxcbjc5MzU6XFx0XFx0ICovXFxuNzkzNjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGgpXFxuNzkzNzpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGg7XFxuNzkzODpcXHRcXHRlbHNlXFxuNzkzOTpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XFxuNzk0MDpcXHRcXG43OTQxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XFxuNzk0MjpcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSxcXG43OTQzOlxcdFxcdFxcdFxcdFxcdERNQV9CSVRfTUFTSyhwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XFxuNzk0NDpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjc5NDU6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNpbmcgJWQvJWQgYml0cyBETUEgaG9zdC9kZXZpY2Ugd2lkdGhcXFxcblxcXCIsXFxuNzk0NjpcXHRcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xcbjc5NDc6XFx0XFxuNzk0ODpcXHRcXHRcXHRcXHQvKlxcbjc5NDk6XFx0XFx0XFx0XFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXFxuNzk1MDpcXHRcXHRcXHRcXHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxcbjc5NTE6XFx0XFx0XFx0XFx0ICovXFxuNzk1MjpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUKSlcXG43OTUzOlxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWVhbWUgPSB0cnVlO1xcbjc5NTQ6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTU1OlxcdFxcdFxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG43OTU2OlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG43OTU3OlxcdFxcdFxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiRmFpbGVkIHRvIHNldCBETUEgTWFza1xcXFxuXFxcIik7XFxuNzk1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yX2h3X2luaXQ7XFxuNzk1OTpcXHRcXHRcXHRcXHR9XFxuNzk2MDpcXHRcXG43OTYxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcXG43OTYyOlxcdFxcdFxcdH1cXG43OTYzOlxcdFxcdH1cXG43OTY0OlxcdFxcbjc5NjU6XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gbmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUE7XFxuNzk2NjpcXHRcXHRuZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xcbjc5Njc6XFx0I2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VEXFxuNzk2ODpcXHRcXHQvKiBCb3RoIG1hYzEwMCBhbmQgZ21hYyBzdXBwb3J0IHJlY2VpdmUgVkxBTiB0YWcgZGV0ZWN0aW9uICovXFxuNzk2OTpcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xcbjc5NzA6XFx0XFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlKSkge1xcbjc5NzE6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XFxuNzk3MjpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlaHdfdmxhbl9lbiA9IHRydWU7XFxuNzk3MzpcXHRcXHR9XFxuNzk3NDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC52bGhhc2gpIHtcXG43OTc1OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcXG43OTc2OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcXG43OTc3OlxcdFxcdH1cXG43OTc4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnZsaW5zKVxcbjc5Nzk6XFx0XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XFxuNzk4MDpcXHQjZW5kaWZcXG43OTgxOlxcdFxcdHByaXYtXFx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xcbjc5ODI6XFx0XFxuNzk4MzpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XFxuNzk4NDpcXHRcXG43OTg1OlxcdFxcdC8qIEluaXRpYWxpemUgUlNTICovXFxuNzk4NjpcXHRcXHRyeHEgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlO1xcbjc5ODc6XFx0XFx0bmV0ZGV2X3Jzc19rZXlfZmlsbChwcml2LVxcdTAwM2Vyc3Mua2V5LCBzaXplb2YocHJpdi1cXHUwMDNlcnNzLmtleSkpO1xcbjc5ODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcnNzLnRhYmxlKTsgaSsrKVxcbjc5ODk6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnNzLnRhYmxlW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgcnhxKTtcXG43OTkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0NS45MjM3NTkwODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NTU4NTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIHN0bW1hY19od19pbml0IEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIGBzdG1tYWNfaHdfaW5pdGAgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIGFyZSBiZWluZyBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgU1RNTUFDJ3Mgc3BlY2lmaWMgb3BlcmF0aW9uYWwgbW9kZSBhbmQgdGhlIGV4cGVjdGVkIGRhdGFwYXRoLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcyByZWxhdGVkIHRvIGNsb2NrIGdhdGluZywgUEhZIGluaXRpYWxpemF0aW9uLCBETUEgZW5naW5lIHNldHVwIChkZXNjcmlwdG9ycywgYnVyc3Qgc2l6ZXMsIHRocmVzaG9sZHMpLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgYXMgdGhlcmUgYXJlIG9mdGVuIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZXNlIHNldHRpbmdzLiBBbnkgdW5leHBlY3RlZCByZWdpc3RlciB2YWx1ZXMgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGNvdWxkIGhpbnQgYXQgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyJ3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGhhcmR3YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYW55IG5lY2Vzc2FyeSBwb3dlci11cCBzZXF1ZW5jZXMgY29ycmVjdGx5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIFBIWSBvciBpbnRlcm5hbCBjbG9ja3MsIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEknbSBjaGVja2luZyB0aGF0IHRoZSBpbml0aWFsIGhhcmR3YXJlIHN0YXRlIGlzIGNvaGVyZW50IGFuZCByZWFkeSBmb3IgdGhlIE1BQydzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjQ5LjgxOTM0Njg0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMzY3MzI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNjA9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTU6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5Ni0gKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQwMjpzdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NzkxPXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg5NC1cXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc4OTU6XFx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODk2LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjUyLjY0MzAyNDc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDcwMzM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggYHN0bW1hY19od19pbml0YC5cblxuKipJbml0aWFsIFRob3VnaHRzIG9uIGBzdG1tYWNfaHdfaW5pdGAqKlxuXG5BbHJpZ2h0LCBkaXZpbmcgaW50byBgc3RtbWFjX2h3X2luaXRgLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciB0YWtlcyBwbGFjZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIGEgaGlnaC1sZXZlbCBmdW5jdGlvbiB0aGF0IGNhbGxzIHNldmVyYWwgb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIG9yIGlzIGl0IGEgZGVlcCBkaXZlIGludG8gdGhlIHJlZ2lzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24/IEnigJltIGJldHRpbmcgb24gdGhlIGZvcm1lciwgYnV0IHlvdSBuZXZlciBrbm93LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCdzIHNlZSBpZiBpdCBoYW5kbGVzIHRoZSBjbG9jayBzZXR1cCwgRE1BIGNvbmZpZ3VyYXRpb24sIE1BQyBhZGRyZXNzIHByb2dyYW1taW5nLCBhbmQgaW50ZXJydXB0IGVuYWJsaW5nLiBUaGUgcG93ZXIgbWFuYWdlbWVudCBzZXF1ZW5jZSB3aWxsIGJlIGltcG9ydGFudCB0b28uIEkgYW50aWNpcGF0ZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGhlcmUsIHRhaWxvcmVkIHRvIHRoZSBzcGVjaWZpYyBTVE1NQUMgaGFyZHdhcmUgcmV2aXNpb24gYW5kIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcGFzc2VkIGluIGF0IGJvb3QuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gZW5zdXJlIHRoaXMgcm91dGluZSBsZWF2ZXMgdGhlIGhhcmR3YXJlIGluIGEgZGVmaW5lZCwgb3BlcmF0aW9uYWwgc3RhdGUuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgYXV0aG9yIGFwcHJvYWNoZWQgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzIsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo1Ny4yOTAwNjAxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwMixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc0MDI6XFx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuNzQwMzpcXHR7XFxuNzQwNDpcXHRcXHRpbnQgcmV0O1xcbjc0MDU6XFx0XFxuNzQwNjpcXHRcXHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xcbjc0MDc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxcbjc0MDg6XFx0XFx0XFx0Y2hhaW5fbW9kZSA9IDE7XFxuNzQwOTpcXHRcXHRwcml2LVxcdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xcbjc0MTA6XFx0XFxuNzQxMTpcXHRcXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbjc0MTI6XFx0XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG43NDEzOlxcdFxcdGlmIChyZXQpXFxuNzQxNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc0MTU6XFx0XFxuNzQxNjpcXHRcXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXFxuNzQxNzpcXHRcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuNzQxODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG43NDE5OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkRNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQyMDpcXHRcXG43NDIxOlxcdFxcdFxcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXFxuNzQyMjpcXHRcXHRcXHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxcbjc0MjM6XFx0XFx0XFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XFxuNzQyNDpcXHRcXHRcXHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cXG43NDI1OlxcdFxcdFxcdCAqL1xcbjc0MjY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVxcdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xcbjc0Mjc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10ID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXFx1MDAyNlxcdTAwMjZcXG43NDI4OlxcdFxcdFxcdFxcdFxcdCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XFxuNzQyOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XFxuNzQzMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cXG43NDMxOlxcdFxcdFxcdFxcdFxcdFxcdChCSVQocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcXHUwMDNjXFx1MDAzYyA1KTtcXG43NDMyOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxcbjc0MzM6XFx0XFx0XFx0XFx0XFx0XFx0aWxvZzIocHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XFxuNzQzNDpcXHRcXHRcXHR9XFxuNzQzNTpcXHRcXG43NDM2OlxcdFxcdFxcdC8qIFRYQ09FIGRvZXNuJ3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cXG43NDM3OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXFxuNzQzODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBmYWxzZTtcXG43NDM5OlxcdFxcdFxcdGVsc2VcXG43NDQwOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAudHhfY29lO1xcbjc0NDE6XFx0XFxuNzQ0MjpcXHRcXHRcXHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cXG43NDQzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lO1xcbjc0NDQ6XFx0XFxuNzQ0NTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXFxuNzQ0NjpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xcbjc0NDc6XFx0XFx0XFx0ZWxzZSBpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXFxuNzQ0ODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xcbjc0NDk6XFx0XFxuNzQ1MDpcXHRcXHRcXHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XFxuNzQ1MTpcXHRcXHR9IGVsc2Uge1xcbjc0NTI6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDUzOlxcdFxcdH1cXG43NDU0OlxcdFxcbjc0NTU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSkge1xcbjc0NTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2U7XFxuNzQ1NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NTg6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxcbjc0NTk6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiQ09FIFR5cGUgJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtKTtcXG43NDYwOlxcdFxcdH1cXG43NDYxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UpXFxuNzQ2MjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDYzOlxcdFxcbjc0NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCkge1xcbjc0NjU6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiV2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDY2OlxcdFxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cXHUwMDNlZGV2aWNlLCAxKTtcXG43NDY3OlxcdFxcdFxcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXFx1MDAzZWRldmljZSwgcHJpdi1cXHUwMDNld29sX2lycSk7XFxuNzQ2ODpcXHRcXHR9XFxuNzQ2OTpcXHRcXG43NDcwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDcxOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XFxuNzQ3MjpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3MzpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0NzQ6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xcbjc0NzU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcXG43NDc2OlxcdFxcdH1cXG43NDc3OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDc4OlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XFxuNzQ3OTpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ4MDpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0ODE6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xcbjc0ODI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcztcXG43NDgzOlxcdFxcdH1cXG43NDg0OlxcdFxcbjc0ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplIFxcdTAwMjZcXHUwMDI2XFxuNzQ4NjpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemUpIHtcXG43NDg3OlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldmljZSxcXG43NDg4OlxcdFxcdFxcdFxcdCBcXFwiUnggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDg5OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9maWZvX3NpemUpO1xcbjc0OTA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemU7XFxuNzQ5MTpcXHRcXHR9XFxuNzQ5MjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUgXFx1MDAyNlxcdTAwMjZcXG43NDkzOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUgXFx1MDAzZSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSkge1xcbjc0OTQ6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0OTU6XFx0XFx0XFx0XFx0IFxcXCJUeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0OTY6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2ZpZm9fc2l6ZSk7XFxuNzQ5NzpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZTtcXG43NDk4OlxcdFxcdH1cXG43NDk5OlxcdFxcbjc1MDA6XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXZsYW5fZmFpbF9xX2VuID1cXG43NTAxOlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1ZMQU5fRkFJTF9RX0VOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6NTcuMjkwNTAzNDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDcwNzU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU1RNTUFDIEluaXRpYWxpemF0aW9uIGluIGEgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgaXQncyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2Aga2lja3MgaW4sIHJlYWRpbmcgZnJvbSB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0eSByZWdpc3Rlci4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIkFoYSEgVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0b3IgbWlnaHQgdHJpcCB1cyB1cC5cIiBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCBhY3R1YWxseSBwcmVzZW50IOKAkyB3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpcyB0aGUgY2FzZSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBzeXprYWxsZXIgYW5kIGl0cyBlbXVsYXRlZCBlbnZpcm9ubWVudCDigJMgdGhhdCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHJlYWQgd2lsbCBsaWtlbHkgcmV0dXJuIGdhcmJhZ2UuIEVpdGhlciB6ZXJvLCBvciBhIHBvdGVudGlhbGx5IHJhbmRvbSB2YWx1ZSBvZiAweGZmZmZmZmZmLlxuXG5Ob3csIEknbSByZW1lbWJlcmluZyBzeXprYWxsZXIncyBgc3l6X3BjaWAgY2FsbHMuIEl0IGRvZXNuJ3QgZnVsbHkgZW11bGF0ZSB0aGUgUENJIGRldmljZSdzIG1lbW9yeSBzcGFjZTsgaXQganVzdCBtYXBzICpzb21lKiBkdW1teSBtZW1vcnkgZm9yIHRob3NlIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLiBTbywgcmVhZGluZyBmcm9tIHRob3NlIEJBUnMgaXMgZ29pbmcgdG8gZ2l2ZSB1cyBiYWNrIHdoYXRldmVyJ3MgaW4gdGhhdCBkdW1teSBtZW1vcnkgc3BhY2UsIHByb2JhYmx5IHplcm8sIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIGlmIHdlIGdldCBhIHplcm8gYmFjaywgd2UgYXJlIGdvaW5nIHRvIHNldCBgcHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydGAgdG8gemVybywgd2hpY2ggbWVhbnMgd2UgYXJlIGdvaW5nIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhdGggb2YgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplIHRoZSBkZXZpY2UuXG5cbkJ1dCB0aGVuLCB0aGUgY29kZSBjb250aW51ZXMgdG8gYHN0bW1hY19kdnJfcHJvYmVgLCB3aGljaCByZWdpc3RlcnMgdGhlIG5ldGRldi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBEb2VzIHRoZSBsYWNrIG9mIHJlYWwgaGFyZHdhcmUgY2F1c2UgdGhlIGRyaXZlciBwcm9iZSB0byBmYWlsPyBEb2VzIGl0IGNoZWNrIHRoZXNlIHZhbHVlcz8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHJlYWxseSB0aGVyZS4gTGV0J3MgZGlnIGJhY2sgaW50byBgc3RtbWFjX2h3aWZfaW5pdGAgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowMy42Mzc1ODE5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODY3MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdpZl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTQ9c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjMxNzppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9Njk3PWludCBzdG1tYWNfcmVzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk4OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzQwMj1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxMS1cXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQxMjpcXHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxMy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowNS4xNDYyNjEwMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzgwMzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgaW5pdGlhbGl6ZWQuIFdoYXQgYXJlIHRoZSBrZXkgc3RlcHMgaW52b2x2ZWQ/IEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhcmVhcyB3aGVyZSB0aGluZ3MgbWlnaHQgZ28gd3JvbmcsIG9yIHBsYWNlcyB3aGVyZSB0aGUgZHJpdmVyIGNvdWxkIGJlIG9wdGltaXplZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzLCBvZiBjb3Vyc2Ug4oCTIGhvdyBpdCB0YWxrcyB0byB0aGUgTUFDLCB3aGF0IHJlZ2lzdGVycyBpdCdzIHNldHRpbmcgdXAsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE1BIGVuZ2luZSBpZiBpdCBoYXMgb25lLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyB0b28uIEhvdyByb2J1c3QgaXMgdGhpcyBpbml0aWFsaXphdGlvbj8gRG9lcyBpdCBoYW5kbGUgdmFyaW91cyBoYXJkd2FyZSByZXZpc2lvbnMgZ3JhY2VmdWxseT8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBzbyBJIGNhbiBtZW50YWxseSBtYXAgaXQgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEFuZCBvZiBjb3Vyc2UsIEknbGwgYmUgY29uc2lkZXJpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zOyBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgTUFDIGZvciBsb3ctcG93ZXIgc3RhdGVzLCBpZiBhcHBsaWNhYmxlPyBGaW5hbGx5LCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgb3IgdmVuZG9yLXNwZWNpZmljIG1hZ2ljIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24sIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBjb3VsZCBiZSBlYXNpbHkgbWlzc2VkIGFuZCBjYXVzZSBpc3N1ZXMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGluaXRpYWxpemF0aW9uIG9yZGVycywgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1Yi1jb21wb25lbnRzIG9mIHRoZSBkcml2ZXIgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowOS4yMTQwNjc0NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE3OlxcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gMzE4OlxcdHtcXG4gMzE5OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gMzIwOlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcXG4gMzIyOlxcdFxcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcXG4gMzIzOlxcdFxcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xcbiAzMjQ6XFx0XFx0aW50IHJldDtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXFxuIDMyOTpcXHRcXHRwcml2LVxcdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldmljZSwgc2l6ZW9mKCptYWMpLCBHRlBfS0VSTkVMKTtcXG4gMzMyOlxcdFxcdGlmICghbWFjKVxcbiAzMzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdC8qIENoZWNrIGZvciBIVyBzcGVjaWZpYyBzZXR1cCBmaXJzdCAqL1xcbiAzMzY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cCkge1xcbiAzMzc6XFx0XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XFxuIDMzODpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMzk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcXG4gMzQyOlxcdFxcdH1cXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1hYy1cXHUwMDNlaXJxX2N0cmxfbG9jayk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDM0OTpcXHRcXHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVxcdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xcbiAzNTA6XFx0XFx0aWYgKCFlbnRyeSkge1xcbiAzNTE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsXFxuIDM1MjpcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxcXG5cXFwiLFxcbiAzNTM6XFx0XFx0XFx0XFx0dmVyc2lvbi5zbnBzdmVyLCBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDLFxcbiAzNTQ6XFx0XFx0XFx0XFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xcbiAzNjA6XFx0XFx0bWFjLVxcdTAwM2VkZXNjID0gbWFjLVxcdTAwM2VkZXNjID8gOiBlbnRyeS1cXHUwMDNlZGVzYztcXG4gMzYxOlxcdFxcdG1hYy1cXHUwMDNlZG1hID0gbWFjLVxcdTAwM2VkbWEgPyA6IGVudHJ5LVxcdTAwM2VkbWE7XFxuIDM2MjpcXHRcXHRtYWMtXFx1MDAzZW1hYyA9IG1hYy1cXHUwMDNlbWFjID8gOiBlbnRyeS1cXHUwMDNlbWFjO1xcbiAzNjM6XFx0XFx0bWFjLVxcdTAwM2VwdHAgPSBtYWMtXFx1MDAzZXB0cCA/IDogZW50cnktXFx1MDAzZWh3dGltZXN0YW1wO1xcbiAzNjQ6XFx0XFx0bWFjLVxcdTAwM2Vtb2RlID0gbWFjLVxcdTAwM2Vtb2RlID8gOiBlbnRyeS1cXHUwMDNlbW9kZTtcXG4gMzY1OlxcdFxcdG1hYy1cXHUwMDNldGMgPSBtYWMtXFx1MDAzZXRjID8gOiBlbnRyeS1cXHUwMDNldGM7XFxuIDM2NjpcXHRcXHRtYWMtXFx1MDAzZW1tYyA9IG1hYy1cXHUwMDNlbW1jID8gOiBlbnRyeS1cXHUwMDNlbW1jO1xcbiAzNjc6XFx0XFx0bWFjLVxcdTAwM2Vlc3QgPSBtYWMtXFx1MDAzZWVzdCA/IDogZW50cnktXFx1MDAzZWVzdDtcXG4gMzY4OlxcdFxcdG1hYy1cXHUwMDNldmxhbiA9IG1hYy1cXHUwMDNldmxhbiA/IDogZW50cnktXFx1MDAzZXZsYW47XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHByaXYtXFx1MDAzZWh3ID0gbWFjO1xcbiAzNzE6XFx0XFx0cHJpdi1cXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cXHUwMDNlcmVncy5mcGVfcmVnO1xcbiAzNzI6XFx0XFx0cHJpdi1cXHUwMDNlcHRwYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLnB0cF9vZmY7XFxuIDM3MzpcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgZW50cnktXFx1MDAzZXJlZ3MubW1jX29mZjtcXG4gMzc0OlxcdFxcdG1lbWNweShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2Nsb2NrX29wcywgZW50cnktXFx1MDAzZXB0cCxcXG4gMzc1OlxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHB0cF9jbG9ja19pbmZvKSk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChlbnRyeS1cXHUwMDNlZXN0KVxcbiAzNzg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZXN0YWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLmVzdF9vZmY7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdC8qIEVudHJ5IGZvdW5kICovXFxuIDM4MTpcXHRcXHRpZiAobmVlZHNfc2V0dXApIHtcXG4gMzgyOlxcdFxcdFxcdHJldCA9IGVudHJ5LVxcdTAwM2VzZXR1cChwcml2KTtcXG4gMzgzOlxcdFxcdFxcdGlmIChyZXQpXFxuIDM4NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODU6XFx0XFx0fVxcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBTYXZlIHF1aXJrcywgaWYgbmVlZGVkIGZvciBwb3N0ZXJpb3IgdXNlICovXFxuIDM4ODpcXHRcXHRwcml2LVxcdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVxcdTAwM2VxdWlya3M7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdHJldHVybiAwO1xcbiAzOTE6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowOS4yMTQxNjkxNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNDcyODYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaWdnaW5nIGludG8gUG90ZW50aWFsIGBzdG1tYWNgIERyaXZlciBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNgIGRyaXZlciBjb2RlLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IGEgcG9zc2libGUgZmFpbHVyZSBwb2ludC4gVGhlIHJvdXRpbmUgYHN0bW1hY19nZXRfdmVyc2lvbmAgaXMgcmVzcG9uc2libGUgZm9yIGdyYWJiaW5nIHRoZSBoYXJkd2FyZSB2ZXJzaW9uLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQsIGFuZCBoZXJlJ3MgdGhlIHJ1Yiwgd2hhdCBpZiBpdCByZXR1cm5zIHplcm8/IFRoYXQncyB3aGVuIHRoaW5ncyBjb3VsZCBnZXQgaW50ZXJlc3RpbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBhIHZlcnNpb24gemVybyBjb3VsZCBwb3NzaWJseSBjYXVzZSBpc3N1ZXMgd2l0aCB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLCBpdCdzIHBvc3NpYmxlIHRoYXQgYHN0bW1hY19od2lmX2ZpbmRgIG1pZ2h0IHRoZW4gZmFpbC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIGxvZ2ljIG9mIGBzdG1tYWNfaHdpZl9maW5kYCBhbmQgYHN0bW1hY19nZXRfdmVyc2lvbmAsIGRvdWJsZS1jaGVja2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGRlcGVuZGVuY2llcyB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjEzLjMxODkwMDM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI1MTczNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfdmVyc2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzoxNC44NDQwNzc3NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4NDUxNTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHN0bW1hY19nZXRfdmVyc2lvbmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIGNvZGUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGNydWNpYWwgY29tcG9uZW50IGZvciBhbnkgbmV0d29ya2luZyBkZXZpY2UuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZHJpdmVyIHJlcG9ydHMgaXRzIG93biB2ZXJzaW9uLCBwZXJoYXBzIGZvciBjb21wYXRpYmlsaXR5IGNoZWNrcyBvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCwgc3RvcmVkLCBhbmQgcHJlc2VudGVkLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBTVE1NQUMgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHByZXR0eSBnb29kLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucy4gSSBhbSByZWFkeSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHF1aXJrcyBvciBzdWJ0bGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJvYnVzdCwgaGFuZGxpbmcgYW55IHBvc3NpYmxlIGVycm9ycyBncmFjZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjIwLjcyODU5NTUwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gIDIyOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gKnZlcilcXG4gIDIzOlxcdHtcXG4gIDI0OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gIDI1OlxcdFxcdHVuc2lnbmVkIGludCB2ZXJzaW9uX29mZnNldDtcXG4gIDI2OlxcdFxcdHUzMiB2ZXJzaW9uO1xcbiAgMjc6XFx0XFxuICAyODpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSAwO1xcbiAgMjk6XFx0XFx0dmVyLVxcdTAwM2VkZXZfaWQgPSAwO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfTUFDMTAwKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQylcXG4gIDM1OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xcbiAgMzY6XFx0XFx0ZWxzZVxcbiAgMzc6XFx0XFx0XFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDNF9WRVJTSU9OO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cXHUwMDNlaW9hZGRyICsgdmVyc2lvbl9vZmZzZXQpO1xcbiAgNDA6XFx0XFx0aWYgKHZlcnNpb24gPT0gMCkge1xcbiAgNDE6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gIDQyOlxcdFxcdFxcdHJldHVybjtcXG4gIDQzOlxcdFxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXFxcblxcXCIsXFxuICA0NjpcXHRcXHRcXHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxcbiAgNDc6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19TTlBTVkVSLCB2ZXJzaW9uKSk7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdHZlci1cXHUwMDNlc25wc3ZlciA9IEZJRUxEX0dFVChEV01BQ19TTlBTVkVSLCB2ZXJzaW9uKTtcXG4gIDUwOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG4gIDUxOlxcdFxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xcbiAgNTI6XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVxcdTAwM2VodztcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNoYWluX21vZGUpIHtcXG4gIDU5OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkNoYWluIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuICA2MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfQ0hBSU5fTU9ERTtcXG4gIDYxOlxcdFxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IFxcdTAwMjZjaGFpbl9tb2RlX29wcztcXG4gIDYyOlxcdFxcdH0gZWxzZSB7XFxuICA2MzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSaW5nIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuICA2NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfUklOR19NT0RFO1xcbiAgNjU6XFx0XFx0XFx0bWFjLVxcdTAwM2Vtb2RlID0gXFx1MDAyNnJpbmdfbW9kZV9vcHM7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgc3RtbWFjX2R3bWFjMV9xdWlya3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNzA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzoyMC43Mjg2NzM4MzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjUxMDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVmVyc2lvbiBDaGVjayBcdTAwMjYgSGFyZHdhcmUgSW50ZXJmYWNlIERpc2NvdmVyeSoqXG5cbkFscmlnaHQsIHNvIGlmIHRoZSBzeXN0ZW0ncyBzdGFydGluZyBmcm9tIHZlcnNpb24gMCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgdmVyLVx1MDAzZXNucHN2ZXJgIGlzIGluaXRpYWxpemVkIHRvIDAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBiYXNlIGNvbmRpdGlvbi4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB3aGVuIHdlIHRoZW4gY2FsbCB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLCB3ZSdyZSBwYXNzaW5nIGluIHRoYXQgYHNucHN2ZXJgIHZhcmlhYmxlLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBoYXMgYmVlbiBkZWxpYmVyYXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSB0aGluayBhYm91dCBob3cgdGhlIGBzdG1tYWNfaHdpZl9maW5kYCByb3V0aW5lIG9wZXJhdGVzIG9uIGEgbmV3LCB1bmNvbmZpZ3VyZWQsIHBvc3NpYmx5IGV2ZW4gdW5pbml0aWFsaXplZCBoYXJkd2FyZS4gSXMgdGhlIGludGVudGlvbiB0byBoYXZlIGBzdG1tYWNfaHdpZl9maW5kYCBmaWd1cmUgb3V0IHRoZSB2ZXJzaW9uLCBvciBoYXMgdGhpcyBhbHJlYWR5IGJlZW4gcHJlLWRldGVybWluZWQ/IEFuZCBpZiBpdCdzIHRoZSBsYXR0ZXIsIGlzIHRoYXQgYXNzdW1lZCBpbml0aWFsaXphdGlvbiBzdWZmaWNpZW50IGZvciBjb3JyZWN0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgaW50ZXJmYWNlIHNldHVwPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGF0IHplcm8gdmFsdWUgaXMgaW50ZXJwcmV0ZWQgd2l0aGluIHRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24gaXRzZWxmLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjI1LjQ1NTE4NjEwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzY1NzgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdpZl9maW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5NDpzdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzQ4LVxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozNDk6XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzUwLVxcdGlmICghZW50cnkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MjYuOTIyODQ4NTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNDAwMTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9maW5kYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgc3RtbWFjX2h3aWZfZmluZGAuIEknbSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIuIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIGxpa2VseSBpbnZvbHZlZCBpbiBwcm9iaW5nIHRoZSBkZXZpY2UgdHJlZSBvciBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgb3IgbWF5YmUgZXZlbiB1c2luZyBwbGF0Zm9ybSBkYXRhLCB0byBpZGVudGlmeSBhbmQgY29uZmlndXJlIHRoZSBzcGVjaWZpYyBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGluc3RhbmNlLiBJIGFudGljaXBhdGUgc2VlaW5nIGxvZ2ljIGZvciB0cmF2ZXJzaW5nIGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0IG9mIHBvdGVudGlhbCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBvciBwZXJoYXBzIHVzaW5nIGEgbW9yZSBkaXJlY3QgbWV0aG9kIGlmIHRoZSBoYXJkd2FyZSBpcyB0aWdodGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUgLSB3aGF0IGhhcHBlbnMgaWYgaXQgZmFpbHMgdG8gZmluZCBhIHZhbGlkIGhhcmR3YXJlIGludGVyZmFjZT8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gU3BlY2lmaWMgZXJyb3IgY29kZXMgdGhhdCBhcmUgcmV0dXJuZWQ/IExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHdlbGwgbXkgYXNzdW1wdGlvbnMgYWxpZ24gd2l0aCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBJIGFsc28gaG9wZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaGVyZSBpcyBpbnR1aXRpdmUsIGdpdmVuIHRoYXQgdGhlc2UgaGFyZHdhcmUgaW50ZXJmYWNlcyBjYW4gYmUgYSBiaXQgdHJpY2t5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA1MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjMxLjMyNjg1Mjg1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcXG4gMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMxNTpcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gMzE4OlxcdHtcXG4gMzE5OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gMzIwOlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcXG4gMzIyOlxcdFxcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcXG4gMzIzOlxcdFxcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xcbiAzMjQ6XFx0XFx0aW50IHJldDtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXFxuIDMyOTpcXHRcXHRwcml2LVxcdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldmljZSwgc2l6ZW9mKCptYWMpLCBHRlBfS0VSTkVMKTtcXG4gMzMyOlxcdFxcdGlmICghbWFjKVxcbiAzMzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdC8qIENoZWNrIGZvciBIVyBzcGVjaWZpYyBzZXR1cCBmaXJzdCAqL1xcbiAzMzY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cCkge1xcbiAzMzc6XFx0XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XFxuIDMzODpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMzk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcXG4gMzQyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MzEuMzI2OTkxODcyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzI3MjQ3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb24gYW5kIFBvdGVudGlhbCBEYXRhIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgbG9naWMsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIElmIHRoZSB2YXJpYWJsZSBgc25wc3ZlcmAgaXMgemVybywgdGhlbiBhbnkgdmFsdWUgb2YgYGVudHJ5LVx1MDAzZW1pbl9pZGAgZ3JlYXRlciB0aGFuIHplcm8gd2lsbCBhdXRvbWF0aWNhbGx5IHNhdGlzZnkgdGhlIGNvbmRpdGlvbiBgc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkYC4gVGhhdCdzIGp1c3QgYmFzaWMgYXJpdGhtZXRpYywgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBjb2RlLlxuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGBzdG1tYWNfaHdgIGFycmF5LiBJJ20gYXNzdW1pbmcgaXQgaGFzIHNvbWUgaW1wb3J0YW5jZSBvciByZWxldmFuY2UgZ2l2ZW4gaXRzIHByZXNlbmNlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgcm9sZSB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbmFsIHN0YXRlbWVudCdzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGNvZGUgdG8gZXZhbHVhdGUgaXRzIHVzZSBhbmQgc2lnbmlmaWNhbmNlIGluIHJlbGF0aW9uIHRvIGBzbnBzdmVyYCBhbmQgYGVudHJ5LVx1MDAzZW1pbl9pZGAgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MzkuMzk5NzE5NDY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI4Njg4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od1xcXFxbXFxcXF1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjctXFx0aW50ICgqcXVpcmtzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTI5LVxcdC8qIE5PVEU6IE5ldyBIVyB2ZXJzaW9ucyBzaGFsbCBnbyB0byB0aGUgZW5kIG9mIHRoaXMgdGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6NDEuNDI4NDE2MzU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTc0NTg1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjX2h3YCBBcnJheSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfaHdgIGFycmF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCBwdXJwb3NlLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgU1RNTUFDIGRyaXZlciBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgYXJyYXkgbGlrZWx5IGhvbGRzIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMgYW5kIHBvdGVudGlhbGx5IGJpdGZpZWxkIGRlZmluaXRpb25zIGZvciB0aGUgdmFyaW91cyBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGNvbnRyb2xsZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBwYXR0ZXJuczogQXJlIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBncm91cGVkIGJ5IGZ1bmN0aW9uIChlLmcuLCB0cmFuc21pdCwgcmVjZWl2ZSwgY29udHJvbCk/IElzIHRoZXJlIGFueSBvYnZpb3VzIGFkZHJlc3Npbmcgc2NoZW1lIHVzZWQgd2l0aGluIHRoZSBhcnJheT8gRG9lcyBpdCBlbXBsb3kgYW55IGxvb2t1cCB0YWJsZXMgdG8gdHJhbnNsYXRlIGJldHdlZW4gbG9naWNhbCByZWdpc3RlciBuYW1lcyBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzPyBJJ20gYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0aW5nIHRvIERNQSBzZXR1cCwgZGVzY3JpcHRvciByaW5nIGNvbnRyb2wsIGludGVycnVwdCBtYXNrcywgYW5kIFBIWSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbnMsIGFtb25nIG90aGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIGVhY2ggYXJyYXkgZWxlbWVudOKAlGFyZSB0aGV5IGp1c3QgaW50ZWdlcnMgb3IgY3VzdG9tIHN0cnVjdHMgcmVmbGVjdGluZyBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgbGF5b3V0cz8gQW5kIGNydWNpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZGVmaW5pdGlvbnMgYXJlIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBkcml2ZXIsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKGByZWFkbGAsIGB3cml0ZWxgLCBldGMuKS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IG1hcCB0aGUgYXJyYXkncyBjb250ZW50cyB0byB0aGUgU1RNTUFDJ3MgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCB0aGUgbG93ZXN0IGxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ3OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjQ4LjMyNTg3NzYxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyODpcXHR9IHN0bW1hY19od1tdID0ge1xcbiAxMjk6XFx0XFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xcbiAxMzA6XFx0XFx0e1xcbiAxMzE6XFx0XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfTUFDMTAwLFxcbiAxMzI6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDEzMzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTM0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxMzU6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDEzNjpcXHRcXHRcXHR9LFxcbiAxMzc6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxMzg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxcbiAxMzk6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd21hYzEwMF9vcHMsXFxuIDE0MDpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cCxcXG4gMTQxOlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXFxuIDE0MjpcXHRcXHRcXHQubW9kZSA9IE5VTEwsXFxuIDE0MzpcXHRcXHRcXHQudGMgPSBOVUxMLFxcbiAxNDQ6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAxNDU6XFx0XFx0XFx0LnNldHVwID0gZHdtYWMxMDBfc2V0dXAsXFxuIDE0NjpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE0NzpcXHRcXHR9LCB7XFxuIDE0ODpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxcbiAxNDk6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDE1MDpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTUxOlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxNTI6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDE1MzpcXHRcXHRcXHR9LFxcbiAxNTQ6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxNTU6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMDBfZG1hX29wcyxcXG4gMTU2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWMxMDAwX29wcyxcXG4gMTU3OlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwLFxcbiAxNTg6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyxcXG4gMTU5OlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMTYwOlxcdFxcdFxcdC50YyA9IE5VTEwsXFxuIDE2MTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE2MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXFxuIDE2MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE2NDpcXHRcXHR9LCB7XFxuIDE2NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTY2OlxcdFxcdFxcdC5taW5faWQgPSAwLFxcbiAxNjc6XFx0XFx0XFx0LnJlZ3MgPSB7XFxuIDE2ODpcXHRcXHRcXHRcXHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXFxuIDE2OTpcXHRcXHRcXHRcXHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXFxuIDE3MDpcXHRcXHRcXHRcXHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXFxuIDE3MTpcXHRcXHRcXHR9LFxcbiAxNzI6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxcbiAxNzM6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzRfZG1hX29wcyxcXG4gMTc0OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0X29wcyxcXG4gMTc1OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxNzY6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE3NzpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAxNzg6XFx0XFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiAxNzk6XFx0XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNF90Y19vcHMsXFxuIDE4MDpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE4MTpcXHRcXHRcXHQuZXN0ID0gXFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXFxuIDE4MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzRfc2V0dXAsXFxuIDE4MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjNF9xdWlya3MsXFxuIDE4NDpcXHRcXHR9LCB7XFxuIDE4NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTg2OlxcdFxcdFxcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMDAsXFxuIDE4NzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTg4OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcXG4gMTg5OlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcXG4gMTkwOlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcXG4gMTkxOlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3bWFjNV9mcGVfcmVnLFxcbiAxOTI6XFx0XFx0XFx0fSxcXG4gMTkzOlxcdFxcdFxcdC5kZXNjID0gXFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcXG4gMTk0OlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHdtYWM0X2RtYV9vcHMsXFxuIDE5NTpcXHRcXHRcXHQubWFjID0gXFx1MDAyNmR3bWFjNDEwX29wcyxcXG4gMTk2OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxOTc6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE5ODpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAxOTk6XFx0XFx0XFx0Lm1vZGUgPSBcXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXFxuIDIwMDpcXHRcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbiAyMDE6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAyMDI6XFx0XFx0XFx0LmVzdCA9IFxcdTAwMjZkd21hYzUxMF9lc3Rfb3BzLFxcbiAyMDM6XFx0XFx0XFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxcbiAyMDQ6XFx0XFx0XFx0LnF1aXJrcyA9IE5VTEwsXFxuIDIwNTpcXHRcXHR9LCB7XFxuIDIwNjpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMjA3OlxcdFxcdFxcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMTAsXFxuIDIwODpcXHRcXHRcXHQucmVncyA9IHtcXG4gMjA5OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcXG4gMjEwOlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcXG4gMjExOlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcXG4gMjEyOlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3bWFjNV9mcGVfcmVnLFxcbiAyMTM6XFx0XFx0XFx0fSxcXG4gMjE0OlxcdFxcdFxcdC5kZXNjID0gXFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcXG4gMjE1OlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHdtYWM0MTBfZG1hX29wcyxcXG4gMjE2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0MTBfb3BzLFxcbiAyMTc6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHdtYWNfdmxhbl9vcHMsXFxuIDIxODpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2c3RtbWFjX3B0cCxcXG4gMjE5OlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXFxuIDIyMDpcXHRcXHRcXHQubW9kZSA9IFxcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcXG4gMjIxOlxcdFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuIDIyMjpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDIyMzpcXHRcXHRcXHQuZXN0ID0gXFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXFxuIDIyNDpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzRfc2V0dXAsXFxuIDIyNTpcXHRcXHRcXHQucXVpcmtzID0gTlVMTCxcXG4gMjI2OlxcdFxcdH0sIHtcXG4gMjI3OlxcdFxcdFxcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzo0OC4zMjU5NjAxODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0ODk4NjcxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhlIGBzbnBzdmVyYCB2YWx1ZSBpcyB6ZXJvLCB3aWxsIHN0aWxsIGZpbmQgYSBtYXRjaCwgd2hpY2ggc2VlbXMgb2RkIGJ1dCBtYWtlcyBzZW5zZSBiZWNhdXNlIG9mIHRoZSBgbWluX2lkID0gMGAgZW50cnkgZm9yIGBEV01BQ19DT1JFX0dNQUNgIGFuZCBgRFdNQUNfQ09SRV9HTUFDNGAuIFRoaXMgYWxsb3dzIGBzdG1tYWNfaHdpZl9pbml0YCB0byBzdWNjZWVkLCBhbmQgY29uc2VxdWVudGx5LCBgc3RtbWFjX2h3X2luaXRgIGFsc28gd29ya3MuXG5cbkZyb20gdGhlcmUsIGBzdG1tYWNfZHZyX3Byb2JlYCBwcm9jZWVkcyB0byByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UuIEJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gYmFja3RyYWNrIHNsaWdodGx5LiBgc3RtbWFjX2h3X2luaXRgIGRvZXMgY2FsbCBgc3RtbWFjX2h3aWZfaW5pdGAsIGFuZCB0aGVuIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSXQgc2VlbXMgdGhhdCBpZiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AgcmV0dXJucyAwLCBpdCBzaW1wbHkgcHJpbnRzIGEgbWVzc2FnZSBhYm91dCBtaXNzaW5nIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVycyBhbmQgY29udGludWVzLiBObyBmYXRhbCBlcnJvciBpcyB0cmlnZ2VyZWQuXG5cblNvLCAqdGhlbiogYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0ZGV2IHVzaW5nIGByZWdpc3Rlcl9uZXRkZXZgLiBCdXQgSSBzaG91bGQgYmUgY2VydGFpbjsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNhbGwgZXhwbGljaXRseSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uIGFnYWluLCB0byBjb25maXJtIGhvdyBgcmVnaXN0ZXJfbmV0ZGV2YCBpcyBiZWluZyBjYWxsZWQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBmbG93IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjU5LjgxNTgyOTIwMloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTAyMDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTE9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA1NDpcXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDU1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODEyOD12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMzc6XFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04NDA0PXN0YXRpYyBpbnQgX19pbml0IHN0bW1hY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MDktXFx0XFx0c3RtbWFjX2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihTVE1NQUNfUkVTT1VSQ0VfTkFNRSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4NDEwOlxcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2c3RtbWFjX25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTg0MTY9c3RhdGljIHZvaWQgX19leGl0IHN0bW1hY19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTgtI2lmZGVmIENPTkZJR19ERUJVR19GU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODQxOTpcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2c3RtbWFjX25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MjAtXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN0bW1hY19mc19kaXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDowMS4xMjQ4NTI5MTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NjU5MDIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIncyBUZXN0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgcmVsZXZhbnQgYmVjYXVzZSBpdCB1c2VzIGByZWdpc3Rlcl9uZXRkZXZgLiBUaGUgZmFjdCB0aGF0IGBzeXprYWxsZXJgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIG1lYW5zIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBhbmQgdGhhdCBpbiB0dXJuIHJlZ2lzdGVycyBhIG5ldHdvcmsgZGV2aWNlLCByaWdodD8gSW50ZXJlc3RpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgc3l6a2FsbGVyYCBjYW4gdGhlbiBsZXZlcmFnZSBgZXRodG9vbGAgdG8gcnVuIHRlc3RzIG9uIHRoaXMgbmV3bHkgcmVnaXN0ZXJlZCBuZXRkZXYuXG5cblNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCB3aXRoIGhvdyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBldGh0b29sYCBpcyB0aGUga2V5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBzZWxmdGVzdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBkcml2ZXIncyBmcmFtZXdvcmsuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIGhvdyByb2J1c3RseSB0aGV5J3JlIGludGVncmF0ZWQgYW5kIHRoZSBhdHRhY2sgc3VyZmFjZSB0aGF0IGNyZWF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjExLjg5MDc1NzY0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTQ5NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfdGVzdF9sNGZpbHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE0MjE9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sM2ZpbHRfc2Eoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0MjgtI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNDI5OnN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDA6c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NDEtXFx0XFx0XFx0XFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDc6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NTQ6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgMCwgZHVtbXlfcG9ydCwgMCwgfjAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1OS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjE6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2NTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY2LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2ODpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGVzdCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3Mi1cXHRcXHQubmFtZSA9IFxcXCJMNCBEQSBUQ1AgRmlsdGVyaW5nICAgICAgICBcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODczOlxcdFxcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzQtXFx0fSwge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODc1LVxcdFxcdC5uYW1lID0gXFxcIkw0IFNBIFRDUCBGaWx0ZXJpbmcgICAgICAgIFxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE4NzY6XFx0XFx0LmZuID0gc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3Ny1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzgtXFx0XFx0Lm5hbWUgPSBcXFwiTDQgREEgVURQIEZpbHRlcmluZyAgICAgICAgXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTg3OTpcXHRcXHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODgwLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg4MS1cXHRcXHQubmFtZSA9IFxcXCJMNCBTQSBVRFAgRmlsdGVyaW5nICAgICAgICBcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODgyOlxcdFxcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4ODMtXFx0fSwge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDoxMy4zNzAyNTg4NzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzNjE5NjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzdG1tYWNgIFNlbGZ0ZXN0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgYWRkcmVzc2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdpdGhpbiB0aGUgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBmdW5jdGlvbiBvZiB0aGUgYHN0bW1hY2AgZHJpdmVyLiBJIHNlZSB0aGF0IHRoZSB0ZXN0IGZ1bmN0aW9ucyBhcmUgbG9jYXRlZCBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheSwgYW5kIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgZXhlY3V0ZXMgdGhlbS4gVGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBhbmQgZXRodG9vbCwgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZXMgYGtleXNgIGFuZCBgbWFza3NgIHRvIGJlIGVtcHR5IGFuZCBzZXRzIHRoZSBgaXBfcHJvdG9gIG1hc2sgdG8gYDB4ZmZgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCwgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgYXJlIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZSBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCBhbG9uZyB3aXRoIGl0cyBjYWxsZXJzOiBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBpbmxpbmluZy4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhvd2V2ZXIsIGl0ICppcyogY2FsbGVkIGJ5IGEgbnVtYmVyIG9mIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgaW5jbHVkZWQgaW4gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuIFxuXG5BaCwgcmlnaHQuIFRoZSBhZGRyZXNzZXMgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGV0Yy4g4oCTIGFyZSB0YWtlbiBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheS4gU28sIHRoZXkgYXJlbid0IGlubGluZWQsIGJ1dCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgICptaWdodCogYmUgaW5saW5lZCB3aXRoaW4gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGlzIHRoZSBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjEuMDA2NDU3ODQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMzA0MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19zZWxmdGVzdF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDM0PXN0cnVjdCB0aW1lc3BlYzY0IHN0bW1hY19jYWxjX3Rhc19iYXNldGltZShrdGltZV90IG9sZF9iYXNlX3RpbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MzgtI2lmIElTX0VOQUJMRUQoQ09ORklHX1NUTU1BQ19TRUxGVEVTVFMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDM5OnZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0MC1cXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQ0Mj1pbnQgc3RtbWFjX3NlbGZ0ZXN0X2dldF9jb3VudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0My0jZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQ0NDpzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTA4LVxcdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjExMDk6XFx0LnNlbGZfdGVzdCA9IHN0bW1hY19zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVxcdC5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE5MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE5MDE6dm9pZCBzdG1tYWNfc2VsZnRlc3RfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE5MDItXFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0ZXN0LCB1NjQgKmJ1ZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjIuNTE3NzY4MjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDY0NTYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgU2VsZi1UZXN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGhvb2tlZCBpbnRvIGV0aHRvb2wncyBgLnNlbGZfdGVzdGAgY2FsbGJhY2suIE1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgdGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcHBlYXIgdG8gYmUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGl0c2VsZiwgYW5kIHRoZW4gdGhvc2Ugc3BlY2lmaWMgTDQgZmlsdGVyaW5nIHRlc3RzOiBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBJIHNob3VsZCBmb2N1cyBvbiB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0IGxvZ2ljLlxuXG5Ib2xkIG9uLi4uIEknbSBub3RpY2luZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsIGJlY2F1c2UgaXQgbWlnaHQgbm90IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGUgc2l6ZSBvZiB0aGF0IGZ1bmN0aW9uLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0IGdldHMgaW5saW5lZCBvciBub3QgYnkgbG9va2luZyBhdCB0aGUgb2JqZWN0IGNvZGUgc2l6ZS4gSWYgaXQncyBub3QgaW5saW5lZCwgSSdsbCBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCB3aGVuIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHRlc3RzLiBJZiBpdCBpcyBpbmxpbmVkIHRoZW4gSSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgb3ZlcmhlYWQsIGFuZCBjYW4gZXZhbHVhdGUgdGhlIHRlc3RzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3OSwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDoyOC43NjQyMjYzNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyOTpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4xNDMxOlxcdHtcXG4xNDMyOlxcdFxcdHN0cnVjdCB7XFxuMTQzMzpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XFxuMTQzNDpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcXG4xNDM1OlxcdFxcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xcbjE0MzY6XFx0XFx0c3RydWN0IHtcXG4xNDM3OlxcdFxcdFxcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7XFxuMTQzODpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XFxuMTQzOTpcXHRcXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3MgPSB7IH07XFxuMTQ0MDpcXHRcXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XFxuMTQ0MTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9O1xcbjE0NDI6XFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yICpkaXNzZWN0b3I7XFxuMTQ0MzpcXHRcXHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzO1xcbjE0NDQ6XFx0XFx0aW50IHJldCwgb2xkX2VuYWJsZSA9IDA7XFxuMTQ0NTpcXHRcXHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRpZiAoIXRjX2Nhbl9vZmZsb2FkKHByaXYtXFx1MDAzZWRldikpXFxuMTQ0ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTQ0OTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAubDNsNGZudW0pXFxuMTQ1MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTQ1MTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnNzLmVuYWJsZSkge1xcbjE0NTI6XFx0XFx0XFx0b2xkX2VuYWJsZSA9IHByaXYtXFx1MDAzZXJzcy5lbmFibGU7XFxuMTQ1MzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vyc3MuZW5hYmxlID0gZmFsc2U7XFxuMTQ1NDpcXHRcXHRcXHRzdG1tYWNfcnNzX2NvbmZpZ3VyZShwcml2LCBwcml2LVxcdTAwM2VodywgTlVMTCxcXG4xNDU1OlxcdFxcdFxcdFxcdFxcdCAgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSk7XFxuMTQ1NjpcXHRcXHR9XFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdGRpc3NlY3RvciA9IGt6YWxsb2Nfb2JqKCpkaXNzZWN0b3IpO1xcbjE0NTk6XFx0XFx0aWYgKCFkaXNzZWN0b3IpIHtcXG4xNDYwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTQ2MTpcXHRcXHRcXHRnb3RvIGNsZWFudXBfcnNzO1xcbjE0NjI6XFx0XFx0fVxcbjE0NjM6XFx0XFxuMTQ2NDpcXHRcXHRkaXNzZWN0b3ItXFx1MDAzZXVzZWRfa2V5cyB8PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyBGTE9XX0RJU1NFQ1RPUl9LRVlfQkFTSUMpO1xcbjE0NjU6XFx0XFx0ZGlzc2VjdG9yLVxcdTAwM2V1c2VkX2tleXMgfD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgRkxPV19ESVNTRUNUT1JfS0VZX1BPUlRTKTtcXG4xNDY2OlxcdFxcdGRpc3NlY3Rvci1cXHUwMDNlb2Zmc2V0W0ZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQ10gPSAwO1xcbjE0Njc6XFx0XFx0ZGlzc2VjdG9yLVxcdTAwM2VvZmZzZXRbRkxPV19ESVNTRUNUT1JfS0VZX1BPUlRTXSA9IG9mZnNldG9mKHR5cGVvZihrZXlzKSwga2V5KTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Y2xzID0ga3phbGxvY19vYmooKmNscyk7XFxuMTQ3MDpcXHRcXHRpZiAoIWNscykge1xcbjE0NzE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xNDcyOlxcdFxcdFxcdGdvdG8gY2xlYW51cF9kaXNzZWN0b3I7XFxuMTQ3MzpcXHRcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdGNscy1cXHUwMDNlY29tbW9uLmNoYWluX2luZGV4ID0gMDtcXG4xNDc2OlxcdFxcdGNscy1cXHUwMDNlY29tbWFuZCA9IEZMT1dfQ0xTX1JFUExBQ0U7XFxuMTQ3NzpcXHRcXHRjbHMtXFx1MDAzZWNvb2tpZSA9IGR1bW15X2Nvb2tpZTtcXG4xNDc4OlxcdFxcbjE0Nzk6XFx0XFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIDEpO1xcbjE0ODA6XFx0XFx0aWYgKCFydWxlKSB7XFxuMTQ4MTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjE0ODI6XFx0XFx0XFx0Z290byBjbGVhbnVwX2NscztcXG4xNDgzOlxcdFxcdH1cXG4xNDg0OlxcdFxcbjE0ODU6XFx0XFx0cnVsZS1cXHUwMDNlbWF0Y2guZGlzc2VjdG9yID0gZGlzc2VjdG9yO1xcbjE0ODY6XFx0XFx0cnVsZS1cXHUwMDNlbWF0Y2gua2V5ID0gKHZvaWQgKilcXHUwMDI2a2V5cztcXG4xNDg3OlxcdFxcdHJ1bGUtXFx1MDAzZW1hdGNoLm1hc2sgPSAodm9pZCAqKVxcdTAwMjZtYXNrcztcXG4xNDg4OlxcdFxcbjE0ODk6XFx0XFx0a2V5cy5ia2V5LmlwX3Byb3RvID0gdWRwID8gSVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDtcXG4xNDkwOlxcdFxcdGtleXMua2V5LnNyYyA9IGh0b25zKHNyYyk7XFxuMTQ5MTpcXHRcXHRrZXlzLmtleS5kc3QgPSBodG9ucyhkc3QpO1xcbjE0OTI6XFx0XFx0LyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi9cXG4xNDkzOlxcdFxcdG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtcXG4xNDk0OlxcdFxcdG1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7XFxuMTQ5NTpcXHRcXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xcbjE0OTY6XFx0XFxuMTQ5NzpcXHRcXHRjbHMtXFx1MDAzZXJ1bGUgPSBydWxlO1xcbjE0OTg6XFx0XFxuMTQ5OTpcXHRcXHRydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1swXS5pZCA9IEZMT1dfQUNUSU9OX0RST1A7XFxuMTUwMDpcXHRcXHRydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1swXS5od19zdGF0cyA9IEZMT1dfQUNUSU9OX0hXX1NUQVRTX0FOWTtcXG4xNTAxOlxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IDE7XFxuMTUwMjpcXHRcXG4xNTAzOlxcdFxcdGF0dHIuZHN0ID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG4xNTA0OlxcdFxcdGF0dHIudGNwID0gIXVkcDtcXG4xNTA1OlxcdFxcdGF0dHIuc3BvcnQgPSBzcmM7XFxuMTUwNjpcXHRcXHRhdHRyLmRwb3J0ID0gZHN0O1xcbjE1MDc6XFx0XFx0YXR0ci5pcF9kc3QgPSAwO1xcbjE1MDg6XFx0XFxuMTUwOTpcXHRcXHQvKiBTaGFsbCByZWNlaXZlIHBhY2tldCAqL1xcbjE1MTA6XFx0XFx0cmV0ID0gX19zdG1tYWNfdGVzdF9sb29wYmFjayhwcml2LCBcXHUwMDI2YXR0cik7XFxuMTUxMTpcXHRcXHRpZiAocmV0KVxcbjE1MTI6XFx0XFx0XFx0Z290byBjbGVhbnVwX3J1bGU7XFxuMTUxMzpcXHRcXG4xNTE0OlxcdFxcdHJldCA9IHN0bW1hY190Y19zZXR1cF9jbHMocHJpdiwgcHJpdiwgY2xzKTtcXG4xNTE1OlxcdFxcdGlmIChyZXQpXFxuMTUxNjpcXHRcXHRcXHRnb3RvIGNsZWFudXBfcnVsZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0LyogU2hhbGwgTk9UIHJlY2VpdmUgcGFja2V0ICovXFxuMTUxOTpcXHRcXHRyZXQgPSBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHByaXYsIFxcdTAwMjZhdHRyKTtcXG4xNTIwOlxcdFxcdHJldCA9IHJldCA/IDAgOiAtRUlOVkFMO1xcbjE1MjE6XFx0XFxuMTUyMjpcXHRcXHRjbHMtXFx1MDAzZWNvbW1hbmQgPSBGTE9XX0NMU19ERVNUUk9ZO1xcbjE1MjM6XFx0XFx0c3RtbWFjX3RjX3NldHVwX2Nscyhwcml2LCBwcml2LCBjbHMpO1xcbjE1MjQ6XFx0Y2xlYW51cF9ydWxlOlxcbjE1MjU6XFx0XFx0a2ZyZWUocnVsZSk7XFxuMTUyNjpcXHRjbGVhbnVwX2NsczpcXG4xNTI3OlxcdFxcdGtmcmVlKGNscyk7XFxuMTUyODpcXHRjbGVhbnVwX2Rpc3NlY3RvcjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjguNzY0MzQ2ODE1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDI2MzQ5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZWxmLVRlc3QgU3RydWN0dXJlKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc3Vic3RhbnRpYWwgcGllY2Ugb2YgY29kZTsgaXQncyBwcm9iYWJseSBub3QgaW5saW5lZC4gR2l2ZW4gdGhhdCBpdCdzIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0cyBzeW1ib2wgd29uJ3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSwgb3IgaXQgbWlnaHQgYmUgbWFuZ2xlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGAuaXNyYS5YYC4gSSB0aGluayBpdCdzIHNtYXJ0ZXIgdG8gZm9jdXMgb24gdGhvc2Ugd3JhcHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBhcnJheSwgYXMgd2UncmUgZ3JhYmJpbmcgdGhlaXIgYWRkcmVzc2VzLCB3aGljaCBtZWFucyB0aGV5ICpzaG91bGQqIGhhdmUgY2xlYXIsIHVzYWJsZSBzeW1ib2xzLiBIbW0sIGhhbmcgb24uLi4gYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGlzIGFsc28gc3RhdGljLCBidXQgd2UncmUgdGFraW5nIGl0cyBhZGRyZXNzLiBJbnRlcmVzdGluZy4gTWF5YmUgbGlzdGluZyBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgdGhlIGJlc3QgYXBwcm9hY2guIFllcywgdGhhdCdzIGl0ISBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgbG9va3MgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGFsbCBvZiB0aGVzZSBzZWxmLXRlc3RzLiBOb3csIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYFNUTU1BQ19FVEhgLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBzdG1tYWNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjMzLjg2Njk4MzkyNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5OTU0NDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjM1LjI2NjUzMTg0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTA3ODgzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFNUTU1BQ19FVEggS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBTVE1NQUNfRVRIYCBLY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzeW50YXguLi4gd2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZSB0cmlzdGF0ZSB2YWx1ZXMsIGFuZCBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHM/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb21tb24gRXRoZXJuZXQgUEhZIGNvbmZpZ3VyYXRpb25zLCBwcm9iYWJseSBzb21lIE1BQyBhZGRyZXNzIG92ZXJyaWRlcywgYW5kIHBvdGVudGlhbGx5IG9wdGlvbnMgZm9yIGludGVycnVwdCBoYW5kbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gdG9vLCBzdWNoIGFzIGJ1ZmZlciBzaXplcyBvciBkZXNjcmlwdG9yIHNldHRpbmdzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBob3cgdGhleSBpbnRlcnBsYXkgYW5kIHdoYXQgY3VzdG9taXphdGlvbnMgYXJlIHBvc3NpYmxlIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgdmFyaWFudHMgYW5kIHVzZS1jYXNlcy4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBwb3RlbnRpYWwgZGV2aWNlIHRyZWUgYmluZGluZ3MgSSBuZWVkIHRvIHdyaXRlIGFuZCBhbnkgZnVydGhlciBkcml2ZXIgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nLiBJJ20gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWxseSBoaWRkZW4gZ290Y2hhcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTgzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6NDEuMTc0NDE3NjMzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTVE1NQUNfRVRIXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcXG4gICA3OlxcdFxcdHNlbGVjdCBNSUlcXG4gICA4OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcXG4gIDE2OlxcdFxcdCAgU3lub3BzeXMgSVAgQ29yZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgU1RNTUFDX0VUSFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMjM6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXFxuICAyNjpcXHRcXHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcXG4gIDI3OlxcdFxcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcXG4gIDM2OlxcdFxcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgU1RNTUFDX1BMQVRGT1JNXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDQ3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDo0MS4xNzQ0OTU5ODNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5ODI2NDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgU1RNTUFDIGRyaXZlciBpcyBiZWluZyBjb25maWd1cmVkLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHdlICpkZWZpbml0ZWx5KiBuZWVkIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19TRUxGVEVTVFNgIGVuYWJsZWQuIFRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwsIGFzc3VtaW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBFdGhlcm5ldCBpbnRlcmZhY2UuIEkgd2FudCB0byBlbnN1cmUgdGhlIGJhc2UgRXRoZXJuZXQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGFuZCB0aGF0IHdlIGNhbiBwZXJmb3JtIHNvbWUgYmFzaWMgdmVyaWZpY2F0aW9uIG9mIHRoZSBoYXJkd2FyZS5cblxuTm93LCBpZiB3ZSdyZSBhY2Nlc3NpbmcgdGhpcyBTVE1NQUMgdGhyb3VnaCBhIFBDSSBpbnRlcmZhY2Ug4oCTIHdoaWNoIGlzIGxpa2VseSBpbiBtYW55IG1vZGVybiBzeXN0ZW1zIOKAkyB3ZSdsbCBhbHNvIHJlcXVpcmUgYFNUTU1BQ19QQ0lgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgUENJIHN1cHBvcnQgaXMgZW5hYmxlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW11bmljYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgY29uZmlndXJlZCwgYW5kIGlmIHNvLCBob3c/IExldCdzIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YgYFNUTU1BQ19QQ0lgLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6NDYuODcyNzYyMTE1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MDg4MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjQ4LjMyNzg1NDM3MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU0ODEwMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBTVE1NQUNfUENJIEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYFNUTU1BQ19QQ0lgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBkcml2ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBXaGF0IHVuZGVybHlpbmcgUENJIGRldmljZXMgb3IgZmFtaWxpZXMgaXMgdGhpcyBkcml2ZXIgaW50ZW5kZWQgZm9yPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgUENJIElEcyBvciBkZXZpY2UgY2xhc3NlcyBpdCBzdXBwb3J0cy4gQXJlIHRoZXJlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgcmV2aXNpb25zIG9yIFNvQ3MgdGFyZ2V0ZWQ/XG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEFyZSB0aGVyZSBjb25maWd1cmFibGUgb3B0aW9ucz8gSSdsbCBzY2FuIGZvciB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBWTEFOIG9mZmxvYWQsIGNoZWNrc3VtIG9mZmxvYWQsIGFuZCBhbnkgZmxvdyBjb250cm9sIGZlYXR1cmVzLiBUaGVzZSB1c3VhbGx5IHRlbGwgbWUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIG9wdGltYWwgdXNlIG9mIGhhcmR3YXJlIG9mZmxvYWQgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMuXG4qICAgKipQbGF0Zm9ybS1TcGVjaWZpY3M6KiogQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzIG9yIGRlcGVuZGVuY2llcz8gVGhpcyB3b3VsZCByZXZlYWwgaWYgdGhlIGRyaXZlciBpcyB0aWdodGx5IGNvdXBsZWQgdG8gYSBwYXJ0aWN1bGFyIFNUIHN5c3RlbSBvciBpZiBpdCdzIGRlc2lnbmVkIHRvIGJlIG1vcmUgZ2VuZXJpYy4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IGludGVycnVwdCBoYW5kbGluZyBjb25maWd1cmF0aW9uIG9yIERNQS1yZWxhdGVkIG9wdGlvbnMuXG4qICAgKipEZWZhdWx0IENvbmZpZ3VyYXRpb246KiogV2hhdCBhcmUgdGhlIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzPyBLbm93aW5nIHRoaXMgZ2l2ZXMgbWUgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZ2V0cyBjb25maWd1cmVkIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gQXJlIHRoZXkgYWdncmVzc2l2ZSwgY29uc2VydmF0aXZlLCBvciBiYWxhbmNlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHNjZW5hcmlvcyBmb3IgYSBiYXNpYyBzZXR1cD9cbiogICAqKlJlbGF0aW9uc2hpcCB0byBvdGhlciBDb25maWcgT3B0aW9uczoqKiBJIHdhbnQgdG8gY2hlY2sgaG93IGBTVE1NQUNfUENJYCByZWxhdGVzIHRvIG90aGVyIFNUTU1BQyB2YXJpYW50cyBpbiBgS2NvbmZpZ2AuIEFyZSB0aGVyZSBhbnkgbXV0dWFsIGV4Y2x1c2lvbnMgb3IgY29uZmxpY3RzPyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgYW5kIGhvdyBkb2VzIHRoZSBQQ0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFNUTU1BQyBzZXR0aW5ncz9cbiogICAqKlBvdGVudGlhbCBpc3N1ZXM6KiogQmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgSSB3YW50IHRvIGZvcm0gYW4gaW5pdGlhbCBtZW50YWwgbW9kZWwgb2YgaG93IGEgZGV2aWNlIHdvdWxkIGJlIGNvbmZpZ3VyZWQuIEknbGwgbWVudGFsbHkgXCJ0ZXN0XCIgdGhlIGNvbmZpZ3VyYXRpb24gYnkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhbiBpZGVhIG9mIHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBob3cgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWYgYW55IGNvbmZpZ3VyYXRpb25zIHdpbGwgbGlrZWx5IGJlIGEgbWFpbnRlbmFuY2UgaGVhZGFjaGUuXG4qICAgKipGdXR1cmUgSW1wcm92ZW1lbnRzOioqIFRoaXMgYW5hbHlzaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBtYWtpbmcgaW5mb3JtZWQgcmVjb21tZW5kYXRpb25zIHRvIGltcHJvdmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpZiBuZWNlc3NhcnkuIEZvciBpbnN0YW5jZSwgaXMgdGhlcmUgYW4gb3Bwb3J0dW5pdHkgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgbW9yZSBncmFudWxhcmx5PyBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZCBvciBvcHRpb25zIHRoYXQgY291bGQgYmUgc3RyZWFtbGluZWQ/XG5cbkkgbmVlZCB0aGlzIHF1aWNrIG92ZXJ2aWV3IHRvIGZvcm0gYSBiZXR0ZXIgaWRlYSBvZiB0aGUgU1RNTUFDIFBDSSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgZ29hbCBpcyB0byB1c2UgdGhpcyBrbm93bGVkZ2UgdG8gYXNzZXNzIHBvdGVudGlhbCByaXNrcyBvciBpbXByb3ZlbWVudHMgZm9yIGEgc3lzdGVtIHRoYXQgdXNlcyB0aGlzIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NzMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDo1NC40ODI2NjY2MjdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA0MjA6XFx0ZW5kaWYgIyBTVE1NQUNfRVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU0LjQ4MjczNjc4N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk5NDcxNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gdGhlIFNUTU1BQyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0byBnZXQgdGhpcyBhbGwgd29ya2luZywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIHRoZXNlIHRocmVlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGFuZCBgU1RNTUFDX1BDSWAuIFRob3NlIGFyZSBmb3VuZGF0aW9uYWwsIG9idmlvdXNseS5cblxuTm93LCBJJ20gc2VlaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCBhbmQgdGhhdCBmdW5jdGlvbiBsaXZlcyAqaW5zaWRlKiBhbiBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAgYmxvY2suIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbmRpdGlvbmFsIGluIG1pbmQuIFRoYXQgdGVsbHMgbWUgdGhpcyBpcyBhbGwgdGllZCB0byB0aGUgbmV0d29yayBjbGFzc2lmaWVyL2FjdHVhdG9yIHN0dWZmLlxuXG5JIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBzdG1tYWNfc2VsZnRlc3RzLmNgIGFnYWluLiBNYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBwZXJ0aW5lbnQgaW4gdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGl0c2VsZiwgYW5kIG1heWJlIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgQ09ORklHX05FVF9DTFNfQUNUYCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VsZi10ZXN0IHByb2NlZHVyZXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aG9zZSBhbGwgcGxheSB0b2dldGhlciwgd2hpY2ggSSBjYW4gb25seSBnZXQgYnkgc2VlaW5nIGFsbCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MzEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU5LjA4MjIxMDQ4OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEwNDc9c3RhdGljIGludCBzdG1tYWNfdGVzdF9kdmxhbmZpbHRfcGVyZmVjdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTA2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTA2MTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEwNjItc3RhdGljIGludCBzdG1tYWNfdGVzdF9yeHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEzMDI9c3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTMwOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTMwOTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEzMTAtc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2wzZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTQyMT1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2wzZmlsdF9zYShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyODojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0Mjktc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU5LjEzMDYyMDYxN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzAwNDI5NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGFuZCBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgLiAgU28sIG9idmlvdXNseSwgYE5FVF9DTFNfQUNUYCAod2hpY2ggaXMgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW4gdGhlIEtjb25maWcpIGlzIGEgbXVzdC1oYXZlIGNvbmZpZy4gTm93LCBsZXQncyBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBoZXJlLi4uICBSaWdodCwgSSBzZWUgdGhhdCBgU1RNTUFDX1NFTEZURVNUU2AgcmVxdWlyZXMgYElORVRgIGFuZCBgU1RNTUFDX1BDSWAgd2FudHMgYFBDSWAuIFNvLCBsZXQncyBsaXN0IHRoZSBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlLiBCYXNlZCBvbiB0aGUgYW5hbHlzaXMsIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVkIGNvbmZpZ3M6IGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCwgY3J1Y2lhbGx5LCBgTkVUX0NMU19BQ1RgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhY3R1YWxseSByZWFjaGFibGU/IExldCdzIHRyYWNlIGl0LiBJdCdzIGNhbGxlZCBieSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBUaG9zZSBhcmUgYWxsIGluIHRoZSBgc3RtbWFjX3Rlc3RgIGFycmF5LiBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXRlcmF0ZXMgdGhyb3VnaCB0aGlzIGFycmF5IGFuZCBjYWxscyB0aGUgcmVsZXZhbnQgYGZuYC4gU28sIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IHRoZSBzdGFydCBvZiB0aGUgY2hhaW4uXG5cbkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgYWRkaW5nIGFsbCBvZiB0aGVtIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGFuZCBsYXJnZSBmdW5jdGlvbnMgbWFya2VkIGBzdGF0aWNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gIEl0J3MgYmVzdCB0byBsaXN0IHRoZSBmdW5jdGlvbnMgd2hvc2UgYWRkcmVzc2VzIGFyZSB0YWtlbiB0aG91Z2guICBUaGVuLCBJIHJlbWVtYmVyZWQsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgZ2V0cyBtb2RpZmllZC4gU28gaXQncyB2ZXJ5IGltcG9ydGFudC4gSG93ZXZlciwgaXQncyBiZXR0ZXIgdG8gbGlzdCBhbGwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuXG5cblRoZW4gdGhlIGNvdmVyYWdlLWJhc2VkIFN5emthbGxlciBhcHByb2FjaCBjYW1lIHRvIG1pbmQuIElmIHdlIGp1c3QgbGlzdCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAsIFN5emthbGxlciB3aWxsIHRyeSB0byBnZXQgdG8gdGhhdCBmdW5jdGlvbiwgd2hpY2ggd2lsbCAqbmF0dXJhbGx5KiBsZWFkIGl0IHRvIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgKGlmIHRoYXQncyB0aGUgY29kZSBwYXRoIHdlIHdhbnQgdG8gdHJpZ2dlcikuIEFjdHVhbGx5LCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgYW4gZXRodG9vbCBjYWxsYmFjay4gSXQncyByZWFjaGVkIHRocm91Z2ggYGRldl9ldGh0b29sYCBhbmQgdGhlbiBgZXRodG9vbF9zZWxmX3Rlc3RgLiBTbyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5BbHJpZ2h0LCBoZXJlJ3MgbXkgc3VtbWFyeSwgd2hhdCdzIGltcG9ydGFudCBmb3IgZnV6emluZzpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmBcbiAgICAqICAgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgXG4gICAgKiAgIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYFxuICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGBcbiAgICAqICAgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgXG4gICAgKiAgIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYFNUTU1BQ19FVEhgXG4gICAgKiAgIGBTVE1NQUNfU0VMRlRFU1RTYFxuICAgICogICBgU1RNTUFDX1BDSWBcbiAgICAqICAgYE5FVF9DTFNfQUNUYFxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyAqY29uZGl0aW9uYWxseSogY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAuIElmIHRoYXQncyAqbm90KiBzZXQsIHRoZSBgI2Vsc2VgIGJsb2NrIHdpbGwgaGF2ZSBhIGR1bW15IGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IGNvdWxkIGhpZGUgYSB2dWxuZXJhYmlsaXR5LCBzbyBJIGhhdmUgdG8gY2hlY2sgdGhhdCBgI2Vsc2VgIGJsb2NrIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNTEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTU6MTIuMTM0OTE5NTk4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzNTpcXHRcXHR9XFxuMTUzNjpcXHRcXG4xNTM3OlxcdFxcdHJldHVybiByZXQ7XFxuMTUzODpcXHR9XFxuMTUzOTpcXHQjZWxzZVxcbjE1NDA6XFx0c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuMTU0MTpcXHRcXHRcXHRcXHRcXHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXFxuMTU0MjpcXHR7XFxuMTU0MzpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTU0NDpcXHR9XFxuMTU0NTpcXHQjZW5kaWZcXG4xNTQ2OlxcdFxcbjE1NDc6XFx0c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4xNTQ4OlxcdHtcXG4xNTQ5OlxcdFxcdHUxNiBkdW1teV9wb3J0ID0gMHgxMjM7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgZmFsc2UpO1xcbjE1NTI6XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3Aoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNToxMi4xMzUwMjg4MDhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4NDg5NDA2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIERyaXZlciBWdWxuZXJhYmlsaXR5IFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGAjZWxzZWAgYmxvY2sgaXMgaW5kZWVkIGEgcGxhY2Vob2xkZXIsIG1lYW5pbmcgYE5FVF9DTFNfQUNUYCBpcyBlc3NlbnRpYWwgdG8gaGl0IHRoZSBtb2RpZmllZCBjb2RlLiBHb29kLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBgTkVUX0NMU19BQ1RgIGZhbGxzIHVuZGVyIFwiTmV0d29ya2luZyBvcHRpb25zXCIgLVx1MDAzZSBcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZyxcIiBhIHByZXR0eSBzdGFuZGFyZCBjb25maWcsIHNvIHRoYXQncyBub3QgYSBtYWpvciBodXJkbGUuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBjYW4gd2UgdHJpZ2dlciB0aGlzIHdpdGgganVzdCBgU1RNTUFDX1BDSWA/IFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBhbmQgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBiaXQuIFN5emthbGxlciBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLCB3aGljaCBpcyBrZXkuIFNwZWNpZmljYWxseSwgdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBjYW4gdHJpZ2dlciBgc3RtbWFjX3BjaV9wcm9iZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgKnRoYXQqIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBPbmNlIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgc3l6a2FsbGVyIGNhbiBlbXBsb3kgYGV0aHRvb2xgIHRvIHJ1biB0aGUgc2VsZi10ZXN0cy4gU28sIHRoZSBwYXRoIGlzIHRoZXJlIOKAkyBpdCdzIHJlYWNoYWJsZS5cblxuTGV0IG1lIGp1c3Qgc3ludGhlc2l6ZSB0aGlzIHJlYXNvbmluZyBhZ2Fpbi4gVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXIncyBzZWxmdGVzdHMuIFRoZXNlIHRlc3RzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGV0aHRvb2xgIGludGVyZmFjZSBhZnRlciB0aGUgZHJpdmVyIGlzIHByb2JlZC4gV2UgY2FuIHByb2JlIHRoZSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHN5emthbGxlcidzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIChgc3l6X3BjaWAgb3Igc3lzZnMgYmluZCksIGdpdmVuIHRoZSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRoZXJlZm9yZSwgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBmb2xsb3dpbmcgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQ6IGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgLlxuXG5IbW0sIGxldCdzIGp1c3QgbWFrZSBzdXJlLiBJcyBgU1RNTUFDX1BDSWAgdGhlICpvbmx5KiB3YXk/IFRoZXJlIGFyZSBhbHNvIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFNUTU1BQywgYnV0IFBDSSBpcyBjbGVhcmx5IHRoZSBlYXNpZXN0IHJvdXRlIGZvciBzeXprYWxsZXIgdG8gaW5qZWN0LiBTbywgYFNUTU1BQ19QQ0lgIGlzIHRoZSBjbGVhbmVzdCwgZWFzaWVzdCB0cmlnZ2VyLlxuXG5Ob3cgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYC4uLmxldCdzIGNvbmZpcm0gdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gSXMgaXQgd29ydGh3aGlsZSB0byBvbWl0IGl0PyBTeXprYWxsZXIgY2FuIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgZGlzdGluY3Qgc3ltYm9scyBpbiB0aGUga2VybmVsIGltYWdlIChpLmUuLCBub3QgaW5saW5lZCkuIFNpbmNlIGl0IHNlZW1zIHJlbGF0aXZlbHkgbGFyZ2UsIGl0J3MgKmxpa2VseSogbm90IGlubGluZWQsIGJ1dCB0aGVyZSdzIGEgY2hhbmNlIGl0IGhhcyBhIGAuaXNyYWAgc3VmZml4LiBUbyBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGFuZCB0aGUgd3JhcHBlciBmdW5jdGlvbnMgbGlrZSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAsIGFuZCBJICp3aWxsKiBpbmNsdWRlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAganVzdCB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4Mzc3LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI0Ljk4Mzk3MjczWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MjkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19TRUxGVEVTVFNcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX3NlbGZ0ZXN0X3J1blwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcFwiLFxuICAgIFwiX19zdG1tYWNfdGVzdF9sNGZpbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJ3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXIncyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBzaW5jZSB0aGVyZSBpcyBhIFBDSSBmcm9udGVuZCAoYHN0bW1hY19wY2kuY2ApIGZvciB0aGUgU1RNTUFDIGRyaXZlci4gVG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWdzIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfU0VMRlRFU1RTXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19zZWxmdGVzdF9ydW5cIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBcIixcbiAgICBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlcidzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI1LjA1NDkwNzcxOVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDU0MjYzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNToyNS4wNTUzNTU1ODlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0NDQ5NzQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMgb24gdGhlIHN0YWNrIHVzaW5nIGA9IHsgfWAuIFRoaXMgcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UuIEJlY2F1c2UgdGhlIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDY0Y2QxNzA0MDAzNWQ2MTY5OGU0ZTE2ZmI5NWViMjU3MTFiOWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbmluZGV4IDFkZjI2YzIxN2Y5YTcuLmEyYjkxN2RkNjBlNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuQEAgLTE0MzIsMTEgKzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMga2V5O1xuLVx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XG4rXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkga2V5cyA9IHsgfTtcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMgbWFzaztcbi1cdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcztcbitcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcyA9IHsgfTtcbiBcdHVuc2lnbmVkIGxvbmcgZHVtbXlfY29va2llID0gMHhkZWFkYmVlZjtcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3IgKmRpc3NlY3RvcjtcbkBAIC0xNDg5LDYgKzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiBcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4gXHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuIFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbitcdC8qIE1hdGNoIHRoZSBmdWxsIElQIHByb3RvIGZpZWxkICovXG4rXHRtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7XG4gXHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xuIFx0bWFza3MubWFzay5kc3QgPSBkc3RfbWFzaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI1LjA1NTM1NjQxOFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ0NDk1NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uIGZvciBfX3N0bW1hY190ZXN0X2w0ZmlsdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBzdG1tYWNfc2VsZnRlc3RzLmNgIG1vZGlmaWVzIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgYW5kIEkgc2VlIHRoYXQgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0cy4gIFByZXZpb3VzbHksIHRoZXNlIHN0cnVjdHMgd2VyZSBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuICBOb3csIHRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGVtIHdpdGggYD0geyB9YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIGlzIHRoaXMgKmZpeGluZyogc29tZXRoaW5nIG9yICpjcmVhdGluZyogYSBuZXcgcmlzaz9cIiAgVGhlIHByb21wdCBpcyB2ZXJ5IHNwZWNpZmljOiBcIk9OTFkgc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MgdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cIiAgU2luY2UgdGhpcyBwYXRjaCBleHBsaWNpdGx5ICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbSwgS01TQU4gd2FzIGxpa2VseSAqYWxyZWFkeSogY2F0Y2hpbmcgdGhlIGlzc3VlICpiZWZvcmUqIHRoaXMgcGF0Y2guICBUaGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBLTVNBTiAqY291bGQgaGF2ZSogZm91bmQgYSBidWcgcHJlLXBhdGNoOyB0aGUgcXVlc3Rpb24gaXMgaWYgdGhlICpwYXRjaCBpdHNlbGYqIGludHJvZHVjZXMgYSAqbmV3KiBLTVNBTi1zcGVjaWZpYyByaXNrLlxuXG5MZXQncyByZWFkIHRoZSBkaWZmIGNhcmVmdWxseS4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGA9IHsgfWAgdG8gdGhlIHN0cnVjdCBkZWNsYXJhdGlvbnMuICBUaGlzIGlzIGEgZGlyZWN0LCBjb21wbGV0ZSBpbml0aWFsaXphdGlvbi4gIFplcm9pbmcgdGhlbSBvdXQgZW5zdXJlcyB0aGF0ICphbGwqIGZpZWxkcywgaW5jbHVkaW5nIGFueSBwYWRkaW5nLCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYWZ0ZXIqIHRoaXMgY2hhbmdlPyBOby5cblxuVGhlIHByb21wdCBsaXN0cyBzZXZlcmFsIHNjZW5hcmlvcyB0aGF0ICp3b3VsZCogd2FycmFudCBOZWVkc0tNU0FOOiBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MuICBOb25lIG9mIHRoZXNlIGFwcGx5IGhlcmUuIFRoZSBjaGFuZ2UgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHN0cnVjdHVyZXMuXG5cblRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogc3RhdGVzIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgXCJBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXCIgIFRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZSBwYXRjaCBkb2VzIHdpdGggdGhlIGA9IHsgfWAuXG5cbkxldCdzIHJldmlldyB0aGUgY29kZSBvbmUgbGFzdCB0aW1lIHRvIGNvbmZpcm0uICBZZXMsIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYWRkaXRpb25hbCBsaW5lIHNldHRpbmcgYG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtgIHNpbXBseSBhc3NpZ25zIGEgdmFsdWUgdG8gYSBmaWVsZCB3aXRoaW4gdGhlIG5vdyB6ZXJvLWluaXRpYWxpemVkIHN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgKmV4cGxpY2l0bHkgemVyb2luZyogdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMsIGl0ICpyZW1vdmVzKiBhIHBvdGVudGlhbCBLTVNBTi1kZXRlY3RhYmxlIHByb2JsZW0uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgZG9uJ3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBhbnN3ZXIgaXMgKipOZWVkc0tNU0FOPWZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTAsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjQyLjUwMDMxNTI5MloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMgb24gdGhlIHN0YWNrIHVzaW5nIGA9IHsgfWAuIFRoaXMgcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UuIEJlY2F1c2UgdGhlIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 21:26:53 +0000 UTC FinishedAt: 2026-08-25 22:15:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_SELFTESTS", "STMMAC_PCI", "NET_CLS_ACT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_SELFTESTS", "STMMAC_PCI", "NET_CLS_ACT" ], "series_id": "f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_selftest_run", "stmmac_test_l4filt_da_tcp", "stmmac_test_l4filt_sa_tcp", "stmmac_test_l4filt_da_udp", "stmmac_test_l4filt_sa_udp", "__stmmac_test_l4filt" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJiMzOTtzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIHNpbmNlIHRoZXJlIGlzIGEgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUbyByZWFjaCB0aGUgbW9kaWZpZWQgY29kZSwgdGhlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5AQCAtMTQzMiwxMSAmIzQzOzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMga2V5O1xuLVx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XG4mIzQzO1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XG4tXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7XG4mIzQzO1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xuIFx0dW5zaWduZWQgbG9uZyBkdW1teV9jb29raWUgPSAweGRlYWRiZWVmO1xuIFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcbiBcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xuQEAgLTE0ODksNiAmIzQzOzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiBcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4gXHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuIFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbiYjNDM7XHQvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqL1xuJiM0MztcdG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtcbiBcdG1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7XG4gXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19TRUxGVEVTVFMmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX0FDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N0bW1hY19zZWxmdGVzdF9ydW4mIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcCYjMzQ7LAogICAgJiMzNDtfX3N0bW1hY190ZXN0X2w0ZmlsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJiMzOTtzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIHNpbmNlIHRoZXJlIGlzIGEgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUbyByZWFjaCB0aGUgbW9kaWZpZWQgY29kZSwgdGhlIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCmluZGV4IDFkZjI2YzIxN2Y5YTcuLmEyYjkxN2RkNjBlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKQEAgLTE0MzIsMTEgJiM0MzsxNDMyLDExIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLAogCXN0cnVjdCB7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYmtleTsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBrZXk7Ci0JfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7CiYjNDM7CX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9OwogCXN0cnVjdCB7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7CiAJCXN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMgbWFzazsKLQl9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7CiYjNDM7CX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcyA9IHsgfTsKIAl1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7CiAJc3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTsKIAlzdHJ1Y3QgZmxvd19kaXNzZWN0b3IgKmRpc3NlY3RvcjsKQEAgLTE0ODksNiAmIzQzOzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYywKIAlrZXlzLmJrZXkuaXBfcHJvdG8gPSB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQOwogCWtleXMua2V5LnNyYyA9IGh0b25zKHNyYyk7CiAJa2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTsKJiM0MzsJLyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi8KJiM0MzsJbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmOwogCW1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7CiAJbWFza3MubWFzay5kc3QgPSBkc3RfbWFzazsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoIGZvciB0aGUgc3RtbWFjIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBmdW5jdGlvbiB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AuIFRoaXMgZnVuY3Rpb24gaXMgaW5pdGlhbGl6aW5nIHNvbWUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBzZXR0aW5nIGBtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXMgdGhpcyBldmVuIGEgY29kZSBwYXRoIHRoYXQmIzM5O3MgcmVhbGlzdGljYWxseSByZWFjaGFibGU/CgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgaXMgdGhlIEV0aGVybmV0IGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzJiMzOTsgcmFuZ2Ugb2YgRXRoZXJuZXQgTUFDcy4gTm93LCBjYW4gdGhpcyBkcml2ZXIgYmUgcmVhY2hlZCB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIFFFTVU/IEFuZCBpcyBpdCBlbXVsYXRlZCBhdCBhbGw/IEkgcmVtZW1iZXIgYHN0bW1hY2AgaXMgdHlwaWNhbGx5IGRlc2lnbmVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4gIE1vc3Qgb2YgdGhlIHRpbWUgaXQgaXMgdXNlZCBpbiB2YXJpb3VzIEFSTSBTb0NzLCBsaWtlIEFsbHdpbm5lciBhbmQgUm9ja2NoaXAuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgYHN0bW1hY2AgZHJpdmVyIG5hdGl2ZWx5LCBidXQgaXMgdGhlcmUgc29tZSBraW5kIG9mIHZpcnR1YWwgcGxhdGZvcm0gd2hlcmUgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZT8KCkEga2V5IHRoaW5nIGlzIHRoYXQgdGhpcyBpcyB3aXRoaW4gdGhlICpzZWxmdGVzdCogY29kZSwgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFNlbGZ0ZXN0cyBhcmUgdHlwaWNhbGx5IHRyaWdnZXJlZCB0aHJvdWdoIHRvb2xzIGxpa2UgYGV0aHRvb2xgLiBUaGF0IG1lYW5zIHRoZSBkcml2ZXIgaGFzIHRvIHByb2JlLCBhbmQgaWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgc2VsZnRlc3Qgd29uJiMzOTt0IGV2ZW4gcnVuLgoKSG1tLCBtYXliZSB0aGVyZSYjMzk7cyBhIFBDSSB2ZXJzaW9uIG9mIGBzdG1tYWNgPyBUaGF0IG1pZ2h0IGJlIGEgY2x1ZS4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBQQ0kgdmVyc2lvbiBtaWdodCBvZmZlciBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoaXMgc2VsZnRlc3QgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgaW52b2tlZCBhbmQgaWYgaXQmIzM5O3MgZmVhc2libGUgdG8gdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3Q9MTA3PXN5bnRheCAoZS5nLiBmb3IgUENJIG1vZHVsZSk6OlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMDgtXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXHUwMDNjb3B0aW9uXHUwMDNlPVx1MDAzY1ZBTDFcdTAwM2UsXHUwMDNjVkFMMlx1MDAzZSwuLi5dXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTExMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVx0JiM0Mzs9IGR3bWFjLW1vdG9yY29tbS5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZTo1NDpzdG1tYWMtcGNpLW9ianM6PSBzdG1tYWNfcGNpLm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMzktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQxLVx0dW5zaWduZWQgaW50IGZ1bmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDU6c3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuYztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDctXHRzaXplX3QgbmZ1bmNzO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy01MS1cdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxPXN0YXRpYyBjb25zdCBpbnQgYWRsbl90c25fbGFuZV9yZWdzW10gPSB7Nn07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTQtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaV9saXN0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhICpmdW5jX2RhdGE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3Olx0Y29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgKmRtaV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OC1cdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz03ODY9c3RhdGljIGludCBlaGxfc2dtaWlfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODA2OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cdC5zZXR1cCA9IGVobF9zZ21paV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MjItXHQuc2V0dXAgPSBlaGxfcmdtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTg0MT1zdGF0aWMgaW50IGVobF9wc2UwX3JnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODQ4OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQ5LVx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODUyPXN0YXRpYyBpbnQgZWhsX3BzZTBfc2dtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NzA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTBfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXHQuc2V0dXAgPSBlaGxfcHNlMF9zZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5OC1cdC5zZXR1cCA9IGVobF9wc2UxX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkwMT1zdGF0aWMgaW50IGVobF9wc2UxX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTE5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UxX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIwLVx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTQ0PXN0YXRpYyBpbnQgdGdsX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTUzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHRnbF9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2Ny1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NzA9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTgwOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4MS1cdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTg0PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk5NDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTFfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0My1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA0NjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA1MzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTQtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1OS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNjk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTIwOlx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTE0NTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY1LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzkyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNUTU1BQyBUZXN0aW5nIGluIFN5emthbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjX3BjaS5jYCBkcml2ZXIuIFRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXM6IGhvdyBpcyB0aGlzIHRlc3RlZCBieSBTeXprYWxsZXI/IElzIGl0IGVtdWxhdGVkIHdpdGhpbiBRRU1VPyBObywgUUVNVSBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlIHRoZSBTVE1NQUMgUENJIGludGVyZmFjZSwgSSBrbm93IHRoYXQuIEJ1dCBgc3RtbWFjYCBpcyB1c2VkIGFjcm9zcyBtYW55IHBsYXRmb3Jtcywgc28gdGhlcmUgKm11c3QqIGJlIGEgd2F5IHRvIHRlc3QgaXQuIEkgcXVpY2tseSBkaXNtaXNzIHZpcnR1YWwgaW50ZXJmYWNlcyBsaWtlIGB2ZXRoYCBhbmQgYG1hY3NlY2A7IHRoaXMgaXMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHNvIHRob3NlIHdvdWxkbiYjMzk7dCBiZSByZWxldmFudC4KClRoZW4gSSByZWFsaXplZCBTeXprYWxsZXIgbWlnaHQgYmUgaGl0dGluZyBhIGxpbWl0YXRpb24uIFVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRpb24gb3Igc29tZSBraW5kIG9mIHZpcnR1YWwgZGV2aWNlLCB0aGUgZnV6emVyIHdvdWxkbiYjMzk7dCBoYXZlIGFjY2Vzcy4gV2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgYW5kIGEgUENJIGZ1enplciwgZG9lc24mIzM5O3QgaXQ/IFRoZSBQQ0kgb25lIHdvcmtzIGJ5IGludGVyY2VwdGluZyBQQ0kgY29uZmlnIHNwYWNlIHJlYWRzIGFuZCB3cml0ZXMuCgpCdXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciAqZG9lc24mIzM5O3QqIGRvIGZ1bGwgUENJIGVtdWxhdGlvbiBpbnNpZGUgUUVNVSwgbGlrZSBpdCBkb2VzIHdpdGggVVNCIGFuZCBgdmhjaWAuIEl0IHVzZXMgYHN5el9wY2lgIHBzZXVkby1zeXNjYWxsLCBkb2VzbiYjMzk7dCBpdD8gQnV0ICp0aGF0KiBkb2VzbiYjMzk7dCBlbXVsYXRlIERNQSBvciBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9uczsgaXQmIzM5O3MgbW9yZSBvZiBhIHByb2JlIHRyaWdnZXIuIFNvLCBob3cgYXJlIGNvbXBsZXggZHJpdmVycyBsaWtlIGBzdG1tYWNgIHRlc3RlZD8KCkFoLCByaWdodC4gSWYgaXQmIzM5O3MgcGFydCBvZiBhIHNlbGZ0ZXN0LCBpdCYjMzk7cyB0cmlnZ2VyZWQgdmlhIGBldGh0b29sYC4gU28sIHRoZSBrZXkgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgc2VsZnRlc3Qgd2UgY2FuIHJlYWNoLiBMZXQmIzM5O3MgY2hlY2sgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFllcywgaGVyZSB3ZSBhcmUsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgbG9va3MgbGlrZSBhIHNlbGZ0ZXN0LiBUaGlzIGlzIHRoZSBwYXRoIGZvcndhcmQhIEkmIzM5O2xsIGxvb2sgYXQgdGhhdCB0ZXN0IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOC0jaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU0MDpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTQ3PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTU0PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTYxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2NTpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Ni19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1Njg9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU3MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIDAsIGR1bW15X3BvcnQsIDAsIH4wLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMwMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBzdG1tYWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgaW5pdGlhbGl6aW5nIGBrZXlzYCBhbmQgYG1hc2tzYCB0byBlbXB0eSBkaWN0aW9uYXJpZXMsIGFuZCB0aGVuIHNldHRpbmcgYG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZmAuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMsICYjMzQ7UmlnaHQsIHRoaXMgc2VlbXMgbGlrZSBhIGZpeCBmb3Igc29tZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aXRoaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YC4mIzM0OwoKVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCBgc3RtbWFjYCBpcyBhICpoYXJkd2FyZSogZHJpdmVyLCBteSBpbnN0aW5jdCBpcyAmIzM0O25vLCBub3QgZGlyZWN0bHkuIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgaGFyZHdhcmUuJiMzNDsgVW5sZXNzLCBvZiBjb3Vyc2UsIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBoYXMgZm91bmQgYSBjbGV2ZXIgd2F5IHRvIGFjY2VzcyBpdC4gQnV0IHdhaXQsIEkgdGhvdWdodCBzeXprYWxsZXIgZGlkbiYjMzk7dCB0eXBpY2FsbHkgZG8gZnVsbCBoYXJkd2FyZSBlbXVsYXRpb24gd2l0aCwgc2F5LCBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbD8gTm8sIHRoYXQmIzM5O3Mgbm90IGl0cyB0eXBpY2FsIE1PLgoKQnV0IGhvbGQgb24uLi5zeXprYWxsZXIgKmRpZCogcmVwb3J0IHRoaXMgYnVnLiBIb3cgaXMgdGhhdCBwb3NzaWJsZT8gTWF5YmUgaXQmIzM5O3MgdXNpbmcgc29tZSBzb3J0IG9mIHZpcnR1YWwgaGFyZHdhcmUgdHJpY2suIEhtbW0sIGNvdWxkIGl0IGJlIGB2aGNpYCBvciBgbWFjODAyMTFfaHdzaW1gPyBObywgdGhpcyBpcyBkZWZpbml0ZWx5IHN0bW1hYy4uLnNvIHRoYXQmIzM5O3Mgbm90IHRoZSBhbnN3ZXIuCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBkcml2ZXIgY29tcG9uZW50IGludm9sdmVkLCBvciBpZiBzeXprYWxsZXIgaXMgc29tZWhvdyB0cmlnZ2VyaW5nIHRoaXMgcGF0aC4gVGhlbiBpdCBoaXRzIG1lLCBzeXprYWxsZXIgKmNhbiogdHJpZ2dlciBQQ0kgcHJvYmUgdXNpbmcgYHN5el9wY2lgIG9yIGJ5IHdyaXRpbmcgdG8gYC9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi9iaW5kYC4KCkJ1dCwgdG8gZ2V0IHRvIHRoZSBzZWxmdGVzdHMsIEkga25vdyB0aGUgZHJpdmVyIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgYSBuZXRkZXYuIE5vdyB0aGF04oCZcyB0aGUgcmVhbCBxdWVzdGlvbi4gQ2FuIGBzdG1tYWNgIGFjdHVhbGx5IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSByZWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIG1vcmUgY2xlYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfcGNpX3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTg6c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExOS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMTI9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE1Olx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTYtXHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0ODgKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgU1RNTUFDIFBDSSBQcm9iZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3I7IHRoaXMgaXMgd2hlcmUgd2UmIzM5O3JlIGdvaW5nIHRvIGluaXRpYWxpemUgdGhlIFNUTU1BQyBkcml2ZXIgd2hlbiBpdCYjMzk7cyBpZGVudGlmaWVkIG9uIGEgUENJIGJ1cy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtIGZpcnN0LCBob3cgaXQgZmluZHMgdGhlIFNUTU1BQyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgoKSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciB0aGUgc3RhbmRhcmQgUENJIHByb2JlIHByb2Nlc3M6IHJlZ2lzdGVyaW5nIHRoZSBkZXZpY2UsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBtYXBwaW5nIEkvTyByZWdpb25zLCBhbmQgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgaW50ZXJydXB0LiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBpdCB1c2VzIHRoZSBQQ0kgZGV2aWNlIElEIHRhYmxlIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBTVE1NQUMgY2hpcC4gQW55IGNsZXZlciB0cmlja3MgaW4gdGhlcmUgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCB2YXJpYW50cz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWNjb3VudGVkIGZvciwgYW5kIHdoZXJlPwoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiDigJMgaG93IG11Y2ggbWVtb3J5IGlzIGl0IHJlcXVlc3Rpbmc/IEhvdyBpcyBpdCBoYW5kbGluZyBETUE/IEFyZSB0aGVyZSBhbnkgRE1BIGNvaGVyZW50IG1lbW9yeSBhbGxvY2F0aW9ucz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25zaWRlcmF0aW9ucyBmb3IgdGhlIFBDSSBidXMgaXRzZWxmLCBsaWtlIGJ1cyBtYXN0ZXJpbmcgb3IgbGF0ZW5jeSByZXF1aXJlbWVudHMsIGJlaW5nIGFkZHJlc3NlZD8gQW5kIGltcG9ydGFudGx5LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByZXNvdXJjZSBjb25mbGljdHMgYmVpbmcgaGFuZGxlZCBncmFjZWZ1bGx5PwoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgaW50ZXJydXB0IHNldHVwLiBIb3cgaXMgdGhlIGludGVycnVwdCBiZWluZyBjb25maWd1cmVkPyBJcyBpdCB1c2luZyBNU0kgb3IgbGVnYWN5IGludGVycnVwdHM/IEFueSBpbnRlcnJ1cHQgbWFza2luZyBvciBzaGFyaW5nIGNvbnNpZGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVycyBvciBlZGdlLXRyaWdnZXJlZCBjb25zaWRlcmF0aW9ucyBmb3IgdGhpcyBoYXJkd2FyZT8gQW55IGFkdmFuY2VkIGNvbmZpZ3VyYXRpb25zIG9yIGNvbnNpZGVyYXRpb25zIGZvciBoYW5kbGluZyBpbnRlcnJ1cHQgY29hbGVzY2luZywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgaXQ/CgpUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIEhvdyBpcyB0aGUgTUFDIGFkZHJlc3MgYmVpbmcgZGVyaXZlZD8gQXJlIHRoZXJlIGFueSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIGhlcmU/IEhvdyYjMzk7cyB0aGUgY2xvY2sgc2V0dXAgaGFuZGxlZD8gSSYjMzk7bGwgYmUgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIHRoZSBwcm9wZXIgcG93ZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpZiBpdCYjMzk7cyBvbiBhIG1vYmlsZSBvciBwb3dlci1zZW5zaXRpdmUgZGV2aWNlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgYW55IG9mIHRoZSByZXNvdXJjZSByZXF1ZXN0cyBmYWlsPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkLCBhbmQgYXJlIHRoZXkgcmVwb3J0ZWQgY29ycmVjdGx5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwIGlmIHRoZSBwcm9iZSBmYWlscyBtaWR3YXk/IEFueSBjaGFuY2VzIGZvciBhIGJ1ZmZlciBvdmVyZmxvdz8KCknigJltIGV4cGVjdGluZyB0byBzZWUgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiBoZXJlLCBidXQgSSYjMzk7bSBlYWdlciB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE4Olx0c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIDExOTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gMTIwOlx0e1xuIDEyMTpcdFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gMTIyOlx0XHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4gMTIzOlx0XHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcbiAxMjQ6XHRcdGludCByZXQ7XG4gMTI1Olx0XHRpbnQgaTtcbiAxMjY6XHRcbiAxMjc6XHRcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDEyODpcdFx0aWYgKCFwbGF0KVxuIDEyOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzA6XHRcbiAxMzE6XHRcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMzI6XHRcdFx0XHRcdFx0ICAgc2l6ZW9mKCpwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEpLFxuIDEzMzpcdFx0XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiAxMzQ6XHRcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuIDEzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxMzY6XHRcbiAxMzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDEzODpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqcGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmcpLFxuIDEzOTpcdFx0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuIDE0MDpcdFx0aWYgKCFwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZylcbiAxNDE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTQyOlx0XG4gMTQzOlx0XHQvKiBFbmFibGUgcGNpIGRldmljZSAqL1xuIDE0NDpcdFx0cmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xuIDE0NTpcdFx0aWYgKHJldCkge1xuIDE0NjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogRVJST1I6IGZhaWxlZCB0byBlbmFibGUgZGV2aWNlXFxuXCYjMzQ7LFxuIDE0NzpcdFx0XHRcdF9fZnVuY19fKTtcbiAxNDg6XHRcdFx0cmV0dXJuIHJldDtcbiAxNDk6XHRcdH1cbiAxNTA6XHRcbiAxNTE6XHRcdC8qIEdldCB0aGUgYmFzZSBhZGRyZXNzIG9mIGRldmljZSAqL1xuIDE1MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiAxNTM6XHRcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMClcbiAxNTQ6XHRcdFx0XHRjb250aW51ZTtcbiAxNTU6XHRcdFx0cmVzLmFkZHIgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCBpLCBTVE1NQUNfUkVTT1VSQ0VfTkFNRSk7XG4gMTU2Olx0XHRcdGlmIChJU19FUlIocmVzLmFkZHIpKVxuIDE1NzpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHJlcy5hZGRyKTtcbiAxNTg6XHRcdFx0YnJlYWs7XG4gMTU5Olx0XHR9XG4gMTYwOlx0XG4gMTYxOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAxNjI6XHRcbiAxNjM6XHRcdHJldCA9IGluZm8tXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XG4gMTY0Olx0XHRpZiAocmV0KVxuIDE2NTpcdFx0XHRyZXR1cm4gcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0cmVzLndvbF9pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjg6XHRcdHJlcy5pcnEgPSBwZGV2LVx1MDAzZWlycTtcbiAxNjk6XHRcbiAxNzA6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXRzb2VlID0gMTtcbiAxNzE6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZW1yeHBlZSA9IDE7XG4gMTcyOlx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VtZXN0ZWUgPSAxO1xuIDE3MzpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXJ4ZWUgPSAxO1xuIDE3NDpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlbXR4ZWUgPSAxO1xuIDE3NTpcdFx0cGxhdC1cdTAwM2VzYWZldHlfZmVhdF9jZmctXHUwMDNlZXBzaSA9IDE7XG4gMTc2Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2VlZHBwID0gMTtcbiAxNzc6XHRcdHBsYXQtXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVx1MDAzZXBydHllbiA9IDE7XG4gMTc4Olx0XHRwbGF0LVx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cdTAwM2V0bW91dGVuID0gMTtcbiAxNzk6XHRcbiAxODA6XHRcdHBsYXQtXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuIDE4MTpcdFx0cGxhdC1cdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xuIDE4MjpcdFxuIDE4MzpcdFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG4gMTg0Olx0fVxuIDE4NTpcdFxuIDE4NjpcdC8qKlxuIDE4NzpcdCAqIHN0bW1hY19wY2lfcmVtb3ZlXG4gMTg4Olx0ICpcbiAxODk6XHQgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXJcbiAxOTA6XHQgKiBEZXNjcmlwdGlvbjogdGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgbWFpbiB0byBmcmVlIHRoZSBuZXQgcmVzb3VyY2VzLlxuIDE5MTpcdCAqL1xuIDE5MjpcdHN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDE5MzpcdHtcbiAxOTQ6XHRcdHN0bW1hY19kdnJfcmVtb3ZlKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiAxOTU6XHR9XG4gMTk2Olx0XG4gMTk3Olx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cbiAxOTg6XHQjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXHRcdDB4MDcwMFxuIDE5OTpcdFxuIDIwMDpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TVE1NQUNfU1RNTUFDXHRcdDB4MTEwOFxuIDIwMTpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFx0XHQweDcxMDJcbiAyMDI6XHRcbiAyMDM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XG4gMjA0Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuIDIwNTpcdFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXG4gMjA2Olx0XHR7IFBDSV9ERVZJQ0VfREFUQShTWU5PUFNZUywgR01BQzVfSUQsIFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXG4gMjA3Olx0XHR7fVxuIDIwODpcdH07XG4gMjA5Olx0XG4gMjEwOlx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XG4gMjExOlx0XG4gMjEyOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuIDIxMzpcdFx0Lm5hbWUgPSBTVE1NQUNfUkVTT1VSQ0VfTkFNRSxcbiAyMTQ6XHRcdC5pZF90YWJsZSA9IHN0bW1hY19pZF90YWJsZSxcbiAyMTU6XHRcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG4gMjE2Olx0XHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXG4gMjE3Olx0XHQuZHJpdmVyICAgICAgICAgPSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzM2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGYWxzZWx5IFRyaWdnZXJlZCBEcml2ZXIgUHJvYmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYHN0bW1hY2AgZHJpdmVyIHdvcmtzLCBzcGVjaWZpY2FsbHkgdGhlIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyB1c2luZyBgc3RtbWFjX2R2cl9wcm9iZWAsIGFuZCBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgdnVsbmVyYWJpbGl0eSB0byBhdHRhY2tzIHRocm91Z2ggdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCB0aGF0IFN5emthbGxlciBpcyB1c2luZy4gSSBrbm93IHRoYXQgYHN5el9wY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgaW4gdGhpcyBjYXNlLCBgMHgwNzAwYCBhbmQgYDB4MTEwOGAsIHdoaWNoIGhhcHBlbnMgdG8gbWF0Y2ggdGhlIGBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNgIGRlZmluaXRpb24uCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBoYXBwZW5zIHdoZW4gU3l6a2FsbGVyIGluamVjdHMgdGhpcyAmIzM0O2Zha2UmIzM0OyBkZXZpY2U/IEJlY2F1c2UgYHN0bW1hY19wY2lfcHJvYmVgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhhdCBpbiB0dXJuICp3aWxsKiBjYWxsIGBzdG1tYWNfZHZyX3Byb2JlYC4gTXkgY29uY2VybiBpcyB3aGV0aGVyIGBzdG1tYWNfZHZyX3Byb2JlYCBpcyByb2J1c3QgZW5vdWdoLiBEb2VzIGl0IGNvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgKnRoZXJlKj8gSWYgaXQgZG9lc24mIzM5O3QsIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBwcm9iaW5nIG9uIG5vbi1leGlzdGVudCBoYXJkd2FyZS4gVGltZSB0byBnbyBvdmVyIGBzdG1tYWNfZHZyX3Byb2JlYCYjMzk7cyBzb3VyY2UgY29kZSwgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYz00Mj1zdGF0aWMgaW50IGludGVsX2V0aF9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYzoxMTg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzNDItXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yOTM9c3RhdGljIGludCBtb3RvcmNvbW1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNTk6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM9MTQ3PXN0YXRpYyBpbnQgc3BhY2VtaXRfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM6MjA3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYz01MjU9c3RhdGljIGludCBzdG0zMl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo1Nzk6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XHQvKiB0aGUgTUFDIGlzIHJ1bnRpbWUgc3VzcGVuZGVkIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKSwgc28gd2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDk6XHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XHRlcnIgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNS1cdFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc4OT1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NzkxOnN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc5Mi1cdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA5My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA5NDogKiBzdG1tYWNfZHZyX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTUtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDM6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTA0LVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE0Olx0cmV0ID0gX19zdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTUtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwbGF0X2RhdC1cdTAwM2VleGl0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODExOS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMjEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg0Nj1pbnQgc3RtbWFjX3BsdGZyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODU1Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI5NQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAuIEkga25vdyB0aGlzIGlzIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLCB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGhhcmR3YXJlIGlzIGlkZW50aWZpZWQsIGluaXRpYWxpemVkLCBhbmQgdWx0aW1hdGVseSBicm91Z2h0IG9ubGluZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBpdCBkb2VzIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBkZXZpY2UgdHJlZSBwYXJzaW5nLCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgdGhlIGNsb2NrIGFuZCBQSFkgc2V0dXAsIHRoZSBETUEgY29uZmlndXJhdGlvbiAtIGV2ZXJ5dGhpbmcuIEtub3dpbmcgdGhlIGNvcmUgb2YgdGhpcyBwcm9iZSBmdW5jdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCBob3cgd2VsbCBpdCBoYW5kbGVzIGEgdmFyaWV0eSBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucy4gSSBleHBlY3QgdG8gc2VlIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIHByb2Jpbmcgc2VxdWVuY2UgaGVyZSwgY2hlY2tpbmcgZm9yIGNvbXBhdGlibGUgZGV2aWNlIElEcywgbWFwcGluZyBtZW1vcnksIGFuZCBob3BlZnVsbHkgc29tZSBuaWNlIGVycm9yIGhhbmRsaW5nIHRvIGVuc3VyZSBhIHJvYnVzdCBzeXN0ZW0uIExldOKAmXMgc2VlIHdoYXQgc3VycHJpc2VzIGFyZSBpbiBzdG9yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzc5MTpcdHN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbjc3OTI6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuNzc5MzpcdFx0XHRcdCAgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG43Nzk0Olx0e1xuNzc5NTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMO1xuNzc5NjpcdFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2O1xuNzc5NzpcdFx0aW50IGksIHJldCA9IDA7XG43Nzk4Olx0XHR1OCByeHE7XG43Nzk5Olx0XG43ODAwOlx0XHRpZiAoIXBsYXRfZGF0LVx1MDAzZWRtYV9jZmcgfHwgIXBsYXRfZGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlcGJsKSB7XG43ODAxOlx0XHRcdGRldl9lcnIoZGV2aWNlLCBcJiMzNDtpbnZhbGlkIERNQSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbjc4MDI6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODAzOlx0XHR9XG43ODA0Olx0XG43ODA1Olx0XHRuZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZGV2aWNlLCBzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSxcbjc4MDY6XHRcdFx0XHRcdCAgICAgICBNVExfTUFYX1RYX1FVRVVFUywgTVRMX01BWF9SWF9RVUVVRVMpO1xuNzgwNzpcdFx0aWYgKCFuZGV2KVxuNzgwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjc4MDk6XHRcbjc4MTA6XHRcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldmljZSk7XG43ODExOlx0XG43ODEyOlx0XHRwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG43ODEzOlx0XHRwcml2LVx1MDAzZWRldmljZSA9IGRldmljZTtcbjc4MTQ6XHRcdHByaXYtXHUwMDNlZGV2ID0gbmRldjtcbjc4MTU6XHRcbjc4MTY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpJiM0MzsmIzQzOylcbjc4MTc6XHRcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMucnhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xuNzgxODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVRMX01BWF9UWF9RVUVVRVM7IGkmIzQzOyYjNDM7KSB7XG43ODE5Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcbjc4MjA6XHRcdFx0dTY0X3N0YXRzX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xuNzgyMTpcdFx0fVxuNzgyMjpcdFxuNzgyMzpcdFx0cHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XG43ODI0Olx0XHRcdGRldm1fbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoZGV2aWNlLCBzdHJ1Y3Qgc3RtbWFjX3BjcHVfc3RhdHMpO1xuNzgyNTpcdFx0aWYgKCFwcml2LVx1MDAzZXhzdGF0cy5wY3B1X3N0YXRzKVxuNzgyNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjc4Mjc6XHRcbjc4Mjg6XHRcdHN0bW1hY19zZXRfZXRodG9vbF9vcHMobmRldik7XG43ODI5Olx0XHRwcml2LVx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcbjc4MzA6XHRcdHByaXYtXHUwMDNlcGxhdCA9IHBsYXRfZGF0O1xuNzgzMTpcdFx0cHJpdi1cdTAwM2Vpb2FkZHIgPSByZXMtXHUwMDNlYWRkcjtcbjc4MzI6XHRcdHByaXYtXHUwMDNlZGV2LVx1MDAzZWJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJlcy1cdTAwM2VhZGRyO1xuNzgzMzpcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlbXVsdGlfbXNpX2VuID1cbjc4MzQ6XHRcdFx0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKTtcbjc4MzU6XHRcbjc4MzY6XHRcdHByaXYtXHUwMDNlZGV2LVx1MDAzZWlycSA9IHJlcy1cdTAwM2VpcnE7XG43ODM3Olx0XHRwcml2LVx1MDAzZXdvbF9pcnEgPSByZXMtXHUwMDNld29sX2lycTtcbjc4Mzg6XHRcdHByaXYtXHUwMDNlc2Z0eV9pcnEgPSByZXMtXHUwMDNlc2Z0eV9pcnE7XG43ODM5Olx0XG43ODQwOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcbjc4NDE6XHRcdFx0cmV0ID0gc3RtbWFjX21zaV9pbml0KHByaXYsIHJlcyk7XG43ODQyOlx0XHRcdGlmIChyZXQpXG43ODQzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjc4NDQ6XHRcdH1cbjc4NDU6XHRcbjc4NDY6XHRcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cdTAwM2VtYWMpKVxuNzg0NzpcdFx0XHRldGhfaHdfYWRkcl9zZXQocHJpdi1cdTAwM2VkZXYsIHJlcy1cdTAwM2VtYWMpO1xuNzg0ODpcdFxuNzg0OTpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cdTAwM2VkZXYpO1xuNzg1MDpcdFxuNzg1MTpcdFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cbjc4NTI6XHRcdHN0bW1hY192ZXJpZnlfYXJncygpO1xuNzg1MzpcdFxuNzg1NDpcdFx0cHJpdi1cdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XG43ODU1Olx0XHRpZiAoIXByaXYtXHUwMDNlYWZfeGRwX3pjX3Fwcylcbjc4NTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODU3Olx0XG43ODU4Olx0XHQvKiBBbGxvY2F0ZSB3b3JrcXVldWUgKi9cbjc4NTk6XHRcdHByaXYtXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcJiMzNDtzdG1tYWNfd3FcJiMzNDspO1xuNzg2MDpcdFx0aWYgKCFwcml2LVx1MDAzZXdxKSB7XG43ODYxOlx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O2ZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXFxuXCYjMzQ7KTtcbjc4NjI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjc4NjM6XHRcdFx0Z290byBlcnJvcl93cV9pbml0O1xuNzg2NDpcdFx0fVxuNzg2NTpcdFxuNzg2NjpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlc2VydmljZV90YXNrLCBzdG1tYWNfc2VydmljZV90YXNrKTtcbjc4Njc6XHRcbjc4Njg6XHRcdHRpbWVyX3NldHVwKFx1MDAyNnByaXYtXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XG43ODY5Olx0XG43ODcwOlx0XHQvKiBPdmVycmlkZSB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzIGlmIHN1cHBsaWVkIFhYWCBDUlMgWFhYXG43ODcxOlx0XHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXG43ODcyOlx0XHQgKi9cbjc4NzM6XHRcdGlmICgocGh5YWRkciBcdTAwM2U9IDApIFx1MDAyNlx1MDAyNiAocGh5YWRkciBcdTAwM2M9IDMxKSlcbjc4NzQ6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9hZGRyID0gcGh5YWRkcjtcbjc4NzU6XHRcbjc4NzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCkge1xuNzg3NzpcdFx0XHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX3JzdCk7XG43ODc4Olx0XHRcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg3OTpcdFx0XHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXG43ODgwOlx0XHRcdCAqIGFzc2VydCAmIzQzOyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cbjc4ODE6XHRcdFx0ICovXG43ODgyOlx0XHRcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxuNzg4MzpcdFx0XHRcdHJlc2V0X2NvbnRyb2xfcmVzZXQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg4NDpcdFx0fVxuNzg4NTpcdFxuNzg4NjpcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVx1MDAzZXBsYXQtXHUwMDNlc3RtbWFjX2FoYl9yc3QpO1xuNzg4NzpcdFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXG43ODg4Olx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O3VuYWJsZSB0byBicmluZyBvdXQgb2YgYWhiIHJlc2V0OiAlcGVcXG5cJiMzNDssXG43ODg5Olx0XHRcdFx0RVJSX1BUUihyZXQpKTtcbjc4OTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNDUKCQkJCQkJCW91dHB1dDogNTEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIG1vcmUgb2YgdGhlIGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHdlIHdlcmUgbG9va2luZyBhdCB0aGF0IGVhcmxpZXIsIGFuZCBJIG5lZWQgYSBiZXR0ZXIgZ3Jhc3Agb24gZXhhY3RseSBob3cgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGluaXRpYWwgcHJvYmUgYW5kIHNldHVwLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUgYW5kIHRoZSB2YXJpb3VzIGRldmljZSByZXNvdXJjZXMuIE1lbW9yeSBtYXBwaW5nLCBpbnRlcnJ1cHQgYWxsb2NhdGlvbiwgY2xvY2sgZW5hYmxlbWVudCDigJMgSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGF0IGFsbCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBvYnNlcnZlIGFsbCB0aGUgZGlmZmVyZW50IGVycm9yIHBhdGhzIGl0IGNvdWxkIHRha2UgZHVyaW5nIHRoZSBpbml0aWFsIHByb2JpbmcgcGhhc2UuIFdoYXQgZG9lcyBpdCBkbyBpZiBpdCBjYW4mIzM5O3QgbWFwIHRoZSByZWdpc3RlcnMgY29ycmVjdGx5PyBXaGF0IGhhcHBlbnMgaWYgdGhlIGludGVycnVwdHMgZG9uJiMzOTt0IHJlZ2lzdGVyPyBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGVkZ2UgY2FzZXMgaXMganVzdCBhcyBpbXBvcnRhbnQgYXMgdGhlIGhhcHB5IHBhdGguIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgZHJpdmVyJiMzOTtzIGxpZmVjeWNsZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXQgbGluZSBieSBsaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODkxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODkxOlx0XHQvKiBXYWl0IGEgYml0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi9cbjc4OTI6XHRcdHVkZWxheSgxMCk7XG43ODkzOlx0XG43ODk0Olx0XHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cbjc4OTU6XHRcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xuNzg5NjpcdFx0aWYgKHJldClcbjc4OTc6XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzg5ODpcdFxuNzg5OTpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43OTAwOlx0XHQgKi9cbjc5MDE6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43OTAyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc5MDM6XHRcbjc5MDQ6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzkwNTpcdFxuNzkwNjpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43OTA3Olx0XG43OTA4Olx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc5MDk6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzkxMDpcdFxuNzkxMTpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTEyOlx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkxMzpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MTQ6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MTU6XHRcbjc5MTY6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkxNzpcdFx0aWYgKCFyZXQpIHtcbjc5MTg6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkxOTpcdFx0fVxuNzkyMDpcdFxuNzkyMTpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTIyOlx0XG43OTIzOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkyNDpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MjU6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MjY6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTI3Olx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTI4Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5Mjk6XHRcdH1cbjc5MzA6XHRcbjc5MzE6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkzMjpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkzMzpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkzNDpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTM1Olx0XHQgKi9cbjc5MzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTM3Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5Mzg6XHRcdGVsc2Vcbjc5Mzk6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5NDA6XHRcbjc5NDE6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5NDI6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTQzOlx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTQ0Olx0XHRcdGlmICghcmV0KSB7XG43OTQ1Olx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzk0NjpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTQ3Olx0XG43OTQ4Olx0XHRcdFx0Lypcbjc5NDk6XHRcdFx0XHQgKiBJZiBtb3JlIHRoYW4gMzIgYml0cyBjYW4gYmUgYWRkcmVzc2VkLCBtYWtlIHN1cmUgdG9cbjc5NTA6XHRcdFx0XHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxuNzk1MTpcdFx0XHRcdCAqL1xuNzk1MjpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQpKVxuNzk1MzpcdFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlZWFtZSA9IHRydWU7XG43OTU0Olx0XHRcdH0gZWxzZSB7XG43OTU1Olx0XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuNzk1NjpcdFx0XHRcdGlmIChyZXQpIHtcbjc5NTc6XHRcdFx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0ZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXG5cJiMzNDspO1xuNzk1ODpcdFx0XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzk1OTpcdFx0XHRcdH1cbjc5NjA6XHRcbjc5NjE6XHRcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcbjc5NjI6XHRcdFx0fVxuNzk2MzpcdFx0fVxuNzk2NDpcdFxuNzk2NTpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xuNzk2NjpcdFx0bmRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xuNzk2NzpcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxuNzk2ODpcdFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xuNzk2OTpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuNzk3MDpcdFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpIHtcbjc5NzE6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbjc5NzI6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2Vod192bGFuX2VuID0gdHJ1ZTtcbjc5NzM6XHRcdH1cbjc5NzQ6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XG43OTc1Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuNzk3NjpcdFx0XHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcbjc5Nzc6XHRcdH1cbjc5Nzg6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxpbnMpXG43OTc5Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XG43OTgwOlx0I2VuZGlmXG43OTgxOlx0XHRwcml2LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xuNzk4MjpcdFxuNzk4MzpcdFx0cHJpdi1cdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XG43OTg0Olx0XG43OTg1Olx0XHQvKiBJbml0aWFsaXplIFJTUyAqL1xuNzk4NjpcdFx0cnhxID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG43OTg3Olx0XHRuZXRkZXZfcnNzX2tleV9maWxsKHByaXYtXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXHUwMDNlcnNzLmtleSkpO1xuNzk4ODpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXJzcy50YWJsZSk7IGkmIzQzOyYjNDM7KVxuNzk4OTpcdFx0XHRwcml2LVx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XG43OTkwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIHN0bW1hY19od19pbml0IEZ1bmN0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIHJlbGV2YW50IHJlZ2lzdGVycyBhcmUgYmVpbmcgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIFNUTU1BQyYjMzk7cyBzcGVjaWZpYyBvcGVyYXRpb25hbCBtb2RlIGFuZCB0aGUgZXhwZWN0ZWQgZGF0YXBhdGguIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcyByZWxhdGVkIHRvIGNsb2NrIGdhdGluZywgUEhZIGluaXRpYWxpemF0aW9uLCBETUEgZW5naW5lIHNldHVwIChkZXNjcmlwdG9ycywgYnVyc3Qgc2l6ZXMsIHRocmVzaG9sZHMpLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMsIGFzIHRoZXJlIGFyZSBvZnRlbiBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSBzZXR0aW5ncy4gQW55IHVuZXhwZWN0ZWQgcmVnaXN0ZXIgdmFsdWVzIG9yIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcyBjb3VsZCBoaW50IGF0IHByb2JsZW1zIHdpdGggdGhlIGRyaXZlciYjMzk7cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgaGFyZHdhcmUgb3IgdGhlIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYW55IG5lY2Vzc2FyeSBwb3dlci11cCBzZXF1ZW5jZXMgY29ycmVjdGx5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIFBIWSBvciBpbnRlcm5hbCBjbG9ja3MsIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgdGhhdCB0aGUgaW5pdGlhbCBoYXJkd2FyZSBzdGF0ZSBpcyBjb2hlcmVudCBhbmQgcmVhZHkgZm9yIHRoZSBNQUMmIzM5O3Mgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNjA9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTU6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzk2LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAyOnN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTE9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg5NC1cdC8qIEluaXQgTUFDIGFuZCBnZXQgdGhlIGNhcGFiaWxpdGllcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODk1Olx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4OTYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTEzMgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggYHN0bW1hY19od19pbml0YC4KCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBgc3RtbWFjX2h3X2luaXRgKioKCkFscmlnaHQsIGRpdmluZyBpbnRvIGBzdG1tYWNfaHdfaW5pdGAuIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciB0YWtlcyBwbGFjZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIGEgaGlnaC1sZXZlbCBmdW5jdGlvbiB0aGF0IGNhbGxzIHNldmVyYWwgb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIG9yIGlzIGl0IGEgZGVlcCBkaXZlIGludG8gdGhlIHJlZ2lzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24/IEnigJltIGJldHRpbmcgb24gdGhlIGZvcm1lciwgYnV0IHlvdSBuZXZlciBrbm93LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCYjMzk7cyBzZWUgaWYgaXQgaGFuZGxlcyB0aGUgY2xvY2sgc2V0dXAsIERNQSBjb25maWd1cmF0aW9uLCBNQUMgYWRkcmVzcyBwcm9ncmFtbWluZywgYW5kIGludGVycnVwdCBlbmFibGluZy4gVGhlIHBvd2VyIG1hbmFnZW1lbnQgc2VxdWVuY2Ugd2lsbCBiZSBpbXBvcnRhbnQgdG9vLiBJIGFudGljaXBhdGUgc29tZSBjb25kaXRpb25hbCBsb2dpYyBoZXJlLCB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgU1RNTUFDIGhhcmR3YXJlIHJldmlzaW9uIGFuZCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHBhc3NlZCBpbiBhdCBib290LiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRvIGVuc3VyZSB0aGlzIHJvdXRpbmUgbGVhdmVzIHRoZSBoYXJkd2FyZSBpbiBhIGRlZmluZWQsIG9wZXJhdGlvbmFsIHN0YXRlLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZSBhdXRob3IgYXBwcm9hY2hlZCB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NDAyOlx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG43NDAzOlx0e1xuNzQwNDpcdFx0aW50IHJldDtcbjc0MDU6XHRcbjc0MDY6XHRcdC8qIGR3bWFjLXN1bjhpIG9ubHkgd29yayBpbiBjaGFpbiBtb2RlICovXG43NDA3Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19IQVNfU1VOOEkpXG43NDA4Olx0XHRcdGNoYWluX21vZGUgPSAxO1xuNzQwOTpcdFx0cHJpdi1cdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xuNzQxMDpcdFxuNzQxMTpcdFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cbjc0MTI6XHRcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XG43NDEzOlx0XHRpZiAocmV0KVxuNzQxNDpcdFx0XHRyZXR1cm4gcmV0O1xuNzQxNTpcdFxuNzQxNjpcdFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xuNzQxNzpcdFx0cHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XG43NDE4Olx0XHRpZiAocHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydCkge1xuNzQxOTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7RE1BIEhXIGNhcGFiaWxpdHkgcmVnaXN0ZXIgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0MjA6XHRcbjc0MjE6XHRcdFx0LyogV2UgY2FuIG92ZXJyaWRlIHNvbWUgZ21hYy9kbWEgY29uZmlndXJhdGlvbiBmaWVsZHM6IGUuZy5cbjc0MjI6XHRcdFx0ICogZW5oX2Rlc2MsIHR4X2NvZSAoZS5nLiB0aGF0IGFyZSBwYXNzZWQgdGhyb3VnaCB0aGVcbjc0MjM6XHRcdFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XG43NDI0Olx0XHRcdCAqIHJlZ2lzdGVyIChpZiBzdXBwb3J0ZWQpLlxuNzQyNTpcdFx0XHQgKi9cbjc0MjY6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWVuaF9kZXNjID0gcHJpdi1cdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xuNzQyNzpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcG10ID0gcHJpdi1cdTAwM2VkbWFfY2FwLnBtdF9yZW1vdGVfd2FrZV91cCBcdTAwMjZcdTAwMjZcbjc0Mjg6XHRcdFx0XHRcdCEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XG43NDI5Olx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikge1xuNzQzMDpcdFx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cbjc0MzE6XHRcdFx0XHRcdFx0KEJJVChwcml2LVx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikgXHUwMDNjXHUwMDNjIDUpO1xuNzQzMjpcdFx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlbWNhc3RfYml0c19sb2cyID1cbjc0MzM6XHRcdFx0XHRcdFx0aWxvZzIocHJpdi1cdTAwM2Vody1cdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMpO1xuNzQzNDpcdFx0XHR9XG43NDM1Olx0XG43NDM2Olx0XHRcdC8qIFRYQ09FIGRvZXNuJiMzOTt0IHdvcmsgaW4gdGhyZXNoIERNQSBtb2RlICovXG43NDM3Olx0XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZm9yY2VfdGhyZXNoX2RtYV9tb2RlKVxuNzQzODpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UgPSBmYWxzZTtcbjc0Mzk6XHRcdFx0ZWxzZVxuNzQ0MDpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAudHhfY29lO1xuNzQ0MTpcdFxuNzQ0MjpcdFx0XHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cbjc0NDM6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5yeF9jb2U7XG43NDQ0Olx0XG43NDQ1Olx0XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUyKVxuNzQ0NjpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xuNzQ0NzpcdFx0XHRlbHNlIGlmIChwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUxKVxuNzQ0ODpcdFx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xuNzQ0OTpcdFxuNzQ1MDpcdFx0XHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XG43NDUxOlx0XHR9IGVsc2Uge1xuNzQ1MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Tm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NTM6XHRcdH1cbjc0NTQ6XHRcbjc0NTU6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lKSB7XG43NDU2Olx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2U7XG43NDU3Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1ODpcdFx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxuNzQ1OTpcdFx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtDT0UgVHlwZSAlZFxcblwmIzM0OywgcHJpdi1cdTAwM2Vody1cdTAwM2VyeF9jc3VtKTtcbjc0NjA6XHRcdH1cbjc0NjE6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lKVxuNzQ2MjpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VFggQ2hlY2tzdW0gaW5zZXJ0aW9uIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDYzOlx0XG43NDY0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCkge1xuNzQ2NTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7V2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NjY6XHRcdFx0ZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShwcml2LVx1MDAzZWRldmljZSwgMSk7XG43NDY3Olx0XHRcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXHUwMDNlZGV2aWNlLCBwcml2LVx1MDAzZXdvbF9pcnEpO1xuNzQ2ODpcdFx0fVxuNzQ2OTpcdFxuNzQ3MDpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzIFx1MDAyNlx1MDAyNlxuNzQ3MTpcdFx0ICAgIHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcykge1xuNzQ3MjpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0NzM6XHRcdFx0XHQgXCYjMzQ7TnVtYmVyIG9mIFJ4IHF1ZXVlcyAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXG5cJiMzNDssXG43NDc0Olx0XHRcdFx0IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlKTtcbjc0NzU6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSBwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcbjc0NzY6XHRcdH1cbjc0Nzc6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcyBcdTAwMjZcdTAwMjZcbjc0Nzg6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMpIHtcbjc0Nzk6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXZpY2UsXG43NDgwOlx0XHRcdFx0IFwmIzM0O051bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ4MTpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSk7XG43NDgyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlID0gcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXM7XG43NDgzOlx0XHR9XG43NDg0Olx0XG43NDg1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSBcdTAwMjZcdTAwMjZcbjc0ODY6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfZmlmb19zaXplIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplKSB7XG43NDg3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ4ODpcdFx0XHRcdCBcJiMzNDtSeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ4OTpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfZmlmb19zaXplKTtcbjc0OTA6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemU7XG43NDkxOlx0XHR9XG43NDkyOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSBcdTAwMjZcdTAwMjZcbjc0OTM6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfZmlmb19zaXplIFx1MDAzZSBwcml2LVx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplKSB7XG43NDk0Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ5NTpcdFx0XHRcdCBcJiMzNDtUeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ5NjpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfZmlmb19zaXplKTtcbjc0OTc6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSA9IHByaXYtXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemU7XG43NDk4Olx0XHR9XG43NDk5Olx0XG43NTAwOlx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXZsYW5fZmFpbF9xX2VuID1cbjc1MDE6XHRcdFx0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVkxBTl9GQUlMX1FfRU4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM0NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBTVE1NQUMgSW5pdGlhbGl6YXRpb24gaW4gYSBGdXp6aW5nIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uIHdvcmtzLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCBraWNrcyBpbiwgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXR5IHJlZ2lzdGVyLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O0FoYSEgVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0b3IgbWlnaHQgdHJpcCB1cyB1cC4mIzM0OyBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24mIzM5O3QgYWN0dWFsbHkgcHJlc2VudCDigJMgd2hpY2gsIGxldCYjMzk7cyBiZSBob25lc3QsIGlzIHRoZSBjYXNlIHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzeXprYWxsZXIgYW5kIGl0cyBlbXVsYXRlZCBlbnZpcm9ubWVudCDigJMgdGhhdCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHJlYWQgd2lsbCBsaWtlbHkgcmV0dXJuIGdhcmJhZ2UuIEVpdGhlciB6ZXJvLCBvciBhIHBvdGVudGlhbGx5IHJhbmRvbSB2YWx1ZSBvZiAweGZmZmZmZmZmLgoKTm93LCBJJiMzOTttIHJlbWVtYmVyaW5nIHN5emthbGxlciYjMzk7cyBgc3l6X3BjaWAgY2FsbHMuIEl0IGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUgdGhlIFBDSSBkZXZpY2UmIzM5O3MgbWVtb3J5IHNwYWNlOyBpdCBqdXN0IG1hcHMgKnNvbWUqIGR1bW15IG1lbW9yeSBmb3IgdGhvc2UgQkFScyAoQmFzZSBBZGRyZXNzIFJlZ2lzdGVycykuIFNvLCByZWFkaW5nIGZyb20gdGhvc2UgQkFScyBpcyBnb2luZyB0byBnaXZlIHVzIGJhY2sgd2hhdGV2ZXImIzM5O3MgaW4gdGhhdCBkdW1teSBtZW1vcnkgc3BhY2UsIHByb2JhYmx5IHplcm8sIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIGlmIHdlIGdldCBhIHplcm8gYmFjaywgd2UgYXJlIGdvaW5nIHRvIHNldCBgcHJpdi0mZ3Q7aHdfY2FwX3N1cHBvcnRgIHRvIHplcm8sIHdoaWNoIG1lYW5zIHdlIGFyZSBnb2luZyB0byBjb250aW51ZSBkb3duIHRoZSBwYXRoIG9mIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgoKQnV0IHRoZW4sIHRoZSBjb2RlIGNvbnRpbnVlcyB0byBgc3RtbWFjX2R2cl9wcm9iZWAsIHdoaWNoIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IERvZXMgdGhlIGxhY2sgb2YgcmVhbCBoYXJkd2FyZSBjYXVzZSB0aGUgZHJpdmVyIHByb2JlIHRvIGZhaWw/IERvZXMgaXQgY2hlY2sgdGhlc2UgdmFsdWVzPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHJlYWxseSB0aGVyZS4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gYHN0bW1hY19od2lmX2luaXRgIGFuZCBsb29rIGZvciBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5ND1zdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzE3OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaD02OTc9aW50IHN0bW1hY19yZXNldChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5ODppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc0MDI9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDExLVx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQxMjpcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MTMtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM2MwoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgaW5pdGlhbGl6ZWQuIFdoYXQgYXJlIHRoZSBrZXkgc3RlcHMgaW52b2x2ZWQ/IEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgdGhpbmdzIG1pZ2h0IGdvIHdyb25nLCBvciBwbGFjZXMgd2hlcmUgdGhlIGRyaXZlciBjb3VsZCBiZSBvcHRpbWl6ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGRldGFpbHMsIG9mIGNvdXJzZSDigJMgaG93IGl0IHRhbGtzIHRvIHRoZSBNQUMsIHdoYXQgcmVnaXN0ZXJzIGl0JiMzOTtzIHNldHRpbmcgdXAsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE1BIGVuZ2luZSBpZiBpdCBoYXMgb25lLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcgdG9vLiBIb3cgcm9idXN0IGlzIHRoaXMgaW5pdGlhbGl6YXRpb24/IERvZXMgaXQgaGFuZGxlIHZhcmlvdXMgaGFyZHdhcmUgcmV2aXNpb25zIGdyYWNlZnVsbHk/IEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIGNsZWFyIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMsIHNvIEkgY2FuIG1lbnRhbGx5IG1hcCBpdCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bGwgYmUgY29uc2lkZXJpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zOyBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgTUFDIGZvciBsb3ctcG93ZXIgc3RhdGVzLCBpZiBhcHBsaWNhYmxlPyBGaW5hbGx5LCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHZlbmRvci1zcGVjaWZpYyBtYWdpYyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLCB0aGVzZSBzb3J0cyBvZiB0aGluZ3MgY291bGQgYmUgZWFzaWx5IG1pc3NlZCBhbmQgY2F1c2UgaXNzdWVzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbnkgaW5pdGlhbGl6YXRpb24gb3JkZXJzLCBvciBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3ViLWNvbXBvbmVudHMgb2YgdGhlIGRyaXZlciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxNzpcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAzMTg6XHR7XG4gMzE5Olx0XHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlO1xuIDMyMDpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAzMjE6XHRcdHN0cnVjdCBzdG1tYWNfdmVyc2lvbiB2ZXJzaW9uO1xuIDMyMjpcdFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjO1xuIDMyMzpcdFx0Ym9vbCBuZWVkc19zZXR1cCA9IHRydWU7XG4gMzI0Olx0XHRpbnQgcmV0O1xuIDMyNTpcdFxuIDMyNjpcdFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuIDMyNzpcdFxuIDMyODpcdFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXG4gMzI5Olx0XHRwcml2LVx1MDAzZXN5bm9wc3lzX2lkID0gdmVyc2lvbi5zbnBzdmVyO1xuIDMzMDpcdFxuIDMzMTpcdFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXHUwMDNlZGV2aWNlLCBzaXplb2YoKm1hYyksIEdGUF9LRVJORUwpO1xuIDMzMjpcdFx0aWYgKCFtYWMpXG4gMzMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMzNDpcdFxuIDMzNTpcdFx0LyogQ2hlY2sgZm9yIEhXIHNwZWNpZmljIHNldHVwIGZpcnN0ICovXG4gMzM2Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1hY19zZXR1cCkge1xuIDMzNzpcdFx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XG4gMzM4Olx0XHRcdGlmIChyZXQpXG4gMzM5Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAzNDA6XHRcbiAzNDE6XHRcdFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcbiAzNDI6XHRcdH1cbiAzNDM6XHRcbiAzNDQ6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1hYy1cdTAwM2VpcnFfY3RybF9sb2NrKTtcbiAzNDU6XHRcbiAzNDY6XHRcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cbiAzNDc6XHRcbiAzNDg6XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDM0OTpcdFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xuIDM1MDpcdFx0aWYgKCFlbnRyeSkge1xuIDM1MTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLFxuIDM1MjpcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcblwmIzM0OyxcbiAzNTM6XHRcdFx0XHR2ZXJzaW9uLnNucHN2ZXIsIGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMsXG4gMzU0Olx0XHRcdFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xuIDM1NTpcdFxuIDM1NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcbiAzNTk6XHRcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cbiAzNjA6XHRcdG1hYy1cdTAwM2VkZXNjID0gbWFjLVx1MDAzZWRlc2MgPyA6IGVudHJ5LVx1MDAzZWRlc2M7XG4gMzYxOlx0XHRtYWMtXHUwMDNlZG1hID0gbWFjLVx1MDAzZWRtYSA/IDogZW50cnktXHUwMDNlZG1hO1xuIDM2MjpcdFx0bWFjLVx1MDAzZW1hYyA9IG1hYy1cdTAwM2VtYWMgPyA6IGVudHJ5LVx1MDAzZW1hYztcbiAzNjM6XHRcdG1hYy1cdTAwM2VwdHAgPSBtYWMtXHUwMDNlcHRwID8gOiBlbnRyeS1cdTAwM2Vod3RpbWVzdGFtcDtcbiAzNjQ6XHRcdG1hYy1cdTAwM2Vtb2RlID0gbWFjLVx1MDAzZW1vZGUgPyA6IGVudHJ5LVx1MDAzZW1vZGU7XG4gMzY1Olx0XHRtYWMtXHUwMDNldGMgPSBtYWMtXHUwMDNldGMgPyA6IGVudHJ5LVx1MDAzZXRjO1xuIDM2NjpcdFx0bWFjLVx1MDAzZW1tYyA9IG1hYy1cdTAwM2VtbWMgPyA6IGVudHJ5LVx1MDAzZW1tYztcbiAzNjc6XHRcdG1hYy1cdTAwM2Vlc3QgPSBtYWMtXHUwMDNlZXN0ID8gOiBlbnRyeS1cdTAwM2Vlc3Q7XG4gMzY4Olx0XHRtYWMtXHUwMDNldmxhbiA9IG1hYy1cdTAwM2V2bGFuID8gOiBlbnRyeS1cdTAwM2V2bGFuO1xuIDM2OTpcdFxuIDM3MDpcdFx0cHJpdi1cdTAwM2VodyA9IG1hYztcbiAzNzE6XHRcdHByaXYtXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cdTAwM2VyZWdzLmZwZV9yZWc7XG4gMzcyOlx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLnB0cF9vZmY7XG4gMzczOlx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLm1tY19vZmY7XG4gMzc0Olx0XHRtZW1jcHkoXHUwMDI2cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLCBlbnRyeS1cdTAwM2VwdHAsXG4gMzc1Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xuIDM3NjpcdFxuIDM3NzpcdFx0aWYgKGVudHJ5LVx1MDAzZWVzdClcbiAzNzg6XHRcdFx0cHJpdi1cdTAwM2Vlc3RhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgZW50cnktXHUwMDNlcmVncy5lc3Rfb2ZmO1xuIDM3OTpcdFxuIDM4MDpcdFx0LyogRW50cnkgZm91bmQgKi9cbiAzODE6XHRcdGlmIChuZWVkc19zZXR1cCkge1xuIDM4MjpcdFx0XHRyZXQgPSBlbnRyeS1cdTAwM2VzZXR1cChwcml2KTtcbiAzODM6XHRcdFx0aWYgKHJldClcbiAzODQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM4NTpcdFx0fVxuIDM4NjpcdFxuIDM4NzpcdFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xuIDM4ODpcdFx0cHJpdi1cdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVx1MDAzZXF1aXJrcztcbiAzODk6XHRcbiAzOTA6XHRcdHJldHVybiAwO1xuIDM5MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpZ2dpbmcgaW50byBQb3RlbnRpYWwgYHN0bW1hY2AgRHJpdmVyIElzc3VlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc3RtbWFjYCBkcml2ZXIgY29kZS4gSSYjMzk7dmUgZ290IGEgaHVuY2ggYWJvdXQgYSBwb3NzaWJsZSBmYWlsdXJlIHBvaW50LiBUaGUgcm91dGluZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBpcyByZXNwb25zaWJsZSBmb3IgZ3JhYmJpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24sIHdoaWNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgYW5kIGhlcmUmIzM5O3MgdGhlIHJ1Yiwgd2hhdCBpZiBpdCByZXR1cm5zIHplcm8/IFRoYXQmIzM5O3Mgd2hlbiB0aGluZ3MgY291bGQgZ2V0IGludGVyZXN0aW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYSB2ZXJzaW9uIHplcm8gY291bGQgcG9zc2libHkgY2F1c2UgaXNzdWVzIHdpdGggdGhlIGBzdG1tYWNfaHdpZl9maW5kYCBmdW5jdGlvbiwgaXQmIzM5O3MgcG9zc2libGUgdGhhdCBgc3RtbWFjX2h3aWZfZmluZGAgbWlnaHQgdGhlbiBmYWlsLiBUaGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHRoZSBjb3JyZWN0IGhhcmR3YXJlIGludGVyZmFjZS4gU28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcmVhbGx5IGRpdmUgaW50byB0aGUgbG9naWMgb2YgYHN0bW1hY19od2lmX2ZpbmRgIGFuZCBgc3RtbWFjX2dldF92ZXJzaW9uYCwgZG91YmxlLWNoZWNraW5nIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZGVwZW5kZW5jaWVzIHRoZXJlLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgdHdvIGFyZSBwbGF5aW5nIG5pY2VseSB0b2dldGhlciwgZXNwZWNpYWxseSBpbiBlZGdlIGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTE2PXN0cnVjdCBzdG1tYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIxOnN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzI2Olx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NDQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYHN0bW1hY19nZXRfdmVyc2lvbmAgY29kZS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGNydWNpYWwgY29tcG9uZW50IGZvciBhbnkgbmV0d29ya2luZyBkZXZpY2UuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIGRyaXZlciByZXBvcnRzIGl0cyBvd24gdmVyc2lvbiwgcGVyaGFwcyBmb3IgY29tcGF0aWJpbGl0eSBjaGVja3Mgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgb2J0YWluZWQsIHN0b3JlZCwgYW5kIHByZXNlbnRlZC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgU1RNTUFDIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBwcmV0dHkgZ29vZC4gSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaGVyZSBhbGlnbnMgd2l0aCBteSBleHBlY3RhdGlvbnMuIEkgYW0gcmVhZHkgdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBxdWlya3Mgb3Igc3VidGxlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBpcyByb2J1c3QsIGhhbmRsaW5nIGFueSBwb3NzaWJsZSBlcnJvcnMgZ3JhY2VmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIxOlx0c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiAgMjI6XHRcdFx0XHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXG4gIDIzOlx0e1xuICAyNDpcdFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbiAgMjU6XHRcdHVuc2lnbmVkIGludCB2ZXJzaW9uX29mZnNldDtcbiAgMjY6XHRcdHUzMiB2ZXJzaW9uO1xuICAyNzpcdFxuICAyODpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSAwO1xuICAyOTpcdFx0dmVyLVx1MDAzZWRldl9pZCA9IDA7XG4gIDMwOlx0XG4gIDMxOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfTUFDMTAwKVxuICAzMjpcdFx0XHRyZXR1cm47XG4gIDMzOlx0XG4gIDM0Olx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQylcbiAgMzU6XHRcdFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDX1ZFUlNJT047XG4gIDM2Olx0XHRlbHNlXG4gIDM3Olx0XHRcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcbiAgMzg6XHRcbiAgMzk6XHRcdHZlcnNpb24gPSByZWFkbChwcml2LVx1MDAzZWlvYWRkciAmIzQzOyB2ZXJzaW9uX29mZnNldCk7XG4gIDQwOlx0XHRpZiAodmVyc2lvbiA9PSAwKSB7XG4gIDQxOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtWZXJzaW9uIElEIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuICA0MjpcdFx0XHRyZXR1cm47XG4gIDQzOlx0XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXG5cJiMzNDssXG4gIDQ2Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbiksXG4gIDQ3Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xuICA0ODpcdFxuICA0OTpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG4gIDUwOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gIDUxOlx0XHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIHN0bW1hY19kd21hY19tb2RlX3F1aXJrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVx1MDAzZWh3O1xuICA1NzpcdFxuICA1ODpcdFx0aWYgKHByaXYtXHUwMDNlY2hhaW5fbW9kZSkge1xuICA1OTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q2hhaW4gbW9kZSBlbmFibGVkXFxuXCYjMzQ7KTtcbiAgNjA6XHRcdFx0cHJpdi1cdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfQ0hBSU5fTU9ERTtcbiAgNjE6XHRcdFx0bWFjLVx1MDAzZW1vZGUgPSBcdTAwMjZjaGFpbl9tb2RlX29wcztcbiAgNjI6XHRcdH0gZWxzZSB7XG4gIDYzOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtSaW5nIG1vZGUgZW5hYmxlZFxcblwmIzM0Oyk7XG4gIDY0Olx0XHRcdHByaXYtXHUwMDNlZGVzY3JpcHRvcl9tb2RlID0gU1RNTUFDX1JJTkdfTU9ERTtcbiAgNjU6XHRcdFx0bWFjLVx1MDAzZW1vZGUgPSBcdTAwMjZyaW5nX21vZGVfb3BzO1xuICA2NjpcdFx0fVxuICA2NzpcdH1cbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHN0bW1hY19kd21hYzFfcXVpcmtzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNzA6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNDMxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgVmVyc2lvbiBDaGVjayAmYW1wOyBIYXJkd2FyZSBJbnRlcmZhY2UgRGlzY292ZXJ5KioKCkFscmlnaHQsIHNvIGlmIHRoZSBzeXN0ZW0mIzM5O3Mgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDAsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGB2ZXItJmd0O3NucHN2ZXJgIGlzIGluaXRpYWxpemVkIHRvIDAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgYmFzZSBjb25kaXRpb24uIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgd2hlbiB3ZSB0aGVuIGNhbGwgdGhlIGBzdG1tYWNfaHdpZl9maW5kYCBmdW5jdGlvbiwgd2UmIzM5O3JlIHBhc3NpbmcgaW4gdGhhdCBgc25wc3ZlcmAgdmFyaWFibGUsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGhhcyBiZWVuIGRlbGliZXJhdGVseSBpbml0aWFsaXplZCB0byB6ZXJvLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRoaW5rIGFib3V0IGhvdyB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIHJvdXRpbmUgb3BlcmF0ZXMgb24gYSBuZXcsIHVuY29uZmlndXJlZCwgcG9zc2libHkgZXZlbiB1bmluaXRpYWxpemVkIGhhcmR3YXJlLiBJcyB0aGUgaW50ZW50aW9uIHRvIGhhdmUgYHN0bW1hY19od2lmX2ZpbmRgIGZpZ3VyZSBvdXQgdGhlIHZlcnNpb24sIG9yIGhhcyB0aGlzIGFscmVhZHkgYmVlbiBwcmUtZGV0ZXJtaW5lZD8gQW5kIGlmIGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGlzIHRoYXQgYXNzdW1lZCBpbml0aWFsaXphdGlvbiBzdWZmaWNpZW50IGZvciBjb3JyZWN0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgaW50ZXJmYWNlIHNldHVwPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhhdCB6ZXJvIHZhbHVlIGlzIGludGVycHJldGVkIHdpdGhpbiB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uIGl0c2VsZiwgc3BlY2lmaWNhbGx5LCBob3cgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19od2lmX2ZpbmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTI5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyOTQ6c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zNDgtXHQvKiBVc2Ugc3lub3BzeXNfaWQgdmFyIGJlY2F1c2Ugc29tZSBzZXR1cHMgY2FuIG92ZXJyaWRlIHRoaXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozNDk6XHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVx1MDAzZXN5bm9wc3lzX2lkLCB2ZXJzaW9uLmRldl9pZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzUwLVx0aWYgKCFlbnRyeSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjA1MAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc3RtbWFjX2h3aWZfZmluZGAqKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgc3RtbWFjX2h3aWZfZmluZGAuIEkmIzM5O20gY3VyaW91cyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgYSBjb3JlIGNvbXBvbmVudCwgbGlrZWx5IGludm9sdmVkIGluIHByb2JpbmcgdGhlIGRldmljZSB0cmVlIG9yIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLCBvciBtYXliZSBldmVuIHVzaW5nIHBsYXRmb3JtIGRhdGEsIHRvIGlkZW50aWZ5IGFuZCBjb25maWd1cmUgdGhlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgaW5zdGFuY2UuIEkgYW50aWNpcGF0ZSBzZWVpbmcgbG9naWMgZm9yIHRyYXZlcnNpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBwb3NzaWJseSBpdGVyYXRpbmcgdGhyb3VnaCBhIGxpc3Qgb2YgcG90ZW50aWFsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgdXNpbmcgYSBtb3JlIGRpcmVjdCBtZXRob2QgaWYgdGhlIGhhcmR3YXJlIGlzIHRpZ2h0bHkgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUgLSB3aGF0IGhhcHBlbnMgaWYgaXQgZmFpbHMgdG8gZmluZCBhIHZhbGlkIGhhcmR3YXJlIGludGVyZmFjZT8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gU3BlY2lmaWMgZXJyb3IgY29kZXMgdGhhdCBhcmUgcmV0dXJuZWQ/IExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIGhvdyB3ZWxsIG15IGFzc3VtcHRpb25zIGFsaWduIHdpdGggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gSSBhbHNvIGhvcGUgdGhlIG5hbWluZyBjb252ZW50aW9uIGhlcmUgaXMgaW50dWl0aXZlLCBnaXZlbiB0aGF0IHRoZXNlIGhhcmR3YXJlIGludGVyZmFjZXMgY2FuIGJlIGEgYml0IHRyaWNreS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKlxuIDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4gMzE0Olx0XHRyZXR1cm4gTlVMTDtcbiAzMTU6XHR9XG4gMzE2Olx0XG4gMzE3Olx0aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuIDMxODpcdHtcbiAzMTk6XHRcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGU7XG4gMzIwOlx0XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xuIDMyMTpcdFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XG4gMzIyOlx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XG4gMzIzOlx0XHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcbiAzMjQ6XHRcdGludCByZXQ7XG4gMzI1Olx0XG4gMzI2Olx0XHRzdG1tYWNfZ2V0X3ZlcnNpb24ocHJpdiwgXHUwMDI2dmVyc2lvbik7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKiBTYXZlIElEIGZvciBsYXRlciB1c2UgKi9cbiAzMjk6XHRcdHByaXYtXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XG4gMzMwOlx0XG4gMzMxOlx0XHRtYWMgPSBkZXZtX2t6YWxsb2MocHJpdi1cdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XG4gMzMyOlx0XHRpZiAoIW1hYylcbiAzMzM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzM0Olx0XG4gMzM1Olx0XHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cbiAzMzY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKSB7XG4gMzM3Olx0XHRcdHJldCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2VtYWNfc2V0dXAocHJpdiwgbWFjKTtcbiAzMzg6XHRcdFx0aWYgKHJldClcbiAzMzk6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM0MDpcdFxuIDM0MTpcdFx0XHRuZWVkc19zZXR1cCA9IGZhbHNlO1xuIDM0MjpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzA3NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uIGFuZCBQb3RlbnRpYWwgRGF0YSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgbG9naWMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJZiB0aGUgdmFyaWFibGUgYHNucHN2ZXJgIGlzIHplcm8sIHRoZW4gYW55IHZhbHVlIG9mIGBlbnRyeS0mZ3Q7bWluX2lkYCBncmVhdGVyIHRoYW4gemVybyB3aWxsIGF1dG9tYXRpY2FsbHkgc2F0aXNmeSB0aGUgY29uZGl0aW9uIGBzbnBzdmVyICZsdDsgZW50cnktJmd0O21pbl9pZGAuIFRoYXQmIzM5O3MganVzdCBiYXNpYyBhcml0aG1ldGljLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBjb2RlLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHRoZSBgc3RtbWFjX2h3YCBhcnJheS4gSSYjMzk7bSBhc3N1bWluZyBpdCBoYXMgc29tZSBpbXBvcnRhbmNlIG9yIHJlbGV2YW5jZSBnaXZlbiBpdHMgcHJlc2VuY2UsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY29uZGl0aW9uYWwgc3RhdGVtZW50JiMzOTtzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGNvZGUgdG8gZXZhbHVhdGUgaXRzIHVzZSBhbmQgc2lnbmlmaWNhbmNlIGluIHJlbGF0aW9uIHRvIGBzbnBzdmVyYCBhbmQgYGVudHJ5LSZndDttaW5faWRgIC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3XFxbXFxdJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0xMTE9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTEyNy1cdGludCAoKnF1aXJrcykoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjktXHQvKiBOT1RFOiBOZXcgSFcgdmVyc2lvbnMgc2hhbGwgZ28gdG8gdGhlIGVuZCBvZiB0aGlzIHRhYmxlICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDc5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfaHdgIEFycmF5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX2h3YCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgcHVycG9zZSwgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGFycmF5IGxpa2VseSBob2xkcyBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlciBvZmZzZXRzIGFuZCBwb3RlbnRpYWxseSBiaXRmaWVsZCBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBjb250cm9sbGVycy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIHBhdHRlcm5zOiBBcmUgdGhlIHJlZ2lzdGVyIGRlZmluaXRpb25zIGdyb3VwZWQgYnkgZnVuY3Rpb24gKGUuZy4sIHRyYW5zbWl0LCByZWNlaXZlLCBjb250cm9sKT8gSXMgdGhlcmUgYW55IG9idmlvdXMgYWRkcmVzc2luZyBzY2hlbWUgdXNlZCB3aXRoaW4gdGhlIGFycmF5PyBEb2VzIGl0IGVtcGxveSBhbnkgbG9va3VwIHRhYmxlcyB0byB0cmFuc2xhdGUgYmV0d2VlbiBsb2dpY2FsIHJlZ2lzdGVyIG5hbWVzIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0aW5nIHRvIERNQSBzZXR1cCwgZGVzY3JpcHRvciByaW5nIGNvbnRyb2wsIGludGVycnVwdCBtYXNrcywgYW5kIFBIWSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbnMsIGFtb25nIG90aGVycy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyB1c2VkIGZvciBlYWNoIGFycmF5IGVsZW1lbnTigJRhcmUgdGhleSBqdXN0IGludGVnZXJzIG9yIGN1c3RvbSBzdHJ1Y3RzIHJlZmxlY3RpbmcgbW9yZSBjb21wbGV4IHJlZ2lzdGVyIGxheW91dHM/IEFuZCBjcnVjaWFsbHksIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGRlZmluaXRpb25zIGFyZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zIChgcmVhZGxgLCBgd3JpdGVsYCwgZXRjLikuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBtYXAgdGhlIGFycmF5JiMzOTtzIGNvbnRlbnRzIHRvIHRoZSBTVE1NQUMmIzM5O3MgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCB0aGUgbG93ZXN0IGxldmVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjg6XHR9IHN0bW1hY19od1tdID0ge1xuIDEyOTpcdFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xuIDEzMDpcdFx0e1xuIDEzMTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9NQUMxMDAsXG4gMTMyOlx0XHRcdC5taW5faWQgPSAwLFxuIDEzMzpcdFx0XHQucmVncyA9IHtcbiAxMzQ6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDM19YX09GRlNFVCxcbiAxMzU6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDM19YX09GRlNFVCxcbiAxMzY6XHRcdFx0fSxcbiAxMzc6XHRcdFx0LmRlc2MgPSBOVUxMLFxuIDEzODpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWMxMDBfZG1hX29wcyxcbiAxMzk6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjMTAwX29wcyxcbiAxNDA6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHdtYWMxMDAwX3B0cCxcbiAxNDE6XHRcdFx0LnB0cCA9IFx1MDAyNmR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzLFxuIDE0MjpcdFx0XHQubW9kZSA9IE5VTEwsXG4gMTQzOlx0XHRcdC50YyA9IE5VTEwsXG4gMTQ0Olx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDE0NTpcdFx0XHQuc2V0dXAgPSBkd21hYzEwMF9zZXR1cCxcbiAxNDY6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzFfcXVpcmtzLFxuIDE0NzpcdFx0fSwge1xuIDE0ODpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxuIDE0OTpcdFx0XHQubWluX2lkID0gMCxcbiAxNTA6XHRcdFx0LnJlZ3MgPSB7XG4gMTUxOlx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfR01BQzNfWF9PRkZTRVQsXG4gMTUyOlx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXG4gMTUzOlx0XHRcdH0sXG4gMTU0Olx0XHRcdC5kZXNjID0gTlVMTCxcbiAxNTU6XHRcdFx0LmRtYSA9IFx1MDAyNmR3bWFjMTAwMF9kbWFfb3BzLFxuIDE1NjpcdFx0XHQubWFjID0gXHUwMDI2ZHdtYWMxMDAwX29wcyxcbiAxNTc6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2ZHdtYWMxMDAwX3B0cCxcbiAxNTg6XHRcdFx0LnB0cCA9IFx1MDAyNmR3bWFjMTAwMF9wdHBfY2xvY2tfb3BzLFxuIDE1OTpcdFx0XHQubW9kZSA9IE5VTEwsXG4gMTYwOlx0XHRcdC50YyA9IE5VTEwsXG4gMTYxOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDE2MjpcdFx0XHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXG4gMTYzOlx0XHRcdC5xdWlya3MgPSBzdG1tYWNfZHdtYWMxX3F1aXJrcyxcbiAxNjQ6XHRcdH0sIHtcbiAxNjU6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4gMTY2Olx0XHRcdC5taW5faWQgPSAwLFxuIDE2NzpcdFx0XHQucmVncyA9IHtcbiAxNjg6XHRcdFx0XHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXG4gMTY5Olx0XHRcdFx0Lm1tY19vZmYgPSBNTUNfR01BQzRfT0ZGU0VULFxuIDE3MDpcdFx0XHRcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcbiAxNzE6XHRcdFx0fSxcbiAxNzI6XHRcdFx0LmRlc2MgPSBcdTAwMjZkd21hYzRfZGVzY19vcHMsXG4gMTczOlx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzRfZG1hX29wcyxcbiAxNzQ6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNF9vcHMsXG4gMTc1Olx0XHRcdC52bGFuID0gXHUwMDI2ZHdtYWNfdmxhbl9vcHMsXG4gMTc2Olx0XHRcdC5od3RpbWVzdGFtcCA9IFx1MDAyNnN0bW1hY19wdHAsXG4gMTc3Olx0XHRcdC5wdHAgPSBcdTAwMjZzdG1tYWNfcHRwX2Nsb2NrX29wcyxcbiAxNzg6XHRcdFx0Lm1vZGUgPSBOVUxMLFxuIDE3OTpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzRfdGNfb3BzLFxuIDE4MDpcdFx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbiAxODE6XHRcdFx0LmVzdCA9IFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXG4gMTgyOlx0XHRcdC5zZXR1cCA9IGR3bWFjNF9zZXR1cCxcbiAxODM6XHRcdFx0LnF1aXJrcyA9IHN0bW1hY19kd21hYzRfcXVpcmtzLFxuIDE4NDpcdFx0fSwge1xuIDE4NTpcdFx0XHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcbiAxODY6XHRcdFx0Lm1pbl9pZCA9IERXTUFDX0NPUkVfNF8wMCxcbiAxODc6XHRcdFx0LnJlZ3MgPSB7XG4gMTg4Olx0XHRcdFx0LnB0cF9vZmYgPSBQVFBfR01BQzRfT0ZGU0VULFxuIDE4OTpcdFx0XHRcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcbiAxOTA6XHRcdFx0XHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXG4gMTkxOlx0XHRcdFx0LmZwZV9yZWcgPSBcdTAwMjZkd21hYzVfZnBlX3JlZyxcbiAxOTI6XHRcdFx0fSxcbiAxOTM6XHRcdFx0LmRlc2MgPSBcdTAwMjZkd21hYzRfZGVzY19vcHMsXG4gMTk0Olx0XHRcdC5kbWEgPSBcdTAwMjZkd21hYzRfZG1hX29wcyxcbiAxOTU6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNDEwX29wcyxcbiAxOTY6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAxOTc6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAxOTg6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIDE5OTpcdFx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuIDIwMDpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG4gMjAxOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDIwMjpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyMDM6XHRcdFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxuIDIwNDpcdFx0XHQucXVpcmtzID0gTlVMTCxcbiAyMDU6XHRcdH0sIHtcbiAyMDY6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4gMjA3Olx0XHRcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMTAsXG4gMjA4Olx0XHRcdC5yZWdzID0ge1xuIDIwOTpcdFx0XHRcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcbiAyMTA6XHRcdFx0XHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXG4gMjExOlx0XHRcdFx0LmVzdF9vZmYgPSBFU1RfR01BQzRfT0ZGU0VULFxuIDIxMjpcdFx0XHRcdC5mcGVfcmVnID0gXHUwMDI2ZHdtYWM1X2ZwZV9yZWcsXG4gMjEzOlx0XHRcdH0sXG4gMjE0Olx0XHRcdC5kZXNjID0gXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxuIDIxNTpcdFx0XHQuZG1hID0gXHUwMDI2ZHdtYWM0MTBfZG1hX29wcyxcbiAyMTY6XHRcdFx0Lm1hYyA9IFx1MDAyNmR3bWFjNDEwX29wcyxcbiAyMTc6XHRcdFx0LnZsYW4gPSBcdTAwMjZkd21hY192bGFuX29wcyxcbiAyMTg6XHRcdFx0Lmh3dGltZXN0YW1wID0gXHUwMDI2c3RtbWFjX3B0cCxcbiAyMTk6XHRcdFx0LnB0cCA9IFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxuIDIyMDpcdFx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuIDIyMTpcdFx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG4gMjIyOlx0XHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuIDIyMzpcdFx0XHQuZXN0ID0gXHUwMDI2ZHdtYWM1MTBfZXN0X29wcyxcbiAyMjQ6XHRcdFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxuIDIyNTpcdFx0XHQucXVpcmtzID0gTlVMTCxcbiAyMjY6XHRcdH0sIHtcbiAyMjc6XHRcdFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfR01BQzQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhlIGBzbnBzdmVyYCB2YWx1ZSBpcyB6ZXJvLCB3aWxsIHN0aWxsIGZpbmQgYSBtYXRjaCwgd2hpY2ggc2VlbXMgb2RkIGJ1dCBtYWtlcyBzZW5zZSBiZWNhdXNlIG9mIHRoZSBgbWluX2lkID0gMGAgZW50cnkgZm9yIGBEV01BQ19DT1JFX0dNQUNgIGFuZCBgRFdNQUNfQ09SRV9HTUFDNGAuIFRoaXMgYWxsb3dzIGBzdG1tYWNfaHdpZl9pbml0YCB0byBzdWNjZWVkLCBhbmQgY29uc2VxdWVudGx5LCBgc3RtbWFjX2h3X2luaXRgIGFsc28gd29ya3MuCgpGcm9tIHRoZXJlLCBgc3RtbWFjX2R2cl9wcm9iZWAgcHJvY2VlZHMgdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGJhY2t0cmFjayBzbGlnaHRseS4gYHN0bW1hY19od19pbml0YCBkb2VzIGNhbGwgYHN0bW1hY19od2lmX2luaXRgLCBhbmQgdGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AuIEl0IHNlZW1zIHRoYXQgaWYgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgIHJldHVybnMgMCwgaXQgc2ltcGx5IHByaW50cyBhIG1lc3NhZ2UgYWJvdXQgbWlzc2luZyBIVyBETUEgZmVhdHVyZSByZWdpc3RlcnMgYW5kIGNvbnRpbnVlcy4gTm8gZmF0YWwgZXJyb3IgaXMgdHJpZ2dlcmVkLgoKU28sICp0aGVuKiBgc3RtbWFjX2R2cl9wcm9iZWAgcmVnaXN0ZXJzIHRoZSBuZXRkZXYgdXNpbmcgYHJlZ2lzdGVyX25ldGRldmAuIEJ1dCBJIHNob3VsZCBiZSBjZXJ0YWluOyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY2FsbCBleHBsaWNpdGx5IGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24gYWdhaW4sIHRvIGNvbmZpcm0gaG93IGByZWdpc3Rlcl9uZXRkZXZgIGlzIGJlaW5nIGNhbGxlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBmbG93IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc5MT1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDU0Olx0cmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDU1LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODEyOD12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMzc6XHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzOC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTg0MDQ9c3RhdGljIGludCBfX2luaXQgc3RtbWFjX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MDktXHRcdHN0bW1hY19mc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoU1RNTUFDX1JFU09VUkNFX05BTUUsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4NDEwOlx0cmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnN0bW1hY19ub3RpZmllcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTEtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04NDE2PXN0YXRpYyB2b2lkIF9fZXhpdCBzdG1tYWNfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODQxOC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjg0MTk6XHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZzdG1tYWNfbm90aWZpZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04NDIwLVx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN0bW1hY19mc19kaXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjg3OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBUZXN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGV2YW50IGJlY2F1c2UgaXQgdXNlcyBgcmVnaXN0ZXJfbmV0ZGV2YC4gVGhlIGZhY3QgdGhhdCBgc3l6a2FsbGVyYCBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBtZWFucyB0aGUgYHN0bW1hY19wY2lfcHJvYmVgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgYW5kIHRoYXQgaW4gdHVybiByZWdpc3RlcnMgYSBuZXR3b3JrIGRldmljZSwgcmlnaHQ/IEludGVyZXN0aW5nLiBUaGlzIGNvbmZpcm1zIHRoYXQgYHN5emthbGxlcmAgY2FuIHRoZW4gbGV2ZXJhZ2UgYGV0aHRvb2xgIHRvIHJ1biB0ZXN0cyBvbiB0aGlzIG5ld2x5IHJlZ2lzdGVyZWQgbmV0ZGV2LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIGhvdyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBldGh0b29sYCBpcyB0aGUga2V5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBzZWxmdGVzdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBkcml2ZXImIzM5O3MgZnJhbWV3b3JrLiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY3J1Y2lhbCBjb250ZXh0IHRvIGFzc2VzcyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSBob3cgcm9idXN0bHkgdGhleSYjMzk7cmUgaW50ZWdyYXRlZCBhbmQgdGhlIGF0dGFjayBzdXJmYWNlIHRoYXQgY3JlYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOC0jaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU0MDpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQ2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDc6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTUxOlx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIGR1bW15X3BvcnQsIDAsIH4wLCAwLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTU0OnN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2MTpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjU6XHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjYtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2ODpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1Njkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NzI6XHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgMCwgZHVtbXlfcG9ydCwgMCwgfjAsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODcyLVx0XHQubmFtZSA9IFwmIzM0O0w0IERBIFRDUCBGaWx0ZXJpbmcgICAgICAgIFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODczOlx0XHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzQtXHR9LCB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3NS1cdFx0Lm5hbWUgPSBcJiMzNDtMNCBTQSBUQ1AgRmlsdGVyaW5nICAgICAgICBcJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTg3NjpcdFx0LmZuID0gc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODc3LVx0fSwge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzgtXHRcdC5uYW1lID0gXCYjMzQ7TDQgREEgVURQIEZpbHRlcmluZyAgICAgICAgXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE4Nzk6XHRcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg4MC1cdH0sIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODgxLVx0XHQubmFtZSA9IFwmIzM0O0w0IFNBIFVEUCBGaWx0ZXJpbmcgICAgICAgIFwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODgyOlx0XHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4ODMtXHR9LCB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHN0bW1hY2AgU2VsZnRlc3QgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSBsb29raW5nIGF0IGFkZHJlc3NlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSB3aXRoaW4gdGhlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgZnVuY3Rpb24gb2YgdGhlIGBzdG1tYWNgIGRyaXZlci4gSSBzZWUgdGhhdCB0aGUgdGVzdCBmdW5jdGlvbnMgYXJlIGxvY2F0ZWQgaW4gdGhlIGBzdG1tYWNfdGVzdGAgYXJyYXksIGFuZCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgdGhlIG9uZSB0aGF0IGFjdHVhbGx5IGV4ZWN1dGVzIHRoZW0uIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBhbmQgZXRodG9vbCwgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZXMgYGtleXNgIGFuZCBgbWFza3NgIHRvIGJlIGVtcHR5IGFuZCBzZXRzIHRoZSBgaXBfcHJvdG9gIG1hc2sgdG8gYDB4ZmZgLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXgsIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSBidWdzIGFyZSBkZWZpbml0ZWx5IGZ1enotd29ydGh5LgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmcgYXJlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIGFsb25nIHdpdGggaXRzIGNhbGxlcnM6IGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAsIGFuZCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAuIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGlubGluaW5nLiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSG93ZXZlciwgaXQgKmlzKiBjYWxsZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgc3RhdGljIGZ1bmN0aW9ucywgYWxsIG9mIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiBhbiBhcnJheSBvZiBmdW5jdGlvbiBwb2ludGVycy4gCgpBaCwgcmlnaHQuIFRoZSBhZGRyZXNzZXMgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGV0Yy4g4oCTIGFyZSB0YWtlbiBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheS4gU28sIHRoZXkgYXJlbiYjMzk7dCBpbmxpbmVkLCBidXQgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCAqbWlnaHQqIGJlIGlubGluZWQgd2l0aGluIHRob3NlIG90aGVyIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19zZWxmdGVzdF9ydW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDM0PXN0cnVjdCB0aW1lc3BlYzY0IHN0bW1hY19jYWxjX3Rhc19iYXNldGltZShrdGltZV90IG9sZF9iYXNlX3RpbWUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDM4LSNpZiBJU19FTkFCTEVEKENPTkZJR19TVE1NQUNfU0VMRlRFU1RTKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDM5OnZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDQwLVx0XHRcdCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGVzdCwgdTY0ICpidWYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQ0Mj1pbnQgc3RtbWFjX3NlbGZ0ZXN0X2dldF9jb3VudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDQzLSNlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDo0NDQ6c3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19zZWxmdGVzdF9ydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0NS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGVzdCwgdTY0ICpidWYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmMtMTEwOC1cdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19ldGh0b29sLmM6MTEwOTpcdC5zZWxmX3Rlc3QgPSBzdG1tYWNfc2VsZnRlc3RfcnVuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVx0LmdldF9ldGh0b29sX3N0YXRzID0gc3RtbWFjX2dldF9ldGh0b29sX3N0YXRzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xOTAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE5MDE6dm9pZCBzdG1tYWNfc2VsZnRlc3RfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTkwMi1cdFx0XHQgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDU3OQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBTZWxmLVRlc3QgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBmdW5jdGlvbi4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG9uZSB0aGF0JiMzOTtzIGhvb2tlZCBpbnRvIGV0aHRvb2wmIzM5O3MgYC5zZWxmX3Rlc3RgIGNhbGxiYWNrLiBNYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUgYXBwZWFyIHRvIGJlIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpdHNlbGYsIGFuZCB0aGVuIHRob3NlIHNwZWNpZmljIEw0IGZpbHRlcmluZyB0ZXN0czogYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwYCwgYW5kIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgSSBzaG91bGQgZm9jdXMgb24gdG8gdW5kZXJzdGFuZCB0aGUgdGVzdCBsb2dpYy4KCkhvbGQgb24uLi4gSSYjMzk7bSBub3RpY2luZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGEgYml0IG9mIGEgY29kZSBzbWVsbCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gR2l2ZW4gdGhlIHNpemUgb2YgdGhhdCBmdW5jdGlvbiwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBpdCBnZXRzIGlubGluZWQgb3Igbm90IGJ5IGxvb2tpbmcgYXQgdGhlIG9iamVjdCBjb2RlIHNpemUuIElmIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBJJiMzOTtsbCBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCB3aGVuIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHRlc3RzLiBJZiBpdCBpcyBpbmxpbmVkIHRoZW4gSSBkb24mIzM5O3QgbmVlZCB0byBjb25zaWRlciB0aGF0IG92ZXJoZWFkLCBhbmQgY2FuIGV2YWx1YXRlIHRoZSB0ZXN0cyBpbiB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDI5Olx0c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4xNDMwOlx0XHRcdFx0XHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXG4xNDMxOlx0e1xuMTQzMjpcdFx0c3RydWN0IHtcbjE0MzM6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xuMTQzNDpcdFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcbjE0MzU6XHRcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xuMTQzNjpcdFx0c3RydWN0IHtcbjE0Mzc6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBibWFzaztcbjE0Mzg6XHRcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBtYXNrO1xuMTQzOTpcdFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xuMTQ0MDpcdFx0dW5zaWduZWQgbG9uZyBkdW1teV9jb29raWUgPSAweGRlYWRiZWVmO1xuMTQ0MTpcdFx0c3RydWN0IHN0bW1hY19wYWNrZXRfYXR0cnMgYXR0ciA9IHsgfTtcbjE0NDI6XHRcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xuMTQ0MzpcdFx0c3RydWN0IGZsb3dfY2xzX29mZmxvYWQgKmNscztcbjE0NDQ6XHRcdGludCByZXQsIG9sZF9lbmFibGUgPSAwO1xuMTQ0NTpcdFx0c3RydWN0IGZsb3dfcnVsZSAqcnVsZTtcbjE0NDY6XHRcbjE0NDc6XHRcdGlmICghdGNfY2FuX29mZmxvYWQocHJpdi1cdTAwM2VkZXYpKVxuMTQ0ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNDQ5Olx0XHRpZiAoIXByaXYtXHUwMDNlZG1hX2NhcC5sM2w0Zm51bSlcbjE0NTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTQ1MTpcdFx0aWYgKHByaXYtXHUwMDNlcnNzLmVuYWJsZSkge1xuMTQ1MjpcdFx0XHRvbGRfZW5hYmxlID0gcHJpdi1cdTAwM2Vyc3MuZW5hYmxlO1xuMTQ1MzpcdFx0XHRwcml2LVx1MDAzZXJzcy5lbmFibGUgPSBmYWxzZTtcbjE0NTQ6XHRcdFx0c3RtbWFjX3Jzc19jb25maWd1cmUocHJpdiwgcHJpdi1cdTAwM2VodywgTlVMTCxcbjE0NTU6XHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xuMTQ1NjpcdFx0fVxuMTQ1NzpcdFxuMTQ1ODpcdFx0ZGlzc2VjdG9yID0ga3phbGxvY19vYmooKmRpc3NlY3Rvcik7XG4xNDU5Olx0XHRpZiAoIWRpc3NlY3Rvcikge1xuMTQ2MDpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTQ2MTpcdFx0XHRnb3RvIGNsZWFudXBfcnNzO1xuMTQ2MjpcdFx0fVxuMTQ2MzpcdFxuMTQ2NDpcdFx0ZGlzc2VjdG9yLVx1MDAzZXVzZWRfa2V5cyB8PSAoMVVMTCBcdTAwM2NcdTAwM2MgRkxPV19ESVNTRUNUT1JfS0VZX0JBU0lDKTtcbjE0NjU6XHRcdGRpc3NlY3Rvci1cdTAwM2V1c2VkX2tleXMgfD0gKDFVTEwgXHUwMDNjXHUwMDNjIEZMT1dfRElTU0VDVE9SX0tFWV9QT1JUUyk7XG4xNDY2Olx0XHRkaXNzZWN0b3ItXHUwMDNlb2Zmc2V0W0ZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQ10gPSAwO1xuMTQ2NzpcdFx0ZGlzc2VjdG9yLVx1MDAzZW9mZnNldFtGTE9XX0RJU1NFQ1RPUl9LRVlfUE9SVFNdID0gb2Zmc2V0b2YodHlwZW9mKGtleXMpLCBrZXkpO1xuMTQ2ODpcdFxuMTQ2OTpcdFx0Y2xzID0ga3phbGxvY19vYmooKmNscyk7XG4xNDcwOlx0XHRpZiAoIWNscykge1xuMTQ3MTpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTQ3MjpcdFx0XHRnb3RvIGNsZWFudXBfZGlzc2VjdG9yO1xuMTQ3MzpcdFx0fVxuMTQ3NDpcdFxuMTQ3NTpcdFx0Y2xzLVx1MDAzZWNvbW1vbi5jaGFpbl9pbmRleCA9IDA7XG4xNDc2Olx0XHRjbHMtXHUwMDNlY29tbWFuZCA9IEZMT1dfQ0xTX1JFUExBQ0U7XG4xNDc3Olx0XHRjbHMtXHUwMDNlY29va2llID0gZHVtbXlfY29va2llO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIDEpO1xuMTQ4MDpcdFx0aWYgKCFydWxlKSB7XG4xNDgxOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xNDgyOlx0XHRcdGdvdG8gY2xlYW51cF9jbHM7XG4xNDgzOlx0XHR9XG4xNDg0Olx0XG4xNDg1Olx0XHRydWxlLVx1MDAzZW1hdGNoLmRpc3NlY3RvciA9IGRpc3NlY3RvcjtcbjE0ODY6XHRcdHJ1bGUtXHUwMDNlbWF0Y2gua2V5ID0gKHZvaWQgKilcdTAwMjZrZXlzO1xuMTQ4NzpcdFx0cnVsZS1cdTAwM2VtYXRjaC5tYXNrID0gKHZvaWQgKilcdTAwMjZtYXNrcztcbjE0ODg6XHRcbjE0ODk6XHRcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4xNDkwOlx0XHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuMTQ5MTpcdFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbjE0OTI6XHRcdC8qIE1hdGNoIHRoZSBmdWxsIElQIHByb3RvIGZpZWxkICovXG4xNDkzOlx0XHRtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7XG4xNDk0Olx0XHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xuMTQ5NTpcdFx0bWFza3MubWFzay5kc3QgPSBkc3RfbWFzaztcbjE0OTY6XHRcbjE0OTc6XHRcdGNscy1cdTAwM2VydWxlID0gcnVsZTtcbjE0OTg6XHRcbjE0OTk6XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLmVudHJpZXNbMF0uaWQgPSBGTE9XX0FDVElPTl9EUk9QO1xuMTUwMDpcdFx0cnVsZS1cdTAwM2VhY3Rpb24uZW50cmllc1swXS5od19zdGF0cyA9IEZMT1dfQUNUSU9OX0hXX1NUQVRTX0FOWTtcbjE1MDE6XHRcdHJ1bGUtXHUwMDNlYWN0aW9uLm51bV9lbnRyaWVzID0gMTtcbjE1MDI6XHRcbjE1MDM6XHRcdGF0dHIuZHN0ID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHI7XG4xNTA0Olx0XHRhdHRyLnRjcCA9ICF1ZHA7XG4xNTA1Olx0XHRhdHRyLnNwb3J0ID0gc3JjO1xuMTUwNjpcdFx0YXR0ci5kcG9ydCA9IGRzdDtcbjE1MDc6XHRcdGF0dHIuaXBfZHN0ID0gMDtcbjE1MDg6XHRcbjE1MDk6XHRcdC8qIFNoYWxsIHJlY2VpdmUgcGFja2V0ICovXG4xNTEwOlx0XHRyZXQgPSBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHByaXYsIFx1MDAyNmF0dHIpO1xuMTUxMTpcdFx0aWYgKHJldClcbjE1MTI6XHRcdFx0Z290byBjbGVhbnVwX3J1bGU7XG4xNTEzOlx0XG4xNTE0Olx0XHRyZXQgPSBzdG1tYWNfdGNfc2V0dXBfY2xzKHByaXYsIHByaXYsIGNscyk7XG4xNTE1Olx0XHRpZiAocmV0KVxuMTUxNjpcdFx0XHRnb3RvIGNsZWFudXBfcnVsZTtcbjE1MTc6XHRcbjE1MTg6XHRcdC8qIFNoYWxsIE5PVCByZWNlaXZlIHBhY2tldCAqL1xuMTUxOTpcdFx0cmV0ID0gX19zdG1tYWNfdGVzdF9sb29wYmFjayhwcml2LCBcdTAwMjZhdHRyKTtcbjE1MjA6XHRcdHJldCA9IHJldCA/IDAgOiAtRUlOVkFMO1xuMTUyMTpcdFxuMTUyMjpcdFx0Y2xzLVx1MDAzZWNvbW1hbmQgPSBGTE9XX0NMU19ERVNUUk9ZO1xuMTUyMzpcdFx0c3RtbWFjX3RjX3NldHVwX2Nscyhwcml2LCBwcml2LCBjbHMpO1xuMTUyNDpcdGNsZWFudXBfcnVsZTpcbjE1MjU6XHRcdGtmcmVlKHJ1bGUpO1xuMTUyNjpcdGNsZWFudXBfY2xzOlxuMTUyNzpcdFx0a2ZyZWUoY2xzKTtcbjE1Mjg6XHRjbGVhbnVwX2Rpc3NlY3RvcjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTZWxmLVRlc3QgU3RydWN0dXJlKioKCk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIHN1YnN0YW50aWFsIHBpZWNlIG9mIGNvZGU7IGl0JiMzOTtzIHByb2JhYmx5IG5vdCBpbmxpbmVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIHN0YXRpYywgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBpdHMgc3ltYm9sIHdvbiYjMzk7dCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlLCBvciBpdCBtaWdodCBiZSBtYW5nbGVkIHdpdGggc29tZXRoaW5nIGxpa2UgYC5pc3JhLlhgLiBJIHRoaW5rIGl0JiMzOTtzIHNtYXJ0ZXIgdG8gZm9jdXMgb24gdGhvc2Ugd3JhcHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBhcnJheSwgYXMgd2UmIzM5O3JlIGdyYWJiaW5nIHRoZWlyIGFkZHJlc3Nlcywgd2hpY2ggbWVhbnMgdGhleSAqc2hvdWxkKiBoYXZlIGNsZWFyLCB1c2FibGUgc3ltYm9scy4gSG1tLCBoYW5nIG9uLi4uIGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCBpcyBhbHNvIHN0YXRpYywgYnV0IHdlJiMzOTtyZSB0YWtpbmcgaXRzIGFkZHJlc3MuIEludGVyZXN0aW5nLiBNYXliZSBsaXN0aW5nIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgYmVzdCBhcHByb2FjaC4gWWVzLCB0aGF0JiMzOTtzIGl0ISBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgbG9va3MgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGFsbCBvZiB0aGVzZSBzZWxmLXRlc3RzLiBOb3csIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYFNUTU1BQ19FVEhgLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBzdG1tYWNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX0VUSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE4MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgU1RNTUFDX0VUSCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBTVE1NQUNfRVRIYCBLY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSW1tZWRpYXRlbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHN0YW5kYXJkIEtjb25maWcgc3ludGF4Li4uIHdoYXQgYXJlIHRoZSByZWxldmFudCBzeW1ib2xzLCB0aGUgdHJpc3RhdGUgdmFsdWVzLCBhbmQgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzPyBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGNvbW1vbiBFdGhlcm5ldCBQSFkgY29uZmlndXJhdGlvbnMsIHByb2JhYmx5IHNvbWUgTUFDIGFkZHJlc3Mgb3ZlcnJpZGVzLCBhbmQgcG90ZW50aWFsbHkgb3B0aW9ucyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gdG9vLCBzdWNoIGFzIGJ1ZmZlciBzaXplcyBvciBkZXNjcmlwdG9yIHNldHRpbmdzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBob3cgdGhleSBpbnRlcnBsYXkgYW5kIHdoYXQgY3VzdG9taXphdGlvbnMgYXJlIHBvc3NpYmxlIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgdmFyaWFudHMgYW5kIHVzZS1jYXNlcy4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBwb3RlbnRpYWwgZGV2aWNlIHRyZWUgYmluZGluZ3MgSSBuZWVkIHRvIHdyaXRlIGFuZCBhbnkgZnVydGhlciBkcml2ZXIgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nLiBJJiMzOTttIGFsc28ga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgaGlkZGVuIGdvdGNoYXMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMgZnJvbSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNUTU1BQ19FVEhcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgIDY6XHRcdGRlcGVuZHMgb24gRVRIVE9PTF9ORVRMSU5LXG4gICA3Olx0XHRzZWxlY3QgTUlJXG4gICA4Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgIDk6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdHNlbGVjdCBSRVNFVF9DT05UUk9MTEVSXG4gIDEzOlx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMTQ6XHRcdGhlbHBcbiAgMTU6XHRcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGJ1aWx0IGFyb3VuZCBhXG4gIDE2Olx0XHQgIFN5bm9wc3lzIElQIENvcmUuXG4gIDE3Olx0XG4gIDE4Olx0aWYgU1RNTUFDX0VUSFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG4gIDIxOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIFNUTU1BQyBTZWxmdGVzdHNcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAyMzpcdFx0ZGVmYXVsdCBuXG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXG4gIDI2Olx0XHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcbiAgMjc6XHRcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgU1RNTUFDX1BMQVRGT1JNXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUGxhdGZvcm0gYnVzIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdHNlbGVjdCBNRkRfU1lTQ09OXG4gIDMyOlx0XHRkZWZhdWx0IHlcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXG4gIDM1Olx0XHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcbiAgMzY6XHRcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxuICAzNzpcdFxuICAzODpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGlmIFNUTU1BQ19QTEFURk9STVxuICA0MzpcdFxuICA0NDpcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxuICA0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7U3VwcG9ydCBmb3Igc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlwmIzM0O1xuICA0NjpcdFx0c2VsZWN0IENSQzMyXG4gIDQ3Olx0XHRzZWxlY3QgTUlJXG4gIDQ4Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfRE1BXG4gIDQ5Olx0XHRoZWxwXG4gIDUwOlx0XHQgIFN1cHBvcnQgZm9yIGNoaXBzIHVzaW5nIHRoZSBzbnBzLGR3Yy1xb3MtZXRoZXJuZXQudHh0IERUIGJpbmRpbmcuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBTVE1NQUMgZHJpdmVyIGlzIGJlaW5nIGNvbmZpZ3VyZWQuIE15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgd2UgKmRlZmluaXRlbHkqIG5lZWQgYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1NFTEZURVNUU2AgZW5hYmxlZC4gVGhvc2UgYXJlIHByZXR0eSBmdW5kYW1lbnRhbCwgYXNzdW1pbmcgdGhpcyBpcyBhIHN0YW5kYXJkIEV0aGVybmV0IGludGVyZmFjZS4gSSB3YW50IHRvIGVuc3VyZSB0aGUgYmFzZSBFdGhlcm5ldCBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIHRoYXQgd2UgY2FuIHBlcmZvcm0gc29tZSBiYXNpYyB2ZXJpZmljYXRpb24gb2YgdGhlIGhhcmR3YXJlLgoKTm93LCBpZiB3ZSYjMzk7cmUgYWNjZXNzaW5nIHRoaXMgU1RNTUFDIHRocm91Z2ggYSBQQ0kgaW50ZXJmYWNlIOKAkyB3aGljaCBpcyBsaWtlbHkgaW4gbWFueSBtb2Rlcm4gc3lzdGVtcyDigJMgd2UmIzM5O2xsIGFsc28gcmVxdWlyZSBgU1RNTUFDX1BDSWAuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBQQ0kgc3VwcG9ydCBpcyBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbiBhbmQgY29tbXVuaWNhdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBpdCBjb25maWd1cmVkLCBhbmQgaWYgc28sIGhvdz8gTGV0JiMzOTtzIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YgYFNUTU1BQ19QQ0lgLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSBpZiB0aGlzIGNydWNpYWwgY29tcG9uZW50IGlzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19QQ0kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFNUTU1BQ19QQ0kgS2NvbmZpZyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBTVE1NQUNfUENJYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIHRoYXQgZ292ZXJuIHRoaXMgZHJpdmVyLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBXaGF0IHVuZGVybHlpbmcgUENJIGRldmljZXMgb3IgZmFtaWxpZXMgaXMgdGhpcyBkcml2ZXIgaW50ZW5kZWQgZm9yPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgUENJIElEcyBvciBkZXZpY2UgY2xhc3NlcyBpdCBzdXBwb3J0cy4gQXJlIHRoZXJlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgcmV2aXNpb25zIG9yIFNvQ3MgdGFyZ2V0ZWQ/CiogICAqKkZlYXR1cmUgRmxhZ3M6KiogQXJlIHRoZXJlIGNvbmZpZ3VyYWJsZSBvcHRpb25zPyBJJiMzOTtsbCBzY2FuIGZvciB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBWTEFOIG9mZmxvYWQsIGNoZWNrc3VtIG9mZmxvYWQsIGFuZCBhbnkgZmxvdyBjb250cm9sIGZlYXR1cmVzLiBUaGVzZSB1c3VhbGx5IHRlbGwgbWUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIG9wdGltYWwgdXNlIG9mIGhhcmR3YXJlIG9mZmxvYWQgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMuCiogICAqKlBsYXRmb3JtLVNwZWNpZmljczoqKiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIGRlZmluZXMgb3IgZGVwZW5kZW5jaWVzPyBUaGlzIHdvdWxkIHJldmVhbCBpZiB0aGUgZHJpdmVyIGlzIHRpZ2h0bHkgY291cGxlZCB0byBhIHBhcnRpY3VsYXIgU1Qgc3lzdGVtIG9yIGlmIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIG1vcmUgZ2VuZXJpYy4gSSYjMzk7bGwgYWxzbyBiZSBzZWFyY2hpbmcgZm9yIGFueSBpbnRlcnJ1cHQgaGFuZGxpbmcgY29uZmlndXJhdGlvbiBvciBETUEtcmVsYXRlZCBvcHRpb25zLgoqICAgKipEZWZhdWx0IENvbmZpZ3VyYXRpb246KiogV2hhdCBhcmUgdGhlIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzPyBLbm93aW5nIHRoaXMgZ2l2ZXMgbWUgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZ2V0cyBjb25maWd1cmVkIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gQXJlIHRoZXkgYWdncmVzc2l2ZSwgY29uc2VydmF0aXZlLCBvciBiYWxhbmNlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHNjZW5hcmlvcyBmb3IgYSBiYXNpYyBzZXR1cD8KKiAgICoqUmVsYXRpb25zaGlwIHRvIG90aGVyIENvbmZpZyBPcHRpb25zOioqIEkgd2FudCB0byBjaGVjayBob3cgYFNUTU1BQ19QQ0lgIHJlbGF0ZXMgdG8gb3RoZXIgU1RNTUFDIHZhcmlhbnRzIGluIGBLY29uZmlnYC4gQXJlIHRoZXJlIGFueSBtdXR1YWwgZXhjbHVzaW9ucyBvciBjb25mbGljdHM/IElzIHRoZXJlIGEgY2xlYXJseSBkZWZpbmVkIGhpZXJhcmNoeSBvZiBvcHRpb25zLCBhbmQgaG93IGRvZXMgdGhlIFBDSS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGludGVyYWN0IHdpdGggdGhlIGNvcmUgU1RNTUFDIHNldHRpbmdzPwoqICAgKipQb3RlbnRpYWwgaXNzdWVzOioqIEJhc2VkIG9uIHRoaXMgaW5mb3JtYXRpb24sIEkgd2FudCB0byBmb3JtIGFuIGluaXRpYWwgbWVudGFsIG1vZGVsIG9mIGhvdyBhIGRldmljZSB3b3VsZCBiZSBjb25maWd1cmVkLiBJJiMzOTtsbCBtZW50YWxseSAmIzM0O3Rlc3QmIzM0OyB0aGUgY29uZmlndXJhdGlvbiBieSBzdGVwcGluZyB0aHJvdWdoIHRoZSBvcHRpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGFuIGlkZWEgb2YgcG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIGhvdyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHN1cHBvcnRlZCwgaG93IHRoZXkgaW50ZXJhY3QsIGFuZCBpZiBhbnkgY29uZmlndXJhdGlvbnMgd2lsbCBsaWtlbHkgYmUgYSBtYWludGVuYW5jZSBoZWFkYWNoZS4KKiAgICoqRnV0dXJlIEltcHJvdmVtZW50czoqKiBUaGlzIGFuYWx5c2lzIHdpbGwgc2V0IHRoZSBzdGFnZSBmb3IgbWFraW5nIGluZm9ybWVkIHJlY29tbWVuZGF0aW9ucyB0byBpbXByb3ZlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaWYgbmVjZXNzYXJ5LiBGb3IgaW5zdGFuY2UsIGlzIHRoZXJlIGFuIG9wcG9ydHVuaXR5IHRvIGVuYWJsZS9kaXNhYmxlIGZlYXR1cmVzIG1vcmUgZ3JhbnVsYXJseT8gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSByZXZpc2l0ZWQgb3Igb3B0aW9ucyB0aGF0IGNvdWxkIGJlIHN0cmVhbWxpbmVkPwoKSSBuZWVkIHRoaXMgcXVpY2sgb3ZlcnZpZXcgdG8gZm9ybSBhIGJldHRlciBpZGVhIG9mIHRoZSBTVE1NQUMgUENJIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBNeSBnb2FsIGlzIHRvIHVzZSB0aGlzIGtub3dsZWRnZSB0byBhc3Nlc3MgcG90ZW50aWFsIHJpc2tzIG9yIGltcHJvdmVtZW50cyBmb3IgYSBzeXN0ZW0gdGhhdCB1c2VzIHRoaXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNzpcdGNvbmZpZyBTVE1NQUNfUENJXG4gNDA4Olx0XHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gNDA5Olx0XHRkZXBlbmRzIG9uIFBDSVxuIDQxMDpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gNDExOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQxMjpcdFx0aGVscFxuIDQxMzpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGJ1cyBzdXBwb3J0IGZvciB0aGUgc3RtbWFjIGRyaXZlci5cbiA0MTQ6XHRcdCAgVGhpcyBkcml2ZXIgd2FzIHRlc3RlZCBvbiBYTElOWCBYQzJWMzAwMCBGRjExNTJBTVQwMjIxXG4gNDE1Olx0XHQgIEQxMjE1OTk0QSBWSVJURVggRlBHQSBib2FyZCBhbmQgU05QUyBRb1MgSVBLIFByb3RvdHlwaW5nIEtpdC5cbiA0MTY6XHRcbiA0MTc6XHRcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cbiA0MTg6XHRcbiA0MTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA0MjA6XHRlbmRpZiAjIFNUTU1BQ19FVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU0MzEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqTXkgVGhpbmtpbmcgb24gdGhlIFNUTU1BQyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqCgpSaWdodCwgc28gdG8gZ2V0IHRoaXMgYWxsIHdvcmtpbmcsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBlbnN1cmUgdGhlc2UgdGhyZWUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYW5kIGBTVE1NQUNfUENJYC4gVGhvc2UgYXJlIGZvdW5kYXRpb25hbCwgb2J2aW91c2x5LgoKTm93LCBJJiMzOTttIHNlZWluZyB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgYW5kIHRoYXQgZnVuY3Rpb24gbGl2ZXMgKmluc2lkZSogYW4gYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgIGJsb2NrLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIEkgbmVlZCB0byBrZWVwIHRoYXQgY29uZGl0aW9uYWwgaW4gbWluZC4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIGFsbCB0aWVkIHRvIHRoZSBuZXR3b3JrIGNsYXNzaWZpZXIvYWN0dWF0b3Igc3R1ZmYuCgpJIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBzdG1tYWNfc2VsZnRlc3RzLmNgIGFnYWluLiBNYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcGVydGluZW50IGluIHRoZSB0ZXN0aW5nIGZyYW1ld29yayBpdHNlbGYsIGFuZCBtYXliZSByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW50ZXJhY3RzIHdpdGggdGhlIHNlbGYtdGVzdCBwcm9jZWR1cmVzLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiBob3cgdGhvc2UgYWxsIHBsYXkgdG9nZXRoZXIsIHdoaWNoIEkgY2FuIG9ubHkgZ2V0IGJ5IHNlZWluZyBhbGwgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEwNDc9c3RhdGljIGludCBzdG1tYWNfdGVzdF9kdmxhbmZpbHRfcGVyZmVjdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEwNjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTA2MTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTA2Mi1zdGF0aWMgaW50IHN0bW1hY190ZXN0X3J4cChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEzMDI9c3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEzMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTMwOTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTMxMC1zdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDNmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTQyMT1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2wzZmlsdF9zYShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyODojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyOS1zdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzNTEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA3ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgLiAgU28sIG9idmlvdXNseSwgYE5FVF9DTFNfQUNUYCAod2hpY2ggaXMgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW4gdGhlIEtjb25maWcpIGlzIGEgbXVzdC1oYXZlIGNvbmZpZy4gTm93LCBsZXQmIzM5O3MgYmUgdGhvcm91Z2ggYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMgaGVyZS4uLiAgUmlnaHQsIEkgc2VlIHRoYXQgYFNUTU1BQ19TRUxGVEVTVFNgIHJlcXVpcmVzIGBJTkVUYCBhbmQgYFNUTU1BQ19QQ0lgIHdhbnRzIGBQQ0lgLiBTbywgbGV0JiMzOTtzIGxpc3QgdGhlIGNvbmZpZ3Mgd2UgbmVlZCB0byBlbmFibGUuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgY29uZmlnczogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kLCBjcnVjaWFsbHksIGBORVRfQ0xTX0FDVGAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhY3R1YWxseSByZWFjaGFibGU/IExldCYjMzk7cyB0cmFjZSBpdC4gSXQmIzM5O3MgY2FsbGVkIGJ5IGBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAsIGFuZCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAuIFRob3NlIGFyZSBhbGwgaW4gdGhlIGBzdG1tYWNfdGVzdGAgYXJyYXkuIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpdGVyYXRlcyB0aHJvdWdoIHRoaXMgYXJyYXkgYW5kIGNhbGxzIHRoZSByZWxldmFudCBgZm5gLiBTbywgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGlzIHRoZSBlbnRyeSBwb2ludCwgb3IgYXQgbGVhc3QgdGhlIHN0YXJ0IG9mIHRoZSBjaGFpbi4KCkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgYWRkaW5nIGFsbCBvZiB0aGVtIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGFuZCBsYXJnZSBmdW5jdGlvbnMgbWFya2VkIGBzdGF0aWNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gIEl0JiMzOTtzIGJlc3QgdG8gbGlzdCB0aGUgZnVuY3Rpb25zIHdob3NlIGFkZHJlc3NlcyBhcmUgdGFrZW4gdGhvdWdoLiAgVGhlbiwgSSByZW1lbWJlcmVkLCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGdldHMgbW9kaWZpZWQuIFNvIGl0JiMzOTtzIHZlcnkgaW1wb3J0YW50LiBIb3dldmVyLCBpdCYjMzk7cyBiZXR0ZXIgdG8gbGlzdCBhbGwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuCgpUaGVuIHRoZSBjb3ZlcmFnZS1iYXNlZCBTeXprYWxsZXIgYXBwcm9hY2ggY2FtZSB0byBtaW5kLiBJZiB3ZSBqdXN0IGxpc3QgYHN0bW1hY19zZWxmdGVzdF9ydW5gLCBTeXprYWxsZXIgd2lsbCB0cnkgdG8gZ2V0IHRvIHRoYXQgZnVuY3Rpb24sIHdoaWNoIHdpbGwgKm5hdHVyYWxseSogbGVhZCBpdCB0byBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIChpZiB0aGF0JiMzOTtzIHRoZSBjb2RlIHBhdGggd2Ugd2FudCB0byB0cmlnZ2VyKS4gQWN0dWFsbHksIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyBhbiBldGh0b29sIGNhbGxiYWNrLiBJdCYjMzk7cyByZWFjaGVkIHRocm91Z2ggYGRldl9ldGh0b29sYCBhbmQgdGhlbiBgZXRodG9vbF9zZWxmX3Rlc3RgLiBTbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4KCkFscmlnaHQsIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgd2hhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGZ1enppbmc6CgoqICAgKipXb3J0aEZ1enppbmc6IFRydWUqKgoqICAgKipGb2N1c1N5bWJvbHM6KioKICAgICogICBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGAKICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAKICAgICogICBgX19zdG1tYWNfdGVzdF9sNGZpbHRgCiogICAqKkVuYWJsZUNvbmZpZ3M6KioKICAgICogICBgU1RNTUFDX0VUSGAKICAgICogICBgU1RNTUFDX1NFTEZURVNUU2AKICAgICogICBgU1RNTUFDX1BDSWAKICAgICogICBgTkVUX0NMU19BQ1RgCgpOb3csIHdhaXQgYSBtaW51dGUuLi4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyAqY29uZGl0aW9uYWxseSogY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAuIElmIHRoYXQmIzM5O3MgKm5vdCogc2V0LCB0aGUgYCNlbHNlYCBibG9jayB3aWxsIGhhdmUgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiB0aGF0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBjb3VsZCBoaWRlIGEgdnVsbmVyYWJpbGl0eSwgc28gSSBoYXZlIHRvIGNoZWNrIHRoYXQgYCNlbHNlYCBibG9jayB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTM1Olx0XHR9XG4xNTM2Olx0XG4xNTM3Olx0XHRyZXR1cm4gcmV0O1xuMTUzODpcdH1cbjE1Mzk6XHQjZWxzZVxuMTU0MDpcdHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxuMTU0MTpcdFx0XHRcdFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxuMTU0MjpcdHtcbjE1NDM6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjE1NDQ6XHR9XG4xNTQ1Olx0I2VuZGlmXG4xNTQ2Olx0XG4xNTQ3Olx0c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbjE1NDg6XHR7XG4xNTQ5Olx0XHR1MTYgZHVtbXlfcG9ydCA9IDB4MTIzO1xuMTU1MDpcdFxuMTU1MTpcdFx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIGR1bW15X3BvcnQsIDAsIH4wLCAwLCBmYWxzZSk7XG4xNTUyOlx0fVxuMTU1MzpcdFxuMTU1NDpcdHN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4Mzc3CgkJCQkJCQlvdXRwdXQ6IDI5MAoJCQkJCQkJdGhvdWdodHM6IDU5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTVE1NQUMgRHJpdmVyIFZ1bG5lcmFiaWxpdHkgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgI2Vsc2VgIGJsb2NrIGlzIGluZGVlZCBhIHBsYWNlaG9sZGVyLCBtZWFuaW5nIGBORVRfQ0xTX0FDVGAgaXMgZXNzZW50aWFsIHRvIGhpdCB0aGUgbW9kaWZpZWQgY29kZS4gR29vZC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIHNlZSB0aGF0IGBORVRfQ0xTX0FDVGAgZmFsbHMgdW5kZXIgJiMzNDtOZXR3b3JraW5nIG9wdGlvbnMmIzM0OyAtJmd0OyAmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZywmIzM0OyBhIHByZXR0eSBzdGFuZGFyZCBjb25maWcsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbWFqb3IgaHVyZGxlLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB3ZSB0cmlnZ2VyIHRoaXMgd2l0aCBqdXN0IGBTVE1NQUNfUENJYD8gVGhlIGFuc3dlciBzZWVtcyB0byBiZSB5ZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBpbnRlcmVzdGluZyBiaXQuIFN5emthbGxlciBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLCB3aGljaCBpcyBrZXkuIFNwZWNpZmljYWxseSwgdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBjYW4gdHJpZ2dlciBgc3RtbWFjX3BjaV9wcm9iZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgKnRoYXQqIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBPbmNlIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgc3l6a2FsbGVyIGNhbiBlbXBsb3kgYGV0aHRvb2xgIHRvIHJ1biB0aGUgc2VsZi10ZXN0cy4gU28sIHRoZSBwYXRoIGlzIHRoZXJlIOKAkyBpdCYjMzk7cyByZWFjaGFibGUuCgpMZXQgbWUganVzdCBzeW50aGVzaXplIHRoaXMgcmVhc29uaW5nIGFnYWluLiBUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlciYjMzk7cyBzZWxmdGVzdHMuIFRoZXNlIHRlc3RzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGV0aHRvb2xgIGludGVyZmFjZSBhZnRlciB0aGUgZHJpdmVyIGlzIHByb2JlZC4gV2UgY2FuIHByb2JlIHRoZSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHN5emthbGxlciYjMzk7cyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyAoYHN5el9wY2lgIG9yIHN5c2ZzIGJpbmQpLCBnaXZlbiB0aGUgUENJIGZyb250ZW5kIChgc3RtbWFjX3BjaS5jYCkgZm9yIHRoZSBTVE1NQUMgZHJpdmVyLiBUaGVyZWZvcmUsIHRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgbXVzdCBiZSBlbmFibGVkOiBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYC4KCkhtbSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLiBJcyBgU1RNTUFDX1BDSWAgdGhlICpvbmx5KiB3YXk/IFRoZXJlIGFyZSBhbHNvIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFNUTU1BQywgYnV0IFBDSSBpcyBjbGVhcmx5IHRoZSBlYXNpZXN0IHJvdXRlIGZvciBzeXprYWxsZXIgdG8gaW5qZWN0LiBTbywgYFNUTU1BQ19QQ0lgIGlzIHRoZSBjbGVhbmVzdCwgZWFzaWVzdCB0cmlnZ2VyLgoKTm93IGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuLi5sZXQmIzM5O3MgY29uZmlybSB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgc3RhdGljLiBZZXMsIGl0IGlzLiBJcyBpdCB3b3J0aHdoaWxlIHRvIG9taXQgaXQ/IFN5emthbGxlciBjYW4gaGFuZGxlIHN0YXRpYyBmdW5jdGlvbnMgaWYgdGhleSYjMzk7cmUgZGlzdGluY3Qgc3ltYm9scyBpbiB0aGUga2VybmVsIGltYWdlIChpLmUuLCBub3QgaW5saW5lZCkuIFNpbmNlIGl0IHNlZW1zIHJlbGF0aXZlbHkgbGFyZ2UsIGl0JiMzOTtzICpsaWtlbHkqIG5vdCBpbmxpbmVkLCBidXQgdGhlcmUmIzM5O3MgYSBjaGFuY2UgaXQgaGFzIGEgYC5pc3JhYCBzdWZmaXguIFRvIGJlIHNhZmUsIEkmIzM5O2xsIGluY2x1ZGUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGFuZCB0aGUgd3JhcHBlciBmdW5jdGlvbnMgbGlrZSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAsIGFuZCBJICp3aWxsKiBpbmNsdWRlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAganVzdCB0byBiZSBjZXJ0YWluLgoKT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1NFTEZURVNUUyYjMzQ7LAogICAgJiMzNDtTVE1NQUNfUENJJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX3NlbGZ0ZXN0X3J1biYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwJiMzNDssCiAgICAmIzM0O3N0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3AmIzM0OywKICAgICYjMzQ7c3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcCYjMzQ7LAogICAgJiMzNDtzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwJiMzNDssCiAgICAmIzM0O19fc3RtbWFjX3Rlc3RfbDRmaWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXImIzM5O3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDIyOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMjI6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNDY0Y2QxNzA0MDAzNWQ2MTY5OGU0ZTE2ZmI5NWViMjU3MTFiOWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMKaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYwpAQCAtMTQzMiwxMSAmIzQzOzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsCiAJc3RydWN0IHsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5OwogCQlzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTsKLQl9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkga2V5czsKJiM0MzsJfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07CiAJc3RydWN0IHsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBibWFzazsKIAkJc3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9wb3J0cyBtYXNrOwotCX0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrczsKJiM0MzsJfSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9OwogCXVuc2lnbmVkIGxvbmcgZHVtbXlfY29va2llID0gMHhkZWFkYmVlZjsKIAlzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9OwogCXN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yOwpAQCAtMTQ4OSw2ICYjNDM7MTQ4OSw4IEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLAogCWtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7CiAJa2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTsKIAlrZXlzLmtleS5kc3QgPSBodG9ucyhkc3QpOwomIzQzOwkvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqLwomIzQzOwltYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7CiAJbWFza3MubWFzay5zcmMgPSBzcmNfbWFzazsKIAltYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzEwCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDEzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbiBmb3IgX19zdG1tYWNfdGVzdF9sNGZpbHQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBzdG1tYWNfc2VsZnRlc3RzLmNgIG1vZGlmaWVzIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgYW5kIEkgc2VlIHRoYXQgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0cy4gIFByZXZpb3VzbHksIHRoZXNlIHN0cnVjdHMgd2VyZSBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuICBOb3csIHRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGVtIHdpdGggYD0geyB9YC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtXYWl0LCBpcyB0aGlzICpmaXhpbmcqIHNvbWV0aGluZyBvciAqY3JlYXRpbmcqIGEgbmV3IHJpc2s/JiMzNDsgIFRoZSBwcm9tcHQgaXMgdmVyeSBzcGVjaWZpYzogJiMzNDtPTkxZIHNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzIHRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uJiMzNDsgIFNpbmNlIHRoaXMgcGF0Y2ggZXhwbGljaXRseSAqZml4ZXMqIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHByb2JsZW0sIEtNU0FOIHdhcyBsaWtlbHkgKmFscmVhZHkqIGNhdGNoaW5nIHRoZSBpc3N1ZSAqYmVmb3JlKiB0aGlzIHBhdGNoLiAgVGhlIHF1ZXN0aW9uIGlzbiYjMzk7dCB3aGV0aGVyIEtNU0FOICpjb3VsZCBoYXZlKiBmb3VuZCBhIGJ1ZyBwcmUtcGF0Y2g7IHRoZSBxdWVzdGlvbiBpcyBpZiB0aGUgKnBhdGNoIGl0c2VsZiogaW50cm9kdWNlcyBhICpuZXcqIEtNU0FOLXNwZWNpZmljIHJpc2suCgpMZXQmIzM5O3MgcmVhZCB0aGUgZGlmZiBjYXJlZnVsbHkuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgPSB7IH1gIHRvIHRoZSBzdHJ1Y3QgZGVjbGFyYXRpb25zLiAgVGhpcyBpcyBhIGRpcmVjdCwgY29tcGxldGUgaW5pdGlhbGl6YXRpb24uICBaZXJvaW5nIHRoZW0gb3V0IGVuc3VyZXMgdGhhdCAqYWxsKiBmaWVsZHMsIGluY2x1ZGluZyBhbnkgcGFkZGluZywgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uIElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKmFmdGVyKiB0aGlzIGNoYW5nZT8gTm8uCgpUaGUgcHJvbXB0IGxpc3RzIHNldmVyYWwgc2NlbmFyaW9zIHRoYXQgKndvdWxkKiB3YXJyYW50IE5lZWRzS01TQU46IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjaGFuZ2VzIGluIGJvdW5kcyBjaGVja3MgdGhhdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcy4gIE5vbmUgb2YgdGhlc2UgYXBwbHkgaGVyZS4gVGhlIGNoYW5nZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0dXJlcy4KClRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogc3RhdGVzIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgJiMzNDtBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuJiMzNDsgIFRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZSBwYXRjaCBkb2VzIHdpdGggdGhlIGA9IHsgfWAuCgpMZXQmIzM5O3MgcmV2aWV3IHRoZSBjb2RlIG9uZSBsYXN0IHRpbWUgdG8gY29uZmlybS4gIFllcywgdGhlIHN0cnVjdCBkZWZpbml0aW9ucyBhcmUgbm93IHplcm8taW5pdGlhbGl6ZWQuIFRoZSBhZGRpdGlvbmFsIGxpbmUgc2V0dGluZyBgbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO2Agc2ltcGx5IGFzc2lnbnMgYSB2YWx1ZSB0byBhIGZpZWxkIHdpdGhpbiB0aGUgbm93IHplcm8taW5pdGlhbGl6ZWQgc3RydWN0dXJlLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgKmV4cGxpY2l0bHkgemVyb2luZyogdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMsIGl0ICpyZW1vdmVzKiBhIHBvdGVudGlhbCBLTVNBTi1kZXRlY3RhYmxlIHByb2JsZW0uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgYW5zd2VyIGlzICoqTmVlZHNLTVNBTj1mYWxzZSoqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAyMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjExOjQ2LjI3MjgwODQ5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjIyNzUzMzYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfU0VMRlRFU1RTXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19zZWxmdGVzdF9ydW5cIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBcIixcbiAgICBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayB1c2luZyBgPSB7IH1gLiBUaGlzIHJlc29sdmVzIGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGJ5IGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZCBiZWZvcmUgdXNlLiBCZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIHRvdWNoZWQgYnkgdGhlIHBhdGNoIGFyZSBub3cgZnVsbHkgaW5pdGlhbGl6ZWQsIHRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBvdGhlciBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gZnV6emluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlcidzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjExOjQ2LjI3MjgxNTMwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NDIyNTk4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0NjRjZDE3MDQwMDM1ZDYxNjk4ZTRlMTZmYjk1ZWIyNTcxMWI5Y2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXFxuaW5kZXggMWRmMjZjMjE3ZjlhNy4uYTJiOTE3ZGQ2MGU1MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcXG5AQCAtMTQzMiwxMSArMTQzMiwxMSBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcXG4tXFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XFxuK1xcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xcbiBcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XFxuLVxcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcztcXG4rXFx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIG1hc2tzID0geyB9O1xcbiBcXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XFxuIFxcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XFxuIFxcdHN0cnVjdCBmbG93X2Rpc3NlY3RvciAqZGlzc2VjdG9yO1xcbkBAIC0xNDg5LDYgKzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4gXFx0a2V5cy5ia2V5LmlwX3Byb3RvID0gdWRwID8gSVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDtcXG4gXFx0a2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTtcXG4gXFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcXG4rXFx0LyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi9cXG4rXFx0bWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO1xcbiBcXHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xcbiBcXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NDcuODM3NzIzNzY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjE3MjE3MTgwNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19TRUxGVEVTVFNcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX3NlbGZ0ZXN0X3J1blwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcFwiLFxuICAgIFwiX19zdG1tYWNfdGVzdF9sNGZpbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJ3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXIncyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBzaW5jZSB0aGVyZSBpcyBhIFBDSSBmcm9udGVuZCAoYHN0bW1hY19wY2kuY2ApIGZvciB0aGUgU1RNTUFDIGRyaXZlci4gVG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWdzIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTQ2NGNkMTcwNDAwMzVkNjE2OThlNGUxNmZiOTVlYjI1NzExYjljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDIyOjExOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG5pbmRleCAxZGYyNmMyMTdmOWE3Li5hMmI5MTdkZDYwZTUyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbkBAIC0xNDMyLDExICsxNDMyLDExIEBAIHN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yX2tleV9iYXNpYyBia2V5O1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcbi1cdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzO1xuK1x0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXMgPSB7IH07XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJtYXNrO1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XG4tXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3M7XG4rXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3MgPSB7IH07XG4gXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9O1xuIFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yICpkaXNzZWN0b3I7XG5AQCAtMTQ4OSw2ICsxNDg5LDggQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRrZXlzLmJrZXkuaXBfcHJvdG8gPSB1ZHAgPyBJUFBST1RPX1VEUCA6IElQUFJPVE9fVENQO1xuIFx0a2V5cy5rZXkuc3JjID0gaHRvbnMoc3JjKTtcbiBcdGtleXMua2V5LmRzdCA9IGh0b25zKGRzdCk7XG4rXHQvKiBNYXRjaCB0aGUgZnVsbCBJUCBwcm90byBmaWVsZCAqL1xuK1x0bWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmO1xuIFx0bWFza3MubWFzay5zcmMgPSBzcmNfbWFzaztcbiBcdG1hc2tzLm1hc2suZHN0ID0gZHN0X21hc2s7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMTo0Ny44Mzc3MjUyOTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDc2MDQ4MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNlbGZ0ZXN0IFBhdGNoIGZvciB0aGUgc3RtbWFjIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgZnVuY3Rpb24gd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGluaXRpYWxpemluZyBzb21lIGBrZXlzYCBhbmQgYG1hc2tzYCBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgc2V0dGluZyBgbWFza3MuYm1hc2suaXBfcHJvdG8gPSAweGZmYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwuIElzIHRoaXMgZXZlbiBhIGNvZGUgcGF0aCB0aGF0J3MgcmVhbGlzdGljYWxseSByZWFjaGFibGU/XG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBpcyB0aGUgRXRoZXJuZXQgZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MnIHJhbmdlIG9mIEV0aGVybmV0IE1BQ3MuIE5vdywgY2FuIHRoaXMgZHJpdmVyIGJlIHJlYWNoZWQgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBRRU1VPyBBbmQgaXMgaXQgZW11bGF0ZWQgYXQgYWxsPyBJIHJlbWVtYmVyIGBzdG1tYWNgIGlzIHR5cGljYWxseSBkZXNpZ25lZCBmb3IgcGh5c2ljYWwgaGFyZHdhcmUuICBNb3N0IG9mIHRoZSB0aW1lIGl0IGlzIHVzZWQgaW4gdmFyaW91cyBBUk0gU29DcywgbGlrZSBBbGx3aW5uZXIgYW5kIFJvY2tjaGlwLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgYHN0bW1hY2AgZHJpdmVyIG5hdGl2ZWx5LCBidXQgaXMgdGhlcmUgc29tZSBraW5kIG9mIHZpcnR1YWwgcGxhdGZvcm0gd2hlcmUgaXQgbWlnaHQgYmUgYWNjZXNzaWJsZT9cblxuQSBrZXkgdGhpbmcgaXMgdGhhdCB0aGlzIGlzIHdpdGhpbiB0aGUgKnNlbGZ0ZXN0KiBjb2RlLCBgc3RtbWFjX3NlbGZ0ZXN0cy5jYC4gU2VsZnRlc3RzIGFyZSB0eXBpY2FsbHkgdHJpZ2dlcmVkIHRocm91Z2ggdG9vbHMgbGlrZSBgZXRodG9vbGAuIFRoYXQgbWVhbnMgdGhlIGRyaXZlciBoYXMgdG8gcHJvYmUsIGFuZCBpZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIHNlbGZ0ZXN0IHdvbid0IGV2ZW4gcnVuLlxuXG5IbW0sIG1heWJlIHRoZXJlJ3MgYSBQQ0kgdmVyc2lvbiBvZiBgc3RtbWFjYD8gVGhhdCBtaWdodCBiZSBhIGNsdWUuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNgLiBMZXQncyBzZWUgaWYgdGhpcyBQQ0kgdmVyc2lvbiBtaWdodCBvZmZlciBhIHZpYWJsZSBwYXRoIHRvIHJlYWNoIHRoaXMgc2VsZnRlc3QgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgYWN0dWFsbHkgaW52b2tlZCBhbmQgaWYgaXQncyBmZWFzaWJsZSB0byB0cmlnZ2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzEzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NTQuMzEzNzc3MDk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk0NTUxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc4Nj1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4MDY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgwNy1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODEwPXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgyMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgyMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODIyLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NDE9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg0ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDktXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTI9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg3MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NzEtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04OTA9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg5NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04OTgtXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MDE9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkxOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjAtXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NDQ9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NTM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTU0LVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Nz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjctXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTcwPXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk4MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgxLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05ODQ9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTk0OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05OTUtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwMjM9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDMtXFx0LnNldHVwID0gYWRsbl9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDQ3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTM6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGdhbGlsZW9fc3RtbWFjX2RtaV9kYXRhID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1NC1cXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwNTg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwNTktXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDY4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTA2OTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgaW90MjA0MF9zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDcwLVxcdC5mdW5jID0gaW90MjA0MF9zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMTA5PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE5LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTEyMDpcXHRyZXQgPSBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIocGRldiwgcXVhcmtfcGNpX2RtaSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTIxLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMTQ1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHF1YXJrX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTQ2LVxcdC5zZXR1cCA9IHF1YXJrX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTI2Mz1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyNjUte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTI2NjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjY3LVxcdHN0cnVjdCBpbnRlbF9wcml2X2RhdGEgKmludGVsX3ByaXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgzLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTMyPXN0YXRpYyBpbnQgbG9vbmdzb25fZ21hY19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNDI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ21hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0My1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTE2NT1zdGF0aWMgaW50IGxvb25nc29uX2duZXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6MTc3OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGxvb25nc29uX2duZXRfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXFx0LnNldHVwID0gbG9vbmdzb25fZ25ldF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01MDEtXFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1MDI6XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cXHRzdHJ1Y3QgbG9vbmdzb25fZGF0YSAqbGQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cXHRwbGF0LVxcdTAwM2VmaXhfc29jX3Jlc2V0ID0gbG9vbmdzb25fZHdtYWNfZml4X3Jlc2V0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVxcdGxkLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NDM6XFx0aW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQ0LVxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MTg4PXN0YXRpYyBpbnQgbW90b3Jjb21tX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTkyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjE5MzpcXHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTE5NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjA4PW1vdG9yY29tbV9kZWZhdWx0X3BsYXRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cXHRwbGF0LVxcdTAwM2Vjb3JlX3R5cGVcXHRcXHQ9IERXTUFDX0NPUkVfR01BQzQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MjQ5OlxcdHBsYXQtXFx1MDAzZXN1c3BlbmRcXHRcXHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI1MC1cXHRwbGF0LVxcdTAwM2VyZXN1bWVcXHRcXHQ9IG1vdG9yY29tbV9yZXN1bWU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjEyOmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjUtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyODppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDMtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtNDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6OTppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oOjEwOmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwLVxcdGludCAoKnNldHVwKShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0zMz1zdGF0aWMgaW50IHN0bW1hY19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjUwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHN0bW1hY19wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNTEtXFx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz01ND1zdGF0aWMgaW50IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTAyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cXHQuc2V0dXAgPSBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwNzogKiBzdG1tYWNfcGNpX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwOC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExNy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTE4OnN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEyMTpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEyMi1cXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XFx0cGxhdC1cXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTkyOnN0YXRpYyB2b2lkIHN0bW1hY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xOTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIwMz1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNDpcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA1OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA2LVxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxMjpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cXHQubmFtZSA9IFNUTU1BQ19SRVNPVVJDRV9OQU1FLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTQtXFx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTU6XFx0LnByb2JlID0gc3RtbWFjX3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2OlxcdC5yZW1vdmUgPSBzdG1tYWNfcGNpX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE3LVxcdC5kcml2ZXIgICAgICAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTE6NTYuNTgzMjM4Njk0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3MDE0Mjk1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTVE1NQUMgVGVzdGluZyBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfcGNpLmNgIGRyaXZlci4gVGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpczogaG93IGlzIHRoaXMgdGVzdGVkIGJ5IFN5emthbGxlcj8gSXMgaXQgZW11bGF0ZWQgd2l0aGluIFFFTVU/IE5vLCBRRU1VIGRvZXNuJ3QgZGlyZWN0bHkgZW11bGF0ZSB0aGUgU1RNTUFDIFBDSSBpbnRlcmZhY2UsIEkga25vdyB0aGF0LiBCdXQgYHN0bW1hY2AgaXMgdXNlZCBhY3Jvc3MgbWFueSBwbGF0Zm9ybXMsIHNvIHRoZXJlICptdXN0KiBiZSBhIHdheSB0byB0ZXN0IGl0LiBJIHF1aWNrbHkgZGlzbWlzcyB2aXJ0dWFsIGludGVyZmFjZXMgbGlrZSBgdmV0aGAgYW5kIGBtYWNzZWNgOyB0aGlzIGlzIGEgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLCBzbyB0aG9zZSB3b3VsZG4ndCBiZSByZWxldmFudC5cblxuVGhlbiBJIHJlYWxpemVkIFN5emthbGxlciBtaWdodCBiZSBoaXR0aW5nIGEgbGltaXRhdGlvbi4gVW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0aW9uIG9yIHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZSwgdGhlIGZ1enplciB3b3VsZG4ndCBoYXZlIGFjY2Vzcy4gV2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBhIFVTQiBmdXp6ZXIgYW5kIGEgUENJIGZ1enplciwgZG9lc24ndCBpdD8gVGhlIFBDSSBvbmUgd29ya3MgYnkgaW50ZXJjZXB0aW5nIFBDSSBjb25maWcgc3BhY2UgcmVhZHMgYW5kIHdyaXRlcy5cblxuQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIFN5emthbGxlciAqZG9lc24ndCogZG8gZnVsbCBQQ0kgZW11bGF0aW9uIGluc2lkZSBRRU1VLCBsaWtlIGl0IGRvZXMgd2l0aCBVU0IgYW5kIGB2aGNpYC4gSXQgdXNlcyBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwsIGRvZXNuJ3QgaXQ/IEJ1dCAqdGhhdCogZG9lc24ndCBlbXVsYXRlIERNQSBvciBjb21wbGV4IGhhcmR3YXJlIGludGVyYWN0aW9uczsgaXQncyBtb3JlIG9mIGEgcHJvYmUgdHJpZ2dlci4gU28sIGhvdyBhcmUgY29tcGxleCBkcml2ZXJzIGxpa2UgYHN0bW1hY2AgdGVzdGVkP1xuXG5BaCwgcmlnaHQuIElmIGl0J3MgcGFydCBvZiBhIHNlbGZ0ZXN0LCBpdCdzIHRyaWdnZXJlZCB2aWEgYGV0aHRvb2xgLiBTbywgdGhlIGtleSBpcyB0byBkZXRlcm1pbmUgaWYgdGhlcmUncyBhIHNlbGZ0ZXN0IHdlIGNhbiByZWFjaC4gTGV0J3MgY2hlY2sgYHN0bW1hY19zZWxmdGVzdHMuY2AuIFllcywgaGVyZSB3ZSBhcmUsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgbG9va3MgbGlrZSBhIHNlbGZ0ZXN0LiBUaGlzIGlzIHRoZSBwYXRoIGZvcndhcmQhIEknbGwgbG9vayBhdCB0aGF0IHRlc3QgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjA1LjU1MzM4MzQ0NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzg3NTA2ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNDIxPXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDNmaWx0X3NhKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDI4LSNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyOTpzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQzMC1cXHRcXHRcXHRcXHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTUzOS0jZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTQwOnN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTQxLVxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xNTQ3PXN0YXRpYyBpbnQgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTU1ND1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3Aoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NTg6XFx0cmV0dXJuIF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHByaXYsIDAsIGR1bW15X3BvcnQsIDAsIH4wLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1NjE9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTY1OlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE1Njg9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjowNy45NDA5MDA1MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQzNzkwOTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiBzdG1tYWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRvIGJlIGluaXRpYWxpemluZyBga2V5c2AgYW5kIGBtYXNrc2AgdG8gZW1wdHkgZGljdGlvbmFyaWVzLCBhbmQgdGhlbiBzZXR0aW5nIGBtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmZgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzLCBcIlJpZ2h0LCB0aGlzIHNlZW1zIGxpa2UgYSBmaXggZm9yIHNvbWUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgd2l0aGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAuXCJcblxuVGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gR2l2ZW4gdGhhdCBgc3RtbWFjYCBpcyBhICpoYXJkd2FyZSogZHJpdmVyLCBteSBpbnN0aW5jdCBpcyBcIm5vLCBub3QgZGlyZWN0bHkuIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBoYXJkd2FyZS5cIiBVbmxlc3MsIG9mIGNvdXJzZSwgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGhhcyBmb3VuZCBhIGNsZXZlciB3YXkgdG8gYWNjZXNzIGl0LiBCdXQgd2FpdCwgSSB0aG91Z2h0IHN5emthbGxlciBkaWRuJ3QgdHlwaWNhbGx5IGRvIGZ1bGwgaGFyZHdhcmUgZW11bGF0aW9uIHdpdGgsIHNheSwgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGw/IE5vLCB0aGF0J3Mgbm90IGl0cyB0eXBpY2FsIE1PLlxuXG5CdXQgaG9sZCBvbi4uLnN5emthbGxlciAqZGlkKiByZXBvcnQgdGhpcyBidWcuIEhvdyBpcyB0aGF0IHBvc3NpYmxlPyBNYXliZSBpdCdzIHVzaW5nIHNvbWUgc29ydCBvZiB2aXJ0dWFsIGhhcmR3YXJlIHRyaWNrLiBIbW1tLCBjb3VsZCBpdCBiZSBgdmhjaWAgb3IgYG1hYzgwMjExX2h3c2ltYD8gTm8sIHRoaXMgaXMgZGVmaW5pdGVseSBzdG1tYWMuLi5zbyB0aGF0J3Mgbm90IHRoZSBhbnN3ZXIuXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIHZpcnR1YWwgZHJpdmVyIGNvbXBvbmVudCBpbnZvbHZlZCwgb3IgaWYgc3l6a2FsbGVyIGlzIHNvbWVob3cgdHJpZ2dlcmluZyB0aGlzIHBhdGguIFRoZW4gaXQgaGl0cyBtZSwgc3l6a2FsbGVyICpjYW4qIHRyaWdnZXIgUENJIHByb2JlIHVzaW5nIGBzeXpfcGNpYCBvciBieSB3cml0aW5nIHRvIGAvc3lzL2J1cy9wY2kvZHJpdmVycy8uLi4vYmluZGAuXG5cbkJ1dCwgdG8gZ2V0IHRvIHRoZSBzZWxmdGVzdHMsIEkga25vdyB0aGUgZHJpdmVyIG5lZWRzIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgYSBuZXRkZXYuIE5vdyB0aGF04oCZcyB0aGUgcmVhbCBxdWVzdGlvbi4gQ2FuIGBzdG1tYWNgIGFjdHVhbGx5IHByb2JlIHN1Y2Nlc3NmdWxseSB3aXRob3V0IGFueSByZWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcm9iZSBwYXRoIG1vcmUgY2xlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMDEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6MTkuMzc4ODEyNjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTQxMDUwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaV9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTAyPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHNucHNfZ21hYzVfcGNpX2luZm8gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMDc6ICogc3RtbWFjX3BjaV9wcm9iZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMTctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTExOS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTIxMj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RtbWFjX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVxcdC5pZF90YWJsZSA9IHN0bW1hY19pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE1OlxcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNi1cXHQucmVtb3ZlID0gc3RtbWFjX3BjaV9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjIxLjQ5MjkyMjk1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3OTEyOTEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBmdW5jdGlvbiwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgUHJvYmUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBhIHByZXR0eSBnb29kIGluZGljYXRvcjsgdGhpcyBpcyB3aGVyZSB3ZSdyZSBnb2luZyB0byBpbml0aWFsaXplIHRoZSBTVE1NQUMgZHJpdmVyIHdoZW4gaXQncyBpZGVudGlmaWVkIG9uIGEgUENJIGJ1cy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtIGZpcnN0LCBob3cgaXQgZmluZHMgdGhlIFNUTU1BQyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBkZXZpY2Ugc3RydWN0dXJlLlxuXG5JJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIFBDSSBwcm9iZSBwcm9jZXNzOiByZWdpc3RlcmluZyB0aGUgZGV2aWNlLCBhbGxvY2F0aW5nIHJlc291cmNlcywgbWFwcGluZyBJL08gcmVnaW9ucywgYW5kIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGludGVycnVwdC4gSSdsbCBuZWVkIHRvIHNlZSBpZiBpdCB1c2VzIHRoZSBQQ0kgZGV2aWNlIElEIHRhYmxlIHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBTVE1NQUMgY2hpcC4gQW55IGNsZXZlciB0cmlja3MgaW4gdGhlcmUgZm9yIGhhbmRsaW5nIGRpZmZlcmVudCB2YXJpYW50cz8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWNjb3VudGVkIGZvciwgYW5kIHdoZXJlP1xuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlc291cmNlIGFsbG9jYXRpb24g4oCTIGhvdyBtdWNoIG1lbW9yeSBpcyBpdCByZXF1ZXN0aW5nPyBIb3cgaXMgaXQgaGFuZGxpbmcgRE1BPyBBcmUgdGhlcmUgYW55IERNQSBjb2hlcmVudCBtZW1vcnkgYWxsb2NhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgZm9yIHRoZSBQQ0kgYnVzIGl0c2VsZiwgbGlrZSBidXMgbWFzdGVyaW5nIG9yIGxhdGVuY3kgcmVxdWlyZW1lbnRzLCBiZWluZyBhZGRyZXNzZWQ/IEFuZCBpbXBvcnRhbnRseSwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmVzb3VyY2UgY29uZmxpY3RzIGJlaW5nIGhhbmRsZWQgZ3JhY2VmdWxseT9cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBpbnRlcnJ1cHQgc2V0dXAuIEhvdyBpcyB0aGUgaW50ZXJydXB0IGJlaW5nIGNvbmZpZ3VyZWQ/IElzIGl0IHVzaW5nIE1TSSBvciBsZWdhY3kgaW50ZXJydXB0cz8gQW55IGludGVycnVwdCBtYXNraW5nIG9yIHNoYXJpbmcgY29uc2lkZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaW50ZXJydXB0IGhhbmRsZXJzIG9yIGVkZ2UtdHJpZ2dlcmVkIGNvbnNpZGVyYXRpb25zIGZvciB0aGlzIGhhcmR3YXJlPyBBbnkgYWR2YW5jZWQgY29uZmlndXJhdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgZm9yIGhhbmRsaW5nIGludGVycnVwdCBjb2FsZXNjaW5nLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBpdD9cblxuVGhlbiwgSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIEhvdyBpcyB0aGUgTUFDIGFkZHJlc3MgYmVpbmcgZGVyaXZlZD8gQXJlIHRoZXJlIGFueSBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbXMgaW52b2x2ZWQ/IEFueSBQSFkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIGhlcmU/IEhvdydzIHRoZSBjbG9jayBzZXR1cCBoYW5kbGVkPyBJJ2xsIGJlIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHRoZSBwcm9wZXIgcG93ZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSBpZiBpdCdzIG9uIGEgbW9iaWxlIG9yIHBvd2VyLXNlbnNpdGl2ZSBkZXZpY2UuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgYW55IG9mIHRoZSByZXNvdXJjZSByZXF1ZXN0cyBmYWlsPyBIb3cgYXJlIGVycm9ycyBoYW5kbGVkLCBhbmQgYXJlIHRoZXkgcmVwb3J0ZWQgY29ycmVjdGx5PyBBbnkgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzPyBIb3cgYXJlIHJlc291cmNlcyBjbGVhbmVkIHVwIGlmIHRoZSBwcm9iZSBmYWlscyBtaWR3YXk/IEFueSBjaGFuY2VzIGZvciBhIGJ1ZmZlciBvdmVyZmxvdz9cblxuSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuIGhlcmUsIGJ1dCBJJ20gZWFnZXIgdG8gc2VlIGlmIHRoZXJlJ3MgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDg4LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6MjkuMjg0MjE3MzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExODpcXHRzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIDExOTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiAxMjA6XFx0e1xcbiAxMjE6XFx0XFx0c3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICopaWQtXFx1MDAzZWRyaXZlcl9kYXRhO1xcbiAxMjI6XFx0XFx0c3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0O1xcbiAxMjM6XFx0XFx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XFxuIDEyNDpcXHRcXHRpbnQgcmV0O1xcbiAxMjU6XFx0XFx0aW50IGk7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdHBsYXQgPSBzdG1tYWNfcGxhdF9kYXRfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDEyODpcXHRcXHRpZiAoIXBsYXQpXFxuIDEyOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiAxMzI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZW9mKCpwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhKSxcXG4gMTMzOlxcdFxcdFxcdFxcdFxcdFxcdCAgIEdGUF9LRVJORUwpO1xcbiAxMzQ6XFx0XFx0aWYgKCFwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhKVxcbiAxMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDEzNjpcXHRcXG4gMTM3OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZyksXFxuIDEzOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiAxNDA6XFx0XFx0aWYgKCFwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmcpXFxuIDE0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTQyOlxcdFxcbiAxNDM6XFx0XFx0LyogRW5hYmxlIHBjaSBkZXZpY2UgKi9cXG4gMTQ0OlxcdFxcdHJldCA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcXG4gMTQ1OlxcdFxcdGlmIChyZXQpIHtcXG4gMTQ2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBFUlJPUjogZmFpbGVkIHRvIGVuYWJsZSBkZXZpY2VcXFxcblxcXCIsXFxuIDE0NzpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDE0ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQvKiBHZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiBkZXZpY2UgKi9cXG4gMTUyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQQ0lfU1REX05VTV9CQVJTOyBpKyspIHtcXG4gMTUzOlxcdFxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGkpID09IDApXFxuIDE1NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMTU1OlxcdFxcdFxcdHJlcy5hZGRyID0gcGNpbV9pb21hcF9yZWdpb24ocGRldiwgaSwgU1RNTUFDX1JFU09VUkNFX05BTUUpO1xcbiAxNTY6XFx0XFx0XFx0aWYgKElTX0VSUihyZXMuYWRkcikpXFxuIDE1NzpcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMuYWRkcik7XFxuIDE1ODpcXHRcXHRcXHRicmVhaztcXG4gMTU5OlxcdFxcdH1cXG4gMTYwOlxcdFxcbiAxNjE6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdHJldCA9IGluZm8tXFx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xcbiAxNjQ6XFx0XFx0aWYgKHJldClcXG4gMTY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdHJlcy53b2xfaXJxID0gcGRldi1cXHUwMDNlaXJxO1xcbiAxNjg6XFx0XFx0cmVzLmlycSA9IHBkZXYtXFx1MDAzZWlycTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2V0c29lZSA9IDE7XFxuIDE3MTpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1yeHBlZSA9IDE7XFxuIDE3MjpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1lc3RlZSA9IDE7XFxuIDE3MzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZW1yeGVlID0gMTtcXG4gMTc0OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlbXR4ZWUgPSAxO1xcbiAxNzU6XFx0XFx0cGxhdC1cXHUwMDNlc2FmZXR5X2ZlYXRfY2ZnLVxcdTAwM2VlcHNpID0gMTtcXG4gMTc2OlxcdFxcdHBsYXQtXFx1MDAzZXNhZmV0eV9mZWF0X2NmZy1cXHUwMDNlZWRwcCA9IDE7XFxuIDE3NzpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZXBydHllbiA9IDE7XFxuIDE3ODpcXHRcXHRwbGF0LVxcdTAwM2VzYWZldHlfZmVhdF9jZmctXFx1MDAzZXRtb3V0ZW4gPSAxO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRwbGF0LVxcdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuIDE4MTpcXHRcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG4gMTg0OlxcdH1cXG4gMTg1OlxcdFxcbiAxODY6XFx0LyoqXFxuIDE4NzpcXHQgKiBzdG1tYWNfcGNpX3JlbW92ZVxcbiAxODg6XFx0ICpcXG4gMTg5OlxcdCAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgcG9pbnRlclxcbiAxOTA6XFx0ICogRGVzY3JpcHRpb246IHRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIG1haW4gdG8gZnJlZSB0aGUgbmV0IHJlc291cmNlcy5cXG4gMTkxOlxcdCAqL1xcbiAxOTI6XFx0c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDE5MzpcXHR7XFxuIDE5NDpcXHRcXHRzdG1tYWNfZHZyX3JlbW92ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gMTk1OlxcdH1cXG4gMTk2OlxcdFxcbiAxOTc6XFx0Lyogc3ludGhldGljIElELCBubyBvZmZpY2lhbCB2ZW5kb3IgKi9cXG4gMTk4OlxcdCNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TVE1NQUNcXHRcXHQweDA3MDBcXG4gMTk5OlxcdFxcbiAyMDA6XFx0I2RlZmluZSBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNcXHRcXHQweDExMDhcXG4gMjAxOlxcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9TWU5PUFNZU19HTUFDNV9JRFxcdFxcdDB4NzEwMlxcbiAyMDI6XFx0XFxuIDIwMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3RtbWFjX2lkX3RhYmxlW10gPSB7XFxuIDIwNDpcXHRcXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG4gMjA1OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXFx1MDAyNnN0bW1hY19wY2lfaW5mbykgfSxcXG4gMjA2OlxcdFxcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXFx1MDAyNnNucHNfZ21hYzVfcGNpX2luZm8pIH0sXFxuIDIwNzpcXHRcXHR7fVxcbiAyMDg6XFx0fTtcXG4gMjA5OlxcdFxcbiAyMTA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcXG4gMjEzOlxcdFxcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXFxuIDIxNDpcXHRcXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXFxuIDIxNTpcXHRcXHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxcbiAyMTY6XFx0XFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxcbiAyMTc6XFx0XFx0LmRyaXZlciAgICAgICAgID0ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjoyOS4yODQ0MTE1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAzMzI1NzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRmFsc2VseSBUcmlnZ2VyZWQgRHJpdmVyIFByb2JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgc3RtbWFjYCBkcml2ZXIgd29ya3MsIHNwZWNpZmljYWxseSB0aGUgcHJvYmUgZnVuY3Rpb24uIEl0J3MgdXNpbmcgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgSSdtIHdvbmRlcmluZyBhYm91dCB0aGUgdnVsbmVyYWJpbGl0eSB0byBhdHRhY2tzIHRocm91Z2ggdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCB0aGF0IFN5emthbGxlciBpcyB1c2luZy4gSSBrbm93IHRoYXQgYHN5el9wY2lgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgaW4gdGhpcyBjYXNlLCBgMHgwNzAwYCBhbmQgYDB4MTEwOGAsIHdoaWNoIGhhcHBlbnMgdG8gbWF0Y2ggdGhlIGBQQ0lfREVWSUNFX0lEX1NUTU1BQ19TVE1NQUNgIGRlZmluaXRpb24uXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0IGhhcHBlbnMgd2hlbiBTeXprYWxsZXIgaW5qZWN0cyB0aGlzIFwiZmFrZVwiIGRldmljZT8gQmVjYXVzZSBgc3RtbWFjX3BjaV9wcm9iZWAgd2lsbCBiZSBjYWxsZWQsIGFuZCB0aGF0IGluIHR1cm4gKndpbGwqIGNhbGwgYHN0bW1hY19kdnJfcHJvYmVgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgYHN0bW1hY19kdnJfcHJvYmVgIGlzIHJvYnVzdCBlbm91Z2guIERvZXMgaXQgY29ycmVjdGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBoYXJkd2FyZSBpcyBhY3R1YWxseSAqdGhlcmUqPyBJZiBpdCBkb2Vzbid0LCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBwcm9iaW5nIG9uIG5vbi1leGlzdGVudCBoYXJkd2FyZS4gVGltZSB0byBnbyBvdmVyIGBzdG1tYWNfZHZyX3Byb2JlYCdzIHNvdXJjZSBjb2RlLCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTczNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjM0LjMxNzY3MTkzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMxMDg3NDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZHZyX3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM9MjgzPXN0YXRpYyBpbnQgZHdjX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYzozMzA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzMxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM9NDI9c3RhdGljIGludCBpbnRlbF9ldGhfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmM6MTE4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyNjM9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMzQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTM0MTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTM0Mi1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM9Mzc0PXN0YXRpYyBpbnQgaXBxODA2eF9nbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYzo0ODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmMtNDg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU2My1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jPTQyPXN0YXRpYyBpbnQgbHBjMTh4eF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYzo2ODpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02OS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jLTY0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM9NDc9c3RhdGljIGludCBtZXNvbjZfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYzo3MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmMtNzQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYy00NjUtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM9MjkzPXN0YXRpYyBpbnQgbW90b3Jjb21tX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MzU5OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmM9NDg9c3RhdGljIGludCByem4xX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jOjY4OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02OS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmM9MzU9c3RhdGljIGludCBzb3BoZ29fZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jOjY1OlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02Ni19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jPTE0Nz1zdGF0aWMgaW50IHNwYWNlbWl0X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jOjIwNzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmMtMTU0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM9NTI1PXN0YXRpYyBpbnQgc3RtMzJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmM6NTc5OlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XFx0LyogdGhlIE1BQyBpcyBydW50aW1lIHN1c3BlbmRlZCBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKCksIHNvIHdlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjAzLVxcdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYy0xMjA4LVxcdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjA5OlxcdCAqIHNvIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XFx0ZXJyID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jLTM3Ny1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQxMz12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MTUtXFx0XFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzg5PUVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wbGF0X2RhdF9hbGxvYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6Nzc5MTpzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NzkyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDk0OiAqIHN0bW1hY19kdnJfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTUtICogQGRldjogZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwMi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDM6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNC1cXHRcXHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTE0OlxcdHJldCA9IF9fc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODExNS1cXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBsYXRfZGF0LVxcdTAwM2VleGl0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTE5LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMjA6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTIxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYz04NDY9aW50IHN0bW1hY19wbHRmcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jOjg1NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjM2LjYyODU1NDI2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzY1MTYyNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYC4gSSBrbm93IHRoaXMgaXMgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgdGhlIFNUTU1BQyBkcml2ZXIsIHRoZSBmdW5jdGlvbiB3aGVyZSB0aGUgaGFyZHdhcmUgaXMgaWRlbnRpZmllZCwgaW5pdGlhbGl6ZWQsIGFuZCB1bHRpbWF0ZWx5IGJyb3VnaHQgb25saW5lLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgZGV2aWNlIHRyZWUgcGFyc2luZywgdGhlIHJlc291cmNlIGFsbG9jYXRpb24sIHRoZSBjbG9jayBhbmQgUEhZIHNldHVwLCB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gLSBldmVyeXRoaW5nLiBLbm93aW5nIHRoZSBjb3JlIG9mIHRoaXMgcHJvYmUgZnVuY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgaG93IHdlbGwgaXQgaGFuZGxlcyBhIHZhcmlldHkgb2YgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEkgZXhwZWN0IHRvIHNlZSB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBwcm9iaW5nIHNlcXVlbmNlIGhlcmUsIGNoZWNraW5nIGZvciBjb21wYXRpYmxlIGRldmljZSBJRHMsIG1hcHBpbmcgbWVtb3J5LCBhbmQgaG9wZWZ1bGx5IHNvbWUgbmljZSBlcnJvciBoYW5kbGluZyB0byBlbnN1cmUgYSByb2J1c3Qgc3lzdGVtLiBMZXTigJlzIHNlZSB3aGF0IHN1cnByaXNlcyBhcmUgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjk1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6NDAuOTkzNzE5NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzc5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3OTE6XFx0c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbjc3OTI6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG43NzkzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXFxuNzc5NDpcXHR7XFxuNzc5NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7XFxuNzc5NjpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXY7XFxuNzc5NzpcXHRcXHRpbnQgaSwgcmV0ID0gMDtcXG43Nzk4OlxcdFxcdHU4IHJ4cTtcXG43Nzk5OlxcdFxcbjc4MDA6XFx0XFx0aWYgKCFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZyB8fCAhcGxhdF9kYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZXBibCkge1xcbjc4MDE6XFx0XFx0XFx0ZGV2X2VycihkZXZpY2UsIFxcXCJpbnZhbGlkIERNQSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG43ODAyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4MDM6XFx0XFx0fVxcbjc4MDQ6XFx0XFxuNzgwNTpcXHRcXHRuZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoZGV2aWNlLCBzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSxcXG43ODA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBNVExfTUFYX1RYX1FVRVVFUywgTVRMX01BWF9SWF9RVUVVRVMpO1xcbjc4MDc6XFx0XFx0aWYgKCFuZGV2KVxcbjc4MDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzgwOTpcXHRcXG43ODEwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldmljZSk7XFxuNzgxMTpcXHRcXG43ODEyOlxcdFxcdHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG43ODEzOlxcdFxcdHByaXYtXFx1MDAzZWRldmljZSA9IGRldmljZTtcXG43ODE0OlxcdFxcdHByaXYtXFx1MDAzZWRldiA9IG5kZXY7XFxuNzgxNTpcXHRcXG43ODE2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSsrKVxcbjc4MTc6XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cy5yeHFfc3RhdHNbaV0ubmFwaV9zeW5jcCk7XFxuNzgxODpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTVRMX01BWF9UWF9RVUVVRVM7IGkrKykge1xcbjc4MTk6XFx0XFx0XFx0dTY0X3N0YXRzX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XFxuNzgyMDpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODIxOlxcdFxcdH1cXG43ODIyOlxcdFxcbjc4MjM6XFx0XFx0cHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxcbjc4MjQ6XFx0XFx0XFx0ZGV2bV9uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cyhkZXZpY2UsIHN0cnVjdCBzdG1tYWNfcGNwdV9zdGF0cyk7XFxuNzgyNTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXhzdGF0cy5wY3B1X3N0YXRzKVxcbjc4MjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzgyNzpcXHRcXG43ODI4OlxcdFxcdHN0bW1hY19zZXRfZXRodG9vbF9vcHMobmRldik7XFxuNzgyOTpcXHRcXHRwcml2LVxcdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XFxuNzgzMDpcXHRcXHRwcml2LVxcdTAwM2VwbGF0ID0gcGxhdF9kYXQ7XFxuNzgzMTpcXHRcXHRwcml2LVxcdTAwM2Vpb2FkZHIgPSByZXMtXFx1MDAzZWFkZHI7XFxuNzgzMjpcXHRcXHRwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXJlcy1cXHUwMDNlYWRkcjtcXG43ODMzOlxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZW11bHRpX21zaV9lbiA9XFxuNzgzNDpcXHRcXHRcXHQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pO1xcbjc4MzU6XFx0XFxuNzgzNjpcXHRcXHRwcml2LVxcdTAwM2VkZXYtXFx1MDAzZWlycSA9IHJlcy1cXHUwMDNlaXJxO1xcbjc4Mzc6XFx0XFx0cHJpdi1cXHUwMDNld29sX2lycSA9IHJlcy1cXHUwMDNld29sX2lycTtcXG43ODM4OlxcdFxcdHByaXYtXFx1MDAzZXNmdHlfaXJxID0gcmVzLVxcdTAwM2VzZnR5X2lycTtcXG43ODM5OlxcdFxcbjc4NDA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XFxuNzg0MTpcXHRcXHRcXHRyZXQgPSBzdG1tYWNfbXNpX2luaXQocHJpdiwgcmVzKTtcXG43ODQyOlxcdFxcdFxcdGlmIChyZXQpXFxuNzg0MzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc4NDQ6XFx0XFx0fVxcbjc4NDU6XFx0XFxuNzg0NjpcXHRcXHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXFx1MDAzZW1hYykpXFxuNzg0NzpcXHRcXHRcXHRldGhfaHdfYWRkcl9zZXQocHJpdi1cXHUwMDNlZGV2LCByZXMtXFx1MDAzZW1hYyk7XFxuNzg0ODpcXHRcXG43ODQ5OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXFx1MDAzZWRldik7XFxuNzg1MDpcXHRcXG43ODUxOlxcdFxcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXFxuNzg1MjpcXHRcXHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0cHJpdi1cXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xcbjc4NTU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzKVxcbjc4NTY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNzg1NzpcXHRcXG43ODU4OlxcdFxcdC8qIEFsbG9jYXRlIHdvcmtxdWV1ZSAqL1xcbjc4NTk6XFx0XFx0cHJpdi1cXHUwMDNld3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwic3RtbWFjX3dxXFxcIik7XFxuNzg2MDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXdxKSB7XFxuNzg2MTpcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcImZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXFxcXG5cXFwiKTtcXG43ODYyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuNzg2MzpcXHRcXHRcXHRnb3RvIGVycm9yX3dxX2luaXQ7XFxuNzg2NDpcXHRcXHR9XFxuNzg2NTpcXHRcXG43ODY2OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlc2VydmljZV90YXNrLCBzdG1tYWNfc2VydmljZV90YXNrKTtcXG43ODY3OlxcdFxcbjc4Njg6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xcbjc4Njk6XFx0XFxuNzg3MDpcXHRcXHQvKiBPdmVycmlkZSB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzIGlmIHN1cHBsaWVkIFhYWCBDUlMgWFhYXFxuNzg3MTpcXHRcXHQgKiB0aGlzIG5lZWRzIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzXFxuNzg3MjpcXHRcXHQgKi9cXG43ODczOlxcdFxcdGlmICgocGh5YWRkciBcXHUwMDNlPSAwKSBcXHUwMDI2XFx1MDAyNiAocGh5YWRkciBcXHUwMDNjPSAzMSkpXFxuNzg3NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XFxuNzg3NTpcXHRcXG43ODc2OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KSB7XFxuNzg3NzpcXHRcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2Fzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODc4OlxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg3OTpcXHRcXHRcXHQvKiBTb21lIHJlc2V0IGNvbnRyb2xsZXJzIGhhdmUgb25seSByZXNldCBjYWxsYmFjayBpbnN0ZWFkIG9mXFxuNzg4MDpcXHRcXHRcXHQgKiBhc3NlcnQgKyBkZWFzc2VydCBjYWxsYmFja3MgcGFpci5cXG43ODgxOlxcdFxcdFxcdCAqL1xcbjc4ODI6XFx0XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg4MzpcXHRcXHRcXHRcXHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4ODQ6XFx0XFx0fVxcbjc4ODU6XFx0XFxuNzg4NjpcXHRcXHRyZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19haGJfcnN0KTtcXG43ODg3OlxcdFxcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxcbjc4ODg6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJ1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxcXG5cXFwiLFxcbjc4ODk6XFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG43ODkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0MC45OTQwMTQzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI5NDYyOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gbW9yZSBvZiB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgd2Ugd2VyZSBsb29raW5nIGF0IHRoYXQgZWFybGllciwgYW5kIEkgbmVlZCBhIGJldHRlciBncmFzcCBvbiBleGFjdGx5IGhvdyBpdCdzIGhhbmRsaW5nIHRoZSBpbml0aWFsIHByb2JlIGFuZCBzZXR1cC4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgYXJlYXMgSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gd2l0aGluIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbj8gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHZhcmlvdXMgZGV2aWNlIHJlc291cmNlcy4gTWVtb3J5IG1hcHBpbmcsIGludGVycnVwdCBhbGxvY2F0aW9uLCBjbG9jayBlbmFibGVtZW50IOKAkyBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIHRoYXQgYWxsIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBvYnNlcnZlIGFsbCB0aGUgZGlmZmVyZW50IGVycm9yIHBhdGhzIGl0IGNvdWxkIHRha2UgZHVyaW5nIHRoZSBpbml0aWFsIHByb2JpbmcgcGhhc2UuIFdoYXQgZG9lcyBpdCBkbyBpZiBpdCBjYW4ndCBtYXAgdGhlIHJlZ2lzdGVycyBjb3JyZWN0bHk/IFdoYXQgaGFwcGVucyBpZiB0aGUgaW50ZXJydXB0cyBkb24ndCByZWdpc3Rlcj8gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBlZGdlIGNhc2VzIGlzIGp1c3QgYXMgaW1wb3J0YW50IGFzIHRoZSBoYXBweSBwYXRoLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIGRyaXZlcidzIGxpZmVjeWNsZS4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdCBsaW5lIGJ5IGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjQ1LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0NS45MjM0ODAwMjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg5MSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4OTE6XFx0XFx0LyogV2FpdCBhIGJpdCBmb3IgdGhlIHJlc2V0IHRvIHRha2UgZWZmZWN0ICovXFxuNzg5MjpcXHRcXHR1ZGVsYXkoMTApO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG43ODk1OlxcdFxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbjc4OTY6XFx0XFx0aWYgKHJldClcXG43ODk3OlxcdFxcdFxcdGdvdG8gZXJyb3JfaHdfaW5pdDtcXG43ODk4OlxcdFxcbjc4OTk6XFx0XFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXFxuNzkwMDpcXHRcXHQgKi9cXG43OTAxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNV8yMClcXG43OTAyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWRjaGUgPSBmYWxzZTtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0c3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIocHJpdik7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XFxuNzkwNzpcXHRcXG43OTA4OlxcdFxcdG5kZXYtXFx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcXHUwMDI2c3RtbWFjX3hkcF9tZXRhZGF0YV9vcHM7XFxuNzkwOTpcXHRcXHRuZGV2LVxcdTAwM2V4c2tfdHhfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xcbjc5MTA6XFx0XFxuNzkxMTpcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFxuNzkxMjpcXHRcXHRcXHRcXHQgICAgTkVUSUZfRl9SWENTVU07XFxuNzkxMzpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcXG43OTE0OlxcdFxcdFxcdFxcdCAgICAgTkVUREVWX1hEUF9BQ1RfWFNLX1pFUk9DT1BZO1xcbjc5MTU6XFx0XFxuNzkxNjpcXHRcXHRyZXQgPSBzdG1tYWNfdGNfaW5pdChwcml2LCBwcml2KTtcXG43OTE3OlxcdFxcdGlmICghcmV0KSB7XFxuNzkxODpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xcbjc5MTk6XFx0XFx0fVxcbjc5MjA6XFx0XFxuNzkyMTpcXHRcXHRzdG1tYWNfc2V0X2dzb19mZWF0dXJlcyhuZGV2KTtcXG43OTIyOlxcdFxcbjc5MjM6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuc3BoZW4gXFx1MDAyNlxcdTAwMjZcXG43OTI0OlxcdFxcdCAgICAhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfU1BIX0RJU0FCTEUpKSB7XFxuNzkyNTpcXHRcXHRcXHRuZGV2LVxcdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcXG43OTI2OlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9jYXBhYmxlID0gdHJ1ZTtcXG43OTI3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXNwaF9hY3RpdmUgPSBwcml2LVxcdTAwM2VzcGhfY2FwYWJsZTtcXG43OTI4OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlNQSCBmZWF0dXJlIGVuYWJsZWRcXFxcblxcXCIpO1xcbjc5Mjk6XFx0XFx0fVxcbjc5MzA6XFx0XFxuNzkzMTpcXHRcXHQvKiBJZGVhbGx5IG91ciBob3N0IERNQSBhZGRyZXNzIHdpZHRoIGlzIHRoZSBzYW1lIGFzIGZvciB0aGVcXG43OTMyOlxcdFxcdCAqIGRldmljZS4gSG93ZXZlciwgaXQgbWF5IGRpZmZlciBhbmQgdGhlbiB3ZSBoYXZlIHRvIHVzZSBvdXJcXG43OTMzOlxcdFxcdCAqIGhvc3QgRE1BIHdpZHRoIGZvciBhbGxvY2F0aW9uIGFuZCB0aGUgZGV2aWNlIERNQSB3aWR0aCBmb3JcXG43OTM0OlxcdFxcdCAqIHJlZ2lzdGVyIGhhbmRsaW5nLlxcbjc5MzU6XFx0XFx0ICovXFxuNzkzNjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGgpXFxuNzkzNzpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlaG9zdF9kbWFfd2lkdGg7XFxuNzkzODpcXHRcXHRlbHNlXFxuNzkzOTpcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQ7XFxuNzk0MDpcXHRcXG43OTQxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSB7XFxuNzk0MjpcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSxcXG43OTQzOlxcdFxcdFxcdFxcdFxcdERNQV9CSVRfTUFTSyhwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XFxuNzk0NDpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjc5NDU6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNpbmcgJWQvJWQgYml0cyBETUEgaG9zdC9kZXZpY2Ugd2lkdGhcXFxcblxcXCIsXFxuNzk0NjpcXHRcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cXHUwMDNlZG1hX2NhcC5hZGRyNjQpO1xcbjc5NDc6XFx0XFxuNzk0ODpcXHRcXHRcXHRcXHQvKlxcbjc5NDk6XFx0XFx0XFx0XFx0ICogSWYgbW9yZSB0aGFuIDMyIGJpdHMgY2FuIGJlIGFkZHJlc3NlZCwgbWFrZSBzdXJlIHRvXFxuNzk1MDpcXHRcXHRcXHRcXHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxcbjc5NTE6XFx0XFx0XFx0XFx0ICovXFxuNzk1MjpcXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUKSlcXG43OTUzOlxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWRtYV9jZmctXFx1MDAzZWVhbWUgPSB0cnVlO1xcbjc5NTQ6XFx0XFx0XFx0fSBlbHNlIHtcXG43OTU1OlxcdFxcdFxcdFxcdHJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2aWNlLCBETUFfQklUX01BU0soMzIpKTtcXG43OTU2OlxcdFxcdFxcdFxcdGlmIChyZXQpIHtcXG43OTU3OlxcdFxcdFxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiRmFpbGVkIHRvIHNldCBETUEgTWFza1xcXFxuXFxcIik7XFxuNzk1ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGVycm9yX2h3X2luaXQ7XFxuNzk1OTpcXHRcXHRcXHRcXHR9XFxuNzk2MDpcXHRcXG43OTYxOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcXG43OTYyOlxcdFxcdFxcdH1cXG43OTYzOlxcdFxcdH1cXG43OTY0OlxcdFxcbjc5NjU6XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gbmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUE7XFxuNzk2NjpcXHRcXHRuZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xcbjc5Njc6XFx0I2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VEXFxuNzk2ODpcXHRcXHQvKiBCb3RoIG1hYzEwMCBhbmQgZ21hYyBzdXBwb3J0IHJlY2VpdmUgVkxBTiB0YWcgZGV0ZWN0aW9uICovXFxuNzk2OTpcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xcbjc5NzA6XFx0XFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlKSkge1xcbjc5NzE6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7XFxuNzk3MjpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlaHdfdmxhbl9lbiA9IHRydWU7XFxuNzk3MzpcXHRcXHR9XFxuNzk3NDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC52bGhhc2gpIHtcXG43OTc1OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcXG43OTc2OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcXG43OTc3OlxcdFxcdH1cXG43OTc4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnZsaW5zKVxcbjc5Nzk6XFx0XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XFxuNzk4MDpcXHQjZW5kaWZcXG43OTgxOlxcdFxcdHByaXYtXFx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xcbjc5ODI6XFx0XFxuNzk4MzpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XFxuNzk4NDpcXHRcXG43OTg1OlxcdFxcdC8qIEluaXRpYWxpemUgUlNTICovXFxuNzk4NjpcXHRcXHRyeHEgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlO1xcbjc5ODc6XFx0XFx0bmV0ZGV2X3Jzc19rZXlfZmlsbChwcml2LVxcdTAwM2Vyc3Mua2V5LCBzaXplb2YocHJpdi1cXHUwMDNlcnNzLmtleSkpO1xcbjc5ODg6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcnNzLnRhYmxlKTsgaSsrKVxcbjc5ODk6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcnNzLnRhYmxlW2ldID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQoaSwgcnhxKTtcXG43OTkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo0NS45MjM3NTkwODRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NTU4NTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIHN0bW1hY19od19pbml0IEZ1bmN0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhlIGBzdG1tYWNfaHdfaW5pdGAgZnVuY3Rpb24uIFRpbWUgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzIGFyZSBiZWluZyBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgU1RNTUFDJ3Mgc3BlY2lmaWMgb3BlcmF0aW9uYWwgbW9kZSBhbmQgdGhlIGV4cGVjdGVkIGRhdGFwYXRoLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcyByZWxhdGVkIHRvIGNsb2NrIGdhdGluZywgUEhZIGluaXRpYWxpemF0aW9uLCBETUEgZW5naW5lIHNldHVwIChkZXNjcmlwdG9ycywgYnVyc3Qgc2l6ZXMsIHRocmVzaG9sZHMpLCBhbmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgYXMgdGhlcmUgYXJlIG9mdGVuIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZXNlIHNldHRpbmdzLiBBbnkgdW5leHBlY3RlZCByZWdpc3RlciB2YWx1ZXMgb3IgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VzIGNvdWxkIGhpbnQgYXQgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyJ3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGhhcmR3YXJlIG9yIHRoZSBkZXZpY2UgdHJlZSBjb25maWd1cmF0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYW55IG5lY2Vzc2FyeSBwb3dlci11cCBzZXF1ZW5jZXMgY29ycmVjdGx5LCBwZXJoYXBzIHJlbGF0ZWQgdG8gdGhlIFBIWSBvciBpbnRlcm5hbCBjbG9ja3MsIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyBvciB1bmRlZmluZWQgYmVoYXZpb3IuIFVsdGltYXRlbHksIEknbSBjaGVja2luZyB0aGF0IHRoZSBpbml0aWFsIGhhcmR3YXJlIHN0YXRlIGlzIGNvaGVyZW50IGFuZCByZWFkeSBmb3IgdGhlIE1BQydzIG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0MTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjQ5LjgxOTM0Njg0M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyMzY3MzI5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNjA9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTU6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM5Ni0gKiAgQHByaXY6IGRyaXZlciBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDAxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQwMjpzdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03NzkxPXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg5NC1cXHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc4OTU6XFx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03ODk2LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEyOjUyLjY0MzAyNDc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDcwMzM2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0J3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggYHN0bW1hY19od19pbml0YC5cblxuKipJbml0aWFsIFRob3VnaHRzIG9uIGBzdG1tYWNfaHdfaW5pdGAqKlxuXG5BbHJpZ2h0LCBkaXZpbmcgaW50byBgc3RtbWFjX2h3X2luaXRgLiBCYXNlZCBvbiB0aGUgbmFtZSBhbG9uZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlciB0YWtlcyBwbGFjZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlPyBJcyB0aGlzIGEgaGlnaC1sZXZlbCBmdW5jdGlvbiB0aGF0IGNhbGxzIHNldmVyYWwgb3RoZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIG9yIGlzIGl0IGEgZGVlcCBkaXZlIGludG8gdGhlIHJlZ2lzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24/IEnigJltIGJldHRpbmcgb24gdGhlIGZvcm1lciwgYnV0IHlvdSBuZXZlciBrbm93LiBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGFzcGVjdHMuIExldCdzIHNlZSBpZiBpdCBoYW5kbGVzIHRoZSBjbG9jayBzZXR1cCwgRE1BIGNvbmZpZ3VyYXRpb24sIE1BQyBhZGRyZXNzIHByb2dyYW1taW5nLCBhbmQgaW50ZXJydXB0IGVuYWJsaW5nLiBUaGUgcG93ZXIgbWFuYWdlbWVudCBzZXF1ZW5jZSB3aWxsIGJlIGltcG9ydGFudCB0b28uIEkgYW50aWNpcGF0ZSBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGhlcmUsIHRhaWxvcmVkIHRvIHRoZSBzcGVjaWZpYyBTVE1NQUMgaGFyZHdhcmUgcmV2aXNpb24gYW5kIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcGFzc2VkIGluIGF0IGJvb3QuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gZW5zdXJlIHRoaXMgcm91dGluZSBsZWF2ZXMgdGhlIGhhcmR3YXJlIGluIGEgZGVmaW5lZCwgb3BlcmF0aW9uYWwgc3RhdGUuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgYXV0aG9yIGFwcHJvYWNoZWQgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MjUxMzIsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMjo1Ny4yOTAwNjAxNjhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwMixcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc0MDI6XFx0c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuNzQwMzpcXHR7XFxuNzQwNDpcXHRcXHRpbnQgcmV0O1xcbjc0MDU6XFx0XFxuNzQwNjpcXHRcXHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xcbjc0MDc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxcbjc0MDg6XFx0XFx0XFx0Y2hhaW5fbW9kZSA9IDE7XFxuNzQwOTpcXHRcXHRwcml2LVxcdTAwM2VjaGFpbl9tb2RlID0gISFjaGFpbl9tb2RlO1xcbjc0MTA6XFx0XFxuNzQxMTpcXHRcXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbjc0MTI6XFx0XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG43NDEzOlxcdFxcdGlmIChyZXQpXFxuNzQxNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjc0MTU6XFx0XFxuNzQxNjpcXHRcXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXFxuNzQxNzpcXHRcXHRwcml2LVxcdTAwM2Vod19jYXBfc3VwcG9ydCA9IHN0bW1hY19nZXRfaHdfZmVhdHVyZXMocHJpdik7XFxuNzQxODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG43NDE5OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkRNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQyMDpcXHRcXG43NDIxOlxcdFxcdFxcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXFxuNzQyMjpcXHRcXHRcXHQgKiBlbmhfZGVzYywgdHhfY29lIChlLmcuIHRoYXQgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZVxcbjc0MjM6XFx0XFx0XFx0ICogcGxhdGZvcm0pIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBIVyBjYXBhYmlsaXR5XFxuNzQyNDpcXHRcXHRcXHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cXG43NDI1OlxcdFxcdFxcdCAqL1xcbjc0MjY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZW5oX2Rlc2MgPSBwcml2LVxcdTAwM2VkbWFfY2FwLmVuaF9kZXNjO1xcbjc0Mjc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcG10ID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXFx1MDAyNlxcdTAwMjZcXG43NDI4OlxcdFxcdFxcdFxcdFxcdCEocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19VU0VfUEhZX1dPTCk7XFxuNzQyOTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSB7XFxuNzQzMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zID1cXG43NDMxOlxcdFxcdFxcdFxcdFxcdFxcdChCSVQocHJpdi1cXHUwMDNlZG1hX2NhcC5oYXNoX3RiX3N6KSBcXHUwMDNjXFx1MDAzYyA1KTtcXG43NDMyOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtY2FzdF9iaXRzX2xvZzIgPVxcbjc0MzM6XFx0XFx0XFx0XFx0XFx0XFx0aWxvZzIocHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyk7XFxuNzQzNDpcXHRcXHRcXHR9XFxuNzQzNTpcXHRcXG43NDM2OlxcdFxcdFxcdC8qIFRYQ09FIGRvZXNuJ3Qgd29yayBpbiB0aHJlc2ggRE1BIG1vZGUgKi9cXG43NDM3OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vmb3JjZV90aHJlc2hfZG1hX21vZGUpXFxuNzQzODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBmYWxzZTtcXG43NDM5OlxcdFxcdFxcdGVsc2VcXG43NDQwOlxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAudHhfY29lO1xcbjc0NDE6XFx0XFxuNzQ0MjpcXHRcXHRcXHQvKiBJbiBjYXNlIG9mIEdNQUM0IHJ4X2NvZSBpcyBmcm9tIEhXIGNhcCByZWdpc3Rlci4gKi9cXG43NDQzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lO1xcbjc0NDQ6XFx0XFxuNzQ0NTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTIpXFxuNzQ0NjpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyO1xcbjc0NDc6XFx0XFx0XFx0ZWxzZSBpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9jb2VfdHlwZTEpXFxuNzQ0ODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUxO1xcbjc0NDk6XFx0XFxuNzQ1MDpcXHRcXHRcXHRzdG1tYWNfcHJpbnRfYWN0cGh5aWYocHJpdik7XFxuNzQ1MTpcXHRcXHR9IGVsc2Uge1xcbjc0NTI6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiTm8gSFcgRE1BIGZlYXR1cmUgcmVnaXN0ZXIgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDUzOlxcdFxcdH1cXG43NDU0OlxcdFxcbjc0NTU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2NvZSkge1xcbjc0NTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXJ4X2NzdW0gPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2U7XFxuNzQ1NzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSWCBDaGVja3N1bSBPZmZsb2FkIEVuZ2luZSBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0NTg6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXN5bm9wc3lzX2lkIFxcdTAwM2MgRFdNQUNfQ09SRV80XzAwKVxcbjc0NTk6XFx0XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiQ09FIFR5cGUgJWRcXFxcblxcXCIsIHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtKTtcXG43NDYwOlxcdFxcdH1cXG43NDYxOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UpXFxuNzQ2MjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJUWCBDaGVja3N1bSBpbnNlcnRpb24gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDYzOlxcdFxcbjc0NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCkge1xcbjc0NjU6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiV2FrZS1VcCBPbiBMYW4gc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDY2OlxcdFxcdFxcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cXHUwMDNlZGV2aWNlLCAxKTtcXG43NDY3OlxcdFxcdFxcdGRldm1fcG1fc2V0X3dha2VfaXJxKHByaXYtXFx1MDAzZWRldmljZSwgcHJpdi1cXHUwMDNld29sX2lycSk7XFxuNzQ2ODpcXHRcXHR9XFxuNzQ2OTpcXHRcXG43NDcwOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDcxOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzKSB7XFxuNzQ3MjpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3MzpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0NzQ6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UpO1xcbjc0NzU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcztcXG43NDc2OlxcdFxcdH1cXG43NDc3OlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXFx1MDAyNlxcdTAwMjZcXG43NDc4OlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XFxuNzQ3OTpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ4MDpcXHRcXHRcXHRcXHQgXFxcIk51bWJlciBvZiBUeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0ODE6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xcbjc0ODI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcztcXG43NDgzOlxcdFxcdH1cXG43NDg0OlxcdFxcbjc0ODU6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplIFxcdTAwMjZcXHUwMDI2XFxuNzQ4NjpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemUpIHtcXG43NDg3OlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldmljZSxcXG43NDg4OlxcdFxcdFxcdFxcdCBcXFwiUnggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDg5OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9maWZvX3NpemUpO1xcbjc0OTA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemU7XFxuNzQ5MTpcXHRcXHR9XFxuNzQ5MjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUgXFx1MDAyNlxcdTAwMjZcXG43NDkzOlxcdFxcdCAgICBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUgXFx1MDAzZSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSkge1xcbjc0OTQ6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0OTU6XFx0XFx0XFx0XFx0IFxcXCJUeCBGSUZPIHNpemUgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxcXG5cXFwiLFxcbjc0OTY6XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X2ZpZm9fc2l6ZSk7XFxuNzQ5NzpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZTtcXG43NDk4OlxcdFxcdH1cXG43NDk5OlxcdFxcbjc1MDA6XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZXZsYW5fZmFpbF9xX2VuID1cXG43NTAxOlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1ZMQU5fRkFJTF9RX0VOKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTI6NTcuMjkwNTAzNDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNDcwNzU0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU1RNTUFDIEluaXRpYWxpemF0aW9uIGluIGEgRnV6emluZyBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgaXQncyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlbiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2Aga2lja3MgaW4sIHJlYWRpbmcgZnJvbSB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0eSByZWdpc3Rlci4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBcIkFoYSEgVGhpcyBpcyB3aGVyZSB0aGUgZW11bGF0b3IgbWlnaHQgdHJpcCB1cyB1cC5cIiBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCBhY3R1YWxseSBwcmVzZW50IOKAkyB3aGljaCwgbGV0J3MgYmUgaG9uZXN0LCBpcyB0aGUgY2FzZSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBzeXprYWxsZXIgYW5kIGl0cyBlbXVsYXRlZCBlbnZpcm9ubWVudCDigJMgdGhhdCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHJlYWQgd2lsbCBsaWtlbHkgcmV0dXJuIGdhcmJhZ2UuIEVpdGhlciB6ZXJvLCBvciBhIHBvdGVudGlhbGx5IHJhbmRvbSB2YWx1ZSBvZiAweGZmZmZmZmZmLlxuXG5Ob3csIEknbSByZW1lbWJlcmluZyBzeXprYWxsZXIncyBgc3l6X3BjaWAgY2FsbHMuIEl0IGRvZXNuJ3QgZnVsbHkgZW11bGF0ZSB0aGUgUENJIGRldmljZSdzIG1lbW9yeSBzcGFjZTsgaXQganVzdCBtYXBzICpzb21lKiBkdW1teSBtZW1vcnkgZm9yIHRob3NlIEJBUnMgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMpLiBTbywgcmVhZGluZyBmcm9tIHRob3NlIEJBUnMgaXMgZ29pbmcgdG8gZ2l2ZSB1cyBiYWNrIHdoYXRldmVyJ3MgaW4gdGhhdCBkdW1teSBtZW1vcnkgc3BhY2UsIHByb2JhYmx5IHplcm8sIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlLiBUaGlzIG1lYW5zIGlmIHdlIGdldCBhIHplcm8gYmFjaywgd2UgYXJlIGdvaW5nIHRvIHNldCBgcHJpdi1cdTAwM2Vod19jYXBfc3VwcG9ydGAgdG8gemVybywgd2hpY2ggbWVhbnMgd2UgYXJlIGdvaW5nIHRvIGNvbnRpbnVlIGRvd24gdGhlIHBhdGggb2YgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplIHRoZSBkZXZpY2UuXG5cbkJ1dCB0aGVuLCB0aGUgY29kZSBjb250aW51ZXMgdG8gYHN0bW1hY19kdnJfcHJvYmVgLCB3aGljaCByZWdpc3RlcnMgdGhlIG5ldGRldi4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBEb2VzIHRoZSBsYWNrIG9mIHJlYWwgaGFyZHdhcmUgY2F1c2UgdGhlIGRyaXZlciBwcm9iZSB0byBmYWlsPyBEb2VzIGl0IGNoZWNrIHRoZXNlIHZhbHVlcz8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgaWYgdGhlIGhhcmR3YXJlIGlzbid0IHJlYWxseSB0aGVyZS4gTGV0J3MgZGlnIGJhY2sgaW50byBgc3RtbWFjX2h3aWZfaW5pdGAgYW5kIGxvb2sgZm9yIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczNDUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowMy42Mzc1ODE5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODY3MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdpZl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTQ9c3RtbWFjX2h3aWZfZmluZChlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUsIHU4IHNucHN2ZXIsIHU4IGRldl9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjMxNzppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9Njk3PWludCBzdG1tYWNfcmVzZXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk4OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzQwMj1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxMS1cXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6NzQxMjpcXHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQxMy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowNS4xNDYyNjEwMDdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NzgwMzIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBoYXJkd2FyZSBpbnRlcmZhY2UgaXMgaW5pdGlhbGl6ZWQuIFdoYXQgYXJlIHRoZSBrZXkgc3RlcHMgaW52b2x2ZWQ/IEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBhcmVhcyB3aGVyZSB0aGluZ3MgbWlnaHQgZ28gd3JvbmcsIG9yIHBsYWNlcyB3aGVyZSB0aGUgZHJpdmVyIGNvdWxkIGJlIG9wdGltaXplZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXRhaWxzLCBvZiBjb3Vyc2Ug4oCTIGhvdyBpdCB0YWxrcyB0byB0aGUgTUFDLCB3aGF0IHJlZ2lzdGVycyBpdCdzIHNldHRpbmcgdXAsIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRE1BIGVuZ2luZSBpZiBpdCBoYXMgb25lLiBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBJIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvcj8gSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyB0b28uIEhvdyByb2J1c3QgaXMgdGhpcyBpbml0aWFsaXphdGlvbj8gRG9lcyBpdCBoYW5kbGUgdmFyaW91cyBoYXJkd2FyZSByZXZpc2lvbnMgZ3JhY2VmdWxseT8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhciBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBzbyBJIGNhbiBtZW50YWxseSBtYXAgaXQgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuIEFuZCBvZiBjb3Vyc2UsIEknbGwgYmUgY29uc2lkZXJpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zOyBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgTUFDIGZvciBsb3ctcG93ZXIgc3RhdGVzLCBpZiBhcHBsaWNhYmxlPyBGaW5hbGx5LCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgb3IgdmVuZG9yLXNwZWNpZmljIG1hZ2ljIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24sIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBjb3VsZCBiZSBlYXNpbHkgbWlzc2VkIGFuZCBjYXVzZSBpc3N1ZXMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgYW55IGluaXRpYWxpemF0aW9uIG9yZGVycywgb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1Yi1jb21wb25lbnRzIG9mIHRoZSBkcml2ZXIgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowOS4yMTQwNjc0NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzE3OlxcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gMzE4OlxcdHtcXG4gMzE5OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gMzIwOlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcXG4gMzIyOlxcdFxcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcXG4gMzIzOlxcdFxcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xcbiAzMjQ6XFx0XFx0aW50IHJldDtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXFxuIDMyOTpcXHRcXHRwcml2LVxcdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldmljZSwgc2l6ZW9mKCptYWMpLCBHRlBfS0VSTkVMKTtcXG4gMzMyOlxcdFxcdGlmICghbWFjKVxcbiAzMzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdC8qIENoZWNrIGZvciBIVyBzcGVjaWZpYyBzZXR1cCBmaXJzdCAqL1xcbiAzMzY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cCkge1xcbiAzMzc6XFx0XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XFxuIDMzODpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMzk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcXG4gMzQyOlxcdFxcdH1cXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNm1hYy1cXHUwMDNlaXJxX2N0cmxfbG9jayk7XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDM0OTpcXHRcXHRlbnRyeSA9IHN0bW1hY19od2lmX2ZpbmQoY29yZV90eXBlLCBwcml2LVxcdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xcbiAzNTA6XFx0XFx0aWYgKCFlbnRyeSkge1xcbiAzNTE6XFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXZpY2UsXFxuIDM1MjpcXHRcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGZpbmQgSFcgSUYgKGlkPTB4JXgsIGdtYWM9JWQvJWQpXFxcXG5cXFwiLFxcbiAzNTM6XFx0XFx0XFx0XFx0dmVyc2lvbi5zbnBzdmVyLCBjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDLFxcbiAzNTQ6XFx0XFx0XFx0XFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzU3OlxcdFxcdH1cXG4gMzU4OlxcdFxcbiAzNTk6XFx0XFx0LyogT25seSB1c2UgZ2VuZXJpYyBIVyBoZWxwZXJzIGlmIG5lZWRlZCAqL1xcbiAzNjA6XFx0XFx0bWFjLVxcdTAwM2VkZXNjID0gbWFjLVxcdTAwM2VkZXNjID8gOiBlbnRyeS1cXHUwMDNlZGVzYztcXG4gMzYxOlxcdFxcdG1hYy1cXHUwMDNlZG1hID0gbWFjLVxcdTAwM2VkbWEgPyA6IGVudHJ5LVxcdTAwM2VkbWE7XFxuIDM2MjpcXHRcXHRtYWMtXFx1MDAzZW1hYyA9IG1hYy1cXHUwMDNlbWFjID8gOiBlbnRyeS1cXHUwMDNlbWFjO1xcbiAzNjM6XFx0XFx0bWFjLVxcdTAwM2VwdHAgPSBtYWMtXFx1MDAzZXB0cCA/IDogZW50cnktXFx1MDAzZWh3dGltZXN0YW1wO1xcbiAzNjQ6XFx0XFx0bWFjLVxcdTAwM2Vtb2RlID0gbWFjLVxcdTAwM2Vtb2RlID8gOiBlbnRyeS1cXHUwMDNlbW9kZTtcXG4gMzY1OlxcdFxcdG1hYy1cXHUwMDNldGMgPSBtYWMtXFx1MDAzZXRjID8gOiBlbnRyeS1cXHUwMDNldGM7XFxuIDM2NjpcXHRcXHRtYWMtXFx1MDAzZW1tYyA9IG1hYy1cXHUwMDNlbW1jID8gOiBlbnRyeS1cXHUwMDNlbW1jO1xcbiAzNjc6XFx0XFx0bWFjLVxcdTAwM2Vlc3QgPSBtYWMtXFx1MDAzZWVzdCA/IDogZW50cnktXFx1MDAzZWVzdDtcXG4gMzY4OlxcdFxcdG1hYy1cXHUwMDNldmxhbiA9IG1hYy1cXHUwMDNldmxhbiA/IDogZW50cnktXFx1MDAzZXZsYW47XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHByaXYtXFx1MDAzZWh3ID0gbWFjO1xcbiAzNzE6XFx0XFx0cHJpdi1cXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cXHUwMDNlcmVncy5mcGVfcmVnO1xcbiAzNzI6XFx0XFx0cHJpdi1cXHUwMDNlcHRwYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLnB0cF9vZmY7XFxuIDM3MzpcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgZW50cnktXFx1MDAzZXJlZ3MubW1jX29mZjtcXG4gMzc0OlxcdFxcdG1lbWNweShcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2Nsb2NrX29wcywgZW50cnktXFx1MDAzZXB0cCxcXG4gMzc1OlxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHB0cF9jbG9ja19pbmZvKSk7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChlbnRyeS1cXHUwMDNlZXN0KVxcbiAzNzg6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZXN0YWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLmVzdF9vZmY7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdC8qIEVudHJ5IGZvdW5kICovXFxuIDM4MTpcXHRcXHRpZiAobmVlZHNfc2V0dXApIHtcXG4gMzgyOlxcdFxcdFxcdHJldCA9IGVudHJ5LVxcdTAwM2VzZXR1cChwcml2KTtcXG4gMzgzOlxcdFxcdFxcdGlmIChyZXQpXFxuIDM4NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODU6XFx0XFx0fVxcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHQvKiBTYXZlIHF1aXJrcywgaWYgbmVlZGVkIGZvciBwb3N0ZXJpb3IgdXNlICovXFxuIDM4ODpcXHRcXHRwcml2LVxcdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVxcdTAwM2VxdWlya3M7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdHJldHVybiAwO1xcbiAzOTE6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzowOS4yMTQxNjkxNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNDcyODYzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaWdnaW5nIGludG8gUG90ZW50aWFsIGBzdG1tYWNgIERyaXZlciBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNgIGRyaXZlciBjb2RlLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IGEgcG9zc2libGUgZmFpbHVyZSBwb2ludC4gVGhlIHJvdXRpbmUgYHN0bW1hY19nZXRfdmVyc2lvbmAgaXMgcmVzcG9uc2libGUgZm9yIGdyYWJiaW5nIHRoZSBoYXJkd2FyZSB2ZXJzaW9uLCB3aGljaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBCdXQsIGFuZCBoZXJlJ3MgdGhlIHJ1Yiwgd2hhdCBpZiBpdCByZXR1cm5zIHplcm8/IFRoYXQncyB3aGVuIHRoaW5ncyBjb3VsZCBnZXQgaW50ZXJlc3RpbmcuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBhIHZlcnNpb24gemVybyBjb3VsZCBwb3NzaWJseSBjYXVzZSBpc3N1ZXMgd2l0aCB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLCBpdCdzIHBvc3NpYmxlIHRoYXQgYHN0bW1hY19od2lmX2ZpbmRgIG1pZ2h0IHRoZW4gZmFpbC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBpZGVudGlmeWluZyB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuIFNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBtb3JlIGNsb3NlbHkuIEkgc2hvdWxkIHJlYWxseSBkaXZlIGludG8gdGhlIGxvZ2ljIG9mIGBzdG1tYWNfaHdpZl9maW5kYCBhbmQgYHN0bW1hY19nZXRfdmVyc2lvbmAsIGRvdWJsZS1jaGVja2luZyB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIGRlcGVuZGVuY2llcyB0aGVyZS4gR290dGEgbWFrZSBzdXJlIHRob3NlIHR3byBhcmUgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIsIGVzcGVjaWFsbHkgaW4gZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjEzLjMxODkwMDM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI1MTczNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfdmVyc2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzoxNC44NDQwNzc3NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4NDUxNTcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHN0bW1hY19nZXRfdmVyc2lvbmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIGNvZGUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGlzIGZ1bmN0aW9uLCBhcyBpdCBpcyBhIGNydWNpYWwgY29tcG9uZW50IGZvciBhbnkgbmV0d29ya2luZyBkZXZpY2UuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgZHJpdmVyIHJlcG9ydHMgaXRzIG93biB2ZXJzaW9uLCBwZXJoYXBzIGZvciBjb21wYXRpYmlsaXR5IGNoZWNrcyBvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCwgc3RvcmVkLCBhbmQgcHJlc2VudGVkLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBTVE1NQUMgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHByZXR0eSBnb29kLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBoZXJlIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucy4gSSBhbSByZWFkeSB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIHF1aXJrcyBvciBzdWJ0bGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBwcm9jZXNzIGlzIHJvYnVzdCwgaGFuZGxpbmcgYW55IHBvc3NpYmxlIGVycm9ycyBncmFjZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ0NCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjIwLjcyODU5NTUwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjE6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gIDIyOlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gKnZlcilcXG4gIDIzOlxcdHtcXG4gIDI0OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gIDI1OlxcdFxcdHVuc2lnbmVkIGludCB2ZXJzaW9uX29mZnNldDtcXG4gIDI2OlxcdFxcdHUzMiB2ZXJzaW9uO1xcbiAgMjc6XFx0XFxuICAyODpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSAwO1xcbiAgMjk6XFx0XFx0dmVyLVxcdTAwM2VkZXZfaWQgPSAwO1xcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfTUFDMTAwKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuO1xcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQylcXG4gIDM1OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQ19WRVJTSU9OO1xcbiAgMzY6XFx0XFx0ZWxzZVxcbiAgMzc6XFx0XFx0XFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDNF9WRVJTSU9OO1xcbiAgMzg6XFx0XFxuICAzOTpcXHRcXHR2ZXJzaW9uID0gcmVhZGwocHJpdi1cXHUwMDNlaW9hZGRyICsgdmVyc2lvbl9vZmZzZXQpO1xcbiAgNDA6XFx0XFx0aWYgKHZlcnNpb24gPT0gMCkge1xcbiAgNDE6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVmVyc2lvbiBJRCBub3QgYXZhaWxhYmxlXFxcXG5cXFwiKTtcXG4gIDQyOlxcdFxcdFxcdHJldHVybjtcXG4gIDQzOlxcdFxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXFxcblxcXCIsXFxuICA0NjpcXHRcXHRcXHQgRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pLFxcbiAgNDc6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19TTlBTVkVSLCB2ZXJzaW9uKSk7XFxuICA0ODpcXHRcXG4gIDQ5OlxcdFxcdHZlci1cXHUwMDNlc25wc3ZlciA9IEZJRUxEX0dFVChEV01BQ19TTlBTVkVSLCB2ZXJzaW9uKTtcXG4gIDUwOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcXG4gIDUxOlxcdFxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gRklFTERfR0VUKERXTUFDX1VTRVJWRVIsIHZlcnNpb24pO1xcbiAgNTI6XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRzdGF0aWMgdm9pZCBzdG1tYWNfZHdtYWNfbW9kZV9xdWlyayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuICA1NTpcXHR7XFxuICA1NjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVxcdTAwM2VodztcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWNoYWluX21vZGUpIHtcXG4gIDU5OlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkNoYWluIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuICA2MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfQ0hBSU5fTU9ERTtcXG4gIDYxOlxcdFxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IFxcdTAwMjZjaGFpbl9tb2RlX29wcztcXG4gIDYyOlxcdFxcdH0gZWxzZSB7XFxuICA2MzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJSaW5nIG1vZGUgZW5hYmxlZFxcXFxuXFxcIik7XFxuICA2NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VkZXNjcmlwdG9yX21vZGUgPSBTVE1NQUNfUklOR19NT0RFO1xcbiAgNjU6XFx0XFx0XFx0bWFjLVxcdTAwM2Vtb2RlID0gXFx1MDAyNnJpbmdfbW9kZV9vcHM7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHR9XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgc3RtbWFjX2R3bWFjMV9xdWlya3Moc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNzA6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzoyMC43Mjg2NzM4MzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjUxMDA1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgVmVyc2lvbiBDaGVjayBcdTAwMjYgSGFyZHdhcmUgSW50ZXJmYWNlIERpc2NvdmVyeSoqXG5cbkFscmlnaHQsIHNvIGlmIHRoZSBzeXN0ZW0ncyBzdGFydGluZyBmcm9tIHZlcnNpb24gMCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgdmVyLVx1MDAzZXNucHN2ZXJgIGlzIGluaXRpYWxpemVkIHRvIDAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgYSBiYXNlIGNvbmRpdGlvbi4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB3aGVuIHdlIHRoZW4gY2FsbCB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLCB3ZSdyZSBwYXNzaW5nIGluIHRoYXQgYHNucHN2ZXJgIHZhcmlhYmxlLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBoYXMgYmVlbiBkZWxpYmVyYXRlbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gSSB0aGluayBhYm91dCBob3cgdGhlIGBzdG1tYWNfaHdpZl9maW5kYCByb3V0aW5lIG9wZXJhdGVzIG9uIGEgbmV3LCB1bmNvbmZpZ3VyZWQsIHBvc3NpYmx5IGV2ZW4gdW5pbml0aWFsaXplZCBoYXJkd2FyZS4gSXMgdGhlIGludGVudGlvbiB0byBoYXZlIGBzdG1tYWNfaHdpZl9maW5kYCBmaWd1cmUgb3V0IHRoZSB2ZXJzaW9uLCBvciBoYXMgdGhpcyBhbHJlYWR5IGJlZW4gcHJlLWRldGVybWluZWQ/IEFuZCBpZiBpdCdzIHRoZSBsYXR0ZXIsIGlzIHRoYXQgYXNzdW1lZCBpbml0aWFsaXphdGlvbiBzdWZmaWNpZW50IGZvciBjb3JyZWN0IGhhcmR3YXJlIGRldGVjdGlvbiBhbmQgaW50ZXJmYWNlIHNldHVwPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGF0IHplcm8gdmFsdWUgaXMgaW50ZXJwcmV0ZWQgd2l0aGluIHRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24gaXRzZWxmLCBzcGVjaWZpY2FsbHksIGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0MzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjI1LjQ1NTE4NjEwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NzY1NzgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfaHdpZl9maW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0yOTM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI5NDpzdG1tYWNfaHdpZl9maW5kKGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSwgdTggc25wc3ZlciwgdTggZGV2X2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yOTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzQ4LVxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozNDk6XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzUwLVxcdGlmICghZW50cnkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MjYuOTIyODQ4NTJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNDAwMTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9maW5kYCoqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgc3RtbWFjX2h3aWZfZmluZGAuIEknbSBjdXJpb3VzIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBmb3IgdGhlIFNUTU1BQyBFdGhlcm5ldCBkcml2ZXIuIEknbSBhc3N1bWluZyB0aGlzIGlzIGEgY29yZSBjb21wb25lbnQsIGxpa2VseSBpbnZvbHZlZCBpbiBwcm9iaW5nIHRoZSBkZXZpY2UgdHJlZSBvciBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgb3IgbWF5YmUgZXZlbiB1c2luZyBwbGF0Zm9ybSBkYXRhLCB0byBpZGVudGlmeSBhbmQgY29uZmlndXJlIHRoZSBzcGVjaWZpYyBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGluc3RhbmNlLiBJIGFudGljaXBhdGUgc2VlaW5nIGxvZ2ljIGZvciB0cmF2ZXJzaW5nIGRhdGEgc3RydWN0dXJlcywgcG9zc2libHkgaXRlcmF0aW5nIHRocm91Z2ggYSBsaXN0IG9mIHBvdGVudGlhbCBoYXJkd2FyZSBpbnRlcmZhY2VzLCBvciBwZXJoYXBzIHVzaW5nIGEgbW9yZSBkaXJlY3QgbWV0aG9kIGlmIHRoZSBoYXJkd2FyZSBpcyB0aWdodGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBzeXN0ZW0uIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUgLSB3aGF0IGhhcHBlbnMgaWYgaXQgZmFpbHMgdG8gZmluZCBhIHZhbGlkIGhhcmR3YXJlIGludGVyZmFjZT8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gU3BlY2lmaWMgZXJyb3IgY29kZXMgdGhhdCBhcmUgcmV0dXJuZWQ/IExldCdzIGdldCByZWFkaW5nIGFuZCBzZWUgaG93IHdlbGwgbXkgYXNzdW1wdGlvbnMgYWxpZ24gd2l0aCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiBJIGFsc28gaG9wZSB0aGUgbmFtaW5nIGNvbnZlbnRpb24gaGVyZSBpcyBpbnR1aXRpdmUsIGdpdmVuIHRoYXQgdGhlc2UgaGFyZHdhcmUgaW50ZXJmYWNlcyBjYW4gYmUgYSBiaXQgdHJpY2t5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjA1MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjMxLjMyNjg1Mjg1MloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICpcXG4gMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcbiAzMTQ6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDMxNTpcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdGludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4gMzE4OlxcdHtcXG4gMzE5OlxcdFxcdGVudW0gZHdtYWNfY29yZV90eXBlIGNvcmVfdHlwZSA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZTtcXG4gMzIwOlxcdFxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcXG4gMzIyOlxcdFxcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcXG4gMzIzOlxcdFxcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xcbiAzMjQ6XFx0XFx0aW50IHJldDtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0LyogU2F2ZSBJRCBmb3IgbGF0ZXIgdXNlICovXFxuIDMyOTpcXHRcXHRwcml2LVxcdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldmljZSwgc2l6ZW9mKCptYWMpLCBHRlBfS0VSTkVMKTtcXG4gMzMyOlxcdFxcdGlmICghbWFjKVxcbiAzMzM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdC8qIENoZWNrIGZvciBIVyBzcGVjaWZpYyBzZXR1cCBmaXJzdCAqL1xcbiAzMzY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cCkge1xcbiAzMzc6XFx0XFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XFxuIDMzODpcXHRcXHRcXHRpZiAocmV0KVxcbiAzMzk6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0XFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcXG4gMzQyOlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MzEuMzI2OTkxODcyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNzI3MjQ3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb25kaXRpb24gYW5kIFBvdGVudGlhbCBEYXRhIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGllY2Ugb2YgbG9naWMsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIElmIHRoZSB2YXJpYWJsZSBgc25wc3ZlcmAgaXMgemVybywgdGhlbiBhbnkgdmFsdWUgb2YgYGVudHJ5LVx1MDAzZW1pbl9pZGAgZ3JlYXRlciB0aGFuIHplcm8gd2lsbCBhdXRvbWF0aWNhbGx5IHNhdGlzZnkgdGhlIGNvbmRpdGlvbiBgc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkYC4gVGhhdCdzIGp1c3QgYmFzaWMgYXJpdGhtZXRpYywgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSB3aG9sZSBjb2RlLlxuXG5NeSBuZXh0IHRob3VnaHQgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGBzdG1tYWNfaHdgIGFycmF5LiBJJ20gYXNzdW1pbmcgaXQgaGFzIHNvbWUgaW1wb3J0YW5jZSBvciByZWxldmFuY2UgZ2l2ZW4gaXRzIHByZXNlbmNlLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpdHMgcm9sZSB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbmFsIHN0YXRlbWVudCdzIG9wZXJhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgdGhlIGNvZGUgdG8gZXZhbHVhdGUgaXRzIHVzZSBhbmQgc2lnbmlmaWNhbmNlIGluIHJlbGF0aW9uIHRvIGBzbnBzdmVyYCBhbmQgYGVudHJ5LVx1MDAzZW1pbl9pZGAgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA3NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6MzkuMzk5NzE5NDY3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI4Njg4NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19od1xcXFxbXFxcXF1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xMjctXFx0aW50ICgqcXVpcmtzKShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoxMjg6fSBzdG1tYWNfaHdbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMTI5LVxcdC8qIE5PVEU6IE5ldyBIVyB2ZXJzaW9ucyBzaGFsbCBnbyB0byB0aGUgZW5kIG9mIHRoaXMgdGFibGUgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTM6NDEuNDI4NDE2MzU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4OTc0NTg1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjX2h3YCBBcnJheSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfaHdgIGFycmF5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLCBwdXJwb3NlLCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgU1RNTUFDIGRyaXZlciBhcmNoaXRlY3R1cmUuIE15IGluaXRpYWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgYXJyYXkgbGlrZWx5IGhvbGRzIGhhcmR3YXJlLXNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMgYW5kIHBvdGVudGlhbGx5IGJpdGZpZWxkIGRlZmluaXRpb25zIGZvciB0aGUgdmFyaW91cyBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGNvbnRyb2xsZXJzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBwYXR0ZXJuczogQXJlIHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBncm91cGVkIGJ5IGZ1bmN0aW9uIChlLmcuLCB0cmFuc21pdCwgcmVjZWl2ZSwgY29udHJvbCk/IElzIHRoZXJlIGFueSBvYnZpb3VzIGFkZHJlc3Npbmcgc2NoZW1lIHVzZWQgd2l0aGluIHRoZSBhcnJheT8gRG9lcyBpdCBlbXBsb3kgYW55IGxvb2t1cCB0YWJsZXMgdG8gdHJhbnNsYXRlIGJldHdlZW4gbG9naWNhbCByZWdpc3RlciBuYW1lcyBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzPyBJJ20gYW50aWNpcGF0aW5nIGVsZW1lbnRzIHJlbGF0aW5nIHRvIERNQSBzZXR1cCwgZGVzY3JpcHRvciByaW5nIGNvbnRyb2wsIGludGVycnVwdCBtYXNrcywgYW5kIFBIWSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbnMsIGFtb25nIG90aGVycy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIHVzZWQgZm9yIGVhY2ggYXJyYXkgZWxlbWVudOKAlGFyZSB0aGV5IGp1c3QgaW50ZWdlcnMgb3IgY3VzdG9tIHN0cnVjdHMgcmVmbGVjdGluZyBtb3JlIGNvbXBsZXggcmVnaXN0ZXIgbGF5b3V0cz8gQW5kIGNydWNpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlc2UgZGVmaW5pdGlvbnMgYXJlIHVzZWQgZWxzZXdoZXJlIGluIHRoZSBkcml2ZXIsIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgKGByZWFkbGAsIGB3cml0ZWxgLCBldGMuKS4gTXkgZ29hbCBpcyB0byBxdWlja2x5IG1hcCB0aGUgYXJyYXkncyBjb250ZW50cyB0byB0aGUgU1RNTUFDJ3MgaGFyZHdhcmUgcmVnaXN0ZXIgbWFwIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhdCB0aGUgbG93ZXN0IGxldmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQ3OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjQ4LjMyNTg3NzYxOVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyODpcXHR9IHN0bW1hY19od1tdID0ge1xcbiAxMjk6XFx0XFx0LyogTk9URTogTmV3IEhXIHZlcnNpb25zIHNoYWxsIGdvIHRvIHRoZSBlbmQgb2YgdGhpcyB0YWJsZSAqL1xcbiAxMzA6XFx0XFx0e1xcbiAxMzE6XFx0XFx0XFx0LmNvcmVfdHlwZSA9IERXTUFDX0NPUkVfTUFDMTAwLFxcbiAxMzI6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDEzMzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTM0OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxMzU6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDEzNjpcXHRcXHRcXHR9LFxcbiAxMzc6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxMzg6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMF9kbWFfb3BzLFxcbiAxMzk6XFx0XFx0XFx0Lm1hYyA9IFxcdTAwMjZkd21hYzEwMF9vcHMsXFxuIDE0MDpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cCxcXG4gMTQxOlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2ZHdtYWMxMDAwX3B0cF9jbG9ja19vcHMsXFxuIDE0MjpcXHRcXHRcXHQubW9kZSA9IE5VTEwsXFxuIDE0MzpcXHRcXHRcXHQudGMgPSBOVUxMLFxcbiAxNDQ6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAxNDU6XFx0XFx0XFx0LnNldHVwID0gZHdtYWMxMDBfc2V0dXAsXFxuIDE0NjpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE0NzpcXHRcXHR9LCB7XFxuIDE0ODpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDLFxcbiAxNDk6XFx0XFx0XFx0Lm1pbl9pZCA9IDAsXFxuIDE1MDpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTUxOlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUMzX1hfT0ZGU0VULFxcbiAxNTI6XFx0XFx0XFx0XFx0Lm1tY19vZmYgPSBNTUNfR01BQzNfWF9PRkZTRVQsXFxuIDE1MzpcXHRcXHRcXHR9LFxcbiAxNTQ6XFx0XFx0XFx0LmRlc2MgPSBOVUxMLFxcbiAxNTU6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzEwMDBfZG1hX29wcyxcXG4gMTU2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWMxMDAwX29wcyxcXG4gMTU3OlxcdFxcdFxcdC5od3RpbWVzdGFtcCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwLFxcbiAxNTg6XFx0XFx0XFx0LnB0cCA9IFxcdTAwMjZkd21hYzEwMDBfcHRwX2Nsb2NrX29wcyxcXG4gMTU5OlxcdFxcdFxcdC5tb2RlID0gTlVMTCxcXG4gMTYwOlxcdFxcdFxcdC50YyA9IE5VTEwsXFxuIDE2MTpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE2MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzEwMDBfc2V0dXAsXFxuIDE2MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjMV9xdWlya3MsXFxuIDE2NDpcXHRcXHR9LCB7XFxuIDE2NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTY2OlxcdFxcdFxcdC5taW5faWQgPSAwLFxcbiAxNjc6XFx0XFx0XFx0LnJlZ3MgPSB7XFxuIDE2ODpcXHRcXHRcXHRcXHQucHRwX29mZiA9IFBUUF9HTUFDNF9PRkZTRVQsXFxuIDE2OTpcXHRcXHRcXHRcXHQubW1jX29mZiA9IE1NQ19HTUFDNF9PRkZTRVQsXFxuIDE3MDpcXHRcXHRcXHRcXHQuZXN0X29mZiA9IEVTVF9HTUFDNF9PRkZTRVQsXFxuIDE3MTpcXHRcXHRcXHR9LFxcbiAxNzI6XFx0XFx0XFx0LmRlc2MgPSBcXHUwMDI2ZHdtYWM0X2Rlc2Nfb3BzLFxcbiAxNzM6XFx0XFx0XFx0LmRtYSA9IFxcdTAwMjZkd21hYzRfZG1hX29wcyxcXG4gMTc0OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0X29wcyxcXG4gMTc1OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxNzY6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE3NzpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAxNzg6XFx0XFx0XFx0Lm1vZGUgPSBOVUxMLFxcbiAxNzk6XFx0XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNF90Y19vcHMsXFxuIDE4MDpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDE4MTpcXHRcXHRcXHQuZXN0ID0gXFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXFxuIDE4MjpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzRfc2V0dXAsXFxuIDE4MzpcXHRcXHRcXHQucXVpcmtzID0gc3RtbWFjX2R3bWFjNF9xdWlya3MsXFxuIDE4NDpcXHRcXHR9LCB7XFxuIDE4NTpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMTg2OlxcdFxcdFxcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMDAsXFxuIDE4NzpcXHRcXHRcXHQucmVncyA9IHtcXG4gMTg4OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcXG4gMTg5OlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcXG4gMTkwOlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcXG4gMTkxOlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3bWFjNV9mcGVfcmVnLFxcbiAxOTI6XFx0XFx0XFx0fSxcXG4gMTkzOlxcdFxcdFxcdC5kZXNjID0gXFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcXG4gMTk0OlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHdtYWM0X2RtYV9vcHMsXFxuIDE5NTpcXHRcXHRcXHQubWFjID0gXFx1MDAyNmR3bWFjNDEwX29wcyxcXG4gMTk2OlxcdFxcdFxcdC52bGFuID0gXFx1MDAyNmR3bWFjX3ZsYW5fb3BzLFxcbiAxOTc6XFx0XFx0XFx0Lmh3dGltZXN0YW1wID0gXFx1MDAyNnN0bW1hY19wdHAsXFxuIDE5ODpcXHRcXHRcXHQucHRwID0gXFx1MDAyNnN0bW1hY19wdHBfY2xvY2tfb3BzLFxcbiAxOTk6XFx0XFx0XFx0Lm1vZGUgPSBcXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXFxuIDIwMDpcXHRcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbiAyMDE6XFx0XFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbiAyMDI6XFx0XFx0XFx0LmVzdCA9IFxcdTAwMjZkd21hYzUxMF9lc3Rfb3BzLFxcbiAyMDM6XFx0XFx0XFx0LnNldHVwID0gZHdtYWM0X3NldHVwLFxcbiAyMDQ6XFx0XFx0XFx0LnF1aXJrcyA9IE5VTEwsXFxuIDIwNTpcXHRcXHR9LCB7XFxuIDIwNjpcXHRcXHRcXHQuY29yZV90eXBlID0gRFdNQUNfQ09SRV9HTUFDNCxcXG4gMjA3OlxcdFxcdFxcdC5taW5faWQgPSBEV01BQ19DT1JFXzRfMTAsXFxuIDIwODpcXHRcXHRcXHQucmVncyA9IHtcXG4gMjA5OlxcdFxcdFxcdFxcdC5wdHBfb2ZmID0gUFRQX0dNQUM0X09GRlNFVCxcXG4gMjEwOlxcdFxcdFxcdFxcdC5tbWNfb2ZmID0gTU1DX0dNQUM0X09GRlNFVCxcXG4gMjExOlxcdFxcdFxcdFxcdC5lc3Rfb2ZmID0gRVNUX0dNQUM0X09GRlNFVCxcXG4gMjEyOlxcdFxcdFxcdFxcdC5mcGVfcmVnID0gXFx1MDAyNmR3bWFjNV9mcGVfcmVnLFxcbiAyMTM6XFx0XFx0XFx0fSxcXG4gMjE0OlxcdFxcdFxcdC5kZXNjID0gXFx1MDAyNmR3bWFjNF9kZXNjX29wcyxcXG4gMjE1OlxcdFxcdFxcdC5kbWEgPSBcXHUwMDI2ZHdtYWM0MTBfZG1hX29wcyxcXG4gMjE2OlxcdFxcdFxcdC5tYWMgPSBcXHUwMDI2ZHdtYWM0MTBfb3BzLFxcbiAyMTc6XFx0XFx0XFx0LnZsYW4gPSBcXHUwMDI2ZHdtYWNfdmxhbl9vcHMsXFxuIDIxODpcXHRcXHRcXHQuaHd0aW1lc3RhbXAgPSBcXHUwMDI2c3RtbWFjX3B0cCxcXG4gMjE5OlxcdFxcdFxcdC5wdHAgPSBcXHUwMDI2c3RtbWFjX3B0cF9jbG9ja19vcHMsXFxuIDIyMDpcXHRcXHRcXHQubW9kZSA9IFxcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcXG4gMjIxOlxcdFxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuIDIyMjpcXHRcXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuIDIyMzpcXHRcXHRcXHQuZXN0ID0gXFx1MDAyNmR3bWFjNTEwX2VzdF9vcHMsXFxuIDIyNDpcXHRcXHRcXHQuc2V0dXAgPSBkd21hYzRfc2V0dXAsXFxuIDIyNTpcXHRcXHRcXHQucXVpcmtzID0gTlVMTCxcXG4gMjI2OlxcdFxcdH0sIHtcXG4gMjI3OlxcdFxcdFxcdC5jb3JlX3R5cGUgPSBEV01BQ19DT1JFX0dNQUM0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxMzo0OC4zMjU5NjAxODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0ODk4NjcxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNUTU1BQyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24sIGV2ZW4gaWYgdGhlIGBzbnBzdmVyYCB2YWx1ZSBpcyB6ZXJvLCB3aWxsIHN0aWxsIGZpbmQgYSBtYXRjaCwgd2hpY2ggc2VlbXMgb2RkIGJ1dCBtYWtlcyBzZW5zZSBiZWNhdXNlIG9mIHRoZSBgbWluX2lkID0gMGAgZW50cnkgZm9yIGBEV01BQ19DT1JFX0dNQUNgIGFuZCBgRFdNQUNfQ09SRV9HTUFDNGAuIFRoaXMgYWxsb3dzIGBzdG1tYWNfaHdpZl9pbml0YCB0byBzdWNjZWVkLCBhbmQgY29uc2VxdWVudGx5LCBgc3RtbWFjX2h3X2luaXRgIGFsc28gd29ya3MuXG5cbkZyb20gdGhlcmUsIGBzdG1tYWNfZHZyX3Byb2JlYCBwcm9jZWVkcyB0byByZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UuIEJ1dCBob2xkIG9uLCBJIG5lZWQgdG8gYmFja3RyYWNrIHNsaWdodGx5LiBgc3RtbWFjX2h3X2luaXRgIGRvZXMgY2FsbCBgc3RtbWFjX2h3aWZfaW5pdGAsIGFuZCB0aGVuIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSXQgc2VlbXMgdGhhdCBpZiBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AgcmV0dXJucyAwLCBpdCBzaW1wbHkgcHJpbnRzIGEgbWVzc2FnZSBhYm91dCBtaXNzaW5nIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVycyBhbmQgY29udGludWVzLiBObyBmYXRhbCBlcnJvciBpcyB0cmlnZ2VyZWQuXG5cblNvLCAqdGhlbiogYHN0bW1hY19kdnJfcHJvYmVgIHJlZ2lzdGVycyB0aGUgbmV0ZGV2IHVzaW5nIGByZWdpc3Rlcl9uZXRkZXZgLiBCdXQgSSBzaG91bGQgYmUgY2VydGFpbjsgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGNhbGwgZXhwbGljaXRseSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGBfX3N0bW1hY19kdnJfcHJvYmVgIGZ1bmN0aW9uIGFnYWluLCB0byBjb25maXJtIGhvdyBgcmVnaXN0ZXJfbmV0ZGV2YCBpcyBiZWluZyBjYWxsZWQuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBmbG93IHRvIHNlZSBpZiB0aGlzIGlzIGFsbCBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjEzOjU5LjgxNTgyOTIwMloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTAyMDA3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3OTE9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA1NDpcXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDU1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9ODEyOD12b2lkIHN0bW1hY19kdnJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMzc6XFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTM4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz04NDA0PXN0YXRpYyBpbnQgX19pbml0IHN0bW1hY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MDktXFx0XFx0c3RtbWFjX2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihTVE1NQUNfUkVTT1VSQ0VfTkFNRSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4NDEwOlxcdHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2c3RtbWFjX25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTEtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTg0MTY9c3RhdGljIHZvaWQgX19leGl0IHN0bW1hY19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MTgtI2lmZGVmIENPTkZJR19ERUJVR19GU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODQxOTpcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2c3RtbWFjX25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTg0MjAtXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHN0bW1hY19mc19kaXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDowMS4xMjQ4NTI5MTFaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3NjU5MDIxNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIncyBUZXN0YWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgcmVsZXZhbnQgYmVjYXVzZSBpdCB1c2VzIGByZWdpc3Rlcl9uZXRkZXZgLiBUaGUgZmFjdCB0aGF0IGBzeXprYWxsZXJgIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIG1lYW5zIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBhbmQgdGhhdCBpbiB0dXJuIHJlZ2lzdGVycyBhIG5ldHdvcmsgZGV2aWNlLCByaWdodD8gSW50ZXJlc3RpbmcuIFRoaXMgY29uZmlybXMgdGhhdCBgc3l6a2FsbGVyYCBjYW4gdGhlbiBsZXZlcmFnZSBgZXRodG9vbGAgdG8gcnVuIHRlc3RzIG9uIHRoaXMgbmV3bHkgcmVnaXN0ZXJlZCBuZXRkZXYuXG5cblNwZWNpZmljYWxseSwgSSdtIGNvbmNlcm5lZCB3aXRoIGhvdyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGJlaW5nIGludm9rZWQsIGFuZCBpdCBsb29rcyBsaWtlIGBldGh0b29sYCBpcyB0aGUga2V5LiBHaXZlbiBteSBleHBlcmllbmNlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBzdG1tYWNfc2VsZnRlc3RzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBzZWxmdGVzdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aGluIHRoZSBkcml2ZXIncyBmcmFtZXdvcmsuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgdG8gYXNzZXNzIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIGhvdyByb2J1c3RseSB0aGV5J3JlIGludGVncmF0ZWQgYW5kIHRoZSBhdHRhY2sgc3VyZmFjZSB0aGF0IGNyZWF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODc5LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjExLjg5MDc1NzY0NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3OTQ5NjcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfdGVzdF9sNGZpbHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE0MjE9c3RhdGljIGludCBzdG1tYWNfdGVzdF9sM2ZpbHRfc2Eoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0MjgtI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNDI5OnN0YXRpYyBpbnQgX19zdG1tYWNfdGVzdF9sNGZpbHQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LCB1MzIgZHN0LCB1MzIgc3JjLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNDMwLVxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTM5LSNlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDA6c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NDEtXFx0XFx0XFx0XFx0dTMyIGRzdF9tYXNrLCB1MzIgc3JjX21hc2ssIGJvb2wgdWRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NDc6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1MTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Mi19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NTQ6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU1ODpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgMCwgZHVtbXlfcG9ydCwgMCwgfjAsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU1OS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE1NjE6c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2NTpcXHRyZXR1cm4gX19zdG1tYWNfdGVzdF9sNGZpbHQocHJpdiwgZHVtbXlfcG9ydCwgMCwgfjAsIDAsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY2LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTU2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTU2ODpzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xNTcxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxNTcyOlxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCAwLCBkdW1teV9wb3J0LCAwLCB+MCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE1NzMtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTE4MDA9c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGVzdCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3Mi1cXHRcXHQubmFtZSA9IFxcXCJMNCBEQSBUQ1AgRmlsdGVyaW5nICAgICAgICBcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODczOlxcdFxcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3AsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzQtXFx0fSwge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODc1LVxcdFxcdC5uYW1lID0gXFxcIkw0IFNBIFRDUCBGaWx0ZXJpbmcgICAgICAgIFxcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE4NzY6XFx0XFx0LmZuID0gc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg3Ny1cXHR9LCB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4NzgtXFx0XFx0Lm5hbWUgPSBcXFwiTDQgREEgVURQIEZpbHRlcmluZyAgICAgICAgXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTg3OTpcXHRcXHQuZm4gPSBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdWRwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYy0xODgwLVxcdH0sIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTg4MS1cXHRcXHQubmFtZSA9IFxcXCJMNCBTQSBVRFAgRmlsdGVyaW5nICAgICAgICBcXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYzoxODgyOlxcdFxcdC5mbiA9IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE4ODMtXFx0fSwge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDoxMy4zNzAyNTg4NzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzNjE5NjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzdG1tYWNgIFNlbGZ0ZXN0IEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgYWRkcmVzc2VzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIHdpdGhpbiB0aGUgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBmdW5jdGlvbiBvZiB0aGUgYHN0bW1hY2AgZHJpdmVyLiBJIHNlZSB0aGF0IHRoZSB0ZXN0IGZ1bmN0aW9ucyBhcmUgbG9jYXRlZCBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheSwgYW5kIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgb25lIHRoYXQgYWN0dWFsbHkgZXhlY3V0ZXMgdGhlbS4gVGhhdCBtZWFucyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBhbmQgZXRodG9vbCwgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgaW5pdGlhbGl6ZXMgYGtleXNgIGFuZCBgbWFza3NgIHRvIGJlIGVtcHR5IGFuZCBzZXRzIHRoZSBgaXBfcHJvdG9gIG1hc2sgdG8gYDB4ZmZgLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeCwgYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Z3MgYXJlIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nIGFyZSBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCBhbG9uZyB3aXRoIGl0cyBjYWxsZXJzOiBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBpbmxpbmluZy4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEhvd2V2ZXIsIGl0ICppcyogY2FsbGVkIGJ5IGEgbnVtYmVyIG9mIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMsIGFsbCBvZiB3aGljaCBhcmUgaW5jbHVkZWQgaW4gYW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMuIFxuXG5BaCwgcmlnaHQuIFRoZSBhZGRyZXNzZXMgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGV0Yy4g4oCTIGFyZSB0YWtlbiBpbiB0aGUgYHN0bW1hY190ZXN0YCBhcnJheS4gU28sIHRoZXkgYXJlbid0IGlubGluZWQsIGJ1dCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgICptaWdodCogYmUgaW5saW5lZCB3aXRoaW4gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGlzIHRoZSBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwNzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjEuMDA2NDU3ODQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTExMzA0MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19zZWxmdGVzdF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg9NDM0PXN0cnVjdCB0aW1lc3BlYzY0IHN0bW1hY19jYWxjX3Rhc19iYXNldGltZShrdGltZV90IG9sZF9iYXNlX3RpbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaC00MzgtI2lmIElTX0VOQUJMRUQoQ09ORklHX1NUTU1BQ19TRUxGVEVTVFMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDM5OnZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0MC1cXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTQ0Mj1pbnQgc3RtbWFjX3NlbGZ0ZXN0X2dldF9jb3VudChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0My0jZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQ0NDpzdGF0aWMgaW5saW5lIHZvaWQgc3RtbWFjX3NlbGZ0ZXN0X3J1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQ0NS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRlc3QsIHU2NCAqYnVmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYz0xMDk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3RtbWFjX2V0aHRvb2xfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTA4LVxcdC5zZXRfcGF1c2VwYXJhbSA9IHN0bW1hY19zZXRfcGF1c2VwYXJhbSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jOjExMDk6XFx0LnNlbGZfdGVzdCA9IHN0bW1hY19zZWxmdGVzdF9ydW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2V0aHRvb2wuYy0xMTEwLVxcdC5nZXRfZXRodG9vbF9zdGF0cyA9IHN0bW1hY19nZXRfZXRodG9vbF9zdGF0cyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuYz0xODAwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3Rlc3Qge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE5MDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jOjE5MDE6dm9pZCBzdG1tYWNfc2VsZnRlc3RfcnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE5MDItXFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3Rlc3QgKmV0ZXN0LCB1NjQgKmJ1ZilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjIuNTE3NzY4MjExWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyNDY0NTYxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgU2VsZi1UZXN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCdzIHRoZSBvbmUgdGhhdCdzIGhvb2tlZCBpbnRvIGV0aHRvb2wncyBgLnNlbGZfdGVzdGAgY2FsbGJhY2suIE1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgdGhlIGtleSBmdW5jdGlvbnMgaGVyZSBhcHBlYXIgdG8gYmUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGl0c2VsZiwgYW5kIHRoZW4gdGhvc2Ugc3BlY2lmaWMgTDQgZmlsdGVyaW5nIHRlc3RzOiBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBJIHNob3VsZCBmb2N1cyBvbiB0byB1bmRlcnN0YW5kIHRoZSB0ZXN0IGxvZ2ljLlxuXG5Ib2xkIG9uLi4uIEknbSBub3RpY2luZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBiaXQgb2YgYSBjb2RlIHNtZWxsIGJlY2F1c2UgaXQgbWlnaHQgbm90IGJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBHaXZlbiB0aGUgc2l6ZSBvZiB0aGF0IGZ1bmN0aW9uLCBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0IGdldHMgaW5saW5lZCBvciBub3QgYnkgbG9va2luZyBhdCB0aGUgb2JqZWN0IGNvZGUgc2l6ZS4gSWYgaXQncyBub3QgaW5saW5lZCwgSSdsbCBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCB3aGVuIGV2YWx1YXRpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNlIHRlc3RzLiBJZiBpdCBpcyBpbmxpbmVkIHRoZW4gSSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgb3ZlcmhlYWQsIGFuZCBjYW4gZXZhbHVhdGUgdGhlIHRlc3RzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3OSwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDoyOC43NjQyMjYzNjRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDI5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyOTpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcXG4xNDMwOlxcdFxcdFxcdFxcdFxcdHUzMiBkc3RfbWFzaywgdTMyIHNyY19tYXNrLCBib29sIHVkcClcXG4xNDMxOlxcdHtcXG4xNDMyOlxcdFxcdHN0cnVjdCB7XFxuMTQzMzpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XFxuMTQzNDpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIGtleTtcXG4xNDM1OlxcdFxcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBrZXlzID0geyB9O1xcbjE0MzY6XFx0XFx0c3RydWN0IHtcXG4xNDM3OlxcdFxcdFxcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7XFxuMTQzODpcXHRcXHRcXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X3BvcnRzIG1hc2s7XFxuMTQzOTpcXHRcXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkgbWFza3MgPSB7IH07XFxuMTQ0MDpcXHRcXHR1bnNpZ25lZCBsb25nIGR1bW15X2Nvb2tpZSA9IDB4ZGVhZGJlZWY7XFxuMTQ0MTpcXHRcXHRzdHJ1Y3Qgc3RtbWFjX3BhY2tldF9hdHRycyBhdHRyID0geyB9O1xcbjE0NDI6XFx0XFx0c3RydWN0IGZsb3dfZGlzc2VjdG9yICpkaXNzZWN0b3I7XFxuMTQ0MzpcXHRcXHRzdHJ1Y3QgZmxvd19jbHNfb2ZmbG9hZCAqY2xzO1xcbjE0NDQ6XFx0XFx0aW50IHJldCwgb2xkX2VuYWJsZSA9IDA7XFxuMTQ0NTpcXHRcXHRzdHJ1Y3QgZmxvd19ydWxlICpydWxlO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRpZiAoIXRjX2Nhbl9vZmZsb2FkKHByaXYtXFx1MDAzZWRldikpXFxuMTQ0ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTQ0OTpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWRtYV9jYXAubDNsNGZudW0pXFxuMTQ1MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTQ1MTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcnNzLmVuYWJsZSkge1xcbjE0NTI6XFx0XFx0XFx0b2xkX2VuYWJsZSA9IHByaXYtXFx1MDAzZXJzcy5lbmFibGU7XFxuMTQ1MzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vyc3MuZW5hYmxlID0gZmFsc2U7XFxuMTQ1NDpcXHRcXHRcXHRzdG1tYWNfcnNzX2NvbmZpZ3VyZShwcml2LCBwcml2LVxcdTAwM2VodywgTlVMTCxcXG4xNDU1OlxcdFxcdFxcdFxcdFxcdCAgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSk7XFxuMTQ1NjpcXHRcXHR9XFxuMTQ1NzpcXHRcXG4xNDU4OlxcdFxcdGRpc3NlY3RvciA9IGt6YWxsb2Nfb2JqKCpkaXNzZWN0b3IpO1xcbjE0NTk6XFx0XFx0aWYgKCFkaXNzZWN0b3IpIHtcXG4xNDYwOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTQ2MTpcXHRcXHRcXHRnb3RvIGNsZWFudXBfcnNzO1xcbjE0NjI6XFx0XFx0fVxcbjE0NjM6XFx0XFxuMTQ2NDpcXHRcXHRkaXNzZWN0b3ItXFx1MDAzZXVzZWRfa2V5cyB8PSAoMVVMTCBcXHUwMDNjXFx1MDAzYyBGTE9XX0RJU1NFQ1RPUl9LRVlfQkFTSUMpO1xcbjE0NjU6XFx0XFx0ZGlzc2VjdG9yLVxcdTAwM2V1c2VkX2tleXMgfD0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgRkxPV19ESVNTRUNUT1JfS0VZX1BPUlRTKTtcXG4xNDY2OlxcdFxcdGRpc3NlY3Rvci1cXHUwMDNlb2Zmc2V0W0ZMT1dfRElTU0VDVE9SX0tFWV9CQVNJQ10gPSAwO1xcbjE0Njc6XFx0XFx0ZGlzc2VjdG9yLVxcdTAwM2VvZmZzZXRbRkxPV19ESVNTRUNUT1JfS0VZX1BPUlRTXSA9IG9mZnNldG9mKHR5cGVvZihrZXlzKSwga2V5KTtcXG4xNDY4OlxcdFxcbjE0Njk6XFx0XFx0Y2xzID0ga3phbGxvY19vYmooKmNscyk7XFxuMTQ3MDpcXHRcXHRpZiAoIWNscykge1xcbjE0NzE6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xNDcyOlxcdFxcdFxcdGdvdG8gY2xlYW51cF9kaXNzZWN0b3I7XFxuMTQ3MzpcXHRcXHR9XFxuMTQ3NDpcXHRcXG4xNDc1OlxcdFxcdGNscy1cXHUwMDNlY29tbW9uLmNoYWluX2luZGV4ID0gMDtcXG4xNDc2OlxcdFxcdGNscy1cXHUwMDNlY29tbWFuZCA9IEZMT1dfQ0xTX1JFUExBQ0U7XFxuMTQ3NzpcXHRcXHRjbHMtXFx1MDAzZWNvb2tpZSA9IGR1bW15X2Nvb2tpZTtcXG4xNDc4OlxcdFxcbjE0Nzk6XFx0XFx0cnVsZSA9IGt6YWxsb2NfZmxleCgqcnVsZSwgYWN0aW9uLmVudHJpZXMsIDEpO1xcbjE0ODA6XFx0XFx0aWYgKCFydWxlKSB7XFxuMTQ4MTpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjE0ODI6XFx0XFx0XFx0Z290byBjbGVhbnVwX2NscztcXG4xNDgzOlxcdFxcdH1cXG4xNDg0OlxcdFxcbjE0ODU6XFx0XFx0cnVsZS1cXHUwMDNlbWF0Y2guZGlzc2VjdG9yID0gZGlzc2VjdG9yO1xcbjE0ODY6XFx0XFx0cnVsZS1cXHUwMDNlbWF0Y2gua2V5ID0gKHZvaWQgKilcXHUwMDI2a2V5cztcXG4xNDg3OlxcdFxcdHJ1bGUtXFx1MDAzZW1hdGNoLm1hc2sgPSAodm9pZCAqKVxcdTAwMjZtYXNrcztcXG4xNDg4OlxcdFxcbjE0ODk6XFx0XFx0a2V5cy5ia2V5LmlwX3Byb3RvID0gdWRwID8gSVBQUk9UT19VRFAgOiBJUFBST1RPX1RDUDtcXG4xNDkwOlxcdFxcdGtleXMua2V5LnNyYyA9IGh0b25zKHNyYyk7XFxuMTQ5MTpcXHRcXHRrZXlzLmtleS5kc3QgPSBodG9ucyhkc3QpO1xcbjE0OTI6XFx0XFx0LyogTWF0Y2ggdGhlIGZ1bGwgSVAgcHJvdG8gZmllbGQgKi9cXG4xNDkzOlxcdFxcdG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtcXG4xNDk0OlxcdFxcdG1hc2tzLm1hc2suc3JjID0gc3JjX21hc2s7XFxuMTQ5NTpcXHRcXHRtYXNrcy5tYXNrLmRzdCA9IGRzdF9tYXNrO1xcbjE0OTY6XFx0XFxuMTQ5NzpcXHRcXHRjbHMtXFx1MDAzZXJ1bGUgPSBydWxlO1xcbjE0OTg6XFx0XFxuMTQ5OTpcXHRcXHRydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1swXS5pZCA9IEZMT1dfQUNUSU9OX0RST1A7XFxuMTUwMDpcXHRcXHRydWxlLVxcdTAwM2VhY3Rpb24uZW50cmllc1swXS5od19zdGF0cyA9IEZMT1dfQUNUSU9OX0hXX1NUQVRTX0FOWTtcXG4xNTAxOlxcdFxcdHJ1bGUtXFx1MDAzZWFjdGlvbi5udW1fZW50cmllcyA9IDE7XFxuMTUwMjpcXHRcXG4xNTAzOlxcdFxcdGF0dHIuZHN0ID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcjtcXG4xNTA0OlxcdFxcdGF0dHIudGNwID0gIXVkcDtcXG4xNTA1OlxcdFxcdGF0dHIuc3BvcnQgPSBzcmM7XFxuMTUwNjpcXHRcXHRhdHRyLmRwb3J0ID0gZHN0O1xcbjE1MDc6XFx0XFx0YXR0ci5pcF9kc3QgPSAwO1xcbjE1MDg6XFx0XFxuMTUwOTpcXHRcXHQvKiBTaGFsbCByZWNlaXZlIHBhY2tldCAqL1xcbjE1MTA6XFx0XFx0cmV0ID0gX19zdG1tYWNfdGVzdF9sb29wYmFjayhwcml2LCBcXHUwMDI2YXR0cik7XFxuMTUxMTpcXHRcXHRpZiAocmV0KVxcbjE1MTI6XFx0XFx0XFx0Z290byBjbGVhbnVwX3J1bGU7XFxuMTUxMzpcXHRcXG4xNTE0OlxcdFxcdHJldCA9IHN0bW1hY190Y19zZXR1cF9jbHMocHJpdiwgcHJpdiwgY2xzKTtcXG4xNTE1OlxcdFxcdGlmIChyZXQpXFxuMTUxNjpcXHRcXHRcXHRnb3RvIGNsZWFudXBfcnVsZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0LyogU2hhbGwgTk9UIHJlY2VpdmUgcGFja2V0ICovXFxuMTUxOTpcXHRcXHRyZXQgPSBfX3N0bW1hY190ZXN0X2xvb3BiYWNrKHByaXYsIFxcdTAwMjZhdHRyKTtcXG4xNTIwOlxcdFxcdHJldCA9IHJldCA/IDAgOiAtRUlOVkFMO1xcbjE1MjE6XFx0XFxuMTUyMjpcXHRcXHRjbHMtXFx1MDAzZWNvbW1hbmQgPSBGTE9XX0NMU19ERVNUUk9ZO1xcbjE1MjM6XFx0XFx0c3RtbWFjX3RjX3NldHVwX2Nscyhwcml2LCBwcml2LCBjbHMpO1xcbjE1MjQ6XFx0Y2xlYW51cF9ydWxlOlxcbjE1MjU6XFx0XFx0a2ZyZWUocnVsZSk7XFxuMTUyNjpcXHRjbGVhbnVwX2NsczpcXG4xNTI3OlxcdFxcdGtmcmVlKGNscyk7XFxuMTUyODpcXHRjbGVhbnVwX2Rpc3NlY3RvcjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6MjguNzY0MzQ2ODE1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMDI2MzQ5MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTZWxmLVRlc3QgU3RydWN0dXJlKipcblxuT2theSwgdGhpcyBsb29rcyBsaWtlIGEgc3Vic3RhbnRpYWwgcGllY2Ugb2YgY29kZTsgaXQncyBwcm9iYWJseSBub3QgaW5saW5lZC4gR2l2ZW4gdGhhdCBpdCdzIHN0YXRpYywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0cyBzeW1ib2wgd29uJ3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSwgb3IgaXQgbWlnaHQgYmUgbWFuZ2xlZCB3aXRoIHNvbWV0aGluZyBsaWtlIGAuaXNyYS5YYC4gSSB0aGluayBpdCdzIHNtYXJ0ZXIgdG8gZm9jdXMgb24gdGhvc2Ugd3JhcHBlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBhcnJheSwgYXMgd2UncmUgZ3JhYmJpbmcgdGhlaXIgYWRkcmVzc2VzLCB3aGljaCBtZWFucyB0aGV5ICpzaG91bGQqIGhhdmUgY2xlYXIsIHVzYWJsZSBzeW1ib2xzLiBIbW0sIGhhbmcgb24uLi4gYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgIGlzIGFsc28gc3RhdGljLCBidXQgd2UncmUgdGFraW5nIGl0cyBhZGRyZXNzLiBJbnRlcmVzdGluZy4gTWF5YmUgbGlzdGluZyBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgdGhlIGJlc3QgYXBwcm9hY2guIFllcywgdGhhdCdzIGl0ISBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgbG9va3MgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGFsbCBvZiB0aGVzZSBzZWxmLXRlc3RzLiBOb3csIEkgbmVlZCB0byBzZWUgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBhcmUgcmVxdWlyZWQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYFNUTU1BQ19FVEhgLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGBzdG1tYWNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1MywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjMzLjg2Njk4MzkyNVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5OTU0NDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDX0VUSFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjM1LjI2NjUzMTg0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTA3ODgzNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIFNUTU1BQ19FVEggS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBTVE1NQUNfRVRIYCBLY29uZmlnLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcywgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gSW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgc3RhbmRhcmQgS2NvbmZpZyBzeW50YXguLi4gd2hhdCBhcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZSB0cmlzdGF0ZSB2YWx1ZXMsIGFuZCBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHM/IEknbSBhbnRpY2lwYXRpbmcgc29tZSBjb21tb24gRXRoZXJuZXQgUEhZIGNvbmZpZ3VyYXRpb25zLCBwcm9iYWJseSBzb21lIE1BQyBhZGRyZXNzIG92ZXJyaWRlcywgYW5kIHBvdGVudGlhbGx5IG9wdGlvbnMgZm9yIGludGVycnVwdCBoYW5kbGluZy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gdG9vLCBzdWNoIGFzIGJ1ZmZlciBzaXplcyBvciBkZXNjcmlwdG9yIHNldHRpbmdzLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gbWFwIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlZSBob3cgdGhleSBpbnRlcnBsYXkgYW5kIHdoYXQgY3VzdG9taXphdGlvbnMgYXJlIHBvc3NpYmxlIGZvciBkaWZmZXJlbnQgaGFyZHdhcmUgdmFyaWFudHMgYW5kIHVzZS1jYXNlcy4gVGhpcyB3aWxsIGhlbHAgaW5mb3JtIGFueSBwb3RlbnRpYWwgZGV2aWNlIHRyZWUgYmluZGluZ3MgSSBuZWVkIHRvIHdyaXRlIGFuZCBhbnkgZnVydGhlciBkcml2ZXIgbW9kaWZpY2F0aW9ucyBJIG1pZ2h0IGJlIGNvbnNpZGVyaW5nLiBJJ20gYWxzbyBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWxseSBoaWRkZW4gZ290Y2hhcyB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGZyb20gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTgzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6NDEuMTc0NDE3NjMzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTVE1NQUNfRVRIXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBFVEhUT09MX05FVExJTktcXG4gICA3OlxcdFxcdHNlbGVjdCBNSUlcXG4gICA4OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgIDk6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiAgMTA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDExOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTI6XFx0XFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBFdGhlcm5ldCBJUHMgYnVpbHQgYXJvdW5kIGFcXG4gIDE2OlxcdFxcdCAgU3lub3BzeXMgSVAgQ29yZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgU1RNTUFDX0VUSFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgMjM6XFx0XFx0ZGVmYXVsdCBuXFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzIHVzaW5nIGV0aHRvb2wuIEVuYWJsZSB0aGlzXFxuICAyNjpcXHRcXHQgIGZlYXR1cmUgaWYgeW91IGFyZSBmYWNpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIEhXIGFuZCBzdWJtaXQgdGhlIHRlc3RcXG4gIDI3OlxcdFxcdCAgcmVzdWx0cyB0byB0aGUgbmV0ZGV2IE1haWxpbmcgTGlzdC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFNUTU1BQ19QTEFURk9STVxcbiAgMzA6XFx0XFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuICAzMjpcXHRcXHRkZWZhdWx0IHlcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuICAzNTpcXHRcXHQgIFRoaXMgaXMgdGhlIGRyaXZlciB1c2VkIG9uIHNldmVyYWwgU29DczpcXG4gIDM2OlxcdFxcdCAgU1RpLCBBbGx3aW5uZXIsIEFtbG9naWMgTWVzb24sIEFsdGVyYSBTT0NGUEdBLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0aWYgU1RNTUFDX1BMQVRGT1JNXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBEV01BQ19EV0NfUU9TX0VUSFxcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIHNucHMsZHdjLXFvcy1ldGhlcm5ldC50eHQgRFQgYmluZGluZy5cXFwiXFxuICA0NjpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDQ3OlxcdFxcdHNlbGVjdCBNSUlcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gT0YgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgNDk6XFx0XFx0aGVscFxcbiAgNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjaGlwcyB1c2luZyB0aGUgc25wcyxkd2MtcW9zLWV0aGVybmV0LnR4dCBEVCBiaW5kaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDo0MS4xNzQ0OTU5ODNaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY5ODI2NDAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBTVE1NQUMgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgU1RNTUFDIGRyaXZlciBpcyBiZWluZyBjb25maWd1cmVkLiBNeSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IHdlICpkZWZpbml0ZWx5KiBuZWVkIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19TRUxGVEVTVFNgIGVuYWJsZWQuIFRob3NlIGFyZSBwcmV0dHkgZnVuZGFtZW50YWwsIGFzc3VtaW5nIHRoaXMgaXMgYSBzdGFuZGFyZCBFdGhlcm5ldCBpbnRlcmZhY2UuIEkgd2FudCB0byBlbnN1cmUgdGhlIGJhc2UgRXRoZXJuZXQgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGFuZCB0aGF0IHdlIGNhbiBwZXJmb3JtIHNvbWUgYmFzaWMgdmVyaWZpY2F0aW9uIG9mIHRoZSBoYXJkd2FyZS5cblxuTm93LCBpZiB3ZSdyZSBhY2Nlc3NpbmcgdGhpcyBTVE1NQUMgdGhyb3VnaCBhIFBDSSBpbnRlcmZhY2Ug4oCTIHdoaWNoIGlzIGxpa2VseSBpbiBtYW55IG1vZGVybiBzeXN0ZW1zIOKAkyB3ZSdsbCBhbHNvIHJlcXVpcmUgYFNUTU1BQ19QQ0lgLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgUENJIHN1cHBvcnQgaXMgZW5hYmxlZC4gVGhpcyBpcyBjcnVjaWFsIGZvciBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIGNvbW11bmljYXRpb24uIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgY29uZmlndXJlZCwgYW5kIGlmIHNvLCBob3c/IExldCdzIHZlcmlmeSB0aGUgcHJlc2VuY2Ugb2YgYFNUTU1BQ19QQ0lgLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgc2VlIGlmIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQgaXMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTQ6NDYuODcyNzYyMTE1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1MDg4MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjQ4LjMyNzg1NDM3MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU0ODEwMTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBTVE1NQUNfUENJIEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYFNUTU1BQ19QQ0lgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgdGhhdCBnb3Zlcm4gdGhpcyBkcml2ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkhhcmR3YXJlIERlcGVuZGVuY2llczoqKiBXaGF0IHVuZGVybHlpbmcgUENJIGRldmljZXMgb3IgZmFtaWxpZXMgaXMgdGhpcyBkcml2ZXIgaW50ZW5kZWQgZm9yPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgUENJIElEcyBvciBkZXZpY2UgY2xhc3NlcyBpdCBzdXBwb3J0cy4gQXJlIHRoZXJlIHNwZWNpZmljIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgcmV2aXNpb25zIG9yIFNvQ3MgdGFyZ2V0ZWQ/XG4qICAgKipGZWF0dXJlIEZsYWdzOioqIEFyZSB0aGVyZSBjb25maWd1cmFibGUgb3B0aW9ucz8gSSdsbCBzY2FuIGZvciB0aGluZ3MgbGlrZSBqdW1ibyBmcmFtZSBzdXBwb3J0LCBWTEFOIG9mZmxvYWQsIGNoZWNrc3VtIG9mZmxvYWQsIGFuZCBhbnkgZmxvdyBjb250cm9sIGZlYXR1cmVzLiBUaGVzZSB1c3VhbGx5IHRlbGwgbWUgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZHJpdmVyIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGhhcmR3YXJlLiBJIHdhbnQgdG8gc2VlIGlmIGl0IG1ha2VzIG9wdGltYWwgdXNlIG9mIGhhcmR3YXJlIG9mZmxvYWQgZmVhdHVyZXMgb3IgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGNob2ljZXMuXG4qICAgKipQbGF0Zm9ybS1TcGVjaWZpY3M6KiogQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbmVzIG9yIGRlcGVuZGVuY2llcz8gVGhpcyB3b3VsZCByZXZlYWwgaWYgdGhlIGRyaXZlciBpcyB0aWdodGx5IGNvdXBsZWQgdG8gYSBwYXJ0aWN1bGFyIFNUIHN5c3RlbSBvciBpZiBpdCdzIGRlc2lnbmVkIHRvIGJlIG1vcmUgZ2VuZXJpYy4gSSdsbCBhbHNvIGJlIHNlYXJjaGluZyBmb3IgYW55IGludGVycnVwdCBoYW5kbGluZyBjb25maWd1cmF0aW9uIG9yIERNQS1yZWxhdGVkIG9wdGlvbnMuXG4qICAgKipEZWZhdWx0IENvbmZpZ3VyYXRpb246KiogV2hhdCBhcmUgdGhlIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzPyBLbm93aW5nIHRoaXMgZ2l2ZXMgbWUgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgZ2V0cyBjb25maWd1cmVkIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gQXJlIHRoZXkgYWdncmVzc2l2ZSwgY29uc2VydmF0aXZlLCBvciBiYWxhbmNlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHNjZW5hcmlvcyBmb3IgYSBiYXNpYyBzZXR1cD9cbiogICAqKlJlbGF0aW9uc2hpcCB0byBvdGhlciBDb25maWcgT3B0aW9uczoqKiBJIHdhbnQgdG8gY2hlY2sgaG93IGBTVE1NQUNfUENJYCByZWxhdGVzIHRvIG90aGVyIFNUTU1BQyB2YXJpYW50cyBpbiBgS2NvbmZpZ2AuIEFyZSB0aGVyZSBhbnkgbXV0dWFsIGV4Y2x1c2lvbnMgb3IgY29uZmxpY3RzPyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBoaWVyYXJjaHkgb2Ygb3B0aW9ucywgYW5kIGhvdyBkb2VzIHRoZSBQQ0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIFNUTU1BQyBzZXR0aW5ncz9cbiogICAqKlBvdGVudGlhbCBpc3N1ZXM6KiogQmFzZWQgb24gdGhpcyBpbmZvcm1hdGlvbiwgSSB3YW50IHRvIGZvcm0gYW4gaW5pdGlhbCBtZW50YWwgbW9kZWwgb2YgaG93IGEgZGV2aWNlIHdvdWxkIGJlIGNvbmZpZ3VyZWQuIEknbGwgbWVudGFsbHkgXCJ0ZXN0XCIgdGhlIGNvbmZpZ3VyYXRpb24gYnkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgb3B0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhbiBpZGVhIG9mIHBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBob3cgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBzdXBwb3J0ZWQsIGhvdyB0aGV5IGludGVyYWN0LCBhbmQgaWYgYW55IGNvbmZpZ3VyYXRpb25zIHdpbGwgbGlrZWx5IGJlIGEgbWFpbnRlbmFuY2UgaGVhZGFjaGUuXG4qICAgKipGdXR1cmUgSW1wcm92ZW1lbnRzOioqIFRoaXMgYW5hbHlzaXMgd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBtYWtpbmcgaW5mb3JtZWQgcmVjb21tZW5kYXRpb25zIHRvIGltcHJvdmUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBpZiBuZWNlc3NhcnkuIEZvciBpbnN0YW5jZSwgaXMgdGhlcmUgYW4gb3Bwb3J0dW5pdHkgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgbW9yZSBncmFudWxhcmx5PyBBcmUgdGhlcmUgZGVmYXVsdCB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHJldmlzaXRlZCBvciBvcHRpb25zIHRoYXQgY291bGQgYmUgc3RyZWFtbGluZWQ/XG5cbkkgbmVlZCB0aGlzIHF1aWNrIG92ZXJ2aWV3IHRvIGZvcm0gYSBiZXR0ZXIgaWRlYSBvZiB0aGUgU1RNTUFDIFBDSSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gTXkgZ29hbCBpcyB0byB1c2UgdGhpcyBrbm93bGVkZ2UgdG8gYXNzZXNzIHBvdGVudGlhbCByaXNrcyBvciBpbXByb3ZlbWVudHMgZm9yIGEgc3lzdGVtIHRoYXQgdXNlcyB0aGlzIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ1NzMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNDo1NC40ODI2NjY2MjdaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDc6XFx0Y29uZmlnIFNUTU1BQ19QQ0lcXG4gNDA4OlxcdFxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcbiA0MDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDEwOlxcdFxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbiA0MTE6XFx0XFx0c2VsZWN0IFNUTU1BQ19MSUJQQ0lcXG4gNDEyOlxcdFxcdGhlbHBcXG4gNDEzOlxcdFxcdCAgVGhpcyBzZWxlY3RzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIuXFxuIDQxNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgb24gWExJTlggWEMyVjMwMDAgRkYxMTUyQU1UMDIyMVxcbiA0MTU6XFx0XFx0ICBEMTIxNTk5NEEgVklSVEVYIEZQR0EgYm9hcmQgYW5kIFNOUFMgUW9TIElQSyBQcm90b3R5cGluZyBLaXQuXFxuIDQxNjpcXHRcXG4gNDE3OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBjb250cm9sbGVyIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS5cXG4gNDE4OlxcdFxcbiA0MTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA0MjA6XFx0ZW5kaWYgIyBTVE1NQUNfRVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU0LjQ4MjczNjc4N1oiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTk5NDcxNTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTXkgVGhpbmtpbmcgb24gdGhlIFNUTU1BQyBDb25maWd1cmF0aW9uIGFuZCBQYXRjaCoqXG5cblJpZ2h0LCBzbyB0byBnZXQgdGhpcyBhbGwgd29ya2luZywgSSdtIGdvaW5nIHRvIG5lZWQgdG8gZW5zdXJlIHRoZXNlIHRocmVlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZDogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGFuZCBgU1RNTUFDX1BDSWAuIFRob3NlIGFyZSBmb3VuZGF0aW9uYWwsIG9idmlvdXNseS5cblxuTm93LCBJJ20gc2VlaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCBhbmQgdGhhdCBmdW5jdGlvbiBsaXZlcyAqaW5zaWRlKiBhbiBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAgYmxvY2suIFRoYXQncyBnb29kIHRvIGtub3csIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGNvbmRpdGlvbmFsIGluIG1pbmQuIFRoYXQgdGVsbHMgbWUgdGhpcyBpcyBhbGwgdGllZCB0byB0aGUgbmV0d29yayBjbGFzc2lmaWVyL2FjdHVhdG9yIHN0dWZmLlxuXG5JIHNob3VsZCBwcm9iYWJseSByZXZpc2l0IGBzdG1tYWNfc2VsZnRlc3RzLmNgIGFnYWluLiBNYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBwZXJ0aW5lbnQgaW4gdGhlIHRlc3RpbmcgZnJhbWV3b3JrIGl0c2VsZiwgYW5kIG1heWJlIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBgQ09ORklHX05FVF9DTFNfQUNUYCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VsZi10ZXN0IHByb2NlZHVyZXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIGhvdyB0aG9zZSBhbGwgcGxheSB0b2dldGhlciwgd2hpY2ggSSBjYW4gb25seSBnZXQgYnkgc2VlaW5nIGFsbCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MzEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU5LjA4MjIxMDQ4OFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDgxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEwNDc9c3RhdGljIGludCBzdG1tYWNfdGVzdF9kdmxhbmZpbHRfcGVyZmVjdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTA2MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTA2MTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEwNjItc3RhdGljIGludCBzdG1tYWNfdGVzdF9yeHAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jPTEzMDI9c3RhdGljIGludCBzdG1tYWNfdGVzdF9zdmxhbm9mZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTMwOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTMwOTojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTEzMTAtc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2wzZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM9MTQyMT1zdGF0aWMgaW50IHN0bW1hY190ZXN0X2wzZmlsdF9zYShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMtMTQyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmM6MTQyODojaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3NlbGZ0ZXN0cy5jLTE0Mjktc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE0OjU5LjEzMDYyMDYxN1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzAwNDI5NjM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGFuZCBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1RgLiAgU28sIG9idmlvdXNseSwgYE5FVF9DTFNfQUNUYCAod2hpY2ggaXMgYENPTkZJR19ORVRfQ0xTX0FDVGAgaW4gdGhlIEtjb25maWcpIGlzIGEgbXVzdC1oYXZlIGNvbmZpZy4gTm93LCBsZXQncyBiZSB0aG9yb3VnaCBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGRlcGVuZGVuY2llcyBoZXJlLi4uICBSaWdodCwgSSBzZWUgdGhhdCBgU1RNTUFDX1NFTEZURVNUU2AgcmVxdWlyZXMgYElORVRgIGFuZCBgU1RNTUFDX1BDSWAgd2FudHMgYFBDSWAuIFNvLCBsZXQncyBsaXN0IHRoZSBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlLiBCYXNlZCBvbiB0aGUgYW5hbHlzaXMsIEkgaGF2ZSB0aGUgZm9sbG93aW5nIHJlcXVpcmVkIGNvbmZpZ3M6IGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCwgY3J1Y2lhbGx5LCBgTkVUX0NMU19BQ1RgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBhY3R1YWxseSByZWFjaGFibGU/IExldCdzIHRyYWNlIGl0LiBJdCdzIGNhbGxlZCBieSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBhbmQgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgLiBUaG9zZSBhcmUgYWxsIGluIHRoZSBgc3RtbWFjX3Rlc3RgIGFycmF5LiBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXRlcmF0ZXMgdGhyb3VnaCB0aGlzIGFycmF5IGFuZCBjYWxscyB0aGUgcmVsZXZhbnQgYGZuYC4gU28sIGBzdG1tYWNfc2VsZnRlc3RfcnVuYCBpcyB0aGUgZW50cnkgcG9pbnQsIG9yIGF0IGxlYXN0IHRoZSBzdGFydCBvZiB0aGUgY2hhaW4uXG5cbkluaXRpYWxseSwgSSB3YXMgdGhpbmtpbmcgb2YgYWRkaW5nIGFsbCBvZiB0aGVtIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoZW4sIEkgbm90aWNlZCB0aGF0IGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGFuZCBsYXJnZSBmdW5jdGlvbnMgbWFya2VkIGBzdGF0aWNgIGNhbiBiZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gIEl0J3MgYmVzdCB0byBsaXN0IHRoZSBmdW5jdGlvbnMgd2hvc2UgYWRkcmVzc2VzIGFyZSB0YWtlbiB0aG91Z2guICBUaGVuLCBJIHJlbWVtYmVyZWQsIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgZ2V0cyBtb2RpZmllZC4gU28gaXQncyB2ZXJ5IGltcG9ydGFudC4gSG93ZXZlciwgaXQncyBiZXR0ZXIgdG8gbGlzdCBhbGwgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zIGFzIHdlbGwuXG5cblRoZW4gdGhlIGNvdmVyYWdlLWJhc2VkIFN5emthbGxlciBhcHByb2FjaCBjYW1lIHRvIG1pbmQuIElmIHdlIGp1c3QgbGlzdCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAsIFN5emthbGxlciB3aWxsIHRyeSB0byBnZXQgdG8gdGhhdCBmdW5jdGlvbiwgd2hpY2ggd2lsbCAqbmF0dXJhbGx5KiBsZWFkIGl0IHRvIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgKGlmIHRoYXQncyB0aGUgY29kZSBwYXRoIHdlIHdhbnQgdG8gdHJpZ2dlcikuIEFjdHVhbGx5LCBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmAgaXMgYW4gZXRodG9vbCBjYWxsYmFjay4gSXQncyByZWFjaGVkIHRocm91Z2ggYGRldl9ldGh0b29sYCBhbmQgdGhlbiBgZXRodG9vbF9zZWxmX3Rlc3RgLiBTbyBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5BbHJpZ2h0LCBoZXJlJ3MgbXkgc3VtbWFyeSwgd2hhdCdzIGltcG9ydGFudCBmb3IgZnV6emluZzpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBUcnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKlxuICAgICogICBgc3RtbWFjX3NlbGZ0ZXN0X3J1bmBcbiAgICAqICAgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BgXG4gICAgKiAgIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYFxuICAgICogICBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcGBcbiAgICAqICAgYHN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBgXG4gICAgKiAgIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGBcbiogICAqKkVuYWJsZUNvbmZpZ3M6KipcbiAgICAqICAgYFNUTU1BQ19FVEhgXG4gICAgKiAgIGBTVE1NQUNfU0VMRlRFU1RTYFxuICAgICogICBgU1RNTUFDX1BDSWBcbiAgICAqICAgYE5FVF9DTFNfQUNUYFxuXG5Ob3csIHdhaXQgYSBtaW51dGUuLi4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCBpcyAqY29uZGl0aW9uYWxseSogY29tcGlsZWQgd2l0aCBgI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVGAuIElmIHRoYXQncyAqbm90KiBzZXQsIHRoZSBgI2Vsc2VgIGJsb2NrIHdpbGwgaGF2ZSBhIGR1bW15IGltcGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IGNvdWxkIGhpZGUgYSB2dWxuZXJhYmlsaXR5LCBzbyBJIGhhdmUgdG8gY2hlY2sgdGhhdCBgI2Vsc2VgIGJsb2NrIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNTEsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMjI6MTU6MTIuMTM0OTE5NTk4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzNTpcXHRcXHR9XFxuMTUzNjpcXHRcXG4xNTM3OlxcdFxcdHJldHVybiByZXQ7XFxuMTUzODpcXHR9XFxuMTUzOTpcXHQjZWxzZVxcbjE1NDA6XFx0c3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXFxuMTU0MTpcXHRcXHRcXHRcXHRcXHR1MzIgZHN0X21hc2ssIHUzMiBzcmNfbWFzaywgYm9vbCB1ZHApXFxuMTU0MjpcXHR7XFxuMTU0MzpcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTU0NDpcXHR9XFxuMTU0NTpcXHQjZW5kaWZcXG4xNTQ2OlxcdFxcbjE1NDc6XFx0c3RhdGljIGludCBzdG1tYWNfdGVzdF9sNGZpbHRfZGFfdGNwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4xNTQ4OlxcdHtcXG4xNTQ5OlxcdFxcdHUxNiBkdW1teV9wb3J0ID0gMHgxMjM7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdHJldHVybiBfX3N0bW1hY190ZXN0X2w0ZmlsdChwcml2LCBkdW1teV9wb3J0LCAwLCB+MCwgMCwgZmFsc2UpO1xcbjE1NTI6XFx0fVxcbjE1NTM6XFx0XFxuMTU1NDpcXHRzdGF0aWMgaW50IHN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3Aoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNToxMi4xMzUwMjg4MDhaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI4NDg5NDA2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU1RNTUFDIERyaXZlciBWdWxuZXJhYmlsaXR5IFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGAjZWxzZWAgYmxvY2sgaXMgaW5kZWVkIGEgcGxhY2Vob2xkZXIsIG1lYW5pbmcgYE5FVF9DTFNfQUNUYCBpcyBlc3NlbnRpYWwgdG8gaGl0IHRoZSBtb2RpZmllZCBjb2RlLiBHb29kLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBzZWUgdGhhdCBgTkVUX0NMU19BQ1RgIGZhbGxzIHVuZGVyIFwiTmV0d29ya2luZyBvcHRpb25zXCIgLVx1MDAzZSBcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZyxcIiBhIHByZXR0eSBzdGFuZGFyZCBjb25maWcsIHNvIHRoYXQncyBub3QgYSBtYWpvciBodXJkbGUuXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBjYW4gd2UgdHJpZ2dlciB0aGlzIHdpdGgganVzdCBgU1RNTUFDX1BDSWA/IFRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgeWVzLCBhbmQgdGhhdCdzIHRoZSBpbnRlcmVzdGluZyBiaXQuIFN5emthbGxlciBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLCB3aGljaCBpcyBrZXkuIFNwZWNpZmljYWxseSwgdGhlIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBjYW4gdHJpZ2dlciBgc3RtbWFjX3BjaV9wcm9iZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHN0bW1hY19kdnJfcHJvYmVgLCBhbmQgKnRoYXQqIHJlZ2lzdGVycyB0aGUgbmV0ZGV2LiBPbmNlIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgc3l6a2FsbGVyIGNhbiBlbXBsb3kgYGV0aHRvb2xgIHRvIHJ1biB0aGUgc2VsZi10ZXN0cy4gU28sIHRoZSBwYXRoIGlzIHRoZXJlIOKAkyBpdCdzIHJlYWNoYWJsZS5cblxuTGV0IG1lIGp1c3Qgc3ludGhlc2l6ZSB0aGlzIHJlYXNvbmluZyBhZ2Fpbi4gVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlIGluIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAsIHBhcnQgb2YgdGhlIFNUTU1BQyBkcml2ZXIncyBzZWxmdGVzdHMuIFRoZXNlIHRlc3RzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgYGV0aHRvb2xgIGludGVyZmFjZSBhZnRlciB0aGUgZHJpdmVyIGlzIHByb2JlZC4gV2UgY2FuIHByb2JlIHRoZSBkcml2ZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHN5emthbGxlcidzIFBDSSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzIChgc3l6X3BjaWAgb3Igc3lzZnMgYmluZCksIGdpdmVuIHRoZSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRoZXJlZm9yZSwgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBmb2xsb3dpbmcgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQ6IGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19TRUxGVEVTVFNgLCBgU1RNTUFDX1BDSWAsIGFuZCBgTkVUX0NMU19BQ1RgLlxuXG5IbW0sIGxldCdzIGp1c3QgbWFrZSBzdXJlLiBJcyBgU1RNTUFDX1BDSWAgdGhlICpvbmx5KiB3YXk/IFRoZXJlIGFyZSBhbHNvIHBsYXRmb3JtIGRyaXZlcnMgZm9yIFNUTU1BQywgYnV0IFBDSSBpcyBjbGVhcmx5IHRoZSBlYXNpZXN0IHJvdXRlIGZvciBzeXprYWxsZXIgdG8gaW5qZWN0LiBTbywgYFNUTU1BQ19QQ0lgIGlzIHRoZSBjbGVhbmVzdCwgZWFzaWVzdCB0cmlnZ2VyLlxuXG5Ob3cgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYC4uLmxldCdzIGNvbmZpcm0gdGhhdCBgX19zdG1tYWNfdGVzdF9sNGZpbHRgIGlzIHN0YXRpYy4gWWVzLCBpdCBpcy4gSXMgaXQgd29ydGh3aGlsZSB0byBvbWl0IGl0PyBTeXprYWxsZXIgY2FuIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkncmUgZGlzdGluY3Qgc3ltYm9scyBpbiB0aGUga2VybmVsIGltYWdlIChpLmUuLCBub3QgaW5saW5lZCkuIFNpbmNlIGl0IHNlZW1zIHJlbGF0aXZlbHkgbGFyZ2UsIGl0J3MgKmxpa2VseSogbm90IGlubGluZWQsIGJ1dCB0aGVyZSdzIGEgY2hhbmNlIGl0IGhhcyBhIGAuaXNyYWAgc3VmZml4LiBUbyBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgYHN0bW1hY19zZWxmdGVzdF9ydW5gIGFuZCB0aGUgd3JhcHBlciBmdW5jdGlvbnMgbGlrZSBgc3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcGAsIGBzdG1tYWNfdGVzdF9sNGZpbHRfc2FfdGNwYCwgYHN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBgLCBgc3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcGAsIGFuZCBJICp3aWxsKiBpbmNsdWRlIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAganVzdCB0byBiZSBjZXJ0YWluLlxuXG5Pa2F5LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4Mzc3LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI0Ljk4Mzk3MjczWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5MjkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19TRUxGVEVTVFNcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIk5FVF9DTFNfQUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX3NlbGZ0ZXN0X3J1blwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3RjcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X2RhX3VkcFwiLFxuICAgIFwic3RtbWFjX3Rlc3RfbDRmaWx0X3NhX3VkcFwiLFxuICAgIFwiX19zdG1tYWNfdGVzdF9sNGZpbHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBpbiBgX19zdG1tYWNfdGVzdF9sNGZpbHRgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBTVE1NQUMgZHJpdmVyJ3Mgc2VsZnRlc3RzLiBUaGUgc2VsZnRlc3RzIGFyZSByZWFjaGFibGUgdmlhIHRoZSBldGh0b29sIGludGVyZmFjZSBvbmNlIHRoZSBkcml2ZXIgaXMgcHJvYmVkLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB1c2luZyBzeXprYWxsZXIncyBQQ0kgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBzaW5jZSB0aGVyZSBpcyBhIFBDSSBmcm9udGVuZCAoYHN0bW1hY19wY2kuY2ApIGZvciB0aGUgU1RNTUFDIGRyaXZlci4gVG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUsIHRoZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfU0VMRlRFU1RTYCwgYFNUTU1BQ19QQ0lgLCBhbmQgYE5FVF9DTFNfQUNUYCBjb25maWdzIG11c3QgYmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfU0VMRlRFU1RTXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19zZWxmdGVzdF9ydW5cIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV90Y3BcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9kYV91ZHBcIixcbiAgICBcInN0bW1hY190ZXN0X2w0ZmlsdF9zYV91ZHBcIixcbiAgICBcIl9fc3RtbWFjX3Rlc3RfbDRmaWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgaW4gYF9fc3RtbWFjX3Rlc3RfbDRmaWx0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgU1RNTUFDIGRyaXZlcidzIHNlbGZ0ZXN0cy4gVGhlIHNlbGZ0ZXN0cyBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgZXRodG9vbCBpbnRlcmZhY2Ugb25jZSB0aGUgZHJpdmVyIGlzIHByb2JlZC4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdXNpbmcgc3l6a2FsbGVyJ3MgUENJIGluamVjdGlvbiBjYXBhYmlsaXRpZXMgc2luY2UgdGhlcmUgaXMgYSBQQ0kgZnJvbnRlbmQgKGBzdG1tYWNfcGNpLmNgKSBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuIFRvIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlLCB0aGUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1NFTEZURVNUU2AsIGBTVE1NQUNfUENJYCwgYW5kIGBORVRfQ0xTX0FDVGAgY29uZmlncyBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI1LjA1NDkwNzcxOVoiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NDU0MjYzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQyMjoxNToyNS4wNTUzNTU1ODlaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTc0NDQ5NzQ3NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMgb24gdGhlIHN0YWNrIHVzaW5nIGA9IHsgfWAuIFRoaXMgcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UuIEJlY2F1c2UgdGhlIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDY0Y2QxNzA0MDAzNWQ2MTY5OGU0ZTE2ZmI5NWViMjU3MTFiOWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMjI6MTE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbmluZGV4IDFkZjI2YzIxN2Y5YTcuLmEyYjkxN2RkNjBlNTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfc2VsZnRlc3RzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19zZWxmdGVzdHMuY1xuQEAgLTE0MzIsMTEgKzE0MzIsMTEgQEAgc3RhdGljIGludCBfX3N0bW1hY190ZXN0X2w0ZmlsdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHUzMiBkc3QsIHUzMiBzcmMsXG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3Jfa2V5X2Jhc2ljIGJrZXk7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMga2V5O1xuLVx0fSBfX2FsaWduZWQoQklUU19QRVJfTE9ORyAvIDgpIGtleXM7XG4rXHR9IF9fYWxpZ25lZChCSVRTX1BFUl9MT05HIC8gOCkga2V5cyA9IHsgfTtcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfYmFzaWMgYm1hc2s7XG4gXHRcdHN0cnVjdCBmbG93X2Rpc3NlY3Rvcl9rZXlfcG9ydHMgbWFzaztcbi1cdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcztcbitcdH0gX19hbGlnbmVkKEJJVFNfUEVSX0xPTkcgLyA4KSBtYXNrcyA9IHsgfTtcbiBcdHVuc2lnbmVkIGxvbmcgZHVtbXlfY29va2llID0gMHhkZWFkYmVlZjtcbiBcdHN0cnVjdCBzdG1tYWNfcGFja2V0X2F0dHJzIGF0dHIgPSB7IH07XG4gXHRzdHJ1Y3QgZmxvd19kaXNzZWN0b3IgKmRpc3NlY3RvcjtcbkBAIC0xNDg5LDYgKzE0ODksOCBAQCBzdGF0aWMgaW50IF9fc3RtbWFjX3Rlc3RfbDRmaWx0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwgdTMyIGRzdCwgdTMyIHNyYyxcbiBcdGtleXMuYmtleS5pcF9wcm90byA9IHVkcCA/IElQUFJPVE9fVURQIDogSVBQUk9UT19UQ1A7XG4gXHRrZXlzLmtleS5zcmMgPSBodG9ucyhzcmMpO1xuIFx0a2V5cy5rZXkuZHN0ID0gaHRvbnMoZHN0KTtcbitcdC8qIE1hdGNoIHRoZSBmdWxsIElQIHByb3RvIGZpZWxkICovXG4rXHRtYXNrcy5ibWFzay5pcF9wcm90byA9IDB4ZmY7XG4gXHRtYXNrcy5tYXNrLnNyYyA9IHNyY19tYXNrO1xuIFx0bWFza3MubWFzay5kc3QgPSBkc3RfbWFzaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjI1LjA1NTM1NjQxOFoiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzQ0NDk1NTg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBFdmFsdWF0aW9uIGZvciBfX3N0bW1hY190ZXN0X2w0ZmlsdCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGluIGBzdG1tYWNfc2VsZnRlc3RzLmNgIG1vZGlmaWVzIGBfX3N0bW1hY190ZXN0X2w0ZmlsdGAgYW5kIEkgc2VlIHRoYXQgaXQgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0cy4gIFByZXZpb3VzbHksIHRoZXNlIHN0cnVjdHMgd2VyZSBkZWNsYXJlZCBidXQgbm90IGluaXRpYWxpemVkLCBsZWF2aW5nIHRoZW0gc3VzY2VwdGlibGUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuICBOb3csIHRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGVtIHdpdGggYD0geyB9YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIldhaXQsIGlzIHRoaXMgKmZpeGluZyogc29tZXRoaW5nIG9yICpjcmVhdGluZyogYSBuZXcgcmlzaz9cIiAgVGhlIHByb21wdCBpcyB2ZXJ5IHNwZWNpZmljOiBcIk9OTFkgc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MgdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cIiAgU2luY2UgdGhpcyBwYXRjaCBleHBsaWNpdGx5ICpmaXhlcyogYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbSwgS01TQU4gd2FzIGxpa2VseSAqYWxyZWFkeSogY2F0Y2hpbmcgdGhlIGlzc3VlICpiZWZvcmUqIHRoaXMgcGF0Y2guICBUaGUgcXVlc3Rpb24gaXNuJ3Qgd2hldGhlciBLTVNBTiAqY291bGQgaGF2ZSogZm91bmQgYSBidWcgcHJlLXBhdGNoOyB0aGUgcXVlc3Rpb24gaXMgaWYgdGhlICpwYXRjaCBpdHNlbGYqIGludHJvZHVjZXMgYSAqbmV3KiBLTVNBTi1zcGVjaWZpYyByaXNrLlxuXG5MZXQncyByZWFkIHRoZSBkaWZmIGNhcmVmdWxseS4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGA9IHsgfWAgdG8gdGhlIHN0cnVjdCBkZWNsYXJhdGlvbnMuICBUaGlzIGlzIGEgZGlyZWN0LCBjb21wbGV0ZSBpbml0aWFsaXphdGlvbi4gIFplcm9pbmcgdGhlbSBvdXQgZW5zdXJlcyB0aGF0ICphbGwqIGZpZWxkcywgaW5jbHVkaW5nIGFueSBwYWRkaW5nLCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqYWZ0ZXIqIHRoaXMgY2hhbmdlPyBOby5cblxuVGhlIHByb21wdCBsaXN0cyBzZXZlcmFsIHNjZW5hcmlvcyB0aGF0ICp3b3VsZCogd2FycmFudCBOZWVkc0tNU0FOOiBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2hhbmdlcyBpbiBib3VuZHMgY2hlY2tzIHRoYXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3MuICBOb25lIG9mIHRoZXNlIGFwcGx5IGhlcmUuIFRoZSBjaGFuZ2UgZXhwbGljaXRseSB6ZXJvZXMgdGhlIHN0cnVjdHVyZXMuXG5cblRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogc3RhdGVzIHRvIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgaWYgXCJBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXCIgIFRoaXMgaXMgZXhhY3RseSB3aGF0IHRoZSBwYXRjaCBkb2VzIHdpdGggdGhlIGA9IHsgfWAuXG5cbkxldCdzIHJldmlldyB0aGUgY29kZSBvbmUgbGFzdCB0aW1lIHRvIGNvbmZpcm0uICBZZXMsIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgYXJlIG5vdyB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYWRkaXRpb25hbCBsaW5lIHNldHRpbmcgYG1hc2tzLmJtYXNrLmlwX3Byb3RvID0gMHhmZjtgIHNpbXBseSBhc3NpZ25zIGEgdmFsdWUgdG8gYSBmaWVsZCB3aXRoaW4gdGhlIG5vdyB6ZXJvLWluaXRpYWxpemVkIHN0cnVjdHVyZS5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgKmV4cGxpY2l0bHkgemVyb2luZyogdGhlIHJlbGV2YW50IHN0cnVjdHVyZXMsIGl0ICpyZW1vdmVzKiBhIHBvdGVudGlhbCBLTVNBTi1kZXRlY3RhYmxlIHByb2JsZW0uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEkgZG9uJ3QgbmVlZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBhbnN3ZXIgaXMgKipOZWVkc0tNU0FOPWZhbHNlKiouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTAsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDIyOjE1OjQyLjUwMDMxNTI5MloiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSBga2V5c2AgYW5kIGBtYXNrc2Agc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgdXNpbmcgYD0geyB9YC4gVGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZSBieSBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQgYmVmb3JlIHVzZS4gQmVjYXVzZSB0aGUgc3RydWN0dXJlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgbm93IGZ1bGx5IGluaXRpYWxpemVkLCB0aGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgYGtleXNgIGFuZCBgbWFza3NgIHN0cnVjdHVyZXMgb24gdGhlIHN0YWNrIHVzaW5nIGA9IHsgfWAuIFRoaXMgcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUgYnkgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkIGJlZm9yZSB1c2UuIEJlY2F1c2UgdGhlIHN0cnVjdHVyZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIG5vdyBmdWxseSBpbml0aWFsaXplZCwgdGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IG90aGVyIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[1] Phase: Succeeded StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:15:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2] Phase: Succeeded StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:16:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 22:15:54 +0000 UTC FinishedAt: 2026-08-25 22:15:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowq6d5g/series-workflowq6d5g-convert-artifact-3065309748/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 22:16:04 +0000 UTC FinishedAt: 2026-08-25 22:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 22:16:04 +0000 UTC FinishedAt: 2026-08-25 22:33:02 +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:*3b5a2f71-f7df-4972-b50e-c170afad931b,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-workflowq6d5g/series-workflowq6d5g-convert-artifact-3065309748/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": "df3d90be-732b-4308-b907-03ced5397e68", "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-workflowq6d5g/series-workflowq6d5g-build-action-320380978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 22:16:04 +0000 UTC FinishedAt: 2026-08-25 22:32:52 +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:*3b5a2f71-f7df-4972-b50e-c170afad931b,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-workflowq6d5g/series-workflowq6d5g-convert-artifact-3065309748/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": "df3d90be-732b-4308-b907-03ced5397e68", "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-workflowq6d5g/series-workflowq6d5g-build-action-320380978/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 22:33:02 +0000 UTC FinishedAt: 2026-08-25 22:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 22:33:02 +0000 UTC FinishedAt: 2026-08-25 22:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 22:33:02 +0000 UTC FinishedAt: 2026-08-25 22:33:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 22:33:02 +0000 UTC FinishedAt: 2026-08-25 22:33:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowq6d5g/series-workflowq6d5g-convert-artifact-2909717491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 22:33:12 +0000 UTC FinishedAt: 2026-08-25 22:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 22:33:12 +0000 UTC FinishedAt: 2026-08-25 22:34:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df3d90be-732b-4308-b907-03ced5397e68,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-workflowq6d5g/series-workflowq6d5g-build-action-320380978/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-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 22:35:05 +0000 UTC FinishedAt: 2026-08-25 22:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 22:35:05 +0000 UTC FinishedAt: 2026-08-25 22:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 22:35:05 +0000 UTC FinishedAt: 2026-08-25 22:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 22:35:05 +0000 UTC FinishedAt: 2026-08-25 22:51:20 +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:*3b5a2f71-f7df-4972-b50e-c170afad931b,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-workflowq6d5g/series-workflowq6d5g-convert-artifact-2909717491/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": "cb65d257-985c-4782-88f0-4f1ed3091407", "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-workflowq6d5g/series-workflowq6d5g-build-action-311786407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 22:35:05 +0000 UTC FinishedAt: 2026-08-25 22:51:10 +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:*3b5a2f71-f7df-4972-b50e-c170afad931b,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-workflowq6d5g/series-workflowq6d5g-convert-artifact-2909717491/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": "cb65d257-985c-4782-88f0-4f1ed3091407", "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-workflowq6d5g/series-workflowq6d5g-build-action-311786407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 22:51:20 +0000 UTC FinishedAt: 2026-08-25 22:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 22:51:20 +0000 UTC FinishedAt: 2026-08-25 22:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 22:51:20 +0000 UTC FinishedAt: 2026-08-25 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 22:51:20 +0000 UTC FinishedAt: 2026-08-25 22:53:15 +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:*cb65d257-985c-4782-88f0-4f1ed3091407,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-workflowq6d5g/series-workflowq6d5g-build-action-311786407/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-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*df3d90be-732b-4308-b907-03ced5397e68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb65d257-985c-4782-88f0-4f1ed3091407,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-workflowq6d5g/series-workflowq6d5g-build-action-320380978/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-workflowq6d5g/series-workflowq6d5g-build-action-311786407/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:53:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:53:30 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowq6d5g/series-workflowq6d5g-convert-artifact-3119036140/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 22:53:24 +0000 UTC FinishedAt: 2026-08-25 22:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 22:53:25 +0000 UTC FinishedAt: 2026-08-25 22:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 22:53:35 +0000 UTC FinishedAt: 2026-08-25 22:54:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq6d5g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_selftest_run","stmmac_test_l4filt_da_tcp","stmmac_test_l4filt_sa_tcp","stmmac_test_l4filt_da_udp","stmmac_test_l4filt_sa_udp","__stmmac_test_l4filt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_SELFTESTS","STMMAC_PCI","NET_CLS_ACT"],"series_id":"f6a4e8b7-8b98-44d7-bfdc-7bf837aa0f2a","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 22:53:35 +0000 UTC FinishedAt: 2026-08-25 22:54:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df3d90be-732b-4308-b907-03ced5397e68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb65d257-985c-4782-88f0-4f1ed3091407,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-workflowq6d5g/series-workflowq6d5g-build-action-320380978/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-workflowq6d5g/series-workflowq6d5g-build-action-311786407/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-workflowq6d5g/series-workflowq6d5g-convert-artifact-3119036140/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,}