From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Jan Kratochvil To: git-commits@fedoraproject.org Subject: [rpms/gdb] fix-dup-patch: Backported Python frame filters (Phil Muldoon). Date: Thu, 23 Jul 2026 18:30:59 GMT Message-ID: <178483145994.1.9947850738152815596.rpms-gdb-89fbbfccaf09@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: fix-dup-patch X-Git-Rev: 89fbbfccaf093284eadb1af638486ee5b1701a81 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZ2RiCiAgICAgICAgICAgIEJyYW5jaCA6IGZpeC1kdXAtcGF0Y2gKICAgICAg ICAgICAgQ29tbWl0IDogODlmYmJmY2NhZjA5MzI4NGVhZGIxYWY2Mzg0ODZlZTViMTcwMWE4MQog ICAgICAgICAgICBBdXRob3IgOiBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxAcmVkaGF0 LmNvbT4KICAgICAgICAgICAgRGF0ZSAgIDogMjAxMy0wNS0yMVQxMzo1NDozMyswMjowMAogICAg ICAgICAgICBTdGF0cyAgOiArNTg2MS8tNTYyIGluIDcgZmlsZShzKQogICAgICAgICAgICBVUkwg ICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2dkYi9jLzg5ZmJiZmNjYWYw OTMyODRlYWRiMWFmNjM4NDg2ZWU1YjE3MDFhODE/YnJhbmNoPWZpeC1kdXAtcGF0Y2gKCiAgICAg ICAgICAgIExvZzoKICAgICAgICAgICAgQmFja3BvcnRlZCBQeXRob24gZnJhbWUgZmlsdGVycyAo UGhpbCBNdWxkb29uKS4KCi0gQmFja3BvcnRlZCBicmVha3BvaW50IGNvbmRpdGlvbnMgY3Jhc2gg Zml4IChTZXJnaW8gRHVyaWdhbiBKdW5pb3IpLgoKLS0tCmRpZmYgLS1naXQgYS9nZGItNi4zLWdz dGFjay0yMDA1MDQxMS5wYXRjaCBiL2dkYi02LjMtZ3N0YWNrLTIwMDUwNDExLnBhdGNoCmluZGV4 IDVmZTkwMmMuLmI3M2VlZmYgMTAwNjQ0Ci0tLSBhL2dkYi02LjMtZ3N0YWNrLTIwMDUwNDExLnBh dGNoCisrKyBiL2dkYi02LjMtZ3N0YWNrLTIwMDUwNDExLnBhdGNoCkBAIC00LDExICs0LDExIEBA CiAJdG8gaW5zdGFsbCBhbmQgdW5pbnN0YWxsLgogCSogZ3N0YWNrLnNoLCBnc3RhY2suMTogTmV3 IGZpbGVzLgogCi1JbmRleDogZ2RiLTcuNS45MS4yMDEzMDQwNy9nZGIvTWFrZWZpbGUuaW4KK0lu ZGV4OiBnZGItNy42L2dkYi9NYWtlZmlsZS5pbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGdkYi03LjUuOTEu MjAxMzA0MDcub3JpZy9nZGIvTWFrZWZpbGUuaW4JMjAxMy0wNC0xMSAxNjo1MDozMy4wMDAwMDAw MDAgKzAyMDAKLSsrKyBnZGItNy41LjkxLjIwMTMwNDA3L2dkYi9NYWtlZmlsZS5pbgkyMDEzLTA0 LTExIDE2OjUyOjUxLjAzMjI4MDI5NCArMDIwMAotQEAgLTEwMjcsNyArMTAyNyw3IEBAIGluZm8g aW5zdGFsbC1pbmZvIGNsZWFuLWluZm8gZHZpIHBkZiBpbnMKKy0tLSBnZGItNy42Lm9yaWcvZ2Ri L01ha2VmaWxlLmluCTIwMTMtMDUtMjEgMTM6MjY6MzMuNDk2ODIwNzYzICswMjAwCisrKysgZ2Ri LTcuNi9nZGIvTWFrZWZpbGUuaW4JMjAxMy0wNS0yMSAxMzoyNjozMy42MDk4MTk1NzkgKzAyMDAK K0BAIC0xMDI5LDcgKzEwMjksNyBAQCBpbmZvIGluc3RhbGwtaW5mbyBjbGVhbi1pbmZvIGR2aSBw ZGYgaW5zCiAgaW5zdGFsbDogYWxsCiAgCUAkKE1BS0UpICQoRkxBR1NfVE9fUEFTUykgaW5zdGFs bC1vbmx5CiAgCkBAIC0xNyw3ICsxNyw3IEBAIEluZGV4OiBnZGItNy41LjkxLjIwMTMwNDA3L2dk Yi9NYWtlZmlsZS5pbgogIAl0cmFuc2Zvcm1lZF9uYW1lPWB0PSckKHByb2dyYW1fdHJhbnNmb3Jt X25hbWUpJzsgXAogIAkJCSAgZWNobyBnZGIgfCBzZWQgLWUgIiQkdCJgIDsgXAogIAkJaWYgdGVz dCAieCQkdHJhbnNmb3JtZWRfbmFtZSIgPSB4OyB0aGVuIFwKLUBAIC0xMDU4LDcgKzEwNTgsMjUg QEAgaW5zdGFsbC1vbmx5OiAkKENPTkZJR19JTlNUQUxMKQorQEAgLTEwNjAsNyArMTA2MCwyNSBA QCBpbnN0YWxsLW9ubHk6ICQoQ09ORklHX0lOU1RBTEwpCiAgaW5zdGFsbC1weXRob246CiAgCSQo U0hFTEwpICQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoREVTVERJUikkKEdEQl9EQVRBRElS KS9weXRob24vZ2RiCiAgCkBAIC00NCw3ICs0NCw3IEBAIEluZGV4OiBnZGItNy41LjkxLjIwMTMw NDA3L2dkYi9NYWtlZmlsZS5pbgogIAl0cmFuc2Zvcm1lZF9uYW1lPWB0PSckKHByb2dyYW1fdHJh bnNmb3JtX25hbWUpJzsgXAogIAkJCSAgZWNobyBnZGIgfCBzZWQgLWUgJCR0YCA7IFwKICAJCWlm IHRlc3QgIngkJHRyYW5zZm9ybWVkX25hbWUiID0geDsgdGhlbiBcCi1AQCAtMTA4MSw2ICsxMDk5 LDE4IEBAIHVuaW5zdGFsbDogZm9yY2UgJChDT05GSUdfVU5JTlNUQUxMKQorQEAgLTEwODMsNiAr MTEwMSwxOCBAQCB1bmluc3RhbGw6IGZvcmNlICQoQ09ORklHX1VOSU5TVEFMTCkKICAJZmkKICAJ QCQoTUFLRSkgRE89dW5pbnN0YWxsICJET0RJUlM9JChTVUJESVJTKSIgJChGTEFHU19UT19QQVNT KSBzdWJkaXJfZG8KICAKQEAgLTYzLDEwICs2MywxMCBAQCBJbmRleDogZ2RiLTcuNS45MS4yMDEz MDQwNy9nZGIvTWFrZWZpbGUuaW4KICAjIFRoZSBDKysgbmFtZSBwYXJzZXIgY2FuIGJlIGJ1aWx0 IHN0YW5kYWxvbmUgZm9yIHRlc3RpbmcuCiAgdGVzdC1jcC1uYW1lLXBhcnNlci5vOiBjcC1uYW1l LXBhcnNlci5jCiAgCSQoQ09NUElMRSkgLURURVNUX0NQTkFNRVMgY3AtbmFtZS1wYXJzZXIuYwot SW5kZXg6IGdkYi03LjUuOTEuMjAxMzA0MDcvZ2RiL2dzdGFjay5zaAorSW5kZXg6IGdkYi03LjYv Z2RiL2dzdGFjay5zaAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAw OjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdkYi03LjUuOTEuMjAxMzA0MDcvZ2RiL2dzdGFjay5z aAkyMDEzLTA0LTExIDE2OjUyOjIyLjA5MzI4MTYxNiArMDIwMAorKysrIGdkYi03LjYvZ2RiL2dz dGFjay5zaAkyMDEzLTA1LTIxIDEzOjI2OjU1LjQzNDYyNTkwOCArMDIwMAogQEAgLTAsMCArMSw0 MyBAQAogKyMhL2Jpbi9zaAogKwpAQCAtMTAxLDcgKzEwMSw3IEBAIEluZGV4OiBnZGItNy41Ljkx LjIwMTMwNDA3L2dkYi9nc3RhY2suc2gKICsKICsjIFJ1biBHREIsIHN0cmlwIG91dCB1bndhbnRl ZCBub2lzZS4KICsjIC0tcmVhZG5ldmVyIGlzIG5vIGxvbmdlciB1c2VkIHNpbmNlIC5nZGJfaW5k ZXggaXMgbm93IGluIHVzZS4KLSskR0RCIC0tcXVpZXQgLW54IC9wcm9jLyQxL2V4ZSAkMSA8PEVP RiAyPiYxIHwgCisrJEdEQiAtLXF1aWV0IC1ueCAkR0RCQVJHUyAvcHJvYy8kMS9leGUgJDEgPDxF T0YgMj4mMSB8IAogK3NldCB3aWR0aCAwCiArc2V0IGhlaWdodCAwCiArc2V0IHBhZ2luYXRpb24g bm8KQEAgLTExMSwxMCArMTExLDEwIEBAIEluZGV4OiBnZGItNy41LjkxLjIwMTMwNDA3L2dkYi9n c3RhY2suc2gKICsgICAgLWUgJ3MvXlwoKGdkYikgXCkqLy8nIFwKICsgICAgLWUgJy9eIy9wJyBc CiArICAgIC1lICcvXlRocmVhZC9wJwotSW5kZXg6IGdkYi03LjUuOTEuMjAxMzA0MDcvZ2RiL3Rl c3RzdWl0ZS9nZGIuYmFzZS9nc3RhY2suZXhwCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL2dzdGFjay5leHAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAvZGV2L251bGwJMTk3MC0wMS0w MSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjkxLjIwMTMwNDA3L2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmV4cAkyMDEzLTA0LTExIDE2OjUyOjIyLjA5MzI4MTYx NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nc3RhY2suZXhwCTIw MTMtMDUtMjEgMTM6MjY6NTUuNDM0NjI1OTA4ICswMjAwCiBAQCAtMCwwICsxLDY2IEBACiArIyBD b3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiArCkBAIC0x NjcsNyArMTY3LDcgQEAgSW5kZXg6IGdkYi03LjUuOTEuMjAxMzA0MDcvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9nc3RhY2suZXhwCiArIyBleGl0aW5nIHRoZSBmdW5jdGlvbi4gIFN0aWxsIHdlIGNv dWxkIHJldHJ5IHRoZSBnc3RhY2sgY29tbWFuZCBpZiB3ZSBmYWlsLgogKwogK3NldCB0ZXN0ICJz cGF3biBnc3RhY2siCi0rc2V0IGNvbW1hbmQgInNoIC1jIEdEQj0kR0RCXFwgc2hcXCAke3NyY2Rp cn0vLi4vZ3N0YWNrLnNoXFwgJHBpZFxcO2VjaG9cXCBHU1RBQ0stRU5EIgorK3NldCBjb21tYW5k ICJzaCAtYyBHREI9JEdEQlxcIEdEQkFSR1M9LWRhdGEtZGlyZWN0b3J5XFxcXFxcICRCVUlMRF9E QVRBX0RJUkVDVE9SWVxcIHNoXFwgJHtzcmNkaXJ9Ly4uL2dzdGFjay5zaFxcICRwaWRcXDtlY2hv XFwgR1NUQUNLLUVORCIKICtzZXQgcmVzIFtyZW1vdGVfc3Bhd24gaG9zdCAkY29tbWFuZF07CiAr aWYgeyAkcmVzIDwgMCB8fCAkcmVzID09ICIiIH0gewogKyAgICBwZXJyb3IgIlNwYXduaW5nICRj b21tYW5kIGZhaWxlZC4iCkBAIC0xODIsMTAgKzE4MiwxMCBAQCBJbmRleDogZ2RiLTcuNS45MS4y MDEzMDQwNy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dzdGFjay5leHAKICtnZGJfZXhpdAogKwog K3JlbW90ZV9leGVjIGhvc3QgImtpbGwgLTkgJHBpZCIKLUluZGV4OiBnZGItNy41LjkxLjIwMTMw NDA3L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMKK0luZGV4OiBnZGItNy42L2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAvZGV2L251bGwJMTk3 MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjkxLjIwMTMwNDA3 L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMJMjAxMy0wNC0xMSAxNjo1MjoyMi4wOTMy ODE2MTYgKzAyMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMJ MjAxMy0wNS0yMSAxMzoyNjozMy42MTA4MTk1NjkgKzAyMDAKIEBAIC0wLDAgKzEsNDMgQEAKICsv KiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVnZ2VyLgogKwoKZGlm ZiAtLWdpdCBhL2dkYi02LjUtQkVBLXRlc3RzdWl0ZS5wYXRjaCBiL2dkYi02LjUtQkVBLXRlc3Rz dWl0ZS5wYXRjaAppbmRleCA3NmQ3NTY2Li43YzU3NzhjIDEwMDY0NAotLS0gYS9nZGItNi41LUJF QS10ZXN0c3VpdGUucGF0Y2gKKysrIGIvZ2RiLTYuNS1CRUEtdGVzdHN1aXRlLnBhdGNoCkBAIC0x LDkgKzEsNyBAQAotSW5kZXg6IC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFz aC5jCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZGNyYXNo LmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLVJDUyBmaWxlOiBnZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVh ZGNyYXNoLmMKLWRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5j Ci0tLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKLSsrKyAuL2dkYi90ZXN0 c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guYwkzMSBPY3QgMjAwNiAxNzo1NDozOCAtMDAw MAorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysr IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5jCTIwMTMtMDUt MjEgMTM6MzU6NDUuNTkyMDU5Nzg2ICswMjAwCiBAQCAtMCwwICsxLDMwMSBAQAogKy8qCiArICog VGhlIHBvaW50IG9mIHRoaXMgcHJvZ3JhbSBpcyB0byBjcmFzaCBpbiBhIG11bHRpLXRocmVhZGVk IGFwcC4KQEAgLTMwNiwxMiArMzA0LDEwIEBAIGRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhy ZWFkcy90aHJlYWRjcmFzaC5jCiArICAgCiArICAgcmV0dXJuIDA7CiArfQotSW5kZXg6IC4vZ2Ri L3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKK0luZGV4OiBnZGItNy42L2dk Yi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guZXhwCiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1SQ1Mg ZmlsZTogZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKLWRpZmYgLU4g Z2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKLS0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAotKysrIC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFk cy90aHJlYWRjcmFzaC5leHAJMzEgT2N0IDIwMDYgMTc6NTQ6MzggLTAwMDAKKy0tLSAvZGV2L251 bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGItNy42L2dkYi90 ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guZXhwCTIwMTMtMDUtMjEgMTM6MzY6MDEu NDUxMDU2NzQ2ICswMjAwCiBAQCAtMCwwICsxLDM3IEBACiArIyB0aHJlYWRjcmFzaC5leHAgLSBU aGUgcG9pbnQgb2YgdGhpcyBwcm9ncmFtIGlzIHRvIGNyYXNoIGluIGEgbXVsdGktdGhyZWFkZWQg YXBwLgogKwpAQCAtMzM3LDcgKzMzMyw3IEBAIGRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhy ZWFkcy90aHJlYWRjcmFzaC5leHAKICt9CiArCiArIyAke3NoZWxsZmlsZX0gYXJndW1lbnQgbXVz dCBub3QgY29udGFpbiBhbnkgZGlyZWN0b3JpZXMuCi0rc2V0IGZkIFtvcGVuICJ8YmFzaCAke3No ZWxsZmlsZX0gJHtiaW5maWxlfSAkR0RCIC1udyAkR0RCRkxBR1MiIHJdCisrc2V0IGZkIFtvcGVu ICJ8YmFzaCAke3NoZWxsZmlsZX0gJHtiaW5maWxlfSAkR0RCICRJTlRFUk5BTF9HREJGTEFHUyAk R0RCRkxBR1MgW2hvc3RfaW5mbyBnZGJfb3B0c10iIHJdCiArd2hpbGUgeyBbZ2V0cyAkZmQgbGlu ZV0gPj0gMCB9IHsKICsgICAgaWYgW3JlZ2V4cCAiIFBBU1M6ICguKikkIiAkbGluZSB0cmFzaCBt ZXNzYWdlXSB7CiArCXBhc3MgJG1lc3NhZ2UKQEAgLTM1MCwxMiArMzQ2LDEwIEBAIGRpZmYgLU4g Z2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKICt9CiArCiArcmV0dXJu IDAKLUluZGV4OiAuL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guc2gKK0lu ZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guc2gKID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLVJDUyBmaWxlOiBnZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZGNyYXNo LnNoCi1kaWZmIC1OIGdkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guc2gKLS0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAotKysrIC4vZ2RiL3Rlc3RzdWl0 ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5zaAkzMSBPY3QgMjAwNiAxNzo1NDozOCAtMDAwMAor LS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdk Yi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5zaAkyMDEzLTA1LTIx IDEzOjM1OjQ1LjU5MzA1OTc4NiArMDIwMAogQEAgLTAsMCArMSwzMjQgQEAKICsjISAvYmluL2Jh c2gKICsKQEAgLTY4MSwxMiArNjc1LDEwIEBAIGRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhy ZWFkcy90aHJlYWRjcmFzaC5zaAogK3JtIC1yZiAkV09SS0RJUgogKwogK2V4aXQgJEZBSUxVUkVT Ci1JbmRleDogLi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZGNyYXNoLnNoLW9yaWcK K0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guc2gt b3JpZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotUkNTIGZpbGU6IGdkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhy ZWFkY3Jhc2guc2gtb3JpZwotZGlmZiAtTiBnZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVh ZGNyYXNoLnNoLW9yaWcKLS0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAot KysrIC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5zaC1vcmlnCTMxIE9j dCAyMDA2IDE3OjU0OjM4IC0wMDAwCistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAu MDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3Ro cmVhZGNyYXNoLnNoLW9yaWcJMjAxMy0wNS0yMSAxMzozNTo0NS41OTMwNTk3ODYgKzAyMDAKIEBA IC0wLDAgKzEsMjQ4IEBACiArIyEgL2Jpbi9iYXNoCiArCgpkaWZmIC0tZ2l0IGEvZ2RiLWFyY2hl ci5wYXRjaCBiL2dkYi1hcmNoZXIucGF0Y2gKaW5kZXggNDA2MGNjMC4uYWIwNjU3ZiAxMDA2NDQK LS0tIGEvZ2RiLWFyY2hlci5wYXRjaAorKysgYi9nZGItYXJjaGVyLnBhdGNoCkBAIC0yLDcgKzIs NyBAQCBodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL3dpa2kvUHJvamVjdEFyY2hlcgogaHR0cDov L3NvdXJjZXdhcmUub3JnL2dkYi93aWtpL0FyY2hlckJyYW5jaE1hbmFnZW1lbnQKIAogR0lUIHNu YXBzaG90OgotY29tbWl0IDkyY2YyZDUzYTljNjliNGZiMzYxZGU2NjJkZTkxMDBjNmU3MmNhYTAK K2NvbW1pdCBiMWY4YzY4MjEzMDNmNmViMDg3ZmI3ZjU3NDA1NDgzYWM4ODEyMjI3CiAKIGJyYW5j aCBqYW5rcmF0b2NodmlsL2ZlZG9yYTE5IC0gdGhlIG1lcmdlIG9mIGJyYW5jaGVzOgogamFua3Jh dG9jaHZpbC92bGEKQEAgLTE2OSwyMiArMTY5LDE3IEBAIGluZGV4IGNhOGQ4OWIuLjgxMWFkNzIg MTAwNjQ0CiAgCQkJICAgIHBsb25nZXN0IChoaWdoX2JvdW5kIC0gbG93X2JvdW5kICsgMSkpOwog IAlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sIChpc192ZWN0b3IgPyAiKSkpIiA6ICJdIikpOwog ZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRhLWRp cmVjdG9yeS9NYWtlZmlsZS5pbgotaW5kZXggZDk4YWM3Ny4uZTI0ODM5OSAxMDA2NDQKK2luZGV4 IGQ5OGFjNzcuLmY2YTRiOTkgMTAwNjQ0CiAtLS0gYS9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZp bGUuaW4KICsrKyBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgotQEAgLTUyLDE3ICs1 MiwyOCBAQCBTWVNDQUxMU19GSUxFUyA9IFwKLSBQWVRIT05fRElSID0gcHl0aG9uCitAQCAtNTMs MTYgKzUzLDIxIEBAIFBZVEhPTl9ESVIgPSBweXRob24KICBQWVRIT05fSU5TVEFMTF9ESVIgPSAk KERFU1RESVIpJChHREJfREFUQURJUikvJChQWVRIT05fRElSKQogIFBZVEhPTl9GSUxFUyA9IFwK LSsJZ2RiL0ZyYW1lSXRlcmF0b3IucHkgXAotKwlnZGIvRnJhbWVXcmFwcGVyLnB5IFwKICAJZ2Ri L19faW5pdF9fLnB5IFwKIC0JZ2RiL3R5cGVzLnB5IFwKIC0JZ2RiL3ByaW50aW5nLnB5IFwKIC0J Z2RiL3Byb21wdC5weSBcCi0rCWdkYi9iYWNrdHJhY2UucHkgXAogIAlnZGIvY29tbWFuZC9fX2lu aXRfXy5weSBcCi0rCWdkYi9jb21tYW5kL2JhY2t0cmFjZS5weSBcCiArCWdkYi9jb21tYW5kL2ln bm9yZV9lcnJvcnMucHkgXAogKwlnZGIvY29tbWFuZC9wYWhvbGUucHkgXAogIAlnZGIvY29tbWFu ZC90eXBlX3ByaW50ZXJzLnB5IFwKQEAgLTE5NCw4ICsxODksNiBAQCBpbmRleCBkOThhYzc3Li5l MjQ4Mzk5IDEwMDY0NAogIAlnZGIvZnVuY3Rpb24vX19pbml0X18ucHkgXAogLQlnZGIvZnVuY3Rp b24vc3RyZm5zLnB5CiArCWdkYi9mdW5jdGlvbi9zdHJmbnMucHkgXAotKwlnZGIvY29tbWFuZC9y ZXF1aXJlLnB5IFwKLSsJZ2RiL2NvbW1hbmQvdXB0by5weSBcCiArCWdkYi9mdW5jdGlvbi9fX2lu aXRfXy5weSBcCiArCWdkYi9mdW5jdGlvbi9jYWxsZXJfaXMucHkgXAogKwlnZGIvZnVuY3Rpb24v aW5fc2NvcGUucHkgXApAQCAtMzc3OCwzMjMgKzM3NzEsNiBAQCBpbmRleCAxNTU3MDNkLi41NDVh NjE1IDEwMDY0NAogKyAgb2JzZXJ2ZXJfYXR0YWNoX21hcmtfdXNlZCAocHJpbnRfdHlwZXNfbWFy a191c2VkKTsKICsjZW5kaWYKICB9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL0Zy YW1lSXRlcmF0b3IucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvRnJhbWVJdGVyYXRvci5weQotbmV3 IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjU2NTQ1NDYKLS0tLSAvZGV2L251bGwK LSsrKyBiL2dkYi9weXRob24vbGliL2dkYi9GcmFtZUl0ZXJhdG9yLnB5Ci1AQCAtMCwwICsxLDMz IEBACi0rIyBJdGVyYXRvciBvdmVyIGZyYW1lcy4KLSsKLSsjIENvcHlyaWdodCAoQykgMjAwOCwg MjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0r IyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCi0rCi0rY2xhc3MgRnJhbWVJdGVyYXRvcjoKLSsgICAgIiIiQW4gaXRlcmF0 b3IgdGhhdCBpdGVyYXRlcyBvdmVyIGZyYW1lcy4iIiIKLSsKLSsgICAgZGVmIF9faW5pdF9fIChz ZWxmLCBmcmFtZSk6Ci0rICAgICAgICAiSW5pdGlhbGl6ZSBhIEZyYW1lSXRlcmF0b3IuICBGUkFN RSBpcyB0aGUgc3RhcnRpbmcgZnJhbWUuIgotKyAgICAgICAgc2VsZi5mcmFtZSA9IGZyYW1lCi0r Ci0rICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0rICAgICAgICByZXR1cm4gc2VsZgotKwotKyAg ICBkZWYgbmV4dCAoc2VsZik6Ci0rICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lCi0rICAgICAg ICBpZiByZXN1bHQgaXMgTm9uZToKLSsgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0r ICAgICAgICBzZWxmLmZyYW1lID0gcmVzdWx0Lm9sZGVyICgpCi0rICAgICAgICByZXR1cm4gcmVz dWx0Ci1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL0ZyYW1lV3JhcHBlci5weSBiL2dk Yi9weXRob24vbGliL2dkYi9GcmFtZVdyYXBwZXIucHkKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1p bmRleCAwMDAwMDAwLi5iNzkwYTU0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvcHl0aG9uL2xp Yi9nZGIvRnJhbWVXcmFwcGVyLnB5Ci1AQCAtMCwwICsxLDExMiBAQAotKyMgV3JhcHBlciBBUEkg Zm9yIGZyYW1lcy4KLSsKLSsjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0r aW1wb3J0IGdkYgotKwotKyMgRklYTUU6IGFyZ3VhYmx5IGFsbCB0aGlzIHNob3VsZCBiZSBvbiBG cmFtZSBzb21laG93LgotK2NsYXNzIEZyYW1lV3JhcHBlcjoKLSsgICAgZGVmIF9faW5pdF9fIChz ZWxmLCBmcmFtZSk6Ci0rICAgICAgICBzZWxmLmZyYW1lID0gZnJhbWU7Ci0rCi0rICAgIGRlZiB3 cml0ZV9zeW1ib2wgKHNlbGYsIHN0cmVhbSwgc3ltLCBibG9jayk6Ci0rICAgICAgICBpZiBsZW4g KHN5bS5saW5rYWdlX25hbWUpOgotKyAgICAgICAgICAgIG5zeW0sIGlzX2ZpZWxkX29mX3RoaXMg PSBnZGIubG9va3VwX3N5bWJvbCAoc3ltLmxpbmthZ2VfbmFtZSwgYmxvY2spCi0rICAgICAgICAg ICAgaWYgbnN5bS5hZGRyX2NsYXNzICE9IGdkYi5TWU1CT0xfTE9DX1JFR0lTVEVSOgotKyAgICAg ICAgICAgICAgICBzeW0gPSBuc3ltCi0rCi0rICAgICAgICBzdHJlYW0ud3JpdGUgKHN5bS5wcmlu dF9uYW1lICsgIj0iKQotKyAgICAgICAgdHJ5OgotKyAgICAgICAgICAgIHZhbCA9IHNlbGYucmVh ZF92YXIgKHN5bSkKLSsgICAgICAgICAgICBpZiB2YWwgIT0gTm9uZToKLSsgICAgICAgICAgICAg ICAgdmFsID0gc3RyICh2YWwpCi0rICAgICAgICAjIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIGhh dmUgYSBtb3JlIHByZWNpc2UgZXhjZXB0aW9uIGhlcmUuCi0rICAgICAgICBleGNlcHQgUnVudGlt ZUVycm9yLCB0ZXh0OgotKyAgICAgICAgICAgIHZhbCA9IHRleHQKLSsgICAgICAgIGlmIHZhbCA9 PSBOb25lOgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIj8/PyIpCi0rICAgICAgICBlbHNl OgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoc3RyICh2YWwpKQotKwotKyAgICBkZWYgcHJp bnRfZnJhbWVfbG9jYWxzIChzZWxmLCBzdHJlYW0sIGZ1bmMpOgotKyAgICAgICAgaWYgbm90IGZ1 bmM6Ci0rICAgICAgICAgICAgcmV0dXJuCi0rCi0rICAgICAgICBmaXJzdCA9IFRydWUKLSsgICAg ICAgIGJsb2NrID0gZnVuYy52YWx1ZQotKwotKyAgICAgICAgZm9yIHN5bSBpbiBibG9jazoKLSsg ICAgICAgICAgICBpZiBzeW0uaXNfYXJndW1lbnQ6Ci0rICAgICAgICAgICAgICAgIGNvbnRpbnVl OwotKwotKyAgICAgICAgICAgIHNlbGYud3JpdGVfc3ltYm9sIChzdHJlYW0sIHN5bSwgYmxvY2sp Ci0rICAgICAgICAgICAgc3RyZWFtLndyaXRlICgnXG4nKQotKwotKyAgICBkZWYgcHJpbnRfZnJh bWVfYXJncyAoc2VsZiwgc3RyZWFtLCBmdW5jKToKLSsgICAgICAgIGlmIG5vdCBmdW5jOgotKyAg ICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAgZmlyc3QgPSBUcnVlCi0rICAgICAgICBibG9j ayA9IGZ1bmMudmFsdWUKLSsKLSsgICAgICAgIGZvciBzeW0gaW4gYmxvY2s6Ci0rICAgICAgICAg ICAgaWYgbm90IHN5bS5pc19hcmd1bWVudDoKLSsgICAgICAgICAgICAgICAgY29udGludWU7Ci0r Ci0rICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotKyAgICAgICAgICAgICAgICBzdHJlYW0ud3Jp dGUgKCIsICIpCi0rCi0rICAgICAgICAgICAgc2VsZi53cml0ZV9zeW1ib2wgKHN0cmVhbSwgc3lt LCBibG9jaykKLSsgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCi0rCi0rICAgICMgRklYTUU6IHRo aXMgc2hvdWxkIHByb2JhYmx5IGp1c3QgYmUgYSBtZXRob2Qgb24gZ2RiLkZyYW1lLgotKyAgICAj IEJ1dCB0aGVuIHdlIG5lZWQgc3RyZWFtIHdyYXBwZXJzLgotKyAgICBkZWYgZGVzY3JpYmUgKHNl bGYsIHN0cmVhbSwgZnVsbCk6Ci0rICAgICAgICBpZiBzZWxmLnR5cGUgKCkgPT0gZ2RiLkRVTU1Z X0ZSQU1FOgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiA8ZnVuY3Rpb24gY2FsbGVkIGZy b20gZ2RiPlxuIikKLSsgICAgICAgIGVsaWYgc2VsZi50eXBlICgpID09IGdkYi5TSUdUUkFNUF9G UkFNRToKLSsgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgPHNpZ25hbCBoYW5kbGVyIGNhbGxl ZD5cbiIpCi0rICAgICAgICBlbHNlOgotKyAgICAgICAgICAgIHNhbCA9IHNlbGYuZmluZF9zYWwg KCkKLSsgICAgICAgICAgICBwYyA9IHNlbGYucGMgKCkKLSsgICAgICAgICAgICBuYW1lID0gc2Vs Zi5uYW1lICgpCi0rICAgICAgICAgICAgaWYgbm90IG5hbWU6Ci0rICAgICAgICAgICAgICAgIG5h bWUgPSAiPz8iCi0rICAgICAgICAgICAgaWYgcGMgIT0gc2FsLnBjIG9yIG5vdCBzYWwuc3ltdGFi OgotKyAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgMHglMDh4IGluIiAlIHBjKQotKyAg ICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiAiICsgbmFtZSArICIgKCIpCi0rCi0rICAgICAgICAg ICAgZnVuYyA9IHNlbGYuZnVuY3Rpb24gKCkKLSsgICAgICAgICAgICBzZWxmLnByaW50X2ZyYW1l X2FyZ3MgKHN0cmVhbSwgZnVuYykKLSsKLSsgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIpIikK LSsKLSsgICAgICAgICAgICBpZiBzYWwuc3ltdGFiIGFuZCBzYWwuc3ltdGFiLmZpbGVuYW1lOgot KyAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgYXQgIiArIHNhbC5zeW10YWIuZmlsZW5h bWUpCi0rICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIjoiICsgc3RyIChzYWwubGluZSkp Ci0rCi0rICAgICAgICAgICAgaWYgbm90IHNlbGYubmFtZSAoKSBvciAobm90IHNhbC5zeW10YWIg b3Igbm90IHNhbC5zeW10YWIuZmlsZW5hbWUpOgotKyAgICAgICAgICAgICAgICBsaWIgPSBnZGIu c29saWJfYWRkcmVzcyAocGMpCi0rICAgICAgICAgICAgICAgIGlmIGxpYjoKLSsgICAgICAgICAg ICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiBmcm9tICIgKyBsaWIpCi0rCi0rICAgICAgICAgICAg c3RyZWFtLndyaXRlICgiXG4iKQotKwotKyAgICAgICAgICAgIGlmIGZ1bGw6Ci0rICAgICAgICAg ICAgICAgIHNlbGYucHJpbnRfZnJhbWVfbG9jYWxzIChzdHJlYW0sIGZ1bmMpCi0rCi0rICAgIGRl ZiBfX2dldGF0dHJfXyAoc2VsZiwgbmFtZSk6Ci0rICAgICAgICByZXR1cm4gZ2V0YXR0ciAoc2Vs Zi5mcmFtZSwgbmFtZSkKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvYmFja3RyYWNl LnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2JhY2t0cmFjZS5weQotbmV3IGZpbGUgbW9kZSAxMDA2 NDQKLWluZGV4IDAwMDAwMDAuLjZiYjRmYjEKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRo b24vbGliL2dkYi9iYWNrdHJhY2UucHkKLUBAIC0wLDAgKzEsNDIgQEAKLSsjIEZpbHRlcmluZyBi YWNrdHJhY2UuCi0rCi0rIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotK2lt cG9ydCBnZGIKLStpbXBvcnQgaXRlcnRvb2xzCi0rCi0rIyBPdXIgb25seSBleHBvcnRzLgotK19f YWxsX18gPSBbJ3B1c2hfZnJhbWVfZmlsdGVyJywgJ2NyZWF0ZV9mcmFtZV9maWx0ZXInXQotKwot K2ZyYW1lX2ZpbHRlciA9IE5vbmUKLSsKLStkZWYgcHVzaF9mcmFtZV9maWx0ZXIgKGNvbnN0cnVj dG9yKToKLSsgICAgIiIiUmVnaXN0ZXIgYSBuZXcgYmFja3RyYWNlIGZpbHRlciBjbGFzcyB3aXRo IHRoZSAnYmFja3RyYWNlJyBjb21tYW5kLgotK1RoZSBmaWx0ZXIgd2lsbCBiZSBwYXNzZWQgYW4g aXRlcmF0b3IgYXMgYW4gYXJndW1lbnQuICBUaGUgaXRlcmF0b3IKLSt3aWxsIHJldHVybiBnZGIu RnJhbWUtbGlrZSBvYmplY3RzLiAgVGhlIGZpbHRlciBzaG91bGQgaW4gdHVybiBhY3QgYXMKLSth biBpdGVyYXRvciByZXR1cm5pbmcgc3VjaCBvYmplY3RzLiIiIgotKyAgICBnbG9iYWwgZnJhbWVf ZmlsdGVyCi0rICAgIGlmIGZyYW1lX2ZpbHRlciA9PSBOb25lOgotKyAgICAgICAgZnJhbWVfZmls dGVyID0gY29uc3RydWN0b3IKLSsgICAgZWxzZToKLSsgICAgICAgIGZyYW1lX2ZpbHRlciA9IGxh bWJkYSBpdGVyYXRvciwgZmlsdGVyID0gZnJhbWVfZmlsdGVyOiBjb25zdHJ1Y3RvciAoZmlsdGVy IChpdGVyYXRvcikpCi0rCi0rZGVmIGNyZWF0ZV9mcmFtZV9maWx0ZXIgKGl0ZXIpOgotKyAgICBn bG9iYWwgZnJhbWVfZmlsdGVyCi0rICAgIGlmIGZyYW1lX2ZpbHRlciBpcyBOb25lOgotKyAgICAg ICAgcmV0dXJuIGl0ZXIKLSsgICAgcmV0dXJuIGZyYW1lX2ZpbHRlciAoaXRlcikKLSsKLWRpZmYg LS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9iYWNrdHJhY2UucHkgYi9nZGIvcHl0 aG9uL2xpYi9nZGIvY29tbWFuZC9iYWNrdHJhY2UucHkKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1p bmRleCAwMDAwMDAwLi5lZWVhOTA5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvcHl0aG9uL2xp Yi9nZGIvY29tbWFuZC9iYWNrdHJhY2UucHkKLUBAIC0wLDAgKzEsMTA2IEBACi0rIyBOZXcgYmFj a3RyYWNlIGNvbW1hbmQuCi0rCi0rIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgotKwotK2ltcG9ydCBnZGIKLStpbXBvcnQgZ2RiLmJhY2t0cmFjZQotK2ltcG9ydCBpdGVy dG9vbHMKLStmcm9tIGdkYi5GcmFtZUl0ZXJhdG9yIGltcG9ydCBGcmFtZUl0ZXJhdG9yCi0rZnJv bSBnZGIuRnJhbWVXcmFwcGVyIGltcG9ydCBGcmFtZVdyYXBwZXIKLStpbXBvcnQgc3lzCi0rCi0r Y2xhc3MgUmV2ZXJzZUJhY2t0cmFjZVBhcmFtZXRlciAoZ2RiLlBhcmFtZXRlcik6Ci0rICAgICIi IlRoZSBuZXctYmFja3RyYWNlIGNvbW1hbmQgY2FuIHNob3cgYmFja3RyYWNlcyBpbiAncmV2ZXJz ZScgb3JkZXIuCi0rVGhpcyBtZWFucyB0aGF0IHRoZSBpbm5lcm1vc3QgZnJhbWUgd2lsbCBiZSBw cmludGVkIGxhc3QuCi0rTm90ZSB0aGF0IHJldmVyc2UgYmFja3RyYWNlcyBhcmUgbW9yZSBleHBl bnNpdmUgdG8gY29tcHV0ZS4iIiIKLSsKLSsgICAgc2V0X2RvYyA9ICJFbmFibGUgb3IgZGlzYWJs ZSByZXZlcnNlIGJhY2t0cmFjZXMuIgotKyAgICBzaG93X2RvYyA9ICJTaG93IHdoZXRoZXIgYmFj a3RyYWNlcyB3aWxsIGJlIHByaW50ZWQgaW4gcmV2ZXJzZSBvcmRlci4iCi0rCi0rICAgIGRlZiBf X2luaXRfXyhzZWxmKToKLSsgICAgICAgIGdkYi5QYXJhbWV0ZXIuX19pbml0X18gKHNlbGYsICJy ZXZlcnNlLWJhY2t0cmFjZSIsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIu Q09NTUFORF9TVEFDSywgZ2RiLlBBUkFNX0JPT0xFQU4pCi0rICAgICAgICAjIERlZmF1bHQgdG8g Y29tcGF0aWJpbGl0eSB3aXRoIGdkYi4KLSsgICAgICAgIHNlbGYudmFsdWUgPSBGYWxzZQotKwot K2NsYXNzIEZpbHRlcmluZ0JhY2t0cmFjZSAoZ2RiLkNvbW1hbmQpOgotKyAgICAiIiJQcmludCBi YWNrdHJhY2Ugb2YgYWxsIHN0YWNrIGZyYW1lcywgb3IgaW5uZXJtb3N0IENPVU5UIGZyYW1lcy4K LStXaXRoIGEgbmVnYXRpdmUgYXJndW1lbnQsIHByaW50IG91dGVybW9zdCAtQ09VTlQgZnJhbWVz LgotK1VzZSBvZiB0aGUgJ2Z1bGwnIHF1YWxpZmllciBhbHNvIHByaW50cyB0aGUgdmFsdWVzIG9m IHRoZSBsb2NhbCB2YXJpYWJsZXMuCi0rVXNlIG9mIHRoZSAncmF3JyBxdWFsaWZpZXIgYXZvaWRz IGFueSBmaWx0ZXJpbmcgYnkgbG9hZGFibGUgbW9kdWxlcy4KLSsiIiIKLSsKLSsgICAgZGVmIF9f aW5pdF9fIChzZWxmKToKLSsgICAgICAgICMgRklYTUU6IHRoaXMgaXMgbm90IHdvcmtpbmcgcXVp dGUgd2VsbCBlbm91Z2ggdG8gcmVwbGFjZQotKyAgICAgICAgIyAiYmFja3RyYWNlIiB5ZXQuCi0r ICAgICAgICBnZGIuQ29tbWFuZC5fX2luaXRfXyAoc2VsZiwgIm5ldy1iYWNrdHJhY2UiLCBnZGIu Q09NTUFORF9TVEFDSykKLSsgICAgICAgIHNlbGYucmV2ZXJzZSA9IFJldmVyc2VCYWNrdHJhY2VQ YXJhbWV0ZXIoKQotKwotKyAgICBkZWYgcmV2ZXJzZV9pdGVyIChzZWxmLCBpdGVyKToKLSsgICAg ICAgIHJlc3VsdCA9IFtdCi0rICAgICAgICBmb3IgaXRlbSBpbiBpdGVyOgotKyAgICAgICAgICAg IHJlc3VsdC5hcHBlbmQgKGl0ZW0pCi0rICAgICAgICByZXN1bHQucmV2ZXJzZSgpCi0rICAgICAg ICByZXR1cm4gcmVzdWx0Ci0rCi0rICAgIGRlZiBmaW5hbF9uIChzZWxmLCBpdGVyLCB4KToKLSsg ICAgICAgIHJlc3VsdCA9IFtdCi0rICAgICAgICBmb3IgaXRlbSBpbiBpdGVyOgotKyAgICAgICAg ICAgIHJlc3VsdC5hcHBlbmQgKGl0ZW0pCi0rICAgICAgICByZXR1cm4gcmVzdWx0W3g6XQotKwot KyAgICBkZWYgaW52b2tlIChzZWxmLCBhcmcsIGZyb21fdHR5KToKLSsgICAgICAgIGkgPSAwCi0r ICAgICAgICBjb3VudCA9IDAKLSsgICAgICAgIGZpbHRlciA9IFRydWUKLSsgICAgICAgIGZ1bGwg PSBGYWxzZQotKwotKyAgICAgICAgZm9yIHdvcmQgaW4gYXJnLnNwbGl0ICgiICIpOgotKyAgICAg ICAgICAgIGlmIHdvcmQgPT0gJyc6Ci0rICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0rICAgICAg ICAgICAgZWxpZiB3b3JkID09ICdyYXcnOgotKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBGYWxz ZQotKyAgICAgICAgICAgIGVsaWYgd29yZCA9PSAnZnVsbCc6Ci0rICAgICAgICAgICAgICAgIGZ1 bGwgPSBUcnVlCi0rICAgICAgICAgICAgZWxzZToKLSsgICAgICAgICAgICAgICAgY291bnQgPSBp bnQgKHdvcmQpCi0rCi0rICAgICAgICAjIEZJWE1FOiBwcm92aWRlIG9wdGlvbiB0byBzdGFydCBh dCBzZWxlY3RlZCBmcmFtZQotKyAgICAgICAgIyBIb3dldmVyLCBzaG91bGQgc3RpbGwgbnVtYmVy IGFzIGlmIHN0YXJ0aW5nIGZyb20gbmV3ZXN0Ci0rICAgICAgICBuZXdlc3RfZnJhbWUgPSBnZGIu bmV3ZXN0X2ZyYW1lKCkKLSsgICAgICAgIGl0ZXIgPSBpdGVydG9vbHMuaW1hcCAoRnJhbWVXcmFw cGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZUl0ZXJhdG9yIChuZXdl c3RfZnJhbWUpKQotKyAgICAgICAgaWYgZmlsdGVyOgotKyAgICAgICAgICAgIGl0ZXIgPSBnZGIu YmFja3RyYWNlLmNyZWF0ZV9mcmFtZV9maWx0ZXIgKGl0ZXIpCi0rCi0rICAgICAgICAjIE5vdyB3 cmFwIGluIGFuIGl0ZXJhdG9yIHRoYXQgbnVtYmVycyB0aGUgZnJhbWVzLgotKyAgICAgICAgaXRl ciA9IGl0ZXJ0b29scy5pemlwIChpdGVydG9vbHMuY291bnQgKDApLCBpdGVyKQotKwotKyAgICAg ICAgIyBSZXZlcnNlIGlmIHRoZSB1c2VyIHdhbnRlZCB0aGF0LgotKyAgICAgICAgaWYgc2VsZi5y ZXZlcnNlLnZhbHVlOgotKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLnJldmVyc2VfaXRlciAoaXRl cikKLSsKLSsgICAgICAgICMgRXh0cmFjdCBzdWItcmFuZ2UgdXNlciB3YW50cy4KLSsgICAgICAg IGlmIGNvdW50IDwgMDoKLSsgICAgICAgICAgICBpdGVyID0gc2VsZi5maW5hbF9uIChpdGVyLCBj b3VudCkKLSsgICAgICAgIGVsaWYgY291bnQgPiAwOgotKyAgICAgICAgICAgIGl0ZXIgPSBpdGVy dG9vbHMuaXNsaWNlIChpdGVyLCAwLCBjb3VudCkKLSsKLSsgICAgICAgIGZvciBwYWlyIGluIGl0 ZXI6Ci0rICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSAoIiMlLTJkIiAlIHBhaXJbMF0pCi0r ICAgICAgICAgICAgcGFpclsxXS5kZXNjcmliZSAoc3lzLnN0ZG91dCwgZnVsbCkKLSsKLStGaWx0 ZXJpbmdCYWNrdHJhY2UoKQogZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5k L2lnbm9yZV9lcnJvcnMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9pZ25vcmVfZXJy b3JzLnB5CiBuZXcgZmlsZSBtb2RlIDEwMDY0NAogaW5kZXggMDAwMDAwMC4uNmZhNDhmZgpAQCAt NDIyNSwyMDQgKzM5MDEsNiBAQCBpbmRleCAwMDAwMDAwLi42MzZmOTlkCiArICAgICAgICBzZWxm LnBhaG9sZSAodHlwZSwgMCwgJycpCiArCiArUGFob2xlKCkKLWRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL2xpYi9nZGIvY29tbWFuZC9yZXF1aXJlLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1h bmQvcmVxdWlyZS5weQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjFmYmMx ZTgKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL3JlcXVp cmUucHkKLUBAIC0wLDAgKzEsNTcgQEAKLSsjIERlbWFuZC1sb2FkaW5nIGNvbW1hbmRzLgotKwot KyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgotKwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStpbXBvcnQgZ2RiCi0raW1w b3J0IG9zCi0rCi0rY2xhc3MgUmVxdWlyZUNvbW1hbmQgKGdkYi5Db21tYW5kKToKLSsgICAgIiIi UHJlZml4IGNvbW1hbmQgZm9yIHJlcXVpcmluZyBmZWF0dXJlcy4iIiIKLSsKLSsgICAgZGVmIF9f aW5pdF9fIChzZWxmKToKLSsgICAgICAgIHN1cGVyIChSZXF1aXJlQ29tbWFuZCwgc2VsZikuX19p bml0X18gKCJyZXF1aXJlIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdkYi5DT01NQU5EX1NVUFBPUlQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCi0rCi0rY2xhc3MgUmVxdWly ZVN1YmNvbW1hbmQgKGdkYi5Db21tYW5kKToKLSsgICAgIiIiRGVtYW5kLWxvYWQgYSBjb21tYW5k IGJ5IG5hbWUuIiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbmFtZSk6Ci0rICAgICAg ICBzZWxmLl9fZG9jX18gPSAiRGVtYW5kLWxvYWQgYSAlcyBieSBuYW1lLiIgJSBuYW1lCi0rICAg ICAgICBzdXBlciAoUmVxdWlyZVN1YmNvbW1hbmQsIHNlbGYpLl9faW5pdF9fICgicmVxdWlyZSAl cyIgJSBuYW1lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2RiLkNPTU1BTkRfU1VQUE9SVCkKLSsgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSsK LSsgICAgZGVmIGludm9rZSAoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Ci0rICAgICAgICBmb3IgY21k IGluIGFyZy5zcGxpdCgpOgotKyAgICAgICAgICAgIGV4ZWMgKCdpbXBvcnQgZ2RiLicgKyBzZWxm Lm5hbWUgKyAnLicgKyBjbWQsIGdsb2JhbHMgKCkpCi0rCi0rICAgIGRlZiBjb21wbGV0ZSAoc2Vs ZiwgdGV4dCwgd29yZCk6Ci0rICAgICAgICBkaXIgPSBnZGIucHl0aG9uZGlyICsgJy9nZGIvJyAr IHNlbGYubmFtZQotKyAgICAgICAgcmVzdWx0ID0gW10KLSsgICAgICAgIGZvciBmaWxlIGluIG9z Lmxpc3RkaXIoZGlyKToKLSsgICAgICAgICAgICBpZiBub3QgZmlsZS5zdGFydHN3aXRoICh3b3Jk KSBvciBub3QgZmlsZS5lbmRzd2l0aCAoJy5weScpOgotKyAgICAgICAgICAgICAgICBjb250aW51 ZQotKyAgICAgICAgICAgIGZlYXR1cmUgPSBmaWxlWzA6LTNdCi0rICAgICAgICAgICAgaWYgZmVh dHVyZSA9PSAncmVxdWlyZScgb3IgZmVhdHVyZSA9PSAnX19pbml0X18nOgotKyAgICAgICAgICAg ICAgICBjb250aW51ZQotKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQgKGZlYXR1cmUpCi0rICAg ICAgICByZXR1cm4gcmVzdWx0Ci0rCi0rUmVxdWlyZUNvbW1hbmQoKQotK1JlcXVpcmVTdWJjb21t YW5kKCJjb21tYW5kIikKLStSZXF1aXJlU3ViY29tbWFuZCgiZnVuY3Rpb24iKQotZGlmZiAtLWdp dCBhL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL3VwdG8ucHkgYi9nZGIvcHl0aG9uL2xpYi9n ZGIvY29tbWFuZC91cHRvLnB5Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4u ZmFmNTRlZAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2NvbW1hbmQv dXB0by5weQotQEAgLTAsMCArMSwxMjkgQEAKLSsjIHVwdG8gY29tbWFuZC4KLSsKLSsjIENvcHly aWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0raW1wb3J0IGdkYgotK2ltcG9ydCByZQotK2Zyb20g Z2RiLkZyYW1lSXRlcmF0b3IgaW1wb3J0IEZyYW1lSXRlcmF0b3IKLStmcm9tIGdkYi5GcmFtZVdy YXBwZXIgaW1wb3J0IEZyYW1lV3JhcHBlcgotKwotK2NsYXNzIFVwdG9QcmVmaXggKGdkYi5Db21t YW5kKToKLSsgICAgZGVmIF9faW5pdF9fIChzZWxmKToKLSsgICAgICAgIHN1cGVyIChVcHRvUHJl Zml4LCBzZWxmKS5fX2luaXRfXyAoInVwdG8iLCBnZGIuQ09NTUFORF9TVEFDSywKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gVHJ1ZSkKLSsKLStj bGFzcyBVcHRvSW1wbGVtZW50YXRpb24gKGdkYi5Db21tYW5kKToKLSsgICAgZGVmIF9faW5pdF9f IChzZWxmLCBzdWJjb21tYW5kKToKLSsgICAgICAgIHN1cGVyIChVcHRvSW1wbGVtZW50YXRpb24s IHNlbGYpLl9faW5pdF9fICgidXB0byAiICsgc3ViY29tbWFuZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9TVEFDSykKLSsK LSsgICAgZGVmIHNlYXJjaCAoc2VsZik6Ci0rICAgICAgICBzYXZlZCA9IGdkYi5zZWxlY3RlZF9m cmFtZSAoKQotKyAgICAgICAgaXRlciA9IEZyYW1lSXRlcmF0b3IgKHNhdmVkKQotKyAgICAgICAg Zm91bmQgPSBGYWxzZQotKyAgICAgICAgdHJ5OgotKyAgICAgICAgICAgIGZvciBmcmFtZSBpbiBp dGVyOgotKyAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3QgKCkKLSsgICAgICAgICAgICAgICAg dHJ5OgotKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5maWx0ZXIgKGZyYW1lKToKLSsgICAg ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyID0gRnJhbWVXcmFwcGVyIChmcmFtZSkKLSsgICAg ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmRlc2NyaWJlIChzeXMuc3Rkb3V0LCBGYWxzZSkK LSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgICAgICAgICAgZXhjZXB0 OgotKyAgICAgICAgICAgICAgICAgICAgcGFzcwotKyAgICAgICAgZXhjZXB0OgotKyAgICAgICAg ICAgIHBhc3MKLSsgICAgICAgIHNhdmVkLnNlbGVjdCAoKQotKyAgICAgICAgcmFpc2UgUnVudGlt ZUVycm9yLCAnQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBmcmFtZScKLSsKLSsgICAgZGVmIGlu dm9rZSAoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Ci0rICAgICAgICBzZWxmLnJ4ID0gcmUuY29tcGls ZSAoYXJnKQotKyAgICAgICAgc2VsZi5zZWFyY2ggKCkKLSsKLStjbGFzcyBVcHRvU3ltYm9sQ29t bWFuZCAoVXB0b0ltcGxlbWVudGF0aW9uKToKLSsgICAgIiIiU2VsZWN0IGFuZCBwcmludCBzb21l IGNhbGxpbmcgc3RhY2sgZnJhbWUsIGJhc2VkIG9uIHN5bWJvbC4KLStUaGUgYXJndW1lbnQgaXMg YSByZWd1bGFyIGV4cHJlc3Npb24uICBUaGlzIGNvbW1hbmQgbW92ZXMgdXAgdGhlCi0rc3RhY2ss IHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmcmFtZSB3aG9zZSBzeW1ib2wgbWF0Y2hlcyB0aGUgcmVn dWxhcgotK2V4cHJlc3Npb24uIiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyAoc2VsZik6Ci0rICAg ICAgICBzdXBlciAoVXB0b1N5bWJvbENvbW1hbmQsIHNlbGYpLl9faW5pdF9fICgic3ltYm9sIikK LSsKLSsgICAgZGVmIGZpbHRlciAoc2VsZiwgZnJhbWUpOgotKyAgICAgICAgbmFtZSA9IGZyYW1l Lm5hbWUgKCkKLSsgICAgICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6Ci0rICAgICAgICAgICAgaWYg c2VsZi5yeC5zZWFyY2ggKG5hbWUpIGlzIG5vdCBOb25lOgotKyAgICAgICAgICAgICAgICByZXR1 cm4gVHJ1ZQotKyAgICAgICAgcmV0dXJuIEZhbHNlCi0rCi0rY2xhc3MgVXB0b1NvdXJjZUNvbW1h bmQgKFVwdG9JbXBsZW1lbnRhdGlvbik6Ci0rICAgICIiIlNlbGVjdCBhbmQgcHJpbnQgc29tZSBj YWxsaW5nIHN0YWNrIGZyYW1lLCBiYXNlZCBvbiBzb3VyY2UgZmlsZS4KLStUaGUgYXJndW1lbnQg aXMgYSByZWd1bGFyIGV4cHJlc3Npb24uICBUaGlzIGNvbW1hbmQgbW92ZXMgdXAgdGhlCi0rc3Rh Y2ssIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmcmFtZSB3aG9zZSBzb3VyY2UgZmlsZSBuYW1lIG1h dGNoZXMgdGhlCi0rcmVndWxhciBleHByZXNzaW9uLiIiIgotKwotKyAgICBkZWYgX19pbml0X18g KHNlbGYpOgotKyAgICAgICAgc3VwZXIgKFVwdG9Tb3VyY2VDb21tYW5kLCBzZWxmKS5fX2luaXRf XyAoInNvdXJjZSIpCi0rCi0rICAgIGRlZiBmaWx0ZXIgKHNlbGYsIGZyYW1lKToKLSsgICAgICAg IG5hbWUgPSBmcmFtZS5maW5kX3NhbCAoKS5zeW10YWIuZmlsZW5hbWUKLSsgICAgICAgIGlmIG5h bWUgaXMgbm90IE5vbmU6Ci0rICAgICAgICAgICAgaWYgc2VsZi5yeC5zZWFyY2ggKG5hbWUpIGlz IG5vdCBOb25lOgotKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotKyAgICAgICAgcmV0dXJu IEZhbHNlCi0rCi0rY2xhc3MgVXB0b09iamVjdENvbW1hbmQgKFVwdG9JbXBsZW1lbnRhdGlvbik6 Ci0rICAgICIiIlNlbGVjdCBhbmQgcHJpbnQgc29tZSBjYWxsaW5nIHN0YWNrIGZyYW1lLCBiYXNl ZCBvbiBvYmplY3QgZmlsZS4KLStUaGUgYXJndW1lbnQgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24u ICBUaGlzIGNvbW1hbmQgbW92ZXMgdXAgdGhlCi0rc3RhY2ssIHN0b3BwaW5nIGF0IHRoZSBmaXJz dCBmcmFtZSB3aG9zZSBvYmplY3QgZmlsZSBuYW1lIG1hdGNoZXMgdGhlCi0rcmVndWxhciBleHBy ZXNzaW9uLiIiIgotKwotKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgotKyAgICAgICAgc3VwZXIg KFVwdG9PYmplY3RDb21tYW5kLCBzZWxmKS5fX2luaXRfXyAoIm9iamVjdCIpCi0rCi0rICAgIGRl ZiBmaWx0ZXIgKHNlbGYsIGZyYW1lKToKLSsgICAgICAgIG5hbWUgPSBmcmFtZS5maW5kX3NhbCAo KS5zeW10YWIub2JqZmlsZS5maWxlbmFtZQotKyAgICAgICAgaWYgbmFtZSBpcyBub3QgTm9uZToK LSsgICAgICAgICAgICBpZiBzZWxmLnJ4LnNlYXJjaCAobmFtZSkgaXMgbm90IE5vbmU6Ci0rICAg ICAgICAgICAgICAgIHJldHVybiBUcnVlCi0rICAgICAgICByZXR1cm4gRmFsc2UKLSsKLStjbGFz cyBVcHRvV2hlcmVDb21tYW5kIChVcHRvSW1wbGVtZW50YXRpb24pOgotKyAgICAiIiJTZWxlY3Qg YW5kIHByaW50IHNvbWUgY2FsbGluZyBzdGFjayBmcmFtZSwgYmFzZWQgb24gZXhwcmVzc2lvbi4K LStUaGUgYXJndW1lbnQgaXMgYW4gZXhwcmVzc2lvbi4gIFRoaXMgY29tbWFuZCBtb3ZlcyB1cCB0 aGUgc3RhY2ssCi0rcGFyc2luZyBhbmQgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBpbiBlYWNo IGZyYW1lLiAgVGhpcyBzdG9wcyB3aGVuCi0rdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEg bm9uLXplcm8gKHRydWUpIHZhbHVlLiIiIgotKwotKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgot KyAgICAgICAgc3VwZXIgKFVwdG9XaGVyZUNvbW1hbmQsIHNlbGYpLl9faW5pdF9fICgid2hlcmUi KQotKwotKyAgICBkZWYgZmlsdGVyIChzZWxmLCBmcmFtZSk6Ci0rICAgICAgICB0cnk6Ci0rICAg ICAgICAgICAgaWYgZ2RiLnBhcnNlX2FuZF9ldmFsIChzZWxmLmV4cHJlc3Npb24pOgotKyAgICAg ICAgICAgICAgICByZXR1cm4gVHJ1ZQotKyAgICAgICAgZXhjZXB0OgotKyAgICAgICAgICAgIHBh c3MKLSsgICAgICAgIHJldHVybiBGYWxzZQotKwotKyAgICBkZWYgaW52b2tlIChzZWxmLCBhcmcs IGZyb21fdHR5KToKLSsgICAgICAgIHNlbGYuZXhwcmVzc2lvbiA9IGFyZwotKyAgICAgICAgc2Vs Zi5zZWFyY2ggKCkKLSsKLStVcHRvUHJlZml4ICgpCi0rVXB0b1N5bWJvbENvbW1hbmQgKCkKLStV cHRvU291cmNlQ29tbWFuZCAoKQotK1VwdG9PYmplY3RDb21tYW5kICgpCi0rVXB0b1doZXJlQ29t bWFuZCAoKQogZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9mdW5jdGlvbi9jYWxsZXJf aXMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vY2FsbGVyX2lzLnB5CiBuZXcgZmls ZSBtb2RlIDEwMDY0NAogaW5kZXggMDAwMDAwMC4uMmI5YzVjNwoKZGlmZiAtLWdpdCBhL2dkYi11 cHN0cmVhbS1mcmFtZWZpbHRlcnMtMW9mMi5wYXRjaCBiL2dkYi11cHN0cmVhbS1mcmFtZWZpbHRl cnMtMW9mMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGFiMTg4 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0xb2YyLnBhdGNo CkBAIC0wLDAgKzEsNTU1MSBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1jdnMvMjAx My0wNS9tc2cwMDA4NC5odG1sCisKKyMjIyBzcmMvZ2RiL0NoYW5nZUxvZwkyMDEzLzA1LzA5IDE4 OjAzOjI3CTEuMTU1MzkKKyMjIyBzcmMvZ2RiL0NoYW5nZUxvZwkyMDEzLzA1LzEwIDEwOjI2OjAx CTEuMTU1NDAKKyMjIC0xLDMgKzEsNTIgQEAKKysyMDEzLTA1LTEwICBQaGlsIE11bGRvb24gIDxw bXVsZG9vbkByZWRoYXQuY29tPgorKworKwkqIHN0YWNrLmMgKGJhY2t0cmFjZV9jb21tYW5kXzEp OiBBZGQgIm5vLWZpbHRlcnMiLCBhbmQgUHl0aG9uIGZyYW1lCisrCWZpbHRlciBsb2dpYy4KKysJ KGJhY2t0cmFjZV9jb21tYW5kKTogQWRkICJuby1maWx0ZXJzIiBvcHRpb24gcGFyc2luZy4KKysJ KF9pbml0aWFsaXplX3N0YWNrKTogQWx0ZXIgaGVscCB0byByZWZsZWN0ICJuby1maWx0ZXJzIiBv cHRpb24uCisrCSogTWFrZWZpbGUuaW4gKFNVQkRJUl9QWVRIT05fT0JTKTogQWRkIHB5LWZyYW1l ZmlsdGVyLm8KKysJKFNVQkRJUl9QWVRIT05fU1JDUyk6IEFkZCBweS1mcmFtZWZpbHRlci5jCisr CShweS1mcmFtZS5vKTogQWRkIHRhcmdldAorKwkqIGRhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmlu IChQWVRIT05fRElSKTogQWRkIFB5dGhvbiBmcmFtZQorKwlmaWx0ZXIgZmlsZXMuCisrCSogcHl0 aG9uL3B5dGhvbi5oOiBBZGQgbmV3IGZyYW1lIGZpbHRlciBjb25zdGFudHMsIGFuZCBmbGFnIGVu dW0uCisrCShhcHBseV9mcmFtZV9maWx0ZXIpOiBBZGQgZGVmaW5pdGlvbi4KKysJKiBweXRob24v cHl0aG9uLmMgKGFwcGx5X2ZyYW1lX2ZpbHRlcik6IE5ldyBub24tUHl0aG9uCisrCWVuYWJsZWQg ZnVuY3Rpb24uCisrCSogcHl0aG9uL3B5LXV0aWxzLmMgKHB5X3hkZWNyZWYpOiBOZXcgZnVuY3Rp b24uCisrCShtYWtlX2NsZWFudXBfcHlfeGRlY3JlZik6IERpdHRvLgorKwkqIHB5dGhvbi9weS1v YmpmaWxlLmM6IERlY2xhcmUgZnJhbWVfZmlsdGVycyBkaWN0aW9uYXJ5LgorKwkob2JqZnB5X2Rl YWxsb2MpOiBBZGQgZnJhbWVfZmlsdGVycyBkZWFsbG9jLgorKwkob2JqZnB5X25ldyk6IEluaXRp YWxpemUgZnJhbWVfZmlsdGVycyBhdHRyaWJ1dGUuCisrCShvYmpmaWxlX3RvX29iamZpbGVfb2Jq ZWN0KTogRGl0dG8uCisrCShvYmpmcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMpOiBOZXcgZnVuY3Rpb24u CisrCShvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMpOiBOZXcgZnVuY3Rpb24uCisrCSogcHl0aG9u L3B5LXByb2dzcGFjZS5jOiBEZWNsYXJlIGZyYW1lX2ZpbHRlcnMgZGljdGlvbmFyeS4KKysJKHBz cHlfZGVhbGxvYyk6IEFkZCBmcmFtZV9maWx0ZXJzIGRlYWxsb2MuCisrCShwc3B5X25ldyk6IElu aXRpYWxpemUgZnJhbWVfZmlsdGVycyBhdHRyaWJ1dGUuCisrCShwc3BhY2VlX3RvX3BzcGFjZV9v YmplY3QpOiBEaXR0by4KKysJKHBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMpOiBOZXcgZnVuY3Rpb24u CisrCShwc3B5X3NldF9mcmFtZV9maWx0ZXJzKTogTmV3IGZ1bmN0aW9uLgorKwkqIHB5dGhvbi9w eS1mcmFtZWZpbHRlci5jOiBOZXcgZmlsZS4KKysJKiBweXRob24vbGliL2dkYi9jb21tYW5kL2Zy YW1lX2ZpbHRlcnMucHk6IE5ldyBmaWxlLgorKwkqIHB5dGhvbi9saWIvZ2RiL2ZyYW1lcy5weTog TmV3IGZpbGUuCisrCSogcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHk6IEluaXRpYWxpemUgZ2xv YmFsIGZyYW1lX2ZpbHRlcnMKKysJZGljdGlvbmFyeQorKwkqIHB5dGhvbi9saWIvZ2RiL0ZyYW1l RGVjb3JhdG9yLnB5OiBOZXcgZmlsZS4KKysJKiBweXRob24vbGliL2dkYi9GcmFtZUl0ZXJhdG9y LnB5OiBOZXcgZmlsZS4KKysJKiBtaS9taS1jbWRzLmMgKG1pX2NtZHMpOiBBZGQgZnJhbWUgZmls dGVycyBjb21tYW5kLgorKwkqIG1pL21pLWNtZHMuaDogRGVjbGFyZS4KKysJKiBtaS9taS1jbWQt c3RhY2suYyAobWlfY21kX3N0YWNrX2xpc3RfZnJhbWVzKTogQWRkCisrCS0tbm8tZnJhbWUtZmls dGVyIGxvZ2ljLCBhbmQgUHl0aG9uIGZyYW1lIGZpbHRlciBsb2dpYy4KKysJKHN0YWNrX2VuYWJs ZV9mcmFtZV9maWx0ZXJzKTogTmV3IGZ1bmN0aW9uLgorKwkocGFyc2Vfbm9fZnJhbWVfb3B0aW9u KTogRGl0dG8uCisrCShtaV9jbWRfc3RhY2tfbGlzdF9mcmFtZXMpOiBBZGQgLS1uby1mcmFtZS1m aWx0ZXIgYW5kIFB5dGhvbiBmcmFtZQorKwlmaWx0ZXIgbG9naWMuCisrCShtaV9jbWRfc3RhY2tf bGlzdF9sb2NhbHMpOiBEaXR0by4KKysJKG1pX2NtZF9zdGFja19saXN0X2FyZ3MpOiBEaXR0by4K KysJKG1pX2NtZF9zdGFja19saXN0X3ZhcmlhYmxlcyk6IERpdHRvLgorKwkqIE5FV1M6IEFkZCBm cmFtZSBmaWx0ZXIgbm90ZS4KKysKKyAyMDEzLTA1LTA5ICBEb3VnIEV2YW5zICA8ZGplQGdvb2ds ZS5jb20+CisgCisgCSogc3ltZmlsZS5jIChzeW1zX2Zyb21fb2JqZmlsZV8xKTogRGVsZXRlIGFy Z3Mgb2Zmc2V0cywgbnVtX29mZnNldHMuCitJbmRleDogZ2RiLTcuNi9nZGIvTWFrZWZpbGUuaW4K Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL01ha2VmaWxlLmluCTIwMTMtMDUtMjAg MjI6MjM6MzYuNzQ4MjE1MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvTWFrZWZpbGUuaW4JMjAx My0wNS0yMCAyMjoyNTo1Mi4wOTYxNjU3NzMgKzAyMDAKK0BAIC0yODQsNiArMjg0LDcgQEAgU1VC RElSX1BZVEhPTl9PQlMgPSBcCisgCXB5LWV4aXRlZGV2ZW50Lm8gXAorIAlweS1maW5pc2hicmVh a3BvaW50Lm8gXAorIAlweS1mcmFtZS5vIFwKKysJcHktZnJhbWVmaWx0ZXIubyBcCisgCXB5LWZ1 bmN0aW9uLm8gXAorIAlweS1nZGItcmVhZGxpbmUubyBcCisgCXB5LWluZmVyaW9yLm8gXAorQEAg LTMxOCw2ICszMTksNyBAQCBTVUJESVJfUFlUSE9OX1NSQ1MgPSBcCisgCXB5dGhvbi9weS1leGl0 ZWRldmVudC5jIFwKKyAJcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYyBcCisgCXB5dGhvbi9w eS1mcmFtZS5jIFwKKysJcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMgXAorIAlweXRob24vcHktZnVu Y3Rpb24uYyBcCisgCXB5dGhvbi9weS1nZGItcmVhZGxpbmUuYyBcCisgCXB5dGhvbi9weS1pbmZl cmlvci5jIFwKK0BAIC0yMTM1LDYgKzIxMzcsMTAgQEAgcHktZnJhbWUubzogJChzcmNkaXIpL3B5 dGhvbi9weS1mcmFtZS5jCisgCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdTKSAkKHNyY2Rpcikv cHl0aG9uL3B5LWZyYW1lLmMKKyAJJChQT1NUQ09NUElMRSkKKyAKKytweS1mcmFtZWZpbHRlci5v OiAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMKKysJJChDT01QSUxFKSAkKFBZVEhP Tl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWVmaWx0ZXIuYworKwkkKFBPU1RDT01Q SUxFKQorKworIHB5LWZ1bmN0aW9uLm86ICQoc3JjZGlyKS9weXRob24vcHktZnVuY3Rpb24uYwor IAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhvbi9weS1mdW5jdGlv bi5jCisgCSQoUE9TVENPTVBJTEUpCitJbmRleDogZ2RiLTcuNi9nZGIvTkVXUworPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0tIGdkYi03LjYub3JpZy9nZGIvTkVXUwkyMDEzLTA1LTIwIDIyOjIzOjM2Ljc0ODIxNTE0 NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL05FV1MJMjAxMy0wNS0yMCAyMjoyNTo1Mi4wOTcxNjU3 NzIgKzAyMDAKK0BAIC00LDYgKzQsMTAgQEAKKyAqIE5ld2x5IGluc3RhbGxlZCAkcHJlZml4L2Jp bi9nY29yZSBhY3RzIGFzIGEgc2hlbGwgaW50ZXJmYWNlIGZvciB0aGUKKyAgIEdEQiBjb21tYW5k IGdjb3JlLgorIAorKyogUHl0aG9uIHNjcmlwdGluZworKworKyAgKiogRnJhbWUgZmlsdGVycyBh bmQgZnJhbWUgZGVjb3JhdG9ycyBoYXZlIGJlZW4gYWRkZWQuCisrCisgKioqIENoYW5nZXMgaW4g R0RCIDcuNgorIAorICogVGFyZ2V0IHJlY29yZCBoYXMgYmVlbiByZW5hbWVkIHRvIHJlY29yZC1m dWxsLgorSW5kZXg6IGdkYi03LjYvZ2RiL3N0YWNrLmMKKz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42 Lm9yaWcvZ2RiL3N0YWNrLmMJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysr KyBnZGItNy42L2dkYi9zdGFjay5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMDk4MTY1NzcyICswMjAw CitAQCAtNTQsNiArNTQsNyBAQAorIAorICNpbmNsdWRlICJwc3ltdGFiLmgiCisgI2luY2x1ZGUg InN5bWZpbGUuaCIKKysjaW5jbHVkZSAicHl0aG9uL3B5dGhvbi5oIgorIAorIHZvaWQgKCpkZXBy ZWNhdGVkX3NlbGVjdGVkX2ZyYW1lX2xldmVsX2NoYW5nZWRfaG9vaykgKGludCk7CisgCitAQCAt MTY1NSwxMyArMTY1NiwxNSBAQCBmcmFtZV9pbmZvIChjaGFyICphZGRyX2V4cCwgaW50IGZyb21f dHR5CisgICAgZnJhbWVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorLWJhY2t0cmFjZV9jb21tYW5k XzEgKGNoYXIgKmNvdW50X2V4cCwgaW50IHNob3dfbG9jYWxzLCBpbnQgZnJvbV90dHkpCisrYmFj a3RyYWNlX2NvbW1hbmRfMSAoY2hhciAqY291bnRfZXhwLCBpbnQgc2hvd19sb2NhbHMsIGludCBu b19maWx0ZXJzLAorKwkJICAgICBpbnQgZnJvbV90dHkpCisgeworICAgc3RydWN0IGZyYW1lX2lu Zm8gKmZpOworICAgaW50IGNvdW50OworICAgaW50IGk7CisgICBzdHJ1Y3QgZnJhbWVfaW5mbyAq dHJhaWxpbmc7CistICBpbnQgdHJhaWxpbmdfbGV2ZWw7CisrICBpbnQgdHJhaWxpbmdfbGV2ZWws IHB5X3N0YXJ0ID0gMCwgcHlfZW5kID0gMDsKKysgIGVudW0gcHlfYnRfc3RhdHVzIHJlc3VsdCA9 IFBZX0JUX0VSUk9SOworIAorICAgaWYgKCF0YXJnZXRfaGFzX3N0YWNrKQorICAgICBlcnJvciAo XygiTm8gc3RhY2suIikpOworQEAgLTE2ODAsNiArMTY4Myw3IEBAIGJhY2t0cmFjZV9jb21tYW5k XzEgKGNoYXIgKmNvdW50X2V4cCwgaW4KKyAJeworIAkgIHN0cnVjdCBmcmFtZV9pbmZvICpjdXJy ZW50OworIAorKwkgIHB5X3N0YXJ0ID0gY291bnQ7CisgCSAgY291bnQgPSAtY291bnQ7CisgCisg CSAgY3VycmVudCA9IHRyYWlsaW5nOworQEAgLTE3MDEsOSArMTcwNSwxNyBAQCBiYWNrdHJhY2Vf Y29tbWFuZF8xIChjaGFyICpjb3VudF9leHAsIGluCisgCisgCSAgY291bnQgPSAtMTsKKyAJfQor KyAgICAgIGVsc2UKKysJeworKwkgIHB5X3N0YXJ0ID0gMDsKKysJICBweV9lbmQgPSBjb3VudDsK KysJfQorICAgICB9CisgICBlbHNlCistICAgIGNvdW50ID0gLTE7CisrICAgIHsKKysgICAgICBw eV9lbmQgPSAtMTsKKysgICAgICBjb3VudCA9IC0xOworKyAgICB9CisgCisgICBpZiAoaW5mb192 ZXJib3NlKQorICAgICB7CitAQCAtMTcyMywxNiArMTczNSw0MCBAQCBiYWNrdHJhY2VfY29tbWFu ZF8xIChjaGFyICpjb3VudF9leHAsIGluCisgCX0KKyAgICAgfQorIAorLSAgZm9yIChpID0gMCwg ZmkgPSB0cmFpbGluZzsgZmkgJiYgY291bnQtLTsgaSsrLCBmaSA9IGdldF9wcmV2X2ZyYW1lIChm aSkpCisrICBpZiAoISBub19maWx0ZXJzKQorICAgICB7CistICAgICAgUVVJVDsKKysgICAgICBp bnQgZmxhZ3MgPSBQUklOVF9MRVZFTCB8IFBSSU5UX0ZSQU1FX0lORk8gfCBQUklOVF9BUkdTOwor KyAgICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdfdHlwZTsKKyAKKy0gICAgICAvKiBEb24ndCB1 c2UgcHJpbnRfc3RhY2tfZnJhbWU7IGlmIGFuIGVycm9yKCkgb2NjdXJzIGl0IHByb2JhYmx5Cist ICAgICAgICAgbWVhbnMgZnVydGhlciBhdHRlbXB0cyB0byBiYWNrdHJhY2Ugd291bGQgZmFpbCAo b24gdGhlIG90aGVyCistICAgICAgICAgaGFuZCwgcGVyaGFwcyB0aGUgY29kZSBkb2VzIG9yIGNv dWxkIGJlIGZpeGVkIHRvIG1ha2Ugc3VyZQorLSAgICAgICAgIHRoZSBmcmFtZS0+cHJldiBmaWVs ZCBnZXRzIHNldCB0byBOVUxMIGluIHRoYXQgY2FzZSkuICAqLworLSAgICAgIHByaW50X2ZyYW1l X2luZm8gKGZpLCAxLCBMT0NBVElPTiwgMSk7CisgICAgICAgaWYgKHNob3dfbG9jYWxzKQorKwlm bGFncyB8PSBQUklOVF9MT0NBTFM7CisrCisrICAgICAgaWYgKCFzdHJjbXAgKHByaW50X2ZyYW1l X2FyZ3VtZW50cywgInNjYWxhcnMiKSkKKysJYXJnX3R5cGUgPSBDTElfU0NBTEFSX1ZBTFVFUzsK KysgICAgICBlbHNlIGlmICghc3RyY21wIChwcmludF9mcmFtZV9hcmd1bWVudHMsICJhbGwiKSkK KysJYXJnX3R5cGUgPSBDTElfQUxMX1ZBTFVFUzsKKysgICAgICBlbHNlCisrCWFyZ190eXBlID0g Tk9fVkFMVUVTOworKworKyAgICAgIHJlc3VsdCA9IGFwcGx5X2ZyYW1lX2ZpbHRlciAoZ2V0X2N1 cnJlbnRfZnJhbWUgKCksIGZsYWdzLCBhcmdfdHlwZSwKKysJCQkJICAgY3VycmVudF91aW91dCwg cHlfc3RhcnQsIHB5X2VuZCk7CisrCisrICAgIH0KKysgIC8qIFJ1biB0aGUgaW5idWlsdCBiYWNr dHJhY2UgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgcmVnaXN0ZXJlZCwgb3IKKysgICAgICJuby1m aWx0ZXJzIiBoYXMgYmVlbiBzcGVjaWZpZWQgZnJvbSB0aGUgY29tbWFuZC4gICovCisrICBpZiAo bm9fZmlsdGVycyB8fCAgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRFUlMpCisrICAgIHsKKysgICAg ICBmb3IgKGkgPSAwLCBmaSA9IHRyYWlsaW5nOyBmaSAmJiBjb3VudC0tOyBpKyssIGZpID0gZ2V0 X3ByZXZfZnJhbWUgKGZpKSkKKysJeworKwkgIFFVSVQ7CisrCisrCSAgLyogRG9uJ3QgdXNlIHBy aW50X3N0YWNrX2ZyYW1lOyBpZiBhbiBlcnJvcigpIG9jY3VycyBpdCBwcm9iYWJseQorKwkgICAg IG1lYW5zIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gYmFja3RyYWNlIHdvdWxkIGZhaWwgKG9uIHRoZSBv dGhlcgorKwkgICAgIGhhbmQsIHBlcmhhcHMgdGhlIGNvZGUgZG9lcyBvciBjb3VsZCBiZSBmaXhl ZCB0byBtYWtlIHN1cmUKKysJICAgICB0aGUgZnJhbWUtPnByZXYgZmllbGQgZ2V0cyBzZXQgdG8g TlVMTCBpbiB0aGF0IGNhc2UpLiAgKi8KKysKKysJICBwcmludF9mcmFtZV9pbmZvIChmaSwgMSwg TE9DQVRJT04sIDEpOworKwkgIGlmIChzaG93X2xvY2FscykKKyAJeworIAkgIHN0cnVjdCBmcmFt ZV9pZCBmcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZmkpOworIAorQEAgLTE3NDgsMjQgKzE3ODQs MjUgQEAgYmFja3RyYWNlX2NvbW1hbmRfMSAoY2hhciAqY291bnRfZXhwLCBpbgorIAkgICAgfQor IAl9CisgCistICAgICAgLyogU2F2ZSB0aGUgbGFzdCBmcmFtZSB0byBjaGVjayBmb3IgZXJyb3Ig Y29uZGl0aW9ucy4gICovCistICAgICAgdHJhaWxpbmcgPSBmaTsKKy0gICAgfQorKwkgIC8qIFNh dmUgdGhlIGxhc3QgZnJhbWUgdG8gY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlvbnMuICAqLworKwkg IHRyYWlsaW5nID0gZmk7CisrCX0KKyAKKy0gIC8qIElmIHdlJ3ZlIHN0b3BwZWQgYmVmb3JlIHRo ZSBlbmQsIG1lbnRpb24gdGhhdC4gICovCistICBpZiAoZmkgJiYgZnJvbV90dHkpCistICAgIHBy aW50Zl9maWx0ZXJlZCAoXygiKE1vcmUgc3RhY2sgZnJhbWVzIGZvbGxvdy4uLilcbiIpKTsKKysg ICAgICAvKiBJZiB3ZSd2ZSBzdG9wcGVkIGJlZm9yZSB0aGUgZW5kLCBtZW50aW9uIHRoYXQuICAq LworKyAgICAgIGlmIChmaSAmJiBmcm9tX3R0eSkKKysJcHJpbnRmX2ZpbHRlcmVkIChfKCIoTW9y ZSBzdGFjayBmcmFtZXMgZm9sbG93Li4uKVxuIikpOworIAorLSAgLyogSWYgd2UndmUgcnVuIG91 dCBvZiBmcmFtZXMsIGFuZCB0aGUgcmVhc29uIGFwcGVhcnMgdG8gYmUgYW4gZXJyb3IKKy0gICAg IGNvbmRpdGlvbiwgcHJpbnQgaXQuICAqLworLSAgaWYgKGZpID09IE5VTEwgJiYgdHJhaWxpbmcg IT0gTlVMTCkKKy0gICAgeworLSAgICAgIGVudW0gdW53aW5kX3N0b3BfcmVhc29uIHJlYXNvbjsK KysgICAgICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGZyYW1lcywgYW5kIHRoZSByZWFzb24gYXBw ZWFycyB0byBiZSBhbiBlcnJvcgorKwkgY29uZGl0aW9uLCBwcmludCBpdC4gICovCisrICAgICAg aWYgKGZpID09IE5VTEwgJiYgdHJhaWxpbmcgIT0gTlVMTCkKKysJeworKwkgIGVudW0gdW53aW5k X3N0b3BfcmVhc29uIHJlYXNvbjsKKyAKKy0gICAgICByZWFzb24gPSBnZXRfZnJhbWVfdW53aW5k X3N0b3BfcmVhc29uICh0cmFpbGluZyk7CistICAgICAgaWYgKHJlYXNvbiA+PSBVTldJTkRfRklS U1RfRVJST1IpCistCXByaW50Zl9maWx0ZXJlZCAoXygiQmFja3RyYWNlIHN0b3BwZWQ6ICVzXG4i KSwKKy0JCQkgZnJhbWVfc3RvcF9yZWFzb25fc3RyaW5nIChyZWFzb24pKTsKKysJICByZWFzb24g PSBnZXRfZnJhbWVfdW53aW5kX3N0b3BfcmVhc29uICh0cmFpbGluZyk7CisrCSAgaWYgKHJlYXNv biA+PSBVTldJTkRfRklSU1RfRVJST1IpCisrCSAgICBwcmludGZfZmlsdGVyZWQgKF8oIkJhY2t0 cmFjZSBzdG9wcGVkOiAlc1xuIiksCisrCQkJICAgICBmcmFtZV9zdG9wX3JlYXNvbl9zdHJpbmcg KHJlYXNvbikpOworKwl9CisgICAgIH0KKyB9CisgCitAQCAtMTc3Myw3ICsxODEwLDggQEAgc3Rh dGljIHZvaWQKKyBiYWNrdHJhY2VfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpCisg eworICAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVh bnVwLCBOVUxMKTsKKy0gIGludCBmdWxsdHJhY2VfYXJnID0gLTEsIGFyZ2xlbiA9IDAsIGFyZ2Mg PSAwOworKyAgaW50IGZ1bGx0cmFjZV9hcmcgPSAtMSwgYXJnbGVuID0gMCwgYXJnYyA9IDAsIG5v X2ZpbHRlcnMgID0gLTE7CisrICBpbnQgdXNlcl9hcmcgPSAwOworIAorICAgaWYgKGFyZykKKyAg ICAgeworQEAgLTE3OTAsMjUgKzE4MjgsMzEgQEAgYmFja3RyYWNlX2NvbW1hbmQgKGNoYXIgKmFy ZywgaW50IGZyb21fdAorIAkgIGZvciAoaiA9IDA7IGogPCBzdHJsZW4gKGFyZ3ZbaV0pOyBqKysp CisgCSAgICBhcmd2W2ldW2pdID0gdG9sb3dlciAoYXJndltpXVtqXSk7CisgCistCSAgaWYgKGZ1 bGx0cmFjZV9hcmcgPCAwICYmIHN1YnNldF9jb21wYXJlIChhcmd2W2ldLCAiZnVsbCIpKQorLQkg ICAgZnVsbHRyYWNlX2FyZyA9IGFyZ2M7CisrCSAgaWYgKG5vX2ZpbHRlcnMgPCAwICYmIHN1YnNl dF9jb21wYXJlIChhcmd2W2ldLCAibm8tZmlsdGVycyIpKQorKwkgICAgbm9fZmlsdGVycyA9IGFy Z2M7CisgCSAgZWxzZQorIAkgICAgeworLQkgICAgICBhcmdsZW4gKz0gc3RybGVuIChhcmd2W2ld KTsKKy0JICAgICAgYXJnYysrOworKwkgICAgICBpZiAoZnVsbHRyYWNlX2FyZyA8IDAgJiYgc3Vi c2V0X2NvbXBhcmUgKGFyZ3ZbaV0sICJmdWxsIikpCisrCQlmdWxsdHJhY2VfYXJnID0gYXJnYzsK KysJICAgICAgZWxzZQorKwkJeworKwkJICB1c2VyX2FyZysrOworKwkJICBhcmdsZW4gKz0gc3Ry bGVuIChhcmd2W2ldKTsKKysJCX0KKyAJICAgIH0KKysJICBhcmdjKys7CisgCX0KKy0gICAgICBh cmdsZW4gKz0gYXJnYzsKKy0gICAgICBpZiAoZnVsbHRyYWNlX2FyZyA+PSAwKQorKyAgICAgIGFy Z2xlbiArPSB1c2VyX2FyZzsKKysgICAgICBpZiAoZnVsbHRyYWNlX2FyZyA+PSAwIHx8IG5vX2Zp bHRlcnMgPj0gMCkKKyAJeworIAkgIGlmIChhcmdsZW4gPiAwKQorIAkgICAgeworIAkgICAgICBh cmcgPSB4bWFsbG9jIChhcmdsZW4gKyAxKTsKKyAJICAgICAgbWFrZV9jbGVhbnVwICh4ZnJlZSwg YXJnKTsKKyAJICAgICAgYXJnWzBdID0gMDsKKy0JICAgICAgZm9yIChpID0gMDsgaSA8IChhcmdj ICsgMSk7IGkrKykKKysJICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKyAJCXsKKy0J CSAgaWYgKGkgIT0gZnVsbHRyYWNlX2FyZykKKysJCSAgaWYgKGkgIT0gZnVsbHRyYWNlX2FyZyAm JiBpICE9IG5vX2ZpbHRlcnMpCisgCQkgICAgeworIAkJICAgICAgc3RyY2F0IChhcmcsIGFyZ3Zb aV0pOworIAkJICAgICAgc3RyY2F0IChhcmcsICIgIik7CitAQCAtMTgyMCw3ICsxODY0LDggQEAg YmFja3RyYWNlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdAorIAl9CisgICAgIH0KKyAK Ky0gIGJhY2t0cmFjZV9jb21tYW5kXzEgKGFyZywgZnVsbHRyYWNlX2FyZyA+PSAwIC8qIHNob3df bG9jYWxzICovLCBmcm9tX3R0eSk7CisrICBiYWNrdHJhY2VfY29tbWFuZF8xIChhcmcsIGZ1bGx0 cmFjZV9hcmcgPj0gMCAvKiBzaG93X2xvY2FscyAqLywKKysJCSAgICAgICBub19maWx0ZXJzID49 IDAgLyogbm8gZnJhbWUtZmlsdGVycyAqLywgZnJvbV90dHkpOworIAorICAgZG9fY2xlYW51cHMg KG9sZF9jaGFpbik7CisgfQorQEAgLTE4MjgsNyArMTg3Myw3IEBAIGJhY2t0cmFjZV9jb21tYW5k IChjaGFyICphcmcsIGludCBmcm9tX3QKKyBzdGF0aWMgdm9pZAorIGJhY2t0cmFjZV9mdWxsX2Nv bW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQorIHsKKy0gIGJhY2t0cmFjZV9jb21tYW5k XzEgKGFyZywgMSAvKiBzaG93X2xvY2FscyAqLywgZnJvbV90dHkpOworKyAgYmFja3RyYWNlX2Nv bW1hbmRfMSAoYXJnLCAxIC8qIHNob3dfbG9jYWxzICovLCAwLCBmcm9tX3R0eSk7CisgfQorIAwK KyAKK0BAIC0yNTYyLDcgKzI2MDcsOSBAQCBJdCBjYW4gYmUgYSBzdGFjayBmcmFtZSBudW1iZXIg b3IgdGhlIGFkCisgICBhZGRfY29tICgiYmFja3RyYWNlIiwgY2xhc3Nfc3RhY2ssIGJhY2t0cmFj ZV9jb21tYW5kLCBfKCJcCisgUHJpbnQgYmFja3RyYWNlIG9mIGFsbCBzdGFjayBmcmFtZXMsIG9y IGlubmVybW9zdCBDT1VOVCBmcmFtZXMuXG5cCisgV2l0aCBhIG5lZ2F0aXZlIGFyZ3VtZW50LCBw cmludCBvdXRlcm1vc3QgLUNPVU5UIGZyYW1lcy5cblVzZSBvZiB0aGUgXAorLSdmdWxsJyBxdWFs aWZpZXIgYWxzbyBwcmludHMgdGhlIHZhbHVlcyBvZiB0aGUgbG9jYWwgdmFyaWFibGVzLlxuIikp OworKydmdWxsJyBxdWFsaWZpZXIgYWxzbyBwcmludHMgdGhlIHZhbHVlcyBvZiB0aGUgbG9jYWwg dmFyaWFibGVzLlxuXAorK1VzZSBvZiB0aGUgJ25vLWZpbHRlcnMnIHF1YWxpZmllciBwcm9oaWJp dHMgZnJhbWUgZmlsdGVycyBmcm9tIGV4ZWN1dGluZ1xuXAorK29uIHRoaXMgYmFja3RyYWNlLlxu IikpOworICAgYWRkX2NvbV9hbGlhcyAoImJ0IiwgImJhY2t0cmFjZSIsIGNsYXNzX3N0YWNrLCAw KTsKKyAgIGlmICh4ZGJfY29tbWFuZHMpCisgICAgIHsKK0luZGV4OiBnZGItNy42L2dkYi9kYXRh LWRpcmVjdG9yeS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIv ZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYg KzAyMDAKKysrKyBnZGItNy42L2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgkyMDEzLTA1 LTIwIDIyOjI1OjUyLjA5ODE2NTc3MiArMDIwMAorQEAgLTUzLDcgKzUzLDExIEBAIFBZVEhPTl9E SVIgPSBweXRob24KKyBQWVRIT05fSU5TVEFMTF9ESVIgPSAkKERFU1RESVIpJChHREJfREFUQURJ UikvJChQWVRIT05fRElSKQorIFBZVEhPTl9GSUxFUyA9IFwKKyAJZ2RiL19faW5pdF9fLnB5IFwK KysJZ2RiL2ZyYW1lcy5weSBcCisrCWdkYi9GcmFtZUl0ZXJhdG9yLnB5IFwKKysJZ2RiL0ZyYW1l RGVjb3JhdG9yLnB5IFwKKyAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkgXAorKwlnZGIvY29tbWFu ZC9mcmFtZV9maWx0ZXJzLnB5IFwKKyAJZ2RiL2NvbW1hbmQvaWdub3JlX2Vycm9ycy5weSBcCisg CWdkYi9jb21tYW5kL3BhaG9sZS5weSBcCisgCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkg XAorSW5kZXg6IGdkYi03LjYvZ2RiL2RvYy9nZGIudGV4aW5mbworPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdk Yi03LjYub3JpZy9nZGIvZG9jL2dkYi50ZXhpbmZvCTIwMTMtMDUtMjAgMjI6MjM6MzYuNzQ4MjE1 MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvZG9jL2dkYi50ZXhpbmZvCTIwMTMtMDUtMjAgMjI6 MjU6NTIuMTEwMTY1NzY3ICswMjAwCitAQCAtNjQ1Myw2ICs2NDUzLDcgQEAgY3VycmVudGx5IGV4 ZWN1dGluZyBmcmFtZSBhbmQgZGVzY3JpYmVzCisgQG1lbnUKKyAqIEZyYW1lczo6ICAgICAgICAg ICAgICAgICAgICAgIFN0YWNrIGZyYW1lcworICogQmFja3RyYWNlOjogICAgICAgICAgICAgICAg ICAgQmFja3RyYWNlcworKyogRnJhbWUgRmlsdGVyIE1hbmFnZW1lbnQ6OiAgICAgTWFuYWdpbmcg ZnJhbWUgZmlsdGVycworICogU2VsZWN0aW9uOjogICAgICAgICAgICAgICAgICAgU2VsZWN0aW5n IGEgZnJhbWUKKyAqIEZyYW1lIEluZm86OiAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIG9u IGEgZnJhbWUKKyAKK0BAIC02NTQwLDYgKzY1NDEsNyBAQCBsaW5lIHBlciBmcmFtZSwgZm9yIG1h bnkgZnJhbWVzLCBzdGFydGluCisgZnJhbWUgKGZyYW1lIHplcm8pLCBmb2xsb3dlZCBieSBpdHMg Y2FsbGVyIChmcmFtZSBvbmUpLCBhbmQgb24gdXAgdGhlCisgc3RhY2suCisgCisrQGFuY2hvcnti YWNrdHJhY2UtY29tbWFuZH0KKyBAdGFibGUgQGNvZGUKKyBAa2luZGV4IGJhY2t0cmFjZQorIEBr aW5kZXggYnQgQHJ7KEBjb2Rle2JhY2t0cmFjZX0pfQorQEAgLTY1NjUsNiArNjU2NywxOSBAQCBT aW1pbGFyLCBidXQgcHJpbnQgb25seSB0aGUgb3V0ZXJtb3N0IEB2CisgQGl0ZW14IGJ0IGZ1bGwg LUB2YXJ7bn0KKyBQcmludCB0aGUgdmFsdWVzIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMgYWxzby4g IEB2YXJ7bn0gc3BlY2lmaWVzIHRoZQorIG51bWJlciBvZiBmcmFtZXMgdG8gcHJpbnQsIGFzIGRl c2NyaWJlZCBhYm92ZS4KKysKKytAaXRlbSBiYWNrdHJhY2Ugbm8tZmlsdGVycworK0BpdGVteCBi dCBuby1maWx0ZXJzCisrQGl0ZW14IGJ0IG5vLWZpbHRlcnMgQHZhcntufQorK0BpdGVteCBidCBu by1maWx0ZXJzIC1AdmFye259CisrQGl0ZW14IGJ0IG5vLWZpbHRlcnMgZnVsbAorK0BpdGVteCBi dCBuby1maWx0ZXJzIGZ1bGwgQHZhcntufQorK0BpdGVteCBidCBuby1maWx0ZXJzIGZ1bGwgLUB2 YXJ7bn0KKytEbyBub3QgcnVuIFB5dGhvbiBmcmFtZSBmaWx0ZXJzIG9uIHRoaXMgYmFja3RyYWNl LiAgQHhyZWZ7RnJhbWUKKytGaWx0ZXIgQVBJfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBBZGRp dGlvbmFsbHkgdXNlIEByZWZ7ZGlzYWJsZQorK2ZyYW1lLWZpbHRlciBhbGx9IHRvIHR1cm4gb2Zm IGFsbCBmcmFtZSBmaWx0ZXJzLiAgVGhpcyBpcyBvbmx5CisrcmVsZXZhbnQgd2hlbiBAdmFsdWV7 R0RCTn0gaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIEBjb2Rle1B5dGhvbn0KKytzdXBwb3J0Lgor IEBlbmQgdGFibGUKKyAKKyBAa2luZGV4IHdoZXJlCitAQCAtNjcxNCw2ICs2NzI5LDE0OSBAQCBE aXNwbGF5IGFuIGFic29sdXRlIGZpbGVuYW1lLgorIFNob3cgdGhlIGN1cnJlbnQgd2F5IHRvIGRp c3BsYXkgZmlsZW5hbWVzLgorIEBlbmQgdGFibGUKKyAKKytAbm9kZSBGcmFtZSBGaWx0ZXIgTWFu YWdlbWVudAorK0BzZWN0aW9uIE1hbmFnZW1lbnQgb2YgRnJhbWUgRmlsdGVycy4KKytAY2luZGV4 IG1hbmFnaW5nIGZyYW1lIGZpbHRlcnMKKysKKytGcmFtZSBmaWx0ZXJzIGFyZSBQeXRob24gYmFz ZWQgdXRpbGl0aWVzIHRvIG1hbmFnZSBhbmQgZGVjb3JhdGUgdGhlCisrb3V0cHV0IG9mIGZyYW1l cy4gIEB4cmVme0ZyYW1lIEZpbHRlciBBUEl9LCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKysK KytNYW5hZ2luZyBmcmFtZSBmaWx0ZXJzIGlzIHBlcmZvcm1lZCBieSBzZXZlcmFsIGNvbW1hbmRz IGF2YWlsYWJsZQorK3dpdGhpbiBAdmFsdWV7R0RCTn0sIGRldGFpbGVkIGhlcmUuCisrCisrQHRh YmxlIEBjb2RlCisrQGtpbmRleCBpbmZvIGZyYW1lLWZpbHRlcgorK0BpdGVtIGluZm8gZnJhbWUt ZmlsdGVyCisrUHJpbnQgYSBsaXN0IG9mIGluc3RhbGxlZCBmcmFtZSBmaWx0ZXJzIGZyb20gYWxs IGRpY3Rpb25hcmllcywgc2hvd2luZworK3RoZWlyIG5hbWUsIHByaW9yaXR5IGFuZCBlbmFibGVk IHN0YXR1cy4KKysKKytAa2luZGV4IGRpc2FibGUgZnJhbWUtZmlsdGVyCisrQGFuY2hvcntkaXNh YmxlIGZyYW1lLWZpbHRlciBhbGx9CisrQGl0ZW0gZGlzYWJsZSBmcmFtZS1maWx0ZXIgQHZhcntm aWx0ZXItZGljdGlvbmFyeX0gQHZhcntmaWx0ZXItbmFtZX0KKytEaXNhYmxlIGEgZnJhbWUgZmls dGVyIGluIHRoZSBkaWN0aW9uYXJ5IG1hdGNoaW5nCisrQHZhcntmaWx0ZXItZGljdGlvbmFyeX0s IG9yIEBjb2Rle2FsbH0sIGFuZCBAdmFye2ZpbHRlci1uYW1lfS4KKytAdmFye2ZpbHRlci1kaWN0 aW9uYXJ5fSBtYXkgYmUgQGNvZGV7YWxsfSwgQGNvZGV7Z2xvYmFsfSwKKytAY29kZXtwcm9nc3Bh Y2V9IG9yIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgZmlsZSB3aGVyZSB0aGUgZnJhbWUgZmlsdGVy CisrZGljdGlvbmFyeSByZXNpZGVzLiAgV2hlbiBAY29kZXthbGx9IGlzIHNwZWNpZmllZCwgYWxs IGZyYW1lIGZpbHRlcnMKKythY3Jvc3MgYWxsIGRpY3Rpb25hcmllcyBhcmUgZGlzYWJsZWQuICBA dmFye2ZpbHRlci1uYW1lfSBpcyB0aGUgbmFtZQorK29mIHRoZSBmcmFtZSBmaWx0ZXIgYW5kIGlz IHVzZWQgd2hlbiBAY29kZXthbGx9IGlzIG5vdCB0aGUgb3B0aW9uIGZvcgorK0B2YXJ7ZmlsdGVy LWRpY3Rpb25hcnl9LiAgQSBkaXNhYmxlZCBmcmFtZS1maWx0ZXIgaXMgbm90IGRlbGV0ZWQsIGl0 CisrbWF5IGJlIGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisrCisrQGtpbmRleCBlbmFibGUgZnJhbWUt ZmlsdGVyCisrQGl0ZW0gZW5hYmxlIGZyYW1lLWZpbHRlciBAdmFye2ZpbHRlci1kaWN0aW9uYXJ5 fSBAdmFye2ZpbHRlci1uYW1lfQorK0VuYWJsZSBhIGZyYW1lIGZpbHRlciBpbiB0aGUgZGljdGlv bmFyeSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9LCBvciBAY29kZXthbGx9LCBh bmQgQHZhcntmaWx0ZXItbmFtZX0uCisrQHZhcntmaWx0ZXItZGljdGlvbmFyeX0gbWF5IGJlIEBj b2Rle2FsbH0sIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJvZ3NwYWNlfSBvciB0aGUgbmFtZSBv ZiB0aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZpbHRlcgorK2RpY3Rpb25hcnkgcmVz aWRlcy4gIFdoZW4gQGNvZGV7YWxsfSBpcyBzcGVjaWZpZWQsIGFsbCBmcmFtZSBmaWx0ZXJzIGFj cm9zcworK2FsbCBkaWN0aW9uYXJpZXMgYXJlIGVuYWJsZWQuICBAdmFye2ZpbHRlci1uYW1lfSBp cyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUKKytmaWx0ZXIgYW5kIGlzIHVzZWQgd2hlbiBAY29kZXth bGx9IGlzIG5vdCB0aGUgb3B0aW9uIGZvcgorK0B2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9LgorKwor K0V4YW1wbGU6CisrCisrQHNtYWxsZXhhbXBsZQorKyhnZGIpIGluZm8gZnJhbWUtZmlsdGVyCisr CisrZ2xvYmFsIGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAg MTAwMCAgICAgIE5vICAgICAgIFByaW1hcnlGdW5jdGlvbkZpbHRlcgorKyAgMTAwICAgICAgIFll cyAgICAgIFJldmVyc2UKKysKKytwcm9nc3BhY2UgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoK KysgIFByaW9yaXR5ICBFbmFibGVkICBOYW1lCisrICAxMDAgICAgICAgWWVzICAgICAgUHJvZ3Nw YWNlRmlsdGVyCisrCisrb2JqZmlsZSAvYnVpbGQvdGVzdCBmcmFtZS1maWx0ZXJzOgorKyAgUHJp b3JpdHkgIEVuYWJsZWQgIE5hbWUKKysgIDk5OSAgICAgICBZZXMgICAgICBCdWlsZFByb2dyYSBG aWx0ZXIKKysKKysoZ2RiKSBkaXNhYmxlIGZyYW1lLWZpbHRlciAvYnVpbGQvdGVzdCBCdWlsZFBy b2dyYW1GaWx0ZXIKKysoZ2RiKSBpbmZvIGZyYW1lLWZpbHRlcgorKworK2dsb2JhbCBmcmFtZS1m aWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5hbWUKKysgIDEwMDAgICAgICBObyAgICAg ICBQcmltYXJ5RnVuY3Rpb25GaWx0ZXIKKysgIDEwMCAgICAgICBZZXMgICAgICBSZXZlcnNlCisr CisrcHJvZ3NwYWNlIC9idWlsZC90ZXN0IGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5h YmxlZCAgTmFtZQorKyAgMTAwICAgICAgIFllcyAgICAgIFByb2dzcGFjZUZpbHRlcgorKworK29i amZpbGUgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoKKysgIFByaW9yaXR5ICBFbmFibGVkICBO YW1lCisrICA5OTkgICAgICAgTm8gICAgICAgQnVpbGRQcm9ncmFtRmlsdGVyCisrCisrKGdkYikg ZW5hYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgUHJpbWFyeUZ1bmN0aW9uRmlsdGVyCisrKGdkYikg aW5mbyBmcmFtZS1maWx0ZXIKKysKKytnbG9iYWwgZnJhbWUtZmlsdGVyczoKKysgIFByaW9yaXR5 ICBFbmFibGVkICBOYW1lCisrICAxMDAwICAgICAgWWVzICAgICAgUHJpbWFyeUZ1bmN0aW9uRmls dGVyCisrICAxMDAgICAgICAgWWVzICAgICAgUmV2ZXJzZQorKworK3Byb2dzcGFjZSAvYnVpbGQv dGVzdCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5hbWUKKysgIDEwMCAg ICAgICBZZXMgICAgICBQcm9nc3BhY2VGaWx0ZXIKKysKKytvYmpmaWxlIC9idWlsZC90ZXN0IGZy YW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgOTk5ICAgICAgIE5v ICAgICAgIEJ1aWxkUHJvZ3JhbUZpbHRlcgorK0BlbmQgc21hbGxleGFtcGxlCisrCisrQGtpbmRl eCBzZXQgZnJhbWUtZmlsdGVyIHByaW9yaXR5CisrQGl0ZW0gc2V0IGZyYW1lLWZpbHRlciBwcmlv cml0eSBAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSBAdmFye2ZpbHRlci1uYW1lfSBAdmFye3ByaW9y aXR5fQorK1NldCB0aGUgQHZhcntwcmlvcml0eX0gb2YgYSBmcmFtZSBmaWx0ZXIgaW4gdGhlIGRp Y3Rpb25hcnkgbWF0Y2hpbmcKKytAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSwgYW5kIHRoZSBmcmFt ZSBmaWx0ZXIgbmFtZSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLW5hbWV9LiAgQHZhcntmaWx0ZXIt ZGljdGlvbmFyeX0gbWF5IGJlIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJvZ3NwYWNlfSBvciB0 aGUgbmFtZSBvZiB0aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZpbHRlcgorK2RpY3Rp b25hcnkgcmVzaWRlcy4gIEB2YXJ7cHJpb3JpdHl9IGlzIGFuIGludGVnZXIuCisrCisrQGtpbmRl eCBzaG93IGZyYW1lLWZpbHRlciBwcmlvcml0eQorK0BpdGVtIHNob3cgZnJhbWUtZmlsdGVyIHBy aW9yaXR5IEB2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9IEB2YXJ7ZmlsdGVyLW5hbWV9CisrU2hvdyB0 aGUgQHZhcntwcmlvcml0eX0gb2YgYSBmcmFtZSBmaWx0ZXIgaW4gdGhlIGRpY3Rpb25hcnkgbWF0 Y2hpbmcKKytAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSwgYW5kIHRoZSBmcmFtZSBmaWx0ZXIgbmFt ZSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLW5hbWV9LiAgQHZhcntmaWx0ZXItZGljdGlvbmFyeX0g bWF5IGJlIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJvZ3NwYWNlfSBvciB0aGUgbmFtZSBvZiB0 aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZpbHRlcgorK2RpY3Rpb25hcnkgcmVzaWRl cy4KKysKKytFeGFtcGxlOgorKworK0BzbWFsbGV4YW1wbGUKKysoZ2RiKSBpbmZvIGZyYW1lLWZp bHRlcgorKworK2dsb2JhbCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5h bWUKKysgIDEwMDAgICAgICBZZXMgICAgICBQcmltYXJ5RnVuY3Rpb25GaWx0ZXIKKysgIDEwMCAg ICAgICBZZXMgICAgICBSZXZlcnNlCisrCisrcHJvZ3NwYWNlIC9idWlsZC90ZXN0IGZyYW1lLWZp bHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgMTAwICAgICAgIFllcyAgICAg IFByb2dzcGFjZUZpbHRlcgorKworK29iamZpbGUgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoK KysgIFByaW9yaXR5ICBFbmFibGVkICBOYW1lCisrICA5OTkgICAgICAgTm8gICAgICAgQnVpbGRQ cm9ncmFtRmlsdGVyCisrCisrKGdkYikgc2V0IGZyYW1lLWZpbHRlciBwcmlvcml0eSBnbG9iYWwg UmV2ZXJzZSA1MAorKyhnZGIpIGluZm8gZnJhbWUtZmlsdGVyCisrCisrZ2xvYmFsIGZyYW1lLWZp bHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgMTAwMCAgICAgIFllcyAgICAg IFByaW1hcnlGdW5jdGlvbkZpbHRlcgorKyAgNTAgICAgICAgIFllcyAgICAgIFJldmVyc2UKKysK Kytwcm9nc3BhY2UgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoKKysgIFByaW9yaXR5ICBFbmFi bGVkICBOYW1lCisrICAxMDAgICAgICAgWWVzICAgICAgUHJvZ3NwYWNlRmlsdGVyCisrCisrb2Jq ZmlsZSAvYnVpbGQvdGVzdCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5h bWUKKysgIDk5OSAgICAgICBObyAgICAgICBCdWlsZFByb2dyYW1GaWx0ZXIKKytAZW5kIHNtYWxs ZXhhbXBsZQorK0BlbmQgdGFibGUKKysKKyBAbm9kZSBTZWxlY3Rpb24KKyBAc2VjdGlvbiBTZWxl Y3RpbmcgYSBGcmFtZQorIAorQEAgLTIzMDY1LDYgKzIzMjIzLDkgQEAgc2l0dWF0aW9uLCBhIFB5 dGhvbiBAY29kZXtLZXlib2FyZEludGVycgorICogU2VsZWN0aW5nIFByZXR0eS1QcmludGVyczo6 ICAgSG93IEdEQiBjaG9vc2VzIGEgcHJldHR5LXByaW50ZXIuCisgKiBXcml0aW5nIGEgUHJldHR5 LVByaW50ZXI6OiAgICBXcml0aW5nIGEgUHJldHR5LVByaW50ZXIuCisgKiBUeXBlIFByaW50aW5n IEFQSTo6CQlQcmV0dHktcHJpbnRpbmcgdHlwZXMuCisrKiBGcmFtZSBGaWx0ZXIgQVBJOjogICAg ICAgICAgICBGaWx0ZXJpbmcgRnJhbWVzLgorKyogRnJhbWUgRGVjb3JhdG9yIEFQSTo6ICAgICAg ICAgRGVjb3JhdGluZyBGcmFtZXMuCisrKiBXcml0aW5nIGEgRnJhbWUgRmlsdGVyOjogICAgICBX cml0aW5nIGEgRnJhbWUgRmlsdGVyLgorICogSW5mZXJpb3JzIEluIFB5dGhvbjo6ICAgICAgICAg UHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGluZmVyaW9ycyAocHJvY2Vzc2VzKQorICogRXZlbnRz IEluIFB5dGhvbjo6ICAgICAgICAgICAgTGlzdGVuaW5nIGZvciBldmVudHMgZnJvbSBAdmFsdWV7 R0RCTn0uCisgKiBUaHJlYWRzIEluIFB5dGhvbjo6ICAgICAgICAgICBBY2Nlc3NpbmcgaW5mZXJp b3IgdGhyZWFkcyBmcm9tIFB5dGhvbi4KK0BAIC0yNDQxNSw2ICsyNDU3Niw2MzYgQEAgZG9uZSB0 aGVuIHR5cGUgcHJpbnRlcnMgd291bGQgaGF2ZSB0byBtYQorIG9yZGVyIHRvIGF2b2lkIGhvbGRp bmcgaW5mb3JtYXRpb24gdGhhdCBjb3VsZCBiZWNvbWUgc3RhbGUgYXMgdGhlCisgaW5mZXJpb3Ig Y2hhbmdlZC4KKyAKKytAbm9kZSBGcmFtZSBGaWx0ZXIgQVBJCisrQHN1YnN1YnNlY3Rpb24gRmls dGVyaW5nIEZyYW1lcy4KKytAY2luZGV4IGZyYW1lIGZpbHRlcnMgYXBpCisrCisrRnJhbWUgZmls dGVycyBhcmUgUHl0aG9uIG9iamVjdHMgdGhhdCBtYW5pcHVsYXRlIHRoZSB2aXNpYmlsaXR5IG9m IGEKKytmcmFtZSBvciBmcmFtZXMgd2hlbiBhIGJhY2t0cmFjZSAoQHB4cmVme0JhY2t0cmFjZX0p IGlzIHByaW50ZWQgYnkKKytAdmFsdWV7R0RCTn0uCisrCisrT25seSBjb21tYW5kcyB0aGF0IHBy aW50IGEgYmFja3RyYWNlLCBvciwgaW4gdGhlIGNhc2Ugb2YgQHNje2dkYi9taX0KKytjb21tYW5k cyAoQHB4cmVme0dEQi9NSX0pLCB0aG9zZSB0aGF0IHJldHVybiBhIGNvbGxlY3Rpb24gb2YgZnJh bWVzCisrYXJlIGFmZmVjdGVkLiAgVGhlIGNvbW1hbmRzIHRoYXQgd29yayB3aXRoIGZyYW1lIGZp bHRlcnMgYXJlOgorKworK0Bjb2Rle2JhY2t0cmFjZX0gKEBweHJlZntiYWNrdHJhY2UtY29tbWFu ZCwsIFRoZSBiYWNrdHJhY2UgY29tbWFuZH0pLAorK0Bjb2Rley1zdGFjay1saXN0LWZyYW1lc30K KysoQHB4cmVmey1zdGFjay1saXN0LWZyYW1lcywsIFRoZSAtc3RhY2stbGlzdC1mcmFtZXMgY29t bWFuZH0pLAorK0Bjb2Rley1zdGFjay1saXN0LXZhcmlhYmxlc30gKEBweHJlZnstc3RhY2stbGlz dC12YXJpYWJsZXMsLCBUaGUKKystc3RhY2stbGlzdC12YXJpYWJsZXMgY29tbWFuZH0pLCBAY29k ZXstc3RhY2stbGlzdC1hcmd1bWVudHN9CisrQHB4cmVmey1zdGFjay1saXN0LWFyZ3VtZW50cyws IFRoZSAtc3RhY2stbGlzdC1hcmd1bWVudHMgY29tbWFuZH0pIGFuZAorK0Bjb2Rley1zdGFjay1s aXN0LWxvY2Fsc30gKEBweHJlZnstc3RhY2stbGlzdC1sb2NhbHMsLCBUaGUKKystc3RhY2stbGlz dC1sb2NhbHMgY29tbWFuZH0pLgorKworK0EgZnJhbWUgZmlsdGVyIHdvcmtzIGJ5IHRha2luZyBh biBpdGVyYXRvciBhcyBhbiBhcmd1bWVudCwgYXBwbHlpbmcKKythY3Rpb25zIHRvIHRoZSBjb250 ZW50cyBvZiB0aGF0IGl0ZXJhdG9yLCBhbmQgcmV0dXJuaW5nIGFub3RoZXIKKytpdGVyYXRvciAo b3IsIHBvc3NpYmx5LCB0aGUgc2FtZSBpdGVyYXRvciBpdCB3YXMgcHJvdmlkZWQgaW4gdGhlIGNh c2UKKyt3aGVyZSB0aGUgZmlsdGVyIGRvZXMgbm90IHBlcmZvcm0gYW55IG9wZXJhdGlvbnMpLiAg VHlwaWNhbGx5LCBmcmFtZQorK2ZpbHRlcnMgdXRpbGl6ZSB0b29scyBzdWNoIGFzIHRoZSBQeXRo b24ncyBAY29kZXtpdGVydG9vbHN9IG1vZHVsZSB0bworK3dvcmsgd2l0aCBhbmQgY3JlYXRlIG5l dyBpdGVyYXRvcnMgZnJvbSB0aGUgc291cmNlIGl0ZXJhdG9yLgorK1JlZ2FyZGxlc3Mgb2YgaG93 IGEgZmlsdGVyIGNob29zZXMgdG8gYXBwbHkgYWN0aW9ucywgaXQgbXVzdCBub3QgYWx0ZXIKKyt0 aGUgdW5kZXJseWluZyBAdmFsdWV7R0RCTn0gZnJhbWUgb3IgZnJhbWVzLCBvciBhdHRlbXB0IHRv IGFsdGVyIHRoZQorK2NhbGwtc3RhY2sgd2l0aGluIEB2YWx1ZXtHREJOfS4gIFRoaXMgcHJlc2Vy dmVzIGRhdGEgaW50ZWdyaXR5IHdpdGhpbgorK0B2YWx1ZXtHREJOfS4gIEZyYW1lIGZpbHRlcnMg YXJlIGV4ZWN1dGVkIG9uIGEgcHJpb3JpdHkgYmFzaXMgYW5kIGNhcmUKKytzaG91bGQgYmUgdGFr ZW4gdGhhdCBzb21lIGZyYW1lIGZpbHRlcnMgbWF5IGhhdmUgYmVlbiBleGVjdXRlZCBiZWZvcmUs CisrYW5kIHRoYXQgc29tZSBmcmFtZSBmaWx0ZXJzIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIuCisr CisrQW4gaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gd2hlbiBkZXNpZ25pbmcgZnJhbWUgZmlsdGVy cywgYW5kIHdlbGwKKyt3b3J0aCByZWZsZWN0aW5nIHVwb24sIGlzIHRoYXQgZnJhbWUgZmlsdGVy cyBzaG91bGQgYXZvaWQgdW53aW5kaW5nCisrdGhlIGNhbGwgc3RhY2sgaWYgcG9zc2libGUuICBT b21lIHN0YWNrcyBjYW4gcnVuIHZlcnkgZGVlcCwgaW50byB0aGUKKyt0ZW5zIG9mIHRob3VzYW5k cyBpbiBzb21lIGNhc2VzLiAgVG8gc2VhcmNoIGV2ZXJ5IGZyYW1lIHdoZW4gYSBmcmFtZQorK2Zp bHRlciBleGVjdXRlcyBtYXkgYmUgdG9vIGV4cGVuc2l2ZSBhdCB0aGF0IHN0ZXAuICBUaGUgZnJh bWUgZmlsdGVyCisrY2Fubm90IGtub3cgaG93IG1hbnkgZnJhbWVzIGl0IGhhcyB0byBpdGVyYXRl IG92ZXIsIGFuZCBpdCBtYXkgaGF2ZSB0bworK2l0ZXJhdGUgdGhyb3VnaCB0aGVtIGFsbC4gIFRo aXMgZW5kcyB1cCBkdXBsaWNhdGluZyBlZmZvcnQgYXMKKytAdmFsdWV7R0RCTn0gcGVyZm9ybXMg dGhpcyBpdGVyYXRpb24gd2hlbiBpdCBwcmludHMgdGhlIGZyYW1lcy4gIElmCisrdGhlIGZpbHRl ciBjYW4gZGVmZXIgdW53aW5kaW5nIGZyYW1lcyB1bnRpbCBmcmFtZSBkZWNvcmF0b3JzIGFyZQor K2V4ZWN1dGVkLCBhZnRlciB0aGUgbGFzdCBmaWx0ZXIgaGFzIGV4ZWN1dGVkLCBpdCBzaG91bGQu ICBAeHJlZntGcmFtZQorK0RlY29yYXRvciBBUEl9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBk ZWNvcmF0b3JzLiAgQWxzbywgdGhlcmUgYXJlCisrZXhhbXBsZXMgZm9yIGJvdGggZnJhbWUgZGVj b3JhdG9ycyBhbmQgZmlsdGVycyBpbiBsYXRlciBjaGFwdGVycy4KKytAeHJlZntXcml0aW5nIGEg RnJhbWUgRmlsdGVyfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCisrVGhlIFB5dGhvbiBkaWN0 aW9uYXJ5IEBjb2Rle2dkYi5mcmFtZV9maWx0ZXJzfSBjb250YWlucyBrZXkvb2JqZWN0CisrcGFp cmluZ3MgdGhhdCBjb21wcmlzZSBhIGZyYW1lIGZpbHRlci4gIEZyYW1lIGZpbHRlcnMgaW4gdGhp cworK2RpY3Rpb25hcnkgYXJlIGNhbGxlZCBAY29kZXtnbG9iYWx9IGZyYW1lIGZpbHRlcnMsIGFu ZCB0aGV5IGFyZQorK2F2YWlsYWJsZSB3aGVuIGRlYnVnZ2luZyBhbGwgaW5mZXJpb3JzLiAgVGhl c2UgZnJhbWUgZmlsdGVycyBtdXN0CisrcmVnaXN0ZXIgd2l0aCB0aGUgZGljdGlvbmFyeSBkaXJl Y3RseS4gIEluIGFkZGl0aW9uIHRvIHRoZQorK0Bjb2Rle2dsb2JhbH0gZGljdGlvbmFyeSwgdGhl cmUgYXJlIG90aGVyIGRpY3Rpb25hcmllcyB0aGF0IGFyZSBsb2FkZWQKKyt3aXRoIGRpZmZlcmVu dCBpbmZlcmlvcnMgdmlhIGF1dG8tbG9hZGluZyAoQHB4cmVme1B5dGhvbgorK0F1dG8tbG9hZGlu Z30pLiAgVGhlIHR3byBvdGhlciBhcmVhcyB3aGVyZSBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyaWVz CisrY2FuIGJlIGZvdW5kIGFyZTogQGNvZGV7Z2RiLlByb2dzcGFjZX0gd2hpY2ggY29udGFpbnMg YQorK0Bjb2Rle2ZyYW1lX2ZpbHRlcnN9IGRpY3Rpb25hcnkgYXR0cmlidXRlLCBhbmQgZWFjaCBA Y29kZXtnZGIuT2JqZmlsZX0KKytvYmplY3Qgd2hpY2ggYWxzbyBjb250YWlucyBhIEBjb2Rle2Zy YW1lX2ZpbHRlcnN9IGRpY3Rpb25hcnkKKythdHRyaWJ1dGUuCisrCisrV2hlbiBhIGNvbW1hbmQg aXMgZXhlY3V0ZWQgZnJvbSBAdmFsdWV7R0RCTn0gdGhhdCBpcyBjb21wYXRpYmxlIHdpdGgKKytm cmFtZSBmaWx0ZXJzLCBAdmFsdWV7R0RCTn0gY29tYmluZXMgdGhlIEBjb2Rle2dsb2JhbH0sCisr QGNvZGV7Z2RiLlByb2dzcGFjZX0gYW5kIGFsbCBAY29kZXtnZGIuT2JqZmlsZX0gZGljdGlvbmFy aWVzIGN1cnJlbnRseQorK2xvYWRlZC4gIEFsbCBvZiB0aGUgQGNvZGV7Z2RiLk9iamZpbGV9IGRp Y3Rpb25hcmllcyBhcmUgY29tYmluZWQsIGFzCisrc2V2ZXJhbCBmcmFtZXMsIGFuZCB0aHVzIHNl dmVyYWwgb2JqZWN0IGZpbGVzLCBtaWdodCBiZSBpbiB1c2UuCisrQHZhbHVle0dEQk59IHRoZW4g cHJ1bmVzIGFueSBmcmFtZSBmaWx0ZXIgd2hvc2UgQGNvZGV7ZW5hYmxlZH0KKythdHRyaWJ1dGUg aXMgQGNvZGV7RmFsc2V9LiAgVGhpcyBwcnVuZWQgbGlzdCBpcyB0aGVuIHNvcnRlZCBhY2NvcmRp bmcKKyt0byB0aGUgQGNvZGV7cHJpb3JpdHl9IGF0dHJpYnV0ZSBpbiBlYWNoIGZpbHRlci4KKysK KytPbmNlIHRoZSBkaWN0aW9uYXJpZXMgYXJlIGNvbWJpbmVkLCBwcnVuZWQgYW5kIHNvcnRlZCwg QHZhbHVle0dEQk59CisrY3JlYXRlcyBhbiBpdGVyYXRvciB3aGljaCB3cmFwcyBlYWNoIGZyYW1l IGluIHRoZSBjYWxsIHN0YWNrIGluIGEKKytAY29kZXtGcmFtZURlY29yYXRvcn0gb2JqZWN0LCBh bmQgY2FsbHMgZWFjaCBmaWx0ZXIgaW4gb3JkZXIuICBUaGUKKytvdXRwdXQgZnJvbSB0aGUgcHJl dmlvdXMgZmlsdGVyIHdpbGwgYWx3YXlzIGJlIHRoZSBpbnB1dCB0byB0aGUgbmV4dAorK2ZpbHRl ciwgYW5kIHNvIG9uLgorKworK0ZyYW1lIGZpbHRlcnMgaGF2ZSBhIG1hbmRhdG9yeSBpbnRlcmZh Y2Ugd2hpY2ggZWFjaCBmcmFtZSBmaWx0ZXIgbXVzdAorK2ltcGxlbWVudCwgZGVmaW5lZCBoZXJl OgorKworK0BkZWZ1biBGcmFtZUZpbHRlci5maWx0ZXIgKGl0ZXJhdG9yKQorK0B2YWx1ZXtHREJO fSB3aWxsIGNhbGwgdGhpcyBtZXRob2Qgb24gYSBmcmFtZSBmaWx0ZXIgd2hlbiBpdCBoYXMKKyty ZWFjaGVkIHRoZSBvcmRlciBpbiB0aGUgcHJpb3JpdHkgbGlzdCBmb3IgdGhhdCBmaWx0ZXIuCisr CisrRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBmb3VyIGZyYW1lIGZpbHRlcnM6CisrCisrQHNt YWxsZXhhbXBsZQorK05hbWUgICAgICAgICBQcmlvcml0eQorKworK0ZpbHRlcjEgICAgICA1Cisr RmlsdGVyMiAgICAgIDEwCisrRmlsdGVyMyAgICAgIDEwMAorK0ZpbHRlcjQgICAgICAxCisrQGVu ZCBzbWFsbGV4YW1wbGUKKysKKytUaGUgb3JkZXIgdGhhdCB0aGUgZnJhbWUgZmlsdGVycyB3aWxs IGJlIGNhbGxlZCBpczoKKysKKytAc21hbGxleGFtcGxlCisrRmlsdGVyMyAtPiBGaWx0ZXIyIC0+ IEZpbHRlcjEgLT4gRmlsdGVyNAorK0BlbmQgc21hbGxleGFtcGxlCisrCisrTm90ZSB0aGF0IHRo ZSBvdXRwdXQgZnJvbSBAY29kZXtGaWx0ZXIzfSBpcyBwYXNzZWQgdG8gdGhlIGlucHV0IG9mCisr QGNvZGV7RmlsdGVyMn0sIGFuZCBzbyBvbi4KKysKKytUaGlzIEBjb2Rle2ZpbHRlcn0gbWV0aG9k IGlzIHBhc3NlZCBhIFB5dGhvbiBpdGVyYXRvci4gIFRoaXMgaXRlcmF0b3IKKytjb250YWlucyBh IHNlcXVlbmNlIG9mIGZyYW1lIGRlY29yYXRvcnMgdGhhdCB3cmFwIGVhY2gKKytAY29kZXtnZGIu RnJhbWV9LCBvciBhIGZyYW1lIGRlY29yYXRvciB0aGF0IHdyYXBzIGFub3RoZXIgZnJhbWUKKytk ZWNvcmF0b3IuICBUaGUgZmlyc3QgZmlsdGVyIHRoYXQgaXMgZXhlY3V0ZWQgaW4gdGhlIHNlcXVl bmNlIG9mIGZyYW1lCisrZmlsdGVycyB3aWxsIHJlY2VpdmUgYW4gaXRlcmF0b3IgZW50aXJlbHkg Y29tcHJpc2VkIG9mIGRlZmF1bHQKKytAY29kZXtGcmFtZURlY29yYXRvcn0gb2JqZWN0cy4gIEhv d2V2ZXIsIGFmdGVyIGVhY2ggZnJhbWUgZmlsdGVyIGlzCisrZXhlY3V0ZWQsIHRoZSBwcmV2aW91 cyBmcmFtZSBmaWx0ZXIgbWF5IGhhdmUgd3JhcHBlZCBzb21lIG9yIGFsbCBvZgorK3RoZSBmcmFt ZSBkZWNvcmF0b3JzIHdpdGggdGhlaXIgb3duIGZyYW1lIGRlY29yYXRvci4gIEFzIGZyYW1lCisr ZGVjb3JhdG9ycyBtdXN0IGFsc28gY29uZm9ybSB0byBhIG1hbmRhdG9yeSBpbnRlcmZhY2UsIHRo ZXNlCisrZGVjb3JhdG9ycyBjYW4gYmUgYXNzdW1lZCB0byBhY3QgaW4gYSB1bmlmb3JtIG1hbm5l ciAoQHB4cmVme0ZyYW1lCisrRGVjb3JhdG9yIEFQSX0pLgorKworK1RoaXMgbWV0aG9kIG11c3Qg cmV0dXJuIGFuIG9iamVjdCBjb25mb3JtaW5nIHRvIHRoZSBQeXRob24gaXRlcmF0b3IKKytwcm90 b2NvbC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmF0b3IgbXVzdCBiZSBhbiBvYmplY3QgY29uZm9y bWluZyB0bworK3RoZSBmcmFtZSBkZWNvcmF0b3IgaW50ZXJmYWNlLiAgSWYgYSBmcmFtZSBmaWx0 ZXIgZG9lcyBub3Qgd2lzaCB0bworK3BlcmZvcm0gYW55IG9wZXJhdGlvbnMgb24gdGhpcyBpdGVy YXRvciwgaXQgc2hvdWxkIHJldHVybiB0aGF0CisraXRlcmF0b3IgdW50b3VjaGVkLgorKworK1Ro aXMgbWV0aG9kIGlzIG5vdCBvcHRpb25hbC4gIElmIGl0IGRvZXMgbm90IGV4aXN0LCBAdmFsdWV7 R0RCTn0gd2lsbAorK3JhaXNlIGFuZCBwcmludCBhbiBlcnJvci4KKytAZW5kIGRlZnVuCisrCisr QGRlZnZhciBGcmFtZUZpbHRlci5uYW1lCisrVGhlIEBjb2Rle25hbWV9IGF0dHJpYnV0ZSBtdXN0 IGJlIFB5dGhvbiBzdHJpbmcgd2hpY2ggY29udGFpbnMgdGhlCisrbmFtZSBvZiB0aGUgZmlsdGVy IGRpc3BsYXllZCBieSBAdmFsdWV7R0RCTn0gKEBweHJlZntGcmFtZSBGaWx0ZXIKKytNYW5hZ2Vt ZW50fSkuICBUaGlzIGF0dHJpYnV0ZSBtYXkgY29udGFpbiBhbnkgY29tYmluYXRpb24gb2YgbGV0 dGVycworK29yIG51bWJlcnMuICBDYXJlIHNob3VsZCBiZSB0YWtlbiB0byBlbnN1cmUgdGhhdCBp dCBpcyB1bmlxdWUuICBUaGlzCisrYXR0cmlidXRlIGlzIG1hbmRhdG9yeS4KKytAZW5kIGRlZnZh cgorKworK0BkZWZ2YXIgRnJhbWVGaWx0ZXIuZW5hYmxlZAorK1RoZSBAY29kZXtlbmFibGVkfSBh dHRyaWJ1dGUgbXVzdCBiZSBQeXRob24gYm9vbGVhbi4gIFRoaXMgYXR0cmlidXRlCisraW5kaWNh dGVzIHRvIEB2YWx1ZXtHREJOfSB3aGV0aGVyIHRoZSBmcmFtZSBmaWx0ZXIgaXMgZW5hYmxlZCwg YW5kCisrc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBmcmFtZSBmaWx0ZXJzIGFyZSBleGVjdXRl ZC4gIElmCisrQGNvZGV7ZW5hYmxlZH0gaXMgQGNvZGV7VHJ1ZX0sIHRoZW4gdGhlIGZyYW1lIGZp bHRlciB3aWxsIGJlIGV4ZWN1dGVkCisrd2hlbiBhbnkgb2YgdGhlIGJhY2t0cmFjZSBjb21tYW5k cyBkZXRhaWxlZCBlYXJsaWVyIGluIHRoaXMgY2hhcHRlcgorK2FyZSBleGVjdXRlZC4gIElmIEBj b2Rle2VuYWJsZWR9IGlzIEBjb2Rle0ZhbHNlfSwgdGhlbiB0aGUgZnJhbWUKKytmaWx0ZXIgd2ls bCBub3QgYmUgZXhlY3V0ZWQuICBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRvcnkuCisrQGVuZCBk ZWZ2YXIKKysKKytAZGVmdmFyIEZyYW1lRmlsdGVyLnByaW9yaXR5CisrVGhlIEBjb2Rle3ByaW9y aXR5fSBhdHRyaWJ1dGUgbXVzdCBiZSBQeXRob24gaW50ZWdlci4gIFRoaXMgYXR0cmlidXRlCisr Y29udHJvbHMgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiBpbiByZWxhdGlvbiB0byBvdGhlciBmcmFt ZSBmaWx0ZXJzLgorK1RoZXJlIGFyZSBubyBpbXBvc2VkIGxpbWl0cyBvbiB0aGUgcmFuZ2Ugb2Yg QGNvZGV7cHJpb3JpdHl9IG90aGVyIHRoYW4KKytpdCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlci4g IFRoZSBoaWdoZXIgdGhlIEBjb2Rle3ByaW9yaXR5fSBhdHRyaWJ1dGUsCisrdGhlIHNvb25lciB0 aGUgZnJhbWUgZmlsdGVyIHdpbGwgYmUgZXhlY3V0ZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIKKytm cmFtZSBmaWx0ZXJzLiAgQWx0aG91Z2ggQGNvZGV7cHJpb3JpdHl9IGNhbiBiZSBuZWdhdGl2ZSwg aXQgaXMKKytyZWNvbW1lbmRlZCBwcmFjdGljZSB0byBhc3N1bWUgemVybyBpcyB0aGUgbG93ZXN0 IHByaW9yaXR5IHRoYXQgYQorK2ZyYW1lIGZpbHRlciBjYW4gYmUgYXNzaWduZWQuICBGcmFtZSBm aWx0ZXJzIHRoYXQgaGF2ZSB0aGUgc2FtZQorK3ByaW9yaXR5IGFyZSBleGVjdXRlZCBpbiB1bnNv cnRlZCBvcmRlciBpbiB0aGF0IHByaW9yaXR5IHNsb3QuICBUaGlzCisrYXR0cmlidXRlIGlzIG1h bmRhdG9yeS4KKytAZW5kIGRlZnZhcgorKworK0Bub2RlIEZyYW1lIERlY29yYXRvciBBUEkKKytA c3Vic3Vic2VjdGlvbiBEZWNvcmF0aW5nIEZyYW1lcy4KKytAY2luZGV4IGZyYW1lIGRlY29yYXRv ciBhcGkKKysKKytGcmFtZSBkZWNvcmF0b3JzIGFyZSBzaXN0ZXIgb2JqZWN0cyB0byBmcmFtZSBm aWx0ZXJzIChAcHhyZWZ7RnJhbWUKKytGaWx0ZXIgQVBJfSkuICBGcmFtZSBkZWNvcmF0b3JzIGFy ZSBhcHBsaWVkIGJ5IGEgZnJhbWUgZmlsdGVyIGFuZCBjYW4KKytvbmx5IGJlIHVzZWQgaW4gY29u anVuY3Rpb24gd2l0aCBmcmFtZSBmaWx0ZXJzLgorKworK1RoZSBwdXJwb3NlIG9mIGEgZnJhbWUg ZGVjb3JhdG9yIGlzIHRvIGN1c3RvbWl6ZSB0aGUgcHJpbnRlZCBjb250ZW50Cisrb2YgZWFjaCBA Y29kZXtnZGIuRnJhbWV9IGluIGNvbW1hbmRzIHdoZXJlIGZyYW1lIGZpbHRlcnMgYXJlIGV4ZWN1 dGVkLgorK1RoaXMgY29uY2VwdCBpcyBjYWxsZWQgZGVjb3JhdGluZyBhIGZyYW1lLiAgRnJhbWUg ZGVjb3JhdG9ycyBkZWNvcmF0ZQorK2EgQGNvZGV7Z2RiLkZyYW1lfSB3aXRoIFB5dGhvbiBjb2Rl IGNvbnRhaW5lZCB3aXRoaW4gZWFjaCBBUEkgY2FsbC4KKytUaGlzIHNlcGFyYXRlcyB0aGUgYWN0 dWFsIGRhdGEgY29udGFpbmVkIGluIGEgQGNvZGV7Z2RiLkZyYW1lfSBmcm9tCisrdGhlIGRlY29y YXRlZCBkYXRhIHByb2R1Y2VkIGJ5IGEgZnJhbWUgZGVjb3JhdG9yLiAgVGhpcyBhYnN0cmFjdGlv biBpcworK25lY2Vzc2FyeSB0byBtYWludGFpbiBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgY29udGFp bmVkIGluIGVhY2gKKytAY29kZXtnZGIuRnJhbWV9LgorKworK0ZyYW1lIGRlY29yYXRvcnMgaGF2 ZSBhIG1hbmRhdG9yeSBpbnRlcmZhY2UsIGRlZmluZWQgYmVsb3cuCisrCisrQHZhbHVle0dEQk59 IGFscmVhZHkgY29udGFpbnMgYSBmcmFtZSBkZWNvcmF0b3IgY2FsbGVkCisrQGNvZGV7RnJhbWVE ZWNvcmF0b3J9LiAgVGhpcyBjb250YWlucyBzdWJzdGFudGlhbCBhbW91bnRzIG9mCisrYm9pbGVy cGxhdGUgY29kZSB0byBkZWNvcmF0ZSB0aGUgY29udGVudCBvZiBhIEBjb2Rle2dkYi5GcmFtZX0u ICBJdCBpcworK3JlY29tbWVuZGVkIHRoYXQgb3RoZXIgZnJhbWUgZGVjb3JhdG9ycyBpbmhlcml0 IGFuZCBleHRlbmQgdGhpcworK29iamVjdCwgYW5kIG9ubHkgdG8gb3ZlcnJpZGUgdGhlIG1ldGhv ZHMgbmVlZGVkLgorKworK0BkZWZ1biBGcmFtZURlY29yYXRvci5lbGlkZWQgKHNlbGYpCisrCisr VGhlIEBjb2Rle2VsaWRlZH0gbWV0aG9kIGdyb3VwcyBmcmFtZXMgdG9nZXRoZXIgaW4gYSBoaWVy YXJjaGljYWwKKytzeXN0ZW0uICBBbiBleGFtcGxlIHdvdWxkIGJlIGFuIGludGVycHJldGVyLCB3 aGVyZSBtdWx0aXBsZSBsb3ctbGV2ZWwKKytmcmFtZXMgbWFrZSB1cCBhIHNpbmdsZSBjYWxsIGlu IHRoZSBpbnRlcnByZXRlZCBsYW5ndWFnZS4gIEluIHRoaXMKKytleGFtcGxlLCB0aGUgZnJhbWUg ZmlsdGVyIHdvdWxkIGVsaWRlIHRoZSBsb3ctbGV2ZWwgZnJhbWVzIGFuZCBwcmVzZW50CisrYSBz aW5nbGUgaGlnaC1sZXZlbCBmcmFtZSwgcmVwcmVzZW50aW5nIHRoZSBjYWxsIGluIHRoZSBpbnRl cnByZXRlZAorK2xhbmd1YWdlLCB0byB0aGUgdXNlci4KKysKKytUaGUgQGNvZGV7ZWxpZGVkfSBm dW5jdGlvbiBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSBhbmQgdGhpcyBpdGVyYWJsZQorK211c3Qg Y29udGFpbiB0aGUgZnJhbWVzIHRoYXQgYXJlIGJlaW5nIGVsaWRlZCB3cmFwcGVkIGluIGEgc3Vp dGFibGUKKytmcmFtZSBkZWNvcmF0b3IuICBJZiBubyBmcmFtZXMgYXJlIGJlaW5nIGVsaWRlZCB0 aGlzIGZ1bmN0aW9uIG1heQorK3JldHVybiBhbiBlbXB0eSBpdGVyYWJsZSwgb3IgQGNvZGV7Tm9u ZX0uICBFbGlkZWQgZnJhbWVzIGFyZSBpbmRlbnRlZAorK2Zyb20gbm9ybWFsIGZyYW1lcyBpbiBh IEBjb2Rle0NMSX0gYmFja3RyYWNlLCBvciBpbiB0aGUgY2FzZSBvZgorK0Bjb2Rle0dEQi9NSX0s IGFyZSBwbGFjZWQgaW4gdGhlIEBjb2Rle2NoaWxkcmVufSBmaWVsZCBvZiB0aGUgZWxpZGluZwor K2ZyYW1lLgorKworK0l0IGlzIHRoZSBmcmFtZSBmaWx0ZXIncyB0YXNrIHRvIGFsc28gZmlsdGVy IG91dCB0aGUgZWxpZGVkIGZyYW1lcyBmcm9tCisrdGhlIHNvdXJjZSBpdGVyYXRvci4gIFRoaXMg d2lsbCBhdm9pZCBwcmludGluZyB0aGUgZnJhbWUgdHdpY2UuCisrQGVuZCBkZWZ1bgorKworK0Bk ZWZ1biBGcmFtZURlY29yYXRvci5mdW5jdGlvbiAoc2VsZikKKysKKytUaGlzIG1ldGhvZCByZXR1 cm5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgZnJhbWUgdGhhdCBpcyB0bworK2Jl IHByaW50ZWQuCisrCisrVGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYSBQeXRob24gc3RyaW5nIGRl c2NyaWJpbmcgdGhlIGZ1bmN0aW9uLCBvcgorK0Bjb2Rle05vbmV9LgorKworK0lmIHRoaXMgZnVu Y3Rpb24gcmV0dXJucyBAY29kZXtOb25lfSwgQHZhbHVle0dEQk59IHdpbGwgbm90IHByaW50IGFu eQorK2RhdGEgZm9yIHRoaXMgZmllbGQuCisrQGVuZCBkZWZ1bgorKworK0BkZWZ1biBGcmFtZURl Y29yYXRvci5hZGRyZXNzIChzZWxmKQorKworK1RoaXMgbWV0aG9kIHJldHVybnMgdGhlIGFkZHJl c3Mgb2YgdGhlIGZyYW1lIHRoYXQgaXMgdG8gYmUgcHJpbnRlZC4KKysKKytUaGlzIG1ldGhvZCBt dXN0IHJldHVybiBhIFB5dGhvbiBudW1lcmljIGludGVnZXIgdHlwZSBvZiBzdWZmaWNpZW50Cisr c2l6ZSB0byBkZXNjcmliZSB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUsIG9yIEBjb2Rle05vbmV9 LgorKworK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIEBjb2Rle05vbmV9LCBAdmFsdWV7R0RC Tn0gd2lsbCBub3QgcHJpbnQKKythbnkgZGF0YSBmb3IgdGhpcyBmaWVsZC4KKytAZW5kIGRlZnVu CisrCisrQGRlZnVuIEZyYW1lRGVjb3JhdG9yLmZpbGVuYW1lIChzZWxmKQorKworK1RoaXMgbWV0 aG9kIHJldHVybnMgdGhlIGZpbGVuYW1lIGFuZCBwYXRoIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZy YW1lLgorKworK1RoaXMgbWV0aG9kIG11c3QgcmV0dXJuIGEgUHl0aG9uIHN0cmluZyBjb250YWlu aW5nIHRoZSBmaWxlbmFtZSBhbmQKKyt0aGUgcGF0aCB0byB0aGUgb2JqZWN0IGZpbGUgYmFja2lu ZyB0aGUgZnJhbWUsIG9yIEBjb2Rle05vbmV9LgorKworK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJu cyBhIEBjb2Rle05vbmV9LCBAdmFsdWV7R0RCTn0gd2lsbCBub3QgcHJpbnQKKythbnkgZGF0YSBm b3IgdGhpcyBmaWVsZC4KKytAZW5kIGRlZnVuCisrCisrQGRlZnVuIEZyYW1lRGVjb3JhdG9yLmxp bmUgKHNlbGYpOgorKworK1RoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGFzc29j aWF0ZWQgd2l0aCB0aGUgY3VycmVudAorK3Bvc2l0aW9uIHdpdGhpbiB0aGUgZnVuY3Rpb24gYWRk cmVzc2VkIGJ5IHRoaXMgZnJhbWUuCisrCisrVGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYSBQeXRo b24gaW50ZWdlciB0eXBlLCBvciBAY29kZXtOb25lfS4KKysKKytJZiB0aGlzIGZ1bmN0aW9uIHJl dHVybnMgYSBAY29kZXtOb25lfSwgQHZhbHVle0dEQk59IHdpbGwgbm90IHByaW50CisrYW55IGRh dGEgZm9yIHRoaXMgZmllbGQuCisrQGVuZCBkZWZ1bgorKworK0BkZWZ1biBGcmFtZURlY29yYXRv ci5mcmFtZV9hcmdzIChzZWxmKQorK0BhbmNob3J7ZnJhbWVfYXJnc30KKysKKytUaGlzIG1ldGhv ZCBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSwgb3IgQGNvZGV7Tm9uZX0uICBSZXR1cm5pbmcgYW4K KytlbXB0eSBpdGVyYWJsZSwgb3IgQGNvZGV7Tm9uZX0gbWVhbnMgZnJhbWUgYXJndW1lbnRzIHdp bGwgbm90IGJlCisrcHJpbnRlZCBmb3IgdGhpcyBmcmFtZS4gIFRoaXMgaXRlcmFibGUgbXVzdCBj b250YWluIG9iamVjdHMgdGhhdAorK2ltcGxlbWVudCB0d28gbWV0aG9kcywgZGVzY3JpYmVkIGhl cmUuCisrCisrVGhpcyBvYmplY3QgbXVzdCBpbXBsZW1lbnQgYSBAY29kZXthcmd1bWVudH0gbWV0 aG9kIHdoaWNoIHRha2VzIGEKKytzaW5nbGUgQGNvZGV7c2VsZn0gcGFyYW1ldGVyIGFuZCBtdXN0 IHJldHVybiBhIEBjb2Rle2dkYi5TeW1ib2x9CisrKEBweHJlZntTeW1ib2xzIEluIFB5dGhvbn0p LCBvciBhIFB5dGhvbiBzdHJpbmcuICBUaGUgb2JqZWN0IG11c3QgYWxzbworK2ltcGxlbWVudCBh IEBjb2Rle3ZhbHVlfSBtZXRob2Qgd2hpY2ggdGFrZXMgYSBzaW5nbGUgQGNvZGV7c2VsZn0KKytw YXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgQGNvZGV7Z2RiLlZhbHVlfSAoQHB4cmVme1ZhbHVl cyBGcm9tCisrSW5mZXJpb3J9KSwgYSBQeXRob24gdmFsdWUsIG9yIEBjb2Rle05vbmV9LiAgSWYg dGhlIEBjb2Rle3ZhbHVlfQorK21ldGhvZCByZXR1cm5zIEBjb2Rle05vbmV9LCBhbmQgdGhlIEBj b2Rle2FyZ3VtZW50fSBtZXRob2QgcmV0dXJucyBhCisrQGNvZGV7Z2RiLlN5bWJvbH0sIEB2YWx1 ZXtHREJOfSB3aWxsIGxvb2stdXAgYW5kIHByaW50IHRoZSB2YWx1ZSBvZgorK3RoZSBAY29kZXtn ZGIuU3ltYm9sfSBhdXRvbWF0aWNhbGx5LgorKworK0EgYnJpZWYgZXhhbXBsZToKKysKKytAc21h bGxleGFtcGxlCisrY2xhc3MgU3ltVmFsdWVXcmFwcGVyKCk6CisrCisrICAgIGRlZiBfX2luaXRf XyhzZWxmLCBzeW1ib2wsIHZhbHVlKToKKysgICAgICAgIHNlbGYuc3ltID0gc3ltYm9sCisrICAg ICAgICBzZWxmLnZhbCA9IHZhbHVlCisrCisrICAgIGRlZiB2YWx1ZShzZWxmKToKKysgICAgICAg IHJldHVybiBzZWxmLnZhbAorKworKyAgICBkZWYgc3ltYm9sKHNlbGYpOgorKyAgICAgICAgcmV0 dXJuIHNlbGYuc3ltCisrCisrY2xhc3MgU29tZUZyYW1lRGVjb3JhdG9yKCkKKysuLi4KKysuLi4K KysgICAgZGVmIGZyYW1lX2FyZ3Moc2VsZik6CisrICAgICAgICBhcmdzID0gW10KKysgICAgICAg IHRyeToKKysgICAgICAgICAgICBibG9jayA9IHNlbGYuaW5mZXJpb3JfZnJhbWUuYmxvY2soKQor KyAgICAgICAgZXhjZXB0OgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICAj IEl0ZXJhdGUgb3ZlciBhbGwgc3ltYm9scyBpbiBhIGJsb2NrLiAgT25seSBhZGQKKysgICAgICAg ICMgc3ltYm9scyB0aGF0IGFyZSBhcmd1bWVudHMuCisrICAgICAgICBmb3Igc3ltIGluIGJsb2Nr OgorKyAgICAgICAgICAgIGlmIG5vdCBzeW0uaXNfYXJndW1lbnQ6CisrICAgICAgICAgICAgICAg IGNvbnRpbnVlCisrICAgICAgICAgICAgYXJncy5hcHBlbmQoU3ltVmFsdWVXcmFwcGVyKHN5bSxO b25lKSkKKysKKysgICAgICAgICMgQWRkIGV4YW1wbGUgc3ludGhldGljIGFyZ3VtZW50LgorKyAg ICAgICAgYXJncy5hcHBlbmQoU3ltVmFsdWVXcmFwcGVyKGBgZm9vJycsIDQyKSkKKysKKysgICAg ICAgIHJldHVybiBhcmdzCisrQGVuZCBzbWFsbGV4YW1wbGUKKytAZW5kIGRlZnVuCisrCisrQGRl ZnVuIEZyYW1lRGVjb3JhdG9yLmZyYW1lX2xvY2FscyAoc2VsZikKKysKKytUaGlzIG1ldGhvZCBt dXN0IHJldHVybiBhbiBpdGVyYWJsZSBvciBAY29kZXtOb25lfS4gIFJldHVybmluZyBhbgorK2Vt cHR5IGl0ZXJhYmxlLCBvciBAY29kZXtOb25lfSBtZWFucyBmcmFtZSBsb2NhbCBhcmd1bWVudHMg d2lsbCBub3QgYmUKKytwcmludGVkIGZvciB0aGlzIGZyYW1lLgorKworK1RoZSBvYmplY3QgaW50 ZXJmYWNlLCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXMgc3RyYXRlZ2llcyBmb3IKKyty ZWFkaW5nIGZyYW1lIGxvY2FscywgYW5kIHRoZSBleGFtcGxlIGFyZSBsYXJnZWx5IHNpbWlsYXIg dG8gdGhvc2UKKytkZXNjcmliZWQgaW4gdGhlIEBjb2Rle2ZyYW1lX2FyZ3N9IGZ1bmN0aW9uLCAo QHB4cmVme2ZyYW1lX2FyZ3MsLFRoZQorK2ZyYW1lIGZpbHRlciBmcmFtZV9hcmdzIGZ1bmN0aW9u fSkuICBCZWxvdyBpcyBhIG1vZGlmaWVkIGV4YW1wbGU6CisrCisrQHNtYWxsZXhhbXBsZQorK2Ns YXNzIFNvbWVGcmFtZURlY29yYXRvcigpCisrLi4uCisrLi4uCisrICAgIGRlZiBmcmFtZV9sb2Nh bHMoc2VsZik6CisrICAgICAgICB2YXJzID0gW10KKysgICAgICAgIHRyeToKKysgICAgICAgICAg ICBibG9jayA9IHNlbGYuaW5mZXJpb3JfZnJhbWUuYmxvY2soKQorKyAgICAgICAgZXhjZXB0Ogor KyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICAjIEl0ZXJhdGUgb3ZlciBhbGwg c3ltYm9scyBpbiBhIGJsb2NrLiAgQWRkIGFsbAorKyAgICAgICAgIyBzeW1ib2xzLCBleGNlcHQg YXJndW1lbnRzLgorKyAgICAgICAgZm9yIHN5bSBpbiBibG9jazoKKysgICAgICAgICAgICBpZiBz eW0uaXNfYXJndW1lbnQ6CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAg dmFycy5hcHBlbmQoU3ltVmFsdWVXcmFwcGVyKHN5bSxOb25lKSkKKysKKysgICAgICAgICMgQWRk IGFuIGV4YW1wbGUgb2YgYSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUuCisrICAgICAgICB2YXJz LmFwcGVuZChTeW1WYWx1ZVdyYXBwZXIoYGBiYXInJywgOTkpKQorKworKyAgICAgICAgcmV0dXJu IHZhcnMKKytAZW5kIHNtYWxsZXhhbXBsZQorK0BlbmQgZGVmdW4KKysKKytAZGVmdW4gRnJhbWVE ZWNvcmF0b3IuaW5mZXJpb3JfZnJhbWUgKHNlbGYpOgorKworK1RoaXMgbWV0aG9kIG11c3QgcmV0 dXJuIHRoZSB1bmRlcmx5aW5nIEBjb2Rle2dkYi5GcmFtZX0gdGhhdCB0aGlzCisrZnJhbWUgZGVj b3JhdG9yIGlzIGRlY29yYXRpbmcuICBAdmFsdWV7R0RCTn0gcmVxdWlyZXMgdGhlIHVuZGVybHlp bmcKKytmcmFtZSBmb3IgaW50ZXJuYWwgZnJhbWUgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIGhv dyB0byBwcmludCBjZXJ0YWluCisrdmFsdWVzIHdoZW4gcHJpbnRpbmcgYSBmcmFtZS4KKytAZW5k IGRlZnVuCisrCisrQG5vZGUgV3JpdGluZyBhIEZyYW1lIEZpbHRlcgorK0BzdWJzdWJzZWN0aW9u IFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXIKKytAY2luZGV4IHdyaXRpbmcgYSBmcmFtZSBmaWx0ZXIK KysKKytUaGVyZSBhcmUgdGhyZWUgYmFzaWMgZWxlbWVudHMgdGhhdCBhIGZyYW1lIGZpbHRlciBt dXN0IGltcGxlbWVudDogaXQKKyttdXN0IGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlIGRvY3VtZW50 ZWQgaW50ZXJmYWNlIChAcHhyZWZ7RnJhbWUgRmlsdGVyCisrQVBJfSksIGl0IG11c3QgcmVnaXN0 ZXIgaXRzZWxmIHdpdGggQHZhbHVle0dEQk59LCBhbmQgZmluYWxseSwgaXQgbXVzdAorK2RlY2lk ZSBpZiBpdCBpcyB0byB3b3JrIG9uIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IEB2YWx1ZXtHREJOfS4g IEluIGFsbAorK2Nhc2VzLCB3aGV0aGVyIGl0IHdvcmtzIG9uIHRoZSBpdGVyYXRvciBvciBub3Qs IGVhY2ggZnJhbWUgZmlsdGVyIG11c3QKKytyZXR1cm4gYW4gaXRlcmF0b3IuICBBIGJhcmUtYm9u ZXMgZnJhbWUgZmlsdGVyIGZvbGxvd3MgdGhlIHBhdHRlcm4gaW4KKyt0aGUgZm9sbG93aW5nIGV4 YW1wbGUuCisrCisrQHNtYWxsZXhhbXBsZQorK2ltcG9ydCBnZGIKKysKKytjbGFzcyBGcmFtZUZp bHRlcigpOgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICAjIEZyYW1lIGZp bHRlciBhdHRyaWJ1dGUgY3JlYXRpb24uCisrICAgICAgICAjCisrICAgICAgICAjICduYW1lJyBp cyB0aGUgbmFtZSBvZiB0aGUgZmlsdGVyIHRoYXQgR0RCIHdpbGwgZGlzcGxheS4KKysgICAgICAg ICMKKysgICAgICAgICMgJ3ByaW9yaXR5JyBpcyB0aGUgcHJpb3JpdHkgb2YgdGhlIGZpbHRlciBy ZWxhdGl2ZSB0byBvdGhlcgorKyAgICAgICAgIyBmaWx0ZXJzLgorKyAgICAgICAgIworKyAgICAg ICAgIyAnZW5hYmxlZCcgaXMgYSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBm aWx0ZXIgaXMKKysgICAgICAgICMgZW5hYmxlZCBhbmQgc2hvdWxkIGJlIGV4ZWN1dGVkLgorKwor KyAgICAgICAgc2VsZi5uYW1lID0gIkZvbyIKKysgICAgICAgIHNlbGYucHJpb3JpdHkgPSAxMDAK KysgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKysKKysgICAgICAgICMgUmVnaXN0ZXIgdGhp cyBmcmFtZSBmaWx0ZXIgd2l0aCB0aGUgZ2xvYmFsIGZyYW1lX2ZpbHRlcnMKKysgICAgICAgICMg ZGljdGlvbmFyeS4KKysgICAgICAgIGdkYi5mcmFtZV9maWx0ZXJzW3NlbGYubmFtZV0gPSBzZWxm CisrCisrICAgIGRlZiBmaWx0ZXIoc2VsZiwgZnJhbWVfaXRlcik6CisrICAgICAgICAjIEp1c3Qg cmV0dXJuIHRoZSBpdGVyYXRvci4KKysgICAgICAgIHJldHVybiBmcmFtZV9pdGVyCisrQGVuZCBz bWFsbGV4YW1wbGUKKysKKytUaGUgZnJhbWUgZmlsdGVyIGluIHRoZSBleGFtcGxlIGFib3ZlIGlt cGxlbWVudHMgdGhlIHRocmVlCisrcmVxdWlyZW1lbnRzIGZvciBhbGwgZnJhbWUgZmlsdGVycy4g IEl0IGltcGxlbWVudHMgdGhlIEFQSSwgc2VsZgorK3JlZ2lzdGVycywgYW5kIG1ha2VzIGEgZGVj aXNpb24gb24gdGhlIGl0ZXJhdG9yIChpbiB0aGlzIGNhc2UsIGl0IGp1c3QKKytyZXR1cm5zIHRo ZSBpdGVyYXRvciB1bnRvdWNoZWQpLgorKworK1RoZSBmaXJzdCBzdGVwIGlzIGF0dHJpYnV0ZSBj cmVhdGlvbiBhbmQgYXNzaWdubWVudCwgYW5kIGFzIHNob3duIGluCisrdGhlIGNvbW1lbnRzIHRo ZSBmaWx0ZXIgYXNzaWducyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6ICBAY29kZXtuYW1lfSwK KytAY29kZXtwcmlvcml0eX0gYW5kIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91bGQgYmUgZW5hYmxl ZCB3aXRoIHRoZQorK0Bjb2Rle2VuYWJsZWR9IGF0dHJpYnV0ZS4KKysKKytUaGUgc2Vjb25kIHN0 ZXAgaXMgcmVnaXN0ZXJpbmcgdGhlIGZyYW1lIGZpbHRlciB3aXRoIHRoZSBkaWN0aW9uYXJ5IG9y CisrZGljdGlvbmFyaWVzIHRoYXQgdGhlIGZyYW1lIGZpbHRlciBoYXMgaW50ZXJlc3QgaW4uICBB cyBzaG93biBpbiB0aGUKKytjb21tZW50cywgdGhpcyBmaWx0ZXIganVzdCByZWdpc3RlcnMgaXRz ZWxmIHdpdGggdGhlIGdsb2JhbCBkaWN0aW9uYXJ5CisrQGNvZGV7Z2RiLmZyYW1lX2ZpbHRlcnN9 LiAgQXMgbm90ZWQgZWFybGllciwgQGNvZGV7Z2RiLmZyYW1lX2ZpbHRlcnN9CisraXMgYSBkaWN0 aW9uYXJ5IHRoYXQgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIEBjb2Rle2dkYn0gbW9kdWxlIHdoZW4K KytAdmFsdWV7R0RCTn0gc3RhcnRzLiAgV2hhdCBkaWN0aW9uYXJ5IGEgZmlsdGVyIHJlZ2lzdGVy cyB3aXRoIGlzIGFuCisraW1wb3J0YW50IGNvbnNpZGVyYXRpb24uICBHZW5lcmFsbHksIGlmIGEg ZmlsdGVyIGlzIHNwZWNpZmljIHRvIGEgc2V0Cisrb2YgY29kZSwgaXQgc2hvdWxkIGJlIHJlZ2lz dGVyZWQgZWl0aGVyIGluIHRoZSBAY29kZXtvYmpmaWxlfSBvcgorK0Bjb2Rle3Byb2dzcGFjZX0g ZGljdGlvbmFyaWVzIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9ncmFtCisrY3VycmVu dGx5IGxvYWRlZCBpbiBAdmFsdWV7R0RCTn0uICBUaGUgZ2xvYmFsIGRpY3Rpb25hcnkgaXMgYWx3 YXlzCisrcHJlc2VudCBpbiBAdmFsdWV7R0RCTn0gYW5kIGlzIG5ldmVyIHVubG9hZGVkLiAgQW55 IGZpbHRlcnMgcmVnaXN0ZXJlZAorK3dpdGggdGhlIGdsb2JhbCBkaWN0aW9uYXJ5IHdpbGwgZXhp c3QgdW50aWwgQHZhbHVle0dEQk59IGV4aXRzLiAgVG8KKythdm9pZCBmaWx0ZXJzIHRoYXQgbWF5 IGNvbmZsaWN0LCBpdCBpcyBnZW5lcmFsbHkgYmV0dGVyIHRvIHJlZ2lzdGVyCisrZnJhbWUgZmls dGVycyBhZ2FpbnN0IHRoZSBkaWN0aW9uYXJpZXMgdGhhdCBtb3JlIGNsb3NlbHkgYWxpZ24gd2l0 aAorK3RoZSB1c2FnZSBvZiB0aGUgZmlsdGVyIGN1cnJlbnRseSBpbiBxdWVzdGlvbi4gIEB4cmVm e1B5dGhvbgorK0F1dG8tbG9hZGluZ30sIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIGF1dG8t bG9hZGluZyBQeXRob24gc2NyaXB0cy4KKysKKytAdmFsdWV7R0RCTn0gdGFrZXMgYSBoYW5kcy1v ZmYgYXBwcm9hY2ggdG8gZnJhbWUgZmlsdGVyIHJlZ2lzdHJhdGlvbiwKKyt0aGVyZWZvcmUgaXQg aXMgdGhlIGZyYW1lIGZpbHRlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZQorK3JlZ2lzdHJh dGlvbiBoYXMgb2NjdXJyZWQsIGFuZCB0aGF0IGFueSBleGNlcHRpb25zIGFyZSBoYW5kbGVkCisr YXBwcm9wcmlhdGVseS4gIEluIHBhcnRpY3VsYXIsIHlvdSBtYXkgd2lzaCB0byBoYW5kbGUgZXhj ZXB0aW9ucworK3JlbGF0aW5nIHRvIFB5dGhvbiBkaWN0aW9uYXJ5IGtleSB1bmlxdWVuZXNzLiAg SXQgaXMgbWFuZGF0b3J5IHRoYXQKKyt0aGUgZGljdGlvbmFyeSBrZXkgaXMgdGhlIHNhbWUgYXMg ZnJhbWUgZmlsdGVyJ3MgQGNvZGV7bmFtZX0KKythdHRyaWJ1dGUuICBXaGVuIGEgdXNlciBtYW5h Z2VzIGZyYW1lIGZpbHRlcnMgKEBweHJlZntGcmFtZSBGaWx0ZXIKKytNYW5hZ2VtZW50fSksIHRo ZSBuYW1lcyBAdmFsdWV7R0RCTn0gd2lsbCBkaXNwbGF5IGFyZSB0aG9zZSBjb250YWluZWQKKytp biB0aGUgQGNvZGV7bmFtZX0gYXR0cmlidXRlLgorKworK1RoZSBmaW5hbCBzdGVwIG9mIHRoaXMg ZXhhbXBsZSBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisrQGNvZGV7ZmlsdGVyfSBtZXRo b2QuICBBcyBzaG93biBpbiB0aGUgZXhhbXBsZSBjb21tZW50cywgd2UgZGVmaW5lIHRoZQorK0Bj b2Rle2ZpbHRlcn0gbWV0aG9kIGFuZCBub3RlIHRoYXQgdGhlIG1ldGhvZCBtdXN0IHRha2UgYW4g aXRlcmF0b3IsCisrYW5kIGFsc28gbXVzdCByZXR1cm4gYW4gaXRlcmF0b3IuICBJbiB0aGlzIGJh cmUtYm9uZXMgZXhhbXBsZSwgdGhlCisrZnJhbWUgZmlsdGVyIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBh cyBpdCBqdXN0IHJldHVybnMgdGhlIGl0ZXJhdG9yCisrdW50b3VjaGVkLiAgSG93ZXZlciB0aGlz IGlzIGEgdmFsaWQgb3BlcmF0aW9uIGZvciBmcmFtZSBmaWx0ZXJzIHRoYXQKKytoYXZlIHRoZSBA Y29kZXtlbmFibGVkfSBhdHRyaWJ1dGUgc2V0LCBidXQgZGVjaWRlIG5vdCB0byBvcGVyYXRlIG9u CisrYW55IGZyYW1lcy4KKysKKytJbiB0aGUgbmV4dCBleGFtcGxlLCB0aGUgZnJhbWUgZmlsdGVy IG9wZXJhdGVzIG9uIGFsbCBmcmFtZXMgYW5kCisrdXRpbGl6ZXMgYSBmcmFtZSBkZWNvcmF0b3Ig dG8gcGVyZm9ybSBzb21lIHdvcmsgb24gdGhlIGZyYW1lcy4KKytAeHJlZntGcmFtZSBEZWNvcmF0 b3IgQVBJfSwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGZyYW1lCisrZGVjb3JhdG9y IGludGVyZmFjZS4KKysKKytUaGlzIGV4YW1wbGUgd29ya3Mgb24gaW5saW5lZCBmcmFtZXMuICBJ dCBoaWdobGlnaHRzIGZyYW1lcyB3aGljaCBhcmUKKytpbmxpbmVkIGJ5IHRhZ2dpbmcgdGhlbSB3 aXRoIGFuIGBgW2lubGluZWRdJycgdGFnLiAgQnkgYXBwbHlpbmcgYQorK2ZyYW1lIGRlY29yYXRv ciB0byBhbGwgZnJhbWVzIHdpdGggdGhlIFB5dGhvbiBAY29kZXtpdGVydG9vbHMgaW1hcH0KKytt ZXRob2QsIHRoZSBleGFtcGxlIGRlZmVycyBhY3Rpb25zIHRvIHRoZSBmcmFtZSBkZWNvcmF0b3Iu ICBGcmFtZQorK2RlY29yYXRvcnMgYXJlIG9ubHkgcHJvY2Vzc2VkIHdoZW4gQHZhbHVle0dEQk59 IHByaW50cyB0aGUgYmFja3RyYWNlLgorKworK1RoaXMgaW50cm9kdWNlcyBhIG5ldyBkZWNpc2lv biBtYWtpbmcgdG9waWM6IHdoZXRoZXIgdG8gcGVyZm9ybQorK2RlY2lzaW9uIG1ha2luZyBvcGVy YXRpb25zIGF0IHRoZSBmaWx0ZXJpbmcgc3RlcCwgb3IgYXQgdGhlIHByaW50aW5nCisrc3RlcC4g IEluIHRoaXMgZXhhbXBsZSdzIGFwcHJvYWNoLCBpdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBmaWx0 ZXJpbmcKKytkZWNpc2lvbnMgYXQgdGhlIGZpbHRlcmluZyBzdGVwIGJleW9uZCBtYXBwaW5nIGEg ZnJhbWUgZGVjb3JhdG9yIHRvCisrZWFjaCBmcmFtZS4gIFRoaXMgYWxsb3dzIHRoZSBhY3R1YWwg ZGVjaXNpb24gbWFraW5nIHRvIGJlIHBlcmZvcm1lZAorK3doZW4gZWFjaCBmcmFtZSBpcyBwcmlu dGVkLiAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiwgYW5kCisrd2VsbCB3b3J0 aCByZWZsZWN0aW5nIHVwb24gd2hlbiBkZXNpZ25pbmcgYSBmcmFtZSBmaWx0ZXIuICBBbiBpc3N1 ZQorK3RoYXQgZnJhbWUgZmlsdGVycyBzaG91bGQgYXZvaWQgaXMgdW53aW5kaW5nIHRoZSBzdGFj ayBpZiBwb3NzaWJsZS4KKytTb21lIHN0YWNrcyBjYW4gcnVuIHZlcnkgZGVlcCwgaW50byB0aGUg dGVucyBvZiB0aG91c2FuZHMgaW4gc29tZQorK2Nhc2VzLiAgVG8gc2VhcmNoIGV2ZXJ5IGZyYW1l IHRvIGRldGVybWluZSBpZiBpdCBpcyBpbmxpbmVkIGFoZWFkIG9mCisrdGltZSBtYXkgYmUgdG9v IGV4cGVuc2l2ZSBhdCB0aGUgZmlsdGVyaW5nIHN0ZXAuICBUaGUgZnJhbWUgZmlsdGVyCisrY2Fu bm90IGtub3cgaG93IG1hbnkgZnJhbWVzIGl0IGhhcyB0byBpdGVyYXRlIG92ZXIsIGFuZCBpdCB3 b3VsZCBoYXZlCisrdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYWxsLiAgVGhpcyBlbmRzIHVwIGR1 cGxpY2F0aW5nIGVmZm9ydCBhcworK0B2YWx1ZXtHREJOfSBwZXJmb3JtcyB0aGlzIGl0ZXJhdGlv biB3aGVuIGl0IHByaW50cyB0aGUgZnJhbWVzLgorKworK0luIHRoaXMgZXhhbXBsZSBkZWNpc2lv biBtYWtpbmcgY2FuIGJlIGRlZmVycmVkIHRvIHRoZSBwcmludGluZyBzdGVwLgorK0FzIGVhY2gg ZnJhbWUgaXMgcHJpbnRlZCwgdGhlIGZyYW1lIGRlY29yYXRvciBjYW4gZXhhbWluZSBlYWNoIGZy YW1lCisraW4gdHVybiB3aGVuIEB2YWx1ZXtHREJOfSBpdGVyYXRlcy4gIEZyb20gYSBwZXJmb3Jt YW5jZSB2aWV3cG9pbnQsCisrdGhpcyBpcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBkZWNpc2lvbiB0 byBtYWtlIGFzIGl0IGF2b2lkcyBkdXBsaWNhdGluZworK3RoZSBlZmZvcnQgdGhhdCB0aGUgcHJp bnRpbmcgc3RlcCB3b3VsZCB1bmRlcnRha2UgYW55d2F5LiAgQWxzbywgaWYKKyt0aGVyZSBhcmUg bWFueSBmcmFtZSBmaWx0ZXJzIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5nIGZpbHRlcmluZywg aXQKKytjYW4gc3Vic3RhbnRpYWxseSBkZWxheSB0aGUgcHJpbnRpbmcgb2YgdGhlIGJhY2t0cmFj ZSB3aGljaCB3aWxsCisrcmVzdWx0IGluIGxhcmdlIG1lbW9yeSB1c2FnZSwgYW5kIGEgcG9vciB1 c2VyIGV4cGVyaWVuY2UuCisrCisrQHNtYWxsZXhhbXBsZQorK2NsYXNzIElubGluZUZpbHRlcigp OgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzZWxmLm5hbWUgPSAiSW5s aW5lZEZyYW1lRmlsdGVyIgorKyAgICAgICAgc2VsZi5wcmlvcml0eSA9IDEwMAorKyAgICAgICAg c2VsZi5lbmFibGVkID0gVHJ1ZQorKyAgICAgICAgZ2RiLmZyYW1lX2ZpbHRlcnNbc2VsZi5uYW1l XSA9IHNlbGYKKysKKysgICAgZGVmIGZpbHRlcihzZWxmLCBmcmFtZV9pdGVyKToKKysgICAgICAg IGZyYW1lX2l0ZXIgPSBpdGVydG9vbHMuaW1hcChJbmxpbmVkRnJhbWVEZWNvcmF0b3IsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfaXRlcikKKysgICAgICAgIHJl dHVybiBmcmFtZV9pdGVyCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGlzIGZyYW1lIGZpbHRl ciBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIHRoZSBlYXJsaWVyIGV4YW1wbGUsIGV4Y2VwdAorK3Ro YXQgdGhlIEBjb2Rle2ZpbHRlcn0gbWV0aG9kIGFwcGxpZXMgYSBmcmFtZSBkZWNvcmF0b3Igb2Jq ZWN0IGNhbGxlZAorK0Bjb2Rle0lubGluZWRGcmFtZURlY29yYXRvcn0gdG8gZWFjaCBlbGVtZW50 IGluIHRoZSBpdGVyYXRvci4gIFRoZQorK0Bjb2Rle2ltYXB9IFB5dGhvbiBtZXRob2QgaXMgbGln aHQtd2VpZ2h0LiAgSXQgZG9lcyBub3QgcHJvYWN0aXZlbHkKKytpdGVyYXRlIG92ZXIgdGhlIGl0 ZXJhdG9yLCBidXQgcmF0aGVyIGNyZWF0ZXMgYSBuZXcgaXRlcmF0b3Igd2hpY2gKKyt3cmFwcyB0 aGUgZXhpc3Rpbmcgb25lLgorKworK0JlbG93IGlzIHRoZSBmcmFtZSBkZWNvcmF0b3IgZm9yIHRo aXMgZXhhbXBsZS4KKysKKytAc21hbGxleGFtcGxlCisrY2xhc3MgSW5saW5lZEZyYW1lRGVjb3Jh dG9yKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvYmopOgor KyAgICAgICAgc3VwZXIoSW5saW5lZEZyYW1lRGVjb3JhdG9yLCBzZWxmKS5fX2luaXRfXyhmb2Jq KQorKworKyAgICBkZWYgZnVuY3Rpb24oc2VsZik6CisrICAgICAgICBmcmFtZSA9IGZvYmouaW5m ZXJpb3JfZnJhbWUoKQorKyAgICAgICAgbmFtZSA9IHN0cihmcmFtZS5uYW1lKCkpCisrCisrICAg ICAgICBpZiBmcmFtZS50eXBlKCkgPT0gZ2RiLklOTElORV9GUkFNRToKKysgICAgICAgICAgICBu YW1lID0gbmFtZSArICIgW2lubGluZWRdIgorKworKyAgICAgICAgcmV0dXJuIG5hbWUKKytAZW5k IHNtYWxsZXhhbXBsZQorKworK1RoaXMgZnJhbWUgZGVjb3JhdG9yIG9ubHkgZGVmaW5lcyBhbmQg b3ZlcnJpZGVzIHRoZSBAY29kZXtmdW5jdGlvbn0KKyttZXRob2QuICBJdCBsZXRzIHRoZSBzdXBw bGllZCBAY29kZXtGcmFtZURlY29yYXRvcn0sIHdoaWNoIGlzIHNoaXBwZWQKKyt3aXRoIEB2YWx1 ZXtHREJOfSwgcGVyZm9ybSB0aGUgb3RoZXIgd29yayBhc3NvY2lhdGVkIHdpdGggcHJpbnRpbmcK Kyt0aGlzIGZyYW1lLgorKworK1RoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0d28gb2JqZWN0cyBj cmVhdGUgdGhpcyBvdXRwdXQgZnJvbSBhCisrYmFja3RyYWNlOgorKworK0BzbWFsbGV4YW1wbGUK KysjMCAgMHgwMDQwMDRlMCBpbiBiYXIgKCkgYXQgaW5saW5lLmM6MTEKKysjMSAgMHgwMDQwMDU2 NiBpbiBtYXggW2lubGluZWRdIChiPTYsIGE9MTIpIGF0IGlubGluZS5jOjIxCisrIzIgIDB4MDA0 MDA1NjYgaW4gbWFpbiAoKSBhdCBpbmxpbmUuYzozMQorK0BlbmQgc21hbGxleGFtcGxlCisrCisr U28gaW4gdGhlIGNhc2Ugb2YgdGhpcyBleGFtcGxlLCBhIGZyYW1lIGRlY29yYXRvciBpcyBhcHBs aWVkIHRvIGFsbAorK2ZyYW1lcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgbWF5IGJlIGlu bGluZWQgb3Igbm90LiAgQXMKKytAdmFsdWV7R0RCTn0gaXRlcmF0ZXMgb3ZlciB0aGUgaXRlcmF0 b3IgcHJvZHVjZWQgYnkgdGhlIGZyYW1lIGZpbHRlcnMsCisrQHZhbHVle0dEQk59IGV4ZWN1dGVz IGVhY2ggZnJhbWUgZGVjb3JhdG9yIHdoaWNoIHRoZW4gbWFrZXMgYSBkZWNpc2lvbgorK29uIHdo YXQgdG8gcHJpbnQgaW4gdGhlIEBjb2Rle2Z1bmN0aW9ufSBjYWxsYmFjay4gIFVzaW5nIGEgc3Ry YXRlZ3kKKytsaWtlIHRoaXMgaXMgYSB3YXkgdG8gZGVmZXIgZGVjaXNpb25zIG9uIHRoZSBmcmFt ZSBjb250ZW50IHRvIHByaW50aW5nCisrdGltZS4KKysKKytAc3ViaGVhZGluZyBFbGlkaW5nIEZy YW1lcworKworK0l0IG1pZ2h0IGJlIHRoYXQgdGhlIGFib3ZlIGV4YW1wbGUgaXMgbm90IGRlc2ly YWJsZSBmb3IgcmVwcmVzZW50aW5nCisraW5saW5lZCBmcmFtZXMsIGFuZCBhIGhpZXJhcmNoaWNh bCBhcHByb2FjaCBtYXkgYmUgcHJlZmVycmVkLiAgSWYgd2UKKyt3YW50IHRvIGhpZXJhcmNoaWNh bGx5IHJlcHJlc2VudCBmcmFtZXMsIHRoZSBAY29kZXtlbGlkZWR9IGZyYW1lCisrZGVjb3JhdG9y IGludGVyZmFjZSBtaWdodCBiZSBwcmVmZXJhYmxlLgorKworK1RoaXMgZXhhbXBsZSBhcHByb2Fj aGVzIHRoZSBpc3N1ZSB3aXRoIHRoZSBAY29kZXtlbGlkZWR9IG1ldGhvZC4gIFRoaXMKKytleGFt cGxlIGlzIHF1aXRlIGxvbmcsIGJ1dCB2ZXJ5IHNpbXBsaXN0aWMuICBJdCBpcyBvdXQtb2Ytc2Nv cGUgZm9yCisrdGhpcyBzZWN0aW9uIHRvIHdyaXRlIGEgY29tcGxldGUgZXhhbXBsZSB0aGF0IGNv bXByZWhlbnNpdmVseSBjb3ZlcnMKKythbGwgYXBwcm9hY2hlcyBvZiBmaW5kaW5nIGFuZCBwcmlu dGluZyBpbmxpbmVkIGZyYW1lcy4gIEhvd2V2ZXIsIHRoaXMKKytleGFtcGxlIGlsbHVzdHJhdGVz IHRoZSBhcHByb2FjaCBhbiBhdXRob3IgbWlnaHQgdXNlLgorKworK1RoaXMgZXhhbXBsZSBjb21w cmlzZXMgb2YgdGhyZWUgc2VjdGlvbnMuCisrCisrQHNtYWxsZXhhbXBsZQorK2NsYXNzIElubGlu ZUZyYW1lRmlsdGVyKCk6CisrCisrICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKysgICAgICAgIHNl bGYubmFtZSA9ICJJbmxpbmVkRnJhbWVGaWx0ZXIiCisrICAgICAgICBzZWxmLnByaW9yaXR5ID0g MTAwCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAgICAgICBnZGIuZnJhbWVfZmls dGVyc1tzZWxmLm5hbWVdID0gc2VsZgorKworKyAgICBkZWYgZmlsdGVyKHNlbGYsIGZyYW1lX2l0 ZXIpOgorKyAgICAgICAgcmV0dXJuIEVsaWRpbmdJbmxpbmVJdGVyYXRvcihmcmFtZV9pdGVyKQor K0BlbmQgc21hbGxleGFtcGxlCisrCisrVGhpcyBmcmFtZSBmaWx0ZXIgaXMgdmVyeSBzaW1pbGFy IHRvIHRoZSBvdGhlciBleGFtcGxlcy4gIFRoZSBvbmx5CisrZGlmZmVyZW5jZSBpcyB0aGlzIGZy YW1lIGZpbHRlciBpcyB3cmFwcGluZyB0aGUgaXRlcmF0b3IgcHJvdmlkZWQgdG8KKytpdCAoQGNv ZGV7ZnJhbWVfaXRlcn0pIHdpdGggYSBjdXN0b20gaXRlcmF0b3IgY2FsbGVkCisrQGNvZGV7RWxp ZGluZ0lubGluZUl0ZXJhdG9yfS4gIFRoaXMgYWdhaW4gZGVmZXJzIGFjdGlvbnMgdG8gd2hlbgor K0B2YWx1ZXtHREJOfSBwcmludHMgdGhlIGJhY2t0cmFjZSwgYXMgdGhlIGl0ZXJhdG9yIGlzIG5v dCB0cmF2ZXJzZWQKKyt1bnRpbCBwcmludGluZy4KKysKKytUaGUgaXRlcmF0b3IgZm9yIHRoaXMg ZXhhbXBsZSBpcyBhcyBmb2xsb3dzLiAgSXQgaXMgaW4gdGhpcyBzZWN0aW9uIG9mCisrdGhlIGV4 YW1wbGUgd2hlcmUgZGVjaXNpb25zIGFyZSBtYWRlIG9uIHRoZSBjb250ZW50IG9mIHRoZSBiYWNr dHJhY2UuCisrCisrQHNtYWxsZXhhbXBsZQorK2NsYXNzIEVsaWRpbmdJbmxpbmVJdGVyYXRvcjoK KysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlpKToKKysgICAgICAgIHNlbGYuaW5wdXRfaXRlcmF0 b3IgPSBpaQorKworKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisrICAgICAgICByZXR1cm4gc2Vs ZgorKworKyAgICBkZWYgbmV4dChzZWxmKToKKysgICAgICAgIGZyYW1lID0gbmV4dChzZWxmLmlu cHV0X2l0ZXJhdG9yKQorKworKyAgICAgICAgaWYgZnJhbWUuaW5mZXJpb3JfZnJhbWUoKS50eXBl KCkgIT0gZ2RiLklOTElORV9GUkFNRToKKysgICAgICAgICAgICByZXR1cm4gZnJhbWUKKysKKysg ICAgICAgIHRyeToKKysgICAgICAgICAgICBlbGlkaW5nX2ZyYW1lID0gbmV4dChzZWxmLmlucHV0 X2l0ZXJhdG9yKQorKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisrICAgICAgICAgICAg cmV0dXJuIGZyYW1lCisrICAgICAgICByZXR1cm4gRWxpZGluZ0ZyYW1lRGVjb3JhdG9yKGVsaWRp bmdfZnJhbWUsIFtmcmFtZV0pCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGlzIGl0ZXJhdG9y IGltcGxlbWVudHMgdGhlIFB5dGhvbiBpdGVyYXRvciBwcm90b2NvbC4gIFdoZW4gdGhlCisrQGNv ZGV7bmV4dH0gZnVuY3Rpb24gaXMgY2FsbGVkICh3aGVuIEB2YWx1ZXtHREJOfSBwcmludHMgZWFj aCBmcmFtZSksCisrdGhlIGl0ZXJhdG9yIGNoZWNrcyBpZiB0aGlzIGZyYW1lIGRlY29yYXRvciwg QGNvZGV7ZnJhbWV9LCBpcyB3cmFwcGluZworK2FuIGlubGluZWQgZnJhbWUuICBJZiBpdCBpcyBu b3QsIGl0IHJldHVybnMgdGhlIGV4aXN0aW5nIGZyYW1lIGRlY29yYXRvcgorK3VudG91Y2hlZC4g IElmIGl0IGlzIHdyYXBwaW5nIGFuIGlubGluZWQgZnJhbWUsIGl0IGFzc3VtZXMgdGhhdCB0aGUK KytpbmxpbmVkIGZyYW1lIHdhcyBjb250YWluZWQgd2l0aGluIHRoZSBuZXh0IG9sZGVzdCBmcmFt ZSwKKytAY29kZXtlbGlkaW5nX2ZyYW1lfSwgd2hpY2ggaXQgZmV0Y2hlcy4gIEl0IHRoZW4gY3Jl YXRlcyBhbmQgcmV0dXJucyBhCisrZnJhbWUgZGVjb3JhdG9yLCBAY29kZXtFbGlkaW5nRnJhbWVE ZWNvcmF0b3J9LCB3aGljaCBjb250YWlucyBib3RoIHRoZQorK2VsaWRlZCBmcmFtZSwgYW5kIHRo ZSBlbGlkaW5nIGZyYW1lLgorKworK0BzbWFsbGV4YW1wbGUKKytjbGFzcyBFbGlkaW5nSW5saW5l RGVjb3JhdG9yKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZy YW1lLCBlbGlkZWRfZnJhbWVzKToKKysgICAgICAgIHN1cGVyKEVsaWRpbmdJbmxpbmVEZWNvcmF0 b3IsIHNlbGYpLl9faW5pdF9fKGZyYW1lKQorKyAgICAgICAgc2VsZi5mcmFtZSA9IGZyYW1lCisr ICAgICAgICBzZWxmLmVsaWRlZF9mcmFtZXMgPSBlbGlkZWRfZnJhbWVzCisrCisrICAgIGRlZiBl bGlkZWQoc2VsZik6CisrICAgICAgICByZXR1cm4gaXRlcihzZWxmLmVsaWRlZF9mcmFtZXMpCisr QGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGlzIGZyYW1lIGRlY29yYXRvciBvdmVycmlkZXMgb25l IGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBpbmxpbmVkCisrZnJhbWUgaW4gdGhlIEBjb2Rle2Vs aWRlZH0gbWV0aG9kLiAgQXMgYmVmb3JlIGl0IGxldHMKKytAY29kZXtGcmFtZURlY29yYXRvcn0g ZG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmsgaW52b2x2ZWQgaW4gcHJpbnRpbmcKKyt0aGlzIGZyYW1l LiAgVGhpcyBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dC4KKysKKytAc21hbGxleGFtcGxl CisrIzAgIDB4MDA0MDA0ZTAgaW4gYmFyICgpIGF0IGlubGluZS5jOjExCisrIzIgIDB4MDA0MDA1 MjkgaW4gbWFpbiAoKSBhdCBpbmxpbmUuYzoyNQorKyAgICAjMSAgMHgwMDQwMDUyOSBpbiBtYXgg KGI9NiwgYT0xMikgYXQgaW5saW5lLmM6MTUKKytAZW5kIHNtYWxsZXhhbXBsZQorKworK0luIHRo YXQgb3V0cHV0LCBAY29kZXttYXh9IHdoaWNoIGhhcyBiZWVuIGlubGluZWQgaW50byBAY29kZXtt YWlufSBpcworK3ByaW50ZWQgaGllcmFyY2hpY2FsbHkuICBBbm90aGVyIGFwcHJvYWNoIHdvdWxk IGJlIHRvIGNvbWJpbmUgdGhlCisrQGNvZGV7ZnVuY3Rpb259IG1ldGhvZCwgYW5kIHRoZSBAY29k ZXtlbGlkZWR9IG1ldGhvZCB0byBib3RoIHByaW50IGEKKyttYXJrZXIgaW4gdGhlIGlubGluZWQg ZnJhbWUsIGFuZCBhbHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAorK3JlbGF0aW9uc2hpcC4KKysK KyBAbm9kZSBJbmZlcmlvcnMgSW4gUHl0aG9uCisgQHN1YnN1YnNlY3Rpb24gSW5mZXJpb3JzIElu IFB5dGhvbgorIEBjaW5kZXggaW5mZXJpb3JzIGluIFB5dGhvbgorQEAgLTI1MjQ1LDYgKzI2MDM2 LDExIEBAIFRoZSBAY29kZXt0eXBlX3ByaW50ZXJzfSBhdHRyaWJ1dGUgaXMgYQorIEB4cmVme1R5 cGUgUHJpbnRpbmcgQVBJfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgQGVuZCBkZWZ2YXIKKyAK KytAZGVmdmFyIFByb2dzcGFjZS5mcmFtZV9maWx0ZXJzCisrVGhlIEBjb2Rle2ZyYW1lX2ZpbHRl cnN9IGF0dHJpYnV0ZSBpcyBhIGRpY3Rpb25hcnkgb2YgZnJhbWUgZmlsdGVyCisrb2JqZWN0cy4g IEB4cmVme0ZyYW1lIEZpbHRlciBBUEl9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKytAZW5kIGRl ZnZhcgorKworIEBub2RlIE9iamZpbGVzIEluIFB5dGhvbgorIEBzdWJzdWJzZWN0aW9uIE9iamZp bGVzIEluIFB5dGhvbgorIAorQEAgLTI1Mjk1LDYgKzI2MDkxLDExIEBAIFRoZSBAY29kZXt0eXBl X3ByaW50ZXJzfSBhdHRyaWJ1dGUgaXMgYQorIEB4cmVme1R5cGUgUHJpbnRpbmcgQVBJfSwgZm9y IG1vcmUgaW5mb3JtYXRpb24uCisgQGVuZCBkZWZ2YXIKKyAKKytAZGVmdmFyIE9iamZpbGUuZnJh bWVfZmlsdGVycworK1RoZSBAY29kZXtmcmFtZV9maWx0ZXJzfSBhdHRyaWJ1dGUgaXMgYSBkaWN0 aW9uYXJ5IG9mIGZyYW1lIGZpbHRlcgorK29iamVjdHMuICBAeHJlZntGcmFtZSBGaWx0ZXIgQVBJ fSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrQGVuZCBkZWZ2YXIKKysKKyBBIEBjb2Rle2dkYi5P YmpmaWxlfSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKyAKKyBAZGVmdW4gT2Jq ZmlsZS5pc192YWxpZCAoKQorQEAgLTI2MzEzLDcgKzI3MTE0LDcgQEAgTm8gICAgIG15LWZvby1w cmV0dHktcHJpbnRlcnMucHkKKyBXaGVuIHJlYWRpbmcgYW4gYXV0by1sb2FkZWQgZmlsZSwgQHZh bHVle0dEQk59IHNldHMgdGhlCisgQGRmbntjdXJyZW50IG9iamZpbGV9LiAgVGhpcyBpcyBhdmFp bGFibGUgdmlhIHRoZSBAY29kZXtnZGIuY3VycmVudF9vYmpmaWxlfQorIGZ1bmN0aW9uIChAcHhy ZWZ7T2JqZmlsZXMgSW4gUHl0aG9ufSkuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yCistcmVnaXN0 ZXJpbmcgb2JqZmlsZS1zcGVjaWZpYyBwcmV0dHktcHJpbnRlcnMuCisrcmVnaXN0ZXJpbmcgb2Jq ZmlsZS1zcGVjaWZpYyBwcmV0dHktcHJpbnRlcnMgYW5kIGZyYW1lLWZpbHRlcnMuCisgCisgQG1l bnUKKyAqIG9iamZpbGUtZ2RiLnB5IGZpbGU6OiAgICAgICAgICBUaGUgQGZpbGV7QHZhcntvYmpm aWxlfS1nZGIucHl9IGZpbGUKK0BAIC0zMDE4NCw2ICszMDk4NSwyMiBAQCBJcyB0aGlzIGdvaW5n IGF3YXk/Pz8/CisgQG5vZGUgR0RCL01JIFN0YWNrIE1hbmlwdWxhdGlvbgorIEBzZWN0aW9uIEBz Y3tnZGIvbWl9IFN0YWNrIE1hbmlwdWxhdGlvbiBDb21tYW5kcworIAorK0BzdWJoZWFkaW5nIFRo ZSBAY29kZXstZW5hYmxlLWZyYW1lLWZpbHRlcnN9IENvbW1hbmQKKytAZmluZGV4IC1lbmFibGUt ZnJhbWUtZmlsdGVycworKworK0BzbWFsbGV4YW1wbGUKKystZW5hYmxlLWZyYW1lLWZpbHRlcnMK KytAZW5kIHNtYWxsZXhhbXBsZQorKworK0B2YWx1ZXtHREJOfSBhbGxvd3MgUHl0aG9uLWJhc2Vk IGZyYW1lIGZpbHRlcnMgdG8gYWZmZWN0IHRoZSBvdXRwdXQgb2YKKyt0aGUgTUkgY29tbWFuZHMg cmVsYXRpbmcgdG8gc3RhY2sgdHJhY2VzLiAgQXMgdGhlcmUgaXMgbm8gd2F5IHRvCisraW1wbGVt ZW50IHRoaXMgaW4gYSBmdWxseSBiYWNrd2FyZC1jb21wYXRpYmxlIHdheSwgYSBmcm9udCBlbmQg bXVzdAorK3JlcXVlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgZW5hYmxlZC4KKysKKytP bmNlIGVuYWJsZWQsIHRoaXMgZmVhdHVyZSBjYW5ub3QgYmUgZGlzYWJsZWQuCisrCisrTm90ZSB0 aGF0IGlmIFB5dGhvbiBzdXBwb3J0IGhhcyBub3QgYmVlbiBjb21waWxlZCBpbnRvIEB2YWx1ZXtH REJOfSwKKyt0aGlzIGNvbW1hbmQgd2lsbCBzdGlsbCBzdWNjZWVkIChhbmQgZG8gbm90aGluZyku CisgCisgQHN1YmhlYWRpbmcgVGhlIEBjb2Rley1zdGFjay1pbmZvLWZyYW1lfSBDb21tYW5kCisg QGZpbmRleCAtc3RhY2staW5mby1mcmFtZQorQEAgLTMwMjUxLDEzICszMTA2OCwxNCBAQCBGb3Ig YSBzdGFjayB3aXRoIGZyYW1lIGxldmVscyAwIHRocm91Z2gKKyAoZ2RiKQorIEBlbmQgc21hbGxl eGFtcGxlCisgCisrQGFuY2hvcnstc3RhY2stbGlzdC1hcmd1bWVudHN9CisgQHN1YmhlYWRpbmcg VGhlIEBjb2Rley1zdGFjay1saXN0LWFyZ3VtZW50c30gQ29tbWFuZAorIEBmaW5kZXggLXN0YWNr LWxpc3QtYXJndW1lbnRzCisgCisgQHN1YnN1YmhlYWRpbmcgU3lub3BzaXMKKyAKKyBAc21hbGxl eGFtcGxlCistIC1zdGFjay1saXN0LWFyZ3VtZW50cyBAdmFye3ByaW50LXZhbHVlc30KKysgLXN0 YWNrLWxpc3QtYXJndW1lbnRzIFsgLS1uby1mcmFtZS1maWx0ZXJzIF0gQHZhcntwcmludC12YWx1 ZXN9CisgICAgIFsgQHZhcntsb3ctZnJhbWV9IEB2YXJ7aGlnaC1mcmFtZX0gXQorIEBlbmQgc21h bGxleGFtcGxlCisgCitAQCAtMzAyNzQsNyArMzEwOTIsOSBAQCBJZiBAdmFye3ByaW50LXZhbHVl c30gaXMgMCBvciBAY29kZXstLW5vCisgdGhlIHZhcmlhYmxlczsgaWYgaXQgaXMgMSBvciBAY29k ZXstLWFsbC12YWx1ZXN9LCBwcmludCBhbHNvIHRoZWlyCisgdmFsdWVzOyBhbmQgaWYgaXQgaXMg MiBvciBAY29kZXstLXNpbXBsZS12YWx1ZXN9LCBwcmludCB0aGUgbmFtZSwKKyB0eXBlIGFuZCB2 YWx1ZSBmb3Igc2ltcGxlIGRhdGEgdHlwZXMsIGFuZCB0aGUgbmFtZSBhbmQgdHlwZSBmb3IgYXJy YXlzLAorLXN0cnVjdHVyZXMgYW5kIHVuaW9ucy4KKytzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMuICBJ ZiB0aGUgb3B0aW9uIEBjb2Rley0tbm8tZnJhbWUtZmlsdGVyc30gaXMKKytzdXBwbGllZCwgdGhl biBQeXRob24gZnJhbWUgZmlsdGVycyB3aWxsIG5vdCBiZSBleGVjdXRlZC4KKysKKyAKKyBVc2Ug b2YgdGhpcyBjb21tYW5kIHRvIG9idGFpbiBhcmd1bWVudHMgaW4gYSBzaW5nbGUgZnJhbWUgaXMK KyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBAc2FtcHstc3RhY2stbGlzdC12YXJpYWJsZXN9 IGNvbW1hbmQuCitAQCAtMzAzNDUsMTMgKzMxMTY1LDE0IEBAIGFyZ3M9W0B7bmFtZT0iaW50YXJn Iix2YWx1ZT0iMiJAfSwKKyBAYyBAc3ViaGVhZGluZyAtc3RhY2stbGlzdC1leGNlcHRpb24taGFu ZGxlcnMKKyAKKyAKKytAYW5jaG9yey1zdGFjay1saXN0LWZyYW1lc30KKyBAc3ViaGVhZGluZyBU aGUgQGNvZGV7LXN0YWNrLWxpc3QtZnJhbWVzfSBDb21tYW5kCisgQGZpbmRleCAtc3RhY2stbGlz dC1mcmFtZXMKKyAKKyBAc3Vic3ViaGVhZGluZyBTeW5vcHNpcworIAorIEBzbWFsbGV4YW1wbGUK Ky0gLXN0YWNrLWxpc3QtZnJhbWVzIFsgQHZhcntsb3ctZnJhbWV9IEB2YXJ7aGlnaC1mcmFtZX0g XQorKyAtc3RhY2stbGlzdC1mcmFtZXMgWyAtLW5vLWZyYW1lLWZpbHRlcnMgQHZhcntsb3ctZnJh bWV9IEB2YXJ7aGlnaC1mcmFtZX0gXQorIEBlbmQgc21hbGxleGFtcGxlCisgCisgTGlzdCB0aGUg ZnJhbWVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suICBGb3IgZWFjaCBmcmFtZSBpdCBkaXNwbGF5 cyB0aGUKK0BAIC0zMDM4MSw3ICszMTIwMiw5IEBAIGxldmVscyBhcmUgYmV0d2VlbiB0aGUgdHdv IGFyZ3VtZW50cyAoaW4KKyBhcmUgZXF1YWwsIGl0IHNob3dzIHRoZSBzaW5nbGUgZnJhbWUgYXQg dGhlIGNvcnJlc3BvbmRpbmcgbGV2ZWwuICBJdCBpcworIGFuIGVycm9yIGlmIEB2YXJ7bG93LWZy YW1lfSBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZgorIGZyYW1lcy4gIE9uIHRo ZSBvdGhlciBoYW5kLCBAdmFye2hpZ2gtZnJhbWV9IG1heSBiZSBsYXJnZXIgdGhhbiB0aGUKKy1h Y3R1YWwgbnVtYmVyIG9mIGZyYW1lcywgaW4gd2hpY2ggY2FzZSBvbmx5IGV4aXN0aW5nIGZyYW1l cyB3aWxsIGJlIHJldHVybmVkLgorK2FjdHVhbCBudW1iZXIgb2YgZnJhbWVzLCBpbiB3aGljaCBj YXNlIG9ubHkgZXhpc3RpbmcgZnJhbWVzIHdpbGwgYmUKKytyZXR1cm5lZC4gIElmIHRoZSBvcHRp b24gQGNvZGV7LS1uby1mcmFtZS1maWx0ZXJzfSBpcyBzdXBwbGllZCwgdGhlbgorK1B5dGhvbiBm cmFtZSBmaWx0ZXJzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgorIAorIEBzdWJzdWJoZWFkaW5nIEB2 YWx1ZXtHREJOfSBDb21tYW5kCisgCitAQCAtMzA0NTEsMTEgKzMxMjc0LDEyIEBAIFNob3cgYSBz aW5nbGUgZnJhbWU6CisgCisgQHN1YmhlYWRpbmcgVGhlIEBjb2Rley1zdGFjay1saXN0LWxvY2Fs c30gQ29tbWFuZAorIEBmaW5kZXggLXN0YWNrLWxpc3QtbG9jYWxzCisrQGFuY2hvcnstc3RhY2st bGlzdC1sb2NhbHN9CisgCisgQHN1YnN1YmhlYWRpbmcgU3lub3BzaXMKKyAKKyBAc21hbGxleGFt cGxlCistIC1zdGFjay1saXN0LWxvY2FscyBAdmFye3ByaW50LXZhbHVlc30KKysgLXN0YWNrLWxp c3QtbG9jYWxzIFsgLS1uby1mcmFtZS1maWx0ZXJzIF0gQHZhcntwcmludC12YWx1ZXN9CisgQGVu ZCBzbWFsbGV4YW1wbGUKKyAKKyBEaXNwbGF5IHRoZSBsb2NhbCB2YXJpYWJsZSBuYW1lcyBmb3Ig dGhlIHNlbGVjdGVkIGZyYW1lLiAgSWYKK0BAIC0zMDQ2Niw3ICszMTI5MCw4IEBAIHR5cGUgYW5k IHZhbHVlIGZvciBzaW1wbGUgZGF0YSB0eXBlcywgYW4KKyBzdHJ1Y3R1cmVzIGFuZCB1bmlvbnMu ICBJbiB0aGlzIGxhc3QgY2FzZSwgYSBmcm9udGVuZCBjYW4gaW1tZWRpYXRlbHkKKyBkaXNwbGF5 IHRoZSB2YWx1ZSBvZiBzaW1wbGUgZGF0YSB0eXBlcyBhbmQgY3JlYXRlIHZhcmlhYmxlIG9iamVj dHMgZm9yCisgb3RoZXIgZGF0YSB0eXBlcyB3aGVuIHRoZSB1c2VyIHdpc2hlcyB0byBleHBsb3Jl IHRoZWlyIHZhbHVlcyBpbgorLW1vcmUgZGV0YWlsLgorK21vcmUgZGV0YWlsLiAgSWYgdGhlIG9w dGlvbiBAY29kZXstLW5vLWZyYW1lLWZpbHRlcnN9IGlzIHN1cHBsaWVkLCB0aGVuCisrUHl0aG9u IGZyYW1lIGZpbHRlcnMgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCisgCisgVGhpcyBjb21tYW5kIGlz IGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgQHNhbXB7LXN0YWNrLWxpc3QtdmFyaWFibGVz fSBjb21tYW5kLgorQEAgLTMwNDkxLDEzICszMTMxNiwxNCBAQCBUaGlzIGNvbW1hbmQgaXMgZGVw cmVjYXRlZCBpbiBmYXZvciBvZiB0CisgKGdkYikKKyBAZW5kIHNtYWxsZXhhbXBsZQorIAorK0Bh bmNob3J7LXN0YWNrLWxpc3QtdmFyaWFibGVzfQorIEBzdWJoZWFkaW5nIFRoZSBAY29kZXstc3Rh Y2stbGlzdC12YXJpYWJsZXN9IENvbW1hbmQKKyBAZmluZGV4IC1zdGFjay1saXN0LXZhcmlhYmxl cworIAorIEBzdWJzdWJoZWFkaW5nIFN5bm9wc2lzCisgCisgQHNtYWxsZXhhbXBsZQorLSAtc3Rh Y2stbGlzdC12YXJpYWJsZXMgQHZhcntwcmludC12YWx1ZXN9CisrIC1zdGFjay1saXN0LXZhcmlh YmxlcyBbIC0tbm8tZnJhbWUtZmlsdGVycyBdIEB2YXJ7cHJpbnQtdmFsdWVzfQorIEBlbmQgc21h bGxleGFtcGxlCisgCisgRGlzcGxheSB0aGUgbmFtZXMgb2YgbG9jYWwgdmFyaWFibGVzIGFuZCBm dW5jdGlvbiBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RlZCBmcmFtZS4gIElmCitAQCAtMzA1MDUs NyArMzEzMzEsOCBAQCBEaXNwbGF5IHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJpYWJsZXMgYW5kCisg dGhlIHZhcmlhYmxlczsgaWYgaXQgaXMgMSBvciBAY29kZXstLWFsbC12YWx1ZXN9LCBwcmludCBh bHNvIHRoZWlyCisgdmFsdWVzOyBhbmQgaWYgaXQgaXMgMiBvciBAY29kZXstLXNpbXBsZS12YWx1 ZXN9LCBwcmludCB0aGUgbmFtZSwKKyB0eXBlIGFuZCB2YWx1ZSBmb3Igc2ltcGxlIGRhdGEgdHlw ZXMsIGFuZCB0aGUgbmFtZSBhbmQgdHlwZSBmb3IgYXJyYXlzLAorLXN0cnVjdHVyZXMgYW5kIHVu aW9ucy4gIAorK3N0cnVjdHVyZXMgYW5kIHVuaW9ucy4gIElmIHRoZSBvcHRpb24gQGNvZGV7LS1u by1mcmFtZS1maWx0ZXJzfSBpcworK3N1cHBsaWVkLCB0aGVuIFB5dGhvbiBmcmFtZSBmaWx0ZXJz IHdpbGwgbm90IGJlIGV4ZWN1dGVkLgorIAorIEBzdWJzdWJoZWFkaW5nIEV4YW1wbGUKKyAKK0lu ZGV4OiBnZGItNy42L2dkYi9taS9taS1jbWQtc3RhY2suYworPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdkYi03 LjYub3JpZy9nZGIvbWkvbWktY21kLXN0YWNrLmMJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUx NDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9taS9taS1jbWQtc3RhY2suYwkyMDEzLTA1LTIwIDIy OjI1OjUyLjExMTE2NTc2NyArMDIwMAorQEAgLTMxLDYgKzMxLDEwIEBACisgI2luY2x1ZGUgImxh bmd1YWdlLmgiCisgI2luY2x1ZGUgInZhbHByaW50LmgiCisgI2luY2x1ZGUgImV4Y2VwdGlvbnMu aCIKKysjaW5jbHVkZSAidXRpbHMuaCIKKysjaW5jbHVkZSAibWktZ2V0b3B0LmgiCisrI2luY2x1 ZGUgInB5dGhvbi9weXRob24uaCIKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKyAKKyBlbnVtIHdoYXRf dG9fbGlzdCB7IGxvY2FscywgYXJndW1lbnRzLCBhbGwgfTsKKyAKK0BAIC0zOCw2ICs0MiwyOCBA QCBzdGF0aWMgdm9pZCBsaXN0X2FyZ3Nfb3JfbG9jYWxzIChlbnVtIHdoCisgCQkJCSBlbnVtIHBy aW50X3ZhbHVlcyB2YWx1ZXMsCisgCQkJCSBzdHJ1Y3QgZnJhbWVfaW5mbyAqZmkpOworIAorKy8q IFRydWUgaWYgd2Ugd2FudCB0byBhbGxvdyBQeXRob24tYmFzZWQgZnJhbWUgZmlsdGVycy4gICov Cisrc3RhdGljIGludCBmcmFtZV9maWx0ZXJzID0gMDsKKysKKyt2b2lkCisrbWlfY21kX2VuYWJs ZV9mcmFtZV9maWx0ZXJzIChjaGFyICpjb21tYW5kLCBjaGFyICoqYXJndiwgaW50IGFyZ2MpCisr eworKyAgaWYgKGFyZ2MgIT0gMCkKKysgICAgZXJyb3IgKF8oIi1lbmFibGUtZnJhbWUtZmlsdGVy czogbm8gYXJndW1lbnRzIGFsbG93ZWQiKSk7CisrICBmcmFtZV9maWx0ZXJzID0gMTsKKyt9Cisr CisrLyogUGFyc2UgdGhlIC0tbm8tZnJhbWUtZmlsdGVycyBvcHRpb24gaW4gY29tbWFuZHMgd2hl cmUgd2UgY2Fubm90IHVzZQorKyAgIG1pX2dldG9wdC4gKi8KKytzdGF0aWMgaW50CisrcGFyc2Vf bm9fZnJhbWVzX29wdGlvbiAoY29uc3QgY2hhciAqYXJnKQorK3sKKysgIGlmIChhcmcgJiYgKHN0 cmNtcCAoYXJnLCAiLS1uby1mcmFtZS1maWx0ZXJzIikgPT0gMCkpCisrICAgIHJldHVybiAxOwor KworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIFByaW50IGEgbGlzdCBvZiB0aGUgc3RhY2sgZnJh bWVzLiAgQXJncyBjYW4gYmUgbm9uZSwgaW4gd2hpY2ggY2FzZQorICAgIHdlIHdhbnQgdG8gcHJp bnQgdGhlIHdob2xlIGJhY2t0cmFjZSwgb3IgYSBwYWlyIG9mIG51bWJlcnMKKyAgICBzcGVjaWZ5 aW5nIHRoZSBmcmFtZSBudW1iZXJzIGF0IHdoaWNoIHRvIHN0YXJ0IGFuZCBzdG9wIHRoZQorQEAg LTUyLDE0ICs3OCw0NiBAQCBtaV9jbWRfc3RhY2tfbGlzdF9mcmFtZXMgKGNoYXIgKmNvbW1hbmQs CisgICBpbnQgaTsKKyAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwX3N0YWNrOworICAgc3RydWN0 IGZyYW1lX2luZm8gKmZpOworKyAgZW51bSBweV9idF9zdGF0dXMgcmVzdWx0ID0gUFlfQlRfRVJS T1I7CisrICBpbnQgcmF3X2FyZyA9IDA7CisrICBpbnQgb2luZCA9IDA7CisrICBlbnVtIG9wdAor KyAgICB7CisrICAgICAgTk9fRlJBTUVfRklMVEVSUworKyAgICB9OworKyAgc3RhdGljIGNvbnN0 IHN0cnVjdCBtaV9vcHQgb3B0c1tdID0KKysgICAgeworKyAgICAgIHsiLW5vLWZyYW1lLWZpbHRl cnMiLCBOT19GUkFNRV9GSUxURVJTLCAwfSwKKysgICAgICB7IDAsIDAsIDAgfQorKyAgICB9Owor KworKyAgLyogUGFyc2UgYXJndW1lbnRzLiAgSW4gdGhpcyBpbnN0YW5jZSB3ZSBhcmUganVzdCBs b29raW5nIGZvcgorKyAgICAgLS1uby1mcmFtZS1maWx0ZXJzLiAgKi8KKysgIHdoaWxlICgxKQor KyAgICB7CisrICAgICAgY2hhciAqb2FyZzsKKysgICAgICBpbnQgb3B0ID0gbWlfZ2V0b3B0ICgi LXN0YWNrLWxpc3QtZnJhbWVzIiwgYXJnYywgYXJndiwKKysJCQkgICBvcHRzLCAmb2luZCwgJm9h cmcpOworKyAgICAgIGlmIChvcHQgPCAwKQorKwlicmVhazsKKysgICAgICBzd2l0Y2ggKChlbnVt IG9wdCkgb3B0KQorKwl7CisrCWNhc2UgTk9fRlJBTUVfRklMVEVSUzoKKysJICByYXdfYXJnID0g b2luZDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisgCistICBpZiAoYXJnYyA+IDIgfHwgYXJn YyA9PSAxKQorLSAgICBlcnJvciAoXygiLXN0YWNrLWxpc3QtZnJhbWVzOiBVc2FnZTogW0ZSQU1F X0xPVyBGUkFNRV9ISUdIXSIpKTsKKysgIC8qIEFmdGVyIHRoZSBsYXN0IG9wdGlvbiBpcyBwYXJz ZWQsIHRoZXJlIHNob3VsZCBlaXRoZXIgYmUgbG93IC0KKysgICAgIGhpZ2ggcmFuZ2UsIG9yIG5v IGZ1cnRoZXIgYXJndW1lbnRzLiAgKi8KKysgIGlmICgoYXJnYyAtIG9pbmQgIT0gMCkgJiYgKGFy Z2MgLSBvaW5kICE9IDIpKQorKyAgICBlcnJvciAoXygiLXN0YWNrLWxpc3QtZnJhbWVzOiBVc2Fn ZTogWy0tbm8tZnJhbWUtZmlsdGVyc10gW0ZSQU1FX0xPVyBGUkFNRV9ISUdIXSIpKTsKKyAKKy0g IGlmIChhcmdjID09IDIpCisrICAvKiBJZiB0aGVyZSBpcyBhIHJhbmdlLCBzZXQgaXQuICAqLwor KyAgaWYgKGFyZ2MgLSBvaW5kID09IDIpCisgICAgIHsKKy0gICAgICBmcmFtZV9sb3cgPSBhdG9p IChhcmd2WzBdKTsKKy0gICAgICBmcmFtZV9oaWdoID0gYXRvaSAoYXJndlsxXSk7CisrICAgICAg ZnJhbWVfbG93ID0gYXRvaSAoYXJndlswICsgb2luZF0pOworKyAgICAgIGZyYW1lX2hpZ2ggPSBh dG9pIChhcmd2WzEgKyBvaW5kXSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworQEAgLTgxLDE2 ICsxMzksMzcgQEAgbWlfY21kX3N0YWNrX2xpc3RfZnJhbWVzIChjaGFyICpjb21tYW5kLAorIAor ICAgY2xlYW51cF9zdGFjayA9IG1ha2VfY2xlYW51cF91aV9vdXRfbGlzdF9iZWdpbl9lbmQgKGN1 cnJlbnRfdWlvdXQsICJzdGFjayIpOworIAorLSAgLyogTm93IGxldCdzIHByaW50IHRoZSBmcmFt ZXMgdXAgdG8gZnJhbWVfaGlnaCwgb3IgdW50aWwgdGhlcmUgYXJlCistICAgICBmcmFtZXMgaW4g dGhlIHN0YWNrLiAgKi8KKy0gIGZvciAoOworLSAgICAgICBmaSAmJiAoaSA8PSBmcmFtZV9oaWdo IHx8IGZyYW1lX2hpZ2ggPT0gLTEpOworLSAgICAgICBpKyssIGZpID0gZ2V0X3ByZXZfZnJhbWUg KGZpKSkKKysgIGlmICghIHJhd19hcmcgJiYgZnJhbWVfZmlsdGVycykKKyAgICAgeworLSAgICAg IFFVSVQ7CistICAgICAgLyogUHJpbnQgdGhlIGxvY2F0aW9uIGFuZCB0aGUgYWRkcmVzcyBhbHdh eXMsIGV2ZW4gZm9yIGxldmVsIDAuCistICAgICAgICAgSWYgYXJncyBpcyAwLCBkb24ndCBwcmlu dCB0aGUgYXJndW1lbnRzLiAgKi8KKy0gICAgICBwcmludF9mcmFtZV9pbmZvIChmaSwgMSwgTE9D X0FORF9BRERSRVNTLCAwIC8qIGFyZ3MgKi8gKTsKKysgICAgICBpbnQgZmxhZ3MgPSBQUklOVF9M RVZFTCB8IFBSSU5UX0ZSQU1FX0lORk87CisrICAgICAgaW50IHB5X2ZyYW1lX2xvdyA9IGZyYW1l X2xvdzsKKysKKysgICAgICAvKiBXZSBjYW5ub3QgcGFzcyAtMSB0byBmcmFtZV9sb3csIGFzIHRo YXQgd291bGQgc2lnbmlmeSBhCisrICAgICAgcmVsYXRpdmUgYmFja3RyYWNlIGZyb20gdGhlIHRh aWwgb2YgdGhlIHN0YWNrLiAgU28sIGluIHRoZSBjYXNlCisrICAgICAgb2YgZnJhbWVfbG93ID09 IC0xLCBhc3NpZ24gYW5kIGluY3JlbWVudCBpdC4gICovCisrICAgICAgaWYgKHB5X2ZyYW1lX2xv dyA9PSAtMSkKKysJcHlfZnJhbWVfbG93Kys7CisrCisrICAgICAgcmVzdWx0ID0gYXBwbHlfZnJh bWVfZmlsdGVyIChnZXRfY3VycmVudF9mcmFtZSAoKSwgZmxhZ3MsCisrCQkJCSAgIE5PX1ZBTFVF UywgIGN1cnJlbnRfdWlvdXQsCisrCQkJCSAgIHB5X2ZyYW1lX2xvdywgZnJhbWVfaGlnaCk7Cisr ICAgIH0KKysKKysgIC8qIFJ1biB0aGUgaW5idWlsdCBiYWNrdHJhY2UgaWYgdGhlcmUgYXJlIG5v IGZpbHRlcnMgcmVnaXN0ZXJlZCwgb3IKKysgICAgIGlmICItLW5vLWZyYW1lLWZpbHRlcnMiIGhh cyBiZWVuIHNwZWNpZmllZCBmcm9tIHRoZSBjb21tYW5kLiAgKi8KKysgIGlmICghIGZyYW1lX2Zp bHRlcnMgfHwgcmF3X2FyZyAgfHwgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRFUlMpCisrICAgIHsK KysgICAgICAvKiBOb3cgbGV0J3MgcHJpbnQgdGhlIGZyYW1lcyB1cCB0byBmcmFtZV9oaWdoLCBv ciB1bnRpbCB0aGVyZSBhcmUKKysJIGZyYW1lcyBpbiB0aGUgc3RhY2suICAqLworKyAgICAgIGZv ciAoOworKwkgICBmaSAmJiAoaSA8PSBmcmFtZV9oaWdoIHx8IGZyYW1lX2hpZ2ggPT0gLTEpOwor KwkgICBpKyssIGZpID0gZ2V0X3ByZXZfZnJhbWUgKGZpKSkKKysJeworKwkgIFFVSVQ7CisrCSAg LyogUHJpbnQgdGhlIGxvY2F0aW9uIGFuZCB0aGUgYWRkcmVzcyBhbHdheXMsIGV2ZW4gZm9yIGxl dmVsIDAuCisrCSAgICAgSWYgYXJncyBpcyAwLCBkb24ndCBwcmludCB0aGUgYXJndW1lbnRzLiAg Ki8KKysJICBwcmludF9mcmFtZV9pbmZvIChmaSwgMSwgTE9DX0FORF9BRERSRVNTLCAwIC8qIGFy Z3MgKi8gKTsKKysJfQorICAgICB9CisgCisgICBkb19jbGVhbnVwcyAoY2xlYW51cF9zdGFjayk7 CitAQCAtMTQ3LDEzICsyMjYsMzQgQEAgdm9pZAorIG1pX2NtZF9zdGFja19saXN0X2xvY2FscyAo Y2hhciAqY29tbWFuZCwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQorIHsKKyAgIHN0cnVjdCBmcmFt ZV9pbmZvICpmcmFtZTsKKysgIGludCByYXdfYXJnID0gMDsKKysgIGVudW0gcHlfYnRfc3RhdHVz IHJlc3VsdCA9IFBZX0JUX0VSUk9SOworKyAgaW50IHByaW50X3ZhbHVlOworKworKyAgaWYgKGFy Z2MgPiAwKQorKyAgICByYXdfYXJnID0gcGFyc2Vfbm9fZnJhbWVzX29wdGlvbiAoYXJndlswXSk7 CisrCisrICBpZiAoYXJnYyA8IDEgfHwgYXJnYyA+IDIgfHwgKGFyZ2MgPT0gMiAmJiAhIHJhd19h cmcpCisrICAgICAgfHwgKGFyZ2MgPT0gMSAmJiByYXdfYXJnKSkKKysgICAgZXJyb3IgKF8oIi1z dGFjay1saXN0LWxvY2FsczogVXNhZ2U6IFstLW5vLWZyYW1lLWZpbHRlcnNdIFBSSU5UX1ZBTFVF UyIpKTsKKyAKKy0gIGlmIChhcmdjICE9IDEpCistICAgIGVycm9yIChfKCItc3RhY2stbGlzdC1s b2NhbHM6IFVzYWdlOiBQUklOVF9WQUxVRVMiKSk7CistCistICAgZnJhbWUgPSBnZXRfc2VsZWN0 ZWRfZnJhbWUgKE5VTEwpOworKyAgZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpOwor KyAgcHJpbnRfdmFsdWUgPSBwYXJzZV9wcmludF92YWx1ZXMgKGFyZ3ZbcmF3X2FyZ10pOworIAor LSAgIGxpc3RfYXJnc19vcl9sb2NhbHMgKGxvY2FscywgcGFyc2VfcHJpbnRfdmFsdWVzIChhcmd2 WzBdKSwgZnJhbWUpOworKyAgIGlmICghIHJhd19hcmcgJiYgZnJhbWVfZmlsdGVycykKKysgICAg IHsKKysgICAgICAgaW50IGZsYWdzID0gUFJJTlRfTEVWRUwgfCBQUklOVF9MT0NBTFM7CisrCisr ICAgICAgIHJlc3VsdCA9IGFwcGx5X2ZyYW1lX2ZpbHRlciAoZnJhbWUsIGZsYWdzLCBwcmludF92 YWx1ZSwKKysJCQkJICAgIGN1cnJlbnRfdWlvdXQsIDAsIDApOworKyAgICAgfQorKworKyAgIC8q IFJ1biB0aGUgaW5idWlsdCBiYWNrdHJhY2UgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgcmVnaXN0 ZXJlZCwgb3IKKysgICAgICBpZiAiLS1uby1mcmFtZS1maWx0ZXJzIiBoYXMgYmVlbiBzcGVjaWZp ZWQgZnJvbSB0aGUgY29tbWFuZC4gICovCisrICAgaWYgKCEgZnJhbWVfZmlsdGVycyB8fCByYXdf YXJnICB8fCByZXN1bHQgPT0gUFlfQlRfTk9fRklMVEVSUykKKysgICAgIHsKKysgICAgICAgbGlz dF9hcmdzX29yX2xvY2FscyAobG9jYWxzLCBwcmludF92YWx1ZSwgZnJhbWUpOworKyAgICAgfQor IH0KKyAKKyAvKiBQcmludCBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGN1cnJlbnQg ZnJhbWUuICBXaXRoIGFyZ3VtZW50CitAQCAtMTcwLDE1ICsyNzAsMjAgQEAgbWlfY21kX3N0YWNr X2xpc3RfYXJncyAoY2hhciAqY29tbWFuZCwgYworICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBf c3RhY2tfYXJnczsKKyAgIGVudW0gcHJpbnRfdmFsdWVzIHByaW50X3ZhbHVlczsKKyAgIHN0cnVj dCB1aV9vdXQgKnVpb3V0ID0gY3VycmVudF91aW91dDsKKysgIGludCByYXdfYXJnID0gMDsKKysg IGVudW0gcHlfYnRfc3RhdHVzIHJlc3VsdCA9IFBZX0JUX0VSUk9SOworIAorLSAgaWYgKGFyZ2Mg PCAxIHx8IGFyZ2MgPiAzIHx8IGFyZ2MgPT0gMikKKy0gICAgZXJyb3IgKF8oIi1zdGFjay1saXN0 LWFyZ3VtZW50czogVXNhZ2U6ICIKKy0JICAgICAiUFJJTlRfVkFMVUVTIFtGUkFNRV9MT1cgRlJB TUVfSElHSF0iKSk7CisrICBpZiAoYXJnYyA+IDApCisrICAgIHJhd19hcmcgPSBwYXJzZV9ub19m cmFtZXNfb3B0aW9uIChhcmd2WzBdKTsKKyAKKy0gIGlmIChhcmdjID09IDMpCisrICBpZiAoYXJn YyA8IDEgfHwgKGFyZ2MgPiAzICYmICEgcmF3X2FyZykgfHwgKGFyZ2MgPT0gMiAmJiAhIHJhd19h cmcpKQorKyAgICBlcnJvciAoXygiLXN0YWNrLWxpc3QtYXJndW1lbnRzOiBVc2FnZTogIiBcCisr CSAgICAgIlstLW5vLWZyYW1lLWZpbHRlcnNdIFBSSU5UX1ZBTFVFUyBbRlJBTUVfTE9XIEZSQU1F X0hJR0hdIikpOworKworKyAgaWYgKGFyZ2MgPj0gMykKKyAgICAgeworLSAgICAgIGZyYW1lX2xv dyA9IGF0b2kgKGFyZ3ZbMV0pOworLSAgICAgIGZyYW1lX2hpZ2ggPSBhdG9pIChhcmd2WzJdKTsK KysgICAgICBmcmFtZV9sb3cgPSBhdG9pIChhcmd2WzEgKyByYXdfYXJnXSk7CisrICAgICAgZnJh bWVfaGlnaCA9IGF0b2kgKGFyZ3ZbMiArIHJhd19hcmddKTsKKyAgICAgfQorICAgZWxzZQorICAg ICB7CitAQCAtMTg4LDcgKzI5Myw3IEBAIG1pX2NtZF9zdGFja19saXN0X2FyZ3MgKGNoYXIgKmNv bW1hbmQsIGMKKyAgICAgICBmcmFtZV9oaWdoID0gLTE7CisgICAgIH0KKyAKKy0gIHByaW50X3Zh bHVlcyA9IHBhcnNlX3ByaW50X3ZhbHVlcyAoYXJndlswXSk7CisrICBwcmludF92YWx1ZXMgPSBw YXJzZV9wcmludF92YWx1ZXMgKGFyZ3ZbcmF3X2FyZ10pOworIAorICAgLyogTGV0J3MgcG9zaXRp b24gZmkgb24gdGhlIGZyYW1lIGF0IHdoaWNoIHRvIHN0YXJ0IHRoZQorICAgICAgZGlzcGxheS4g Q291bGQgYmUgdGhlIGlubmVybW9zdCBmcmFtZSBpZiB0aGUgd2hvbGUgc3RhY2sgbmVlZHMKK0BA IC0yMDMsMjEgKzMwOCw0MSBAQCBtaV9jbWRfc3RhY2tfbGlzdF9hcmdzIChjaGFyICpjb21tYW5k LCBjCisgICBjbGVhbnVwX3N0YWNrX2FyZ3MKKyAgICAgPSBtYWtlX2NsZWFudXBfdWlfb3V0X2xp c3RfYmVnaW5fZW5kICh1aW91dCwgInN0YWNrLWFyZ3MiKTsKKyAKKy0gIC8qIE5vdyBsZXQncyBw cmludCB0aGUgZnJhbWVzIHVwIHRvIGZyYW1lX2hpZ2gsIG9yIHVudGlsIHRoZXJlIGFyZQorLSAg ICAgZnJhbWVzIGluIHRoZSBzdGFjay4gICovCistICBmb3IgKDsKKy0gICAgICAgZmkgJiYgKGkg PD0gZnJhbWVfaGlnaCB8fCBmcmFtZV9oaWdoID09IC0xKTsKKy0gICAgICAgaSsrLCBmaSA9IGdl dF9wcmV2X2ZyYW1lIChmaSkpCisrICBpZiAoISByYXdfYXJnICYmIGZyYW1lX2ZpbHRlcnMpCisg ICAgIHsKKy0gICAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cF9mcmFtZTsKKysgICAgICBpbnQg ZmxhZ3MgPSBQUklOVF9MRVZFTCB8IFBSSU5UX0FSR1M7CisrICAgICAgaW50IHB5X2ZyYW1lX2xv dyA9IGZyYW1lX2xvdzsKKyAKKy0gICAgICBRVUlUOworLSAgICAgIGNsZWFudXBfZnJhbWUgPSBt YWtlX2NsZWFudXBfdWlfb3V0X3R1cGxlX2JlZ2luX2VuZCAodWlvdXQsICJmcmFtZSIpOworLSAg ICAgIHVpX291dF9maWVsZF9pbnQgKHVpb3V0LCAibGV2ZWwiLCBpKTsKKy0gICAgICBsaXN0X2Fy Z3Nfb3JfbG9jYWxzIChhcmd1bWVudHMsIHByaW50X3ZhbHVlcywgZmkpOworLSAgICAgIGRvX2Ns ZWFudXBzIChjbGVhbnVwX2ZyYW1lKTsKKysgICAgICAvKiBXZSBjYW5ub3QgcGFzcyAtMSB0byBm cmFtZV9sb3csIGFzIHRoYXQgd291bGQgc2lnbmlmeSBhCisrICAgICAgcmVsYXRpdmUgYmFja3Ry YWNlIGZyb20gdGhlIHRhaWwgb2YgdGhlIHN0YWNrLiAgU28sIGluIHRoZSBjYXNlCisrICAgICAg b2YgZnJhbWVfbG93ID09IC0xLCBhc3NpZ24gYW5kIGluY3JlbWVudCBpdC4gICovCisrICAgICAg aWYgKHB5X2ZyYW1lX2xvdyA9PSAtMSkKKysJcHlfZnJhbWVfbG93Kys7CisrCisrICAgICAgcmVz dWx0ID0gYXBwbHlfZnJhbWVfZmlsdGVyIChnZXRfY3VycmVudF9mcmFtZSAoKSwgZmxhZ3MsCisr CQkJCSAgIHByaW50X3ZhbHVlcywgY3VycmVudF91aW91dCwKKysJCQkJICAgcHlfZnJhbWVfbG93 LCBmcmFtZV9oaWdoKTsKKyAgICAgfQorIAorKyAgICAgLyogUnVuIHRoZSBpbmJ1aWx0IGJhY2t0 cmFjZSBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyByZWdpc3RlcmVkLCBvcgorKyAgICAgIGlmICIt LW5vLWZyYW1lLWZpbHRlcnMiIGhhcyBiZWVuIHNwZWNpZmllZCBmcm9tIHRoZSBjb21tYW5kLiAg Ki8KKysgICBpZiAoISBmcmFtZV9maWx0ZXJzIHx8IHJhd19hcmcgIHx8IHJlc3VsdCA9PSBQWV9C VF9OT19GSUxURVJTKQorKyAgICAgeworKyAgICAgIC8qIE5vdyBsZXQncyBwcmludCB0aGUgZnJh bWVzIHVwIHRvIGZyYW1lX2hpZ2gsIG9yIHVudGlsIHRoZXJlIGFyZQorKwkgZnJhbWVzIGluIHRo ZSBzdGFjay4gICovCisrICAgICAgZm9yICg7CisrCSAgIGZpICYmIChpIDw9IGZyYW1lX2hpZ2gg fHwgZnJhbWVfaGlnaCA9PSAtMSk7CisrCSAgIGkrKywgZmkgPSBnZXRfcHJldl9mcmFtZSAoZmkp KQorKwl7CisrCSAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBfZnJhbWU7CisrCisrCSAgUVVJVDsK KysJICBjbGVhbnVwX2ZyYW1lID0gbWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQg KHVpb3V0LCAiZnJhbWUiKTsKKysJICB1aV9vdXRfZmllbGRfaW50ICh1aW91dCwgImxldmVsIiwg aSk7CisrCSAgbGlzdF9hcmdzX29yX2xvY2FscyAoYXJndW1lbnRzLCBwcmludF92YWx1ZXMsIGZp KTsKKysJICBkb19jbGVhbnVwcyAoY2xlYW51cF9mcmFtZSk7CisrCX0KKysgICAgfQorICAgZG9f Y2xlYW51cHMgKGNsZWFudXBfc3RhY2tfYXJncyk7CisgfQorIAorQEAgLTIzMCwxMyArMzU1LDM1 IEBAIHZvaWQKKyBtaV9jbWRfc3RhY2tfbGlzdF92YXJpYWJsZXMgKGNoYXIgKmNvbW1hbmQsIGNo YXIgKiphcmd2LCBpbnQgYXJnYykKKyB7CisgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7Cisr ICBpbnQgcmF3X2FyZyA9IDA7CisrICBlbnVtIHB5X2J0X3N0YXR1cyByZXN1bHQgPSBQWV9CVF9F UlJPUjsKKysgIGludCBwcmludF92YWx1ZTsKKysKKysgIGlmIChhcmdjID4gMCkKKysgICAgcmF3 X2FyZyA9IHBhcnNlX25vX2ZyYW1lc19vcHRpb24gKGFyZ3ZbMF0pOworKworKyAgaWYgKGFyZ2Mg PCAxIHx8IGFyZ2MgPiAyIHx8IChhcmdjID09IDIgJiYgISByYXdfYXJnKQorKyAgICAgIHx8IChh cmdjID09IDEgJiYgcmF3X2FyZykpCisrICAgIGVycm9yIChfKCItc3RhY2stbGlzdC12YXJpYWJs ZXM6IFVzYWdlOiAiIFwKKysJICAgICAiWy0tbm8tZnJhbWUtZmlsdGVyc10gUFJJTlRfVkFMVUVT IikpOworIAorLSAgaWYgKGFyZ2MgIT0gMSkKKy0gICAgZXJyb3IgKF8oIlVzYWdlOiBQUklOVF9W QUxVRVMiKSk7CistCistICBmcmFtZSA9IGdldF9zZWxlY3RlZF9mcmFtZSAoTlVMTCk7CisrICAg ZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpOworKyAgIHByaW50X3ZhbHVlID0gcGFy c2VfcHJpbnRfdmFsdWVzIChhcmd2W3Jhd19hcmddKTsKKyAKKy0gIGxpc3RfYXJnc19vcl9sb2Nh bHMgKGFsbCwgcGFyc2VfcHJpbnRfdmFsdWVzIChhcmd2WzBdKSwgZnJhbWUpOworKyAgIGlmICgh IHJhd19hcmcgJiYgZnJhbWVfZmlsdGVycykKKysgICAgIHsKKysgICAgICAgaW50IGZsYWdzID0g UFJJTlRfTEVWRUwgfCBQUklOVF9BUkdTIHwgUFJJTlRfTE9DQUxTOworKworKyAgICAgICByZXN1 bHQgPSBhcHBseV9mcmFtZV9maWx0ZXIgKGZyYW1lLCBmbGFncywgcHJpbnRfdmFsdWUsCisrCQkJ CSAgICBjdXJyZW50X3Vpb3V0LCAwLCAwKTsKKysgICAgIH0KKysKKysgICAvKiBSdW4gdGhlIGlu YnVpbHQgYmFja3RyYWNlIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHJlZ2lzdGVyZWQsIG9yCisr ICAgICAgaWYgIi0tbm8tZnJhbWUtZmlsdGVycyIgaGFzIGJlZW4gc3BlY2lmaWVkIGZyb20gdGhl IGNvbW1hbmQuICAqLworKyAgIGlmICghIGZyYW1lX2ZpbHRlcnMgfHwgcmF3X2FyZyAgfHwgcmVz dWx0ID09IFBZX0JUX05PX0ZJTFRFUlMpCisrICAgICB7CisrICAgICAgIGxpc3RfYXJnc19vcl9s b2NhbHMgKGFsbCwgcHJpbnRfdmFsdWUsIGZyYW1lKTsKKysgICAgIH0KKyB9CisgCisgLyogUHJp bnQgc2luZ2xlIGxvY2FsIG9yIGFyZ3VtZW50LiAgQVJHIG11c3QgYmUgYWxyZWFkeSByZWFkIGlu LiAgRm9yCitJbmRleDogZ2RiLTcuNi9nZGIvbWkvbWktY21kcy5jCis9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0g Z2RiLTcuNi5vcmlnL2dkYi9taS9taS1jbWRzLmMJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUx NDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9taS9taS1jbWRzLmMJMjAxMy0wNS0yMCAyMjoyNTo1 Mi4xMTExNjU3NjcgKzAyMDAKK0BAIC04Niw2ICs4Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWlfY21k IG1pX2NtZHNbXSA9CisgCQkgbWlfY21kX2RhdGFfd3JpdGVfcmVnaXN0ZXJfdmFsdWVzKSwKKyAg IERFRl9NSV9DTURfTUkgKCJlbmFibGUtdGltaW5ncyIsIG1pX2NtZF9lbmFibGVfdGltaW5ncyks CisgICBERUZfTUlfQ01EX01JICgiZW5hYmxlLXByZXR0eS1wcmludGluZyIsIG1pX2NtZF9lbmFi bGVfcHJldHR5X3ByaW50aW5nKSwKKysgIERFRl9NSV9DTURfTUkgKCJlbmFibGUtZnJhbWUtZmls dGVycyIsIG1pX2NtZF9lbmFibGVfZnJhbWVfZmlsdGVycyksCisgICBERUZfTUlfQ01EX01JICgi ZW52aXJvbm1lbnQtY2QiLCBtaV9jbWRfZW52X2NkKSwKKyAgIERFRl9NSV9DTURfTUkgKCJlbnZp cm9ubWVudC1kaXJlY3RvcnkiLCBtaV9jbWRfZW52X2RpciksCisgICBERUZfTUlfQ01EX01JICgi ZW52aXJvbm1lbnQtcGF0aCIsIG1pX2NtZF9lbnZfcGF0aCksCitJbmRleDogZ2RiLTcuNi9nZGIv bWkvbWktY21kcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9taS9taS1jbWRz LmgJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9t aS9taS1jbWRzLmgJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTExNjU3NjcgKzAyMDAKK0BAIC0xMTgs NiArMTE4LDcgQEAgZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1pX2NtZF92YXJfc2hvdworIGV4 dGVybiBtaV9jbWRfYXJndl9mdHlwZSBtaV9jbWRfdmFyX3Nob3dfZm9ybWF0OworIGV4dGVybiBt aV9jbWRfYXJndl9mdHlwZSBtaV9jbWRfdmFyX3VwZGF0ZTsKKyBleHRlcm4gbWlfY21kX2FyZ3Zf ZnR5cGUgbWlfY21kX2VuYWJsZV9wcmV0dHlfcHJpbnRpbmc7CisrZXh0ZXJuIG1pX2NtZF9hcmd2 X2Z0eXBlIG1pX2NtZF9lbmFibGVfZnJhbWVfZmlsdGVyczsKKyBleHRlcm4gbWlfY21kX2FyZ3Zf ZnR5cGUgbWlfY21kX3Zhcl9zZXRfdXBkYXRlX3JhbmdlOworIAorIC8qIERlc2NyaXB0aW9uIG9m IGEgc2luZ2xlIGNvbW1hbmQuICAqLworSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9weS1mcmFt ZWZpbHRlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAu MDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMJ MjAxMy0wNS0yMCAyMjoyNjo1My4wMjkxNDMwNjggKzAyMDAKK0BAIC0wLDAgKzEsMTUyOCBAQAor Ky8qIFB5dGhvbiBmcmFtZSBmaWx0ZXJzCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdE Qi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysg ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2lu Y2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAib2JqZmlsZXMuaCIKKysjaW5jbHVkZSAic3ltdGFi LmgiCisrI2luY2x1ZGUgImxhbmd1YWdlLmgiCisrI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKysj aW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJweXRob24uaCIKKysjaW5jbHVkZSAi dWktb3V0LmgiCisrI2luY2x1ZGUgInZhbHByaW50LmgiCisrI2luY2x1ZGUgImFubm90YXRlLmgi CisrI2luY2x1ZGUgImhhc2h0YWIuaCIKKysjaW5jbHVkZSAiZGVtYW5nbGUuaCIKKysjaW5jbHVk ZSAibWkvbWktY21kcy5oIgorKyNpbmNsdWRlICJweXRob24taW50ZXJuYWwuaCIKKysKKytlbnVt IG1pX3ByaW50X3R5cGVzCisreworKyAgTUlfUFJJTlRfQVJHUywKKysgIE1JX1BSSU5UX0xPQ0FM UworK307CisrCisrLyogSGVscGVyICBmdW5jdGlvbiAgdG8gIGV4dHJhY3QgIGEgIHN5bWJvbCwg YSAgbmFtZSAgYW5kICBhICBsYW5ndWFnZQorKyAgIGRlZmluaXRpb24gZnJvbSBhIFB5dGhvbiBv YmplY3QgdGhhdCBjb25mb3JtcyB0byB0aGUgIlN5bWJvbCBWYWx1ZSIKKysgICBpbnRlcmZhY2Uu ICBPQkogIGlzIHRoZSBQeXRob24gIG9iamVjdCB0byBleHRyYWN0IHRoZSAgdmFsdWVzIGZyb20u CisrICAgTkFNRSBpcyBhICBwYXNzLXRocm91Z2ggYXJndW1lbnQgd2hlcmUgdGhlIG5hbWUgb2Yg IHRoZSBzeW1ib2wgd2lsbAorKyAgIGJlIHdyaXR0ZW4uICBOQU1FIGlzIGFsbG9jYXRlZCBpbiAg dGhpcyBmdW5jdGlvbiwgYnV0IHRoZSBjYWxsZXIgaXMKKysgICByZXNwb25zaWJsZSBmb3IgY2xl YW4gdXAuICBTWU0gaXMgYSBwYXNzLXRocm91Z2ggYXJndW1lbnQgd2hlcmUgdGhlCisrICAgc3lt Ym9sIHdpbGwgYmUgd3JpdHRlbi4gIEluIHRoZSBjYXNlIG9mIHRoZSBBUEkgcmV0dXJuaW5nIGEg c3RyaW5nLAorKyAgIHRoaXMgd2lsbCBiZSBzZXQgdG8gTlVMTC4gIExBTkdVQUdFIGlzIGFsc28g YSBwYXNzLXRocm91Z2ggYXJndW1lbnQKKysgICBkZW5vdGluZyB0aGUgbGFuZ3VhZ2UgYXR0cmli dXRlZCB0byB0aGUgU3ltYm9sLiAgSW4gdGhlIGNhc2Ugb2YgU1lNCisrICAgYmVpbmcgIE5VTEws IHRoaXMgIHdpbGwgYmUgIHNldCB0byAgdGhlIGN1cnJlbnQgIGxhbmd1YWdlLiAgUmV0dXJucwor KyAgIFBZX0JUX0VSUk9SIG9uIGVycm9yIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBleGNl cHRpb24gc2V0LCBhbmQKKysgICBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMg ZW51bSBweV9idF9zdGF0dXMKKytleHRyYWN0X3N5bSAoUHlPYmplY3QgKm9iaiwgY2hhciAqKm5h bWUsIHN0cnVjdCBzeW1ib2wgKipzeW0sCisrCSAgICAgY29uc3Qgc3RydWN0IGxhbmd1YWdlX2Rl Zm4gKipsYW5ndWFnZSkKKyt7CisrICBQeU9iamVjdCAqcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1l dGhvZCAob2JqLCAic3ltYm9sIiwgTlVMTCk7CisrCisrICBpZiAocmVzdWx0ID09IE5VTEwpCisr ICAgIHJldHVybiBQWV9CVF9FUlJPUjsKKysKKysgIC8qIEZvciAnc3ltYm9sJyBjYWxsYmFjaywg dGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBzeW1ib2wgb3IgYQorKyAgICAgc3RyaW5nLiAgKi8K KysgIGlmIChnZGJweV9pc19zdHJpbmcgKHJlc3VsdCkpCisrICAgIHsKKysgICAgICAqbmFtZSA9 IHB5dGhvbl9zdHJpbmdfdG9faG9zdF9zdHJpbmcgKHJlc3VsdCk7CisrICAgICAgUHlfREVDUkVG IChyZXN1bHQpOworKworKyAgICAgIGlmICgqbmFtZSA9PSBOVUxMKQorKwlyZXR1cm4gUFlfQlRf RVJST1I7CisrICAgICAgLyogSWYgdGhlIEFQSSByZXR1cm5zIGEgc3RyaW5nIChhbmQgbm90IGEg c3ltYm9sKSwgdGhlbiB0aGVyZSBpcworKwlubyBzeW1ib2wgZGVyaXZlZCBsYW5ndWFnZSBhdmFp bGFibGUgYW5kIHRoZSBmcmFtZSBmaWx0ZXIgaGFzCisrCWVpdGhlciBvdmVycmlkZGVuIHRoZSBz eW1ib2wgd2l0aCBhIHN0cmluZywgb3Igc3VwcGxpZWQgYQorKwllbnRpcmVseSBzeW50aGV0aWMg c3ltYm9sL3ZhbHVlIHBhaXJpbmcuICBJbiB0aGF0IGNhc2UsIHVzZQorKwlweXRob25fbGFuZ3Vh Z2UuICAqLworKyAgICAgICpsYW5ndWFnZSA9IHB5dGhvbl9sYW5ndWFnZTsKKysgICAgICAqc3lt ID0gTlVMTDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogVGhpcyB0eXBlIGNo ZWNrcyAncmVzdWx0JyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gc28gd2UKKysJIGp1c3QgY2FsbCBp dCB1bmNvbmRpdGlvbmFsbHkgYW5kIGNoZWNrIHRoZSByZXR1cm4uICAqLworKyAgICAgICpzeW0g PSBzeW1ib2xfb2JqZWN0X3RvX3N5bWJvbCAocmVzdWx0KTsKKysKKysgICAgICBQeV9ERUNSRUYg KHJlc3VsdCk7CisrCisrICAgICAgaWYgKCpzeW0gPT0gTlVMTCkKKysJeworKwkgIFB5RXJyX1Nl dFN0cmluZyAoUHlFeGNfUnVudGltZUVycm9yLAorKwkJCSAgIF8oIlVuZXhwZWN0ZWQgdmFsdWUu ICBFeHBlY3RpbmcgYSAiCisrCQkJICAgICAiZ2RiLlN5bWJvbCBvciBhIFB5dGhvbiBzdHJpbmcu IikpOworKwkgIHJldHVybiBQWV9CVF9FUlJPUjsKKysJfQorKworKyAgICAgIC8qIER1cGxpY2F0 ZSB0aGUgc3ltYm9sIG5hbWUsIHNvIHRoZSBjYWxsZXIgaGFzIGNvbnNpc3RlbmN5CisrCSBpbiBn YXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyAgICAgICpuYW1lID0geHN0cmR1cCAoU1lNQk9MX1BS SU5UX05BTUUgKCpzeW0pKTsKKysKKysgICAgICAvKiBJZiBhIHN5bWJvbCBpcyBzcGVjaWZpZWQg YXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGxhbmd1YWdlCisrCSBmcm9tIHRoZSBzeW1ib2wuICBJ ZiBtb2RlIGlzIG5vdCAiYXV0byIsIHRoZW4gdGhlIGxhbmd1YWdlCisrCSBoYXMgYmVlbiBleHBs aWNpdGx5IHNldCwgdXNlIHRoYXQuICAqLworKyAgICAgIGlmIChsYW5ndWFnZV9tb2RlID09IGxh bmd1YWdlX21vZGVfYXV0bykKKysJKmxhbmd1YWdlID0gbGFuZ3VhZ2VfZGVmIChTWU1CT0xfTEFO R1VBR0UgKCpzeW0pKTsKKysgICAgICBlbHNlCisrCSpsYW5ndWFnZSA9IGN1cnJlbnRfbGFuZ3Vh Z2U7CisrICAgIH0KKysKKysgIHJldHVybiBQWV9CVF9PSzsKKyt9CisrCisrLyogSGVscGVyIGZ1 bmN0aW9uIHRvIGV4dHJhY3QgYSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB0aGF0IGNvbmZvcm1zIHRv CisrICAgdGhlICJTeW1ib2wgVmFsdWUiIGludGVyZmFjZS4gIE9CSiBpcyB0aGUgUHl0aG9uIG9i amVjdCB0byBleHRyYWN0CisrICAgdGhlIHZhbHVlIGZyb20uICBWQUxVRSBpcyBhIHBhc3MtdGhy b3VnaCBhcmd1bWVudCB3aGVyZSB0aGUgdmFsdWUKKysgICB3aWxsIGJlIHdyaXR0ZW4uICBJZiB0 aGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIHZhbHVlIGF0dHJpYnV0ZSwKKysgICBvciBwcm92 aWRlcyB0aGUgUHl0aG9uIE5vbmUgZm9yIGEgdmFsdWUsIFZBTFVFIHdpbGwgYmUgc2V0IHRvIE5V TEwKKysgICBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhcyBzdWNjZXNzZnVsLiAgUmV0 dXJucyBQWV9CVF9FUlJPUgorKyAgIG9uIGVycm9yIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhv biBleGNlcHRpb24gc2V0LCBhbmQgUFlfQlRfT0sgb24KKysgICBzdWNjZXNzLiAgKi8KKysKKytz dGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytleHRyYWN0X3ZhbHVlIChQeU9iamVjdCAqb2JqLCBz dHJ1Y3QgdmFsdWUgKip2YWx1ZSkKKyt7CisrICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAo b2JqLCAidmFsdWUiKSkKKysgICAgeworKyAgICAgIFB5T2JqZWN0ICp2cmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbE1ldGhvZCAob2JqLCAidmFsdWUiLCBOVUxMKTsKKysKKysgICAgICBpZiAodnJlc3Vs dCA9PSBOVUxMKQorKwlyZXR1cm4gUFlfQlRfRVJST1I7CisrCisrICAgICAgLyogVGhlIFB5dGhv biBjb2RlIGhhcyByZXR1cm5lZCAnTm9uZScgZm9yIGEgdmFsdWUsIHNvIHdlIHNldAorKwkgdmFs dWUgdG8gTlVMTC4gIFRoaXMgZmxhZ3MgdGhhdCBHREIgc2hvdWxkIHJlYWQgdGhlCisrCSB2YWx1 ZS4gICovCisrICAgICAgaWYgKHZyZXN1bHQgPT0gUHlfTm9uZSkKKysJeworKwkgIFB5X0RFQ1JF RiAodnJlc3VsdCk7CisrCSAgKnZhbHVlID0gTlVMTDsKKysJICByZXR1cm4gUFlfQlRfT0s7Cisr CX0KKysgICAgICBlbHNlCisrCXsKKysJICAqdmFsdWUgPSBjb252ZXJ0X3ZhbHVlX2Zyb21fcHl0 aG9uICh2cmVzdWx0KTsKKysJICBQeV9ERUNSRUYgKHZyZXN1bHQpOworKworKwkgIGlmICgqdmFs dWUgPT0gTlVMTCkKKysJICAgIHJldHVybiBQWV9CVF9FUlJPUjsKKysKKysJICByZXR1cm4gUFlf QlRfT0s7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICAqdmFsdWUgPSBOVUxMOworKworKyAg cmV0dXJuIFBZX0JUX09LOworK30KKysKKysvKiBNSSBwcmludHMgb25seSBjZXJ0YWluIHZhbHVl cyBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2Ygc3ltYm9sIGFuZAorKyAgIGFsc28gd2hhdCB0aGUg dXNlciBoYXMgc3BlY2lmaWVkLiAgU1lNIGlzIHRoZSBzeW1ib2wgdG8gY2hlY2ssIGFuZAorKyAg IE1JX1BSSU5UX1RZUEVTIGlzIGFuIGVudW0gc3BlY2lmeWluZyB3aGF0IHRoZSB1c2VyIHdhbnRz IGVtaXR0ZWQKKysgICBmb3IgdGhlIE1JIGNvbW1hbmQgaW4gcXVlc3Rpb24uICAqLworK3N0YXRp YyBpbnQKKyttaV9zaG91bGRfcHJpbnQgKHN0cnVjdCBzeW1ib2wgKnN5bSwgZW51bSBtaV9wcmlu dF90eXBlcyB0eXBlKQorK3sKKysgIGludCBwcmludF9tZSA9IDA7CisrCisrICBzd2l0Y2ggKFNZ TUJPTF9DTEFTUyAoc3ltKSkKKysgICAgeworKyAgICBkZWZhdWx0OgorKyAgICBjYXNlIExPQ19V TkRFRjoJLyogY2F0Y2hlcyBlcnJvcnMgICAgICAgICovCisrICAgIGNhc2UgTE9DX0NPTlNUOgkv KiBjb25zdGFudCAgICAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfVFlQRURFRjoJLyogbG9j YWwgdHlwZWRlZiAgICAgICAgICovCisrICAgIGNhc2UgTE9DX0xBQkVMOgkvKiBsb2NhbCBsYWJl bCAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfQkxPQ0s6CS8qIGxvY2FsIGZ1bmN0aW9uICAg ICAgICAqLworKyAgICBjYXNlIExPQ19DT05TVF9CWVRFUzoJLyogbG9jLiBieXRlIHNlcS4gICAg ICAgICovCisrICAgIGNhc2UgTE9DX1VOUkVTT0xWRUQ6CS8qIHVucmVzb2x2ZWQgc3RhdGljICAg ICAqLworKyAgICBjYXNlIExPQ19PUFRJTUlaRURfT1VUOgkvKiBvcHRpbWl6ZWQgb3V0ICAgICAg ICAgKi8KKysgICAgICBwcmludF9tZSA9IDA7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ug TE9DX0FSRzoJLyogYXJndW1lbnQgICAgICAgICAgICAgICovCisrICAgIGNhc2UgTE9DX1JFRl9B Ukc6CS8qIHJlZmVyZW5jZSBhcmcgICAgICAgICAqLworKyAgICBjYXNlIExPQ19SRUdQQVJNX0FE RFI6CS8qIGluZGlyZWN0IHJlZ2lzdGVyIGFyZyAqLworKyAgICBjYXNlIExPQ19MT0NBTDoJLyog c3RhY2sgbG9jYWwgICAgICAgICAgICovCisrICAgIGNhc2UgTE9DX1NUQVRJQzoJLyogc3RhdGlj ICAgICAgICAgICAgICAgICovCisrICAgIGNhc2UgTE9DX1JFR0lTVEVSOgkvKiByZWdpc3RlciAg ICAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfQ09NUFVURUQ6CS8qIGNvbXB1dGVkIGxvY2F0 aW9uICAgICAqLworKyAgICAgIGlmICh0eXBlID09IE1JX1BSSU5UX0xPQ0FMUykKKysJcHJpbnRf bWUgPSAhIFNZTUJPTF9JU19BUkdVTUVOVCAoc3ltKTsKKysgICAgICBlbHNlCisrCXByaW50X21l ID0gU1lNQk9MX0lTX0FSR1VNRU5UIChzeW0pOworKyAgICB9CisrICByZXR1cm4gcHJpbnRfbWU7 CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbiB3aGljaCBvdXRwdXRzIGEgdHlwZSBuYW1lIGV4 dHJhY3RlZCBmcm9tIFZBTCB0byBhCisrICAgInR5cGUiIGZpZWxkIGluIHRoZSBvdXRwdXQgc3Ry ZWFtIE9VVC4gIE9VVCBpcyB0aGUgdWktb3V0IHN0cnVjdHVyZQorKyAgIHRoZSB0eXBlIG5hbWUg d2lsbCBiZSBvdXRwdXQgdG9vLCBhbmQgVkFMIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZQorKyAgIHR5 cGUgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbS4gIFJldHVybnMgUFlfQlRfRVJST1Igb24gZXJyb3Is IHdpdGgKKysgICBhbnkgR0RCIGV4Y2VwdGlvbnMgY29udmVydGVkIHRvIGEgUHl0aG9uIGV4Y2Vw dGlvbiwgb3IgUFlfQlRfT0sgb24KKysgICBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBw eV9idF9zdGF0dXMKKytweV9wcmludF90eXBlIChzdHJ1Y3QgdWlfb3V0ICpvdXQsIHN0cnVjdCB2 YWx1ZSAqdmFsKQorK3sKKysgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0aW9uIGV4Y2VwdDsK KysKKysgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrICAgIHsKKysgICAg ICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKysgICAgICBzdHJ1Y3QgdWlfZmlsZSAqc3RiOworKyAgICAg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOworKworKyAgICAgIHN0YiA9IG1lbV9maWxlb3BlbiAo KTsKKysgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3VpX2ZpbGVfZGVsZXRlIChzdGIpOwor KyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlICh2YWwpKTsKKysgICAgICB0 eXBlX3ByaW50ICh2YWx1ZV90eXBlICh2YWwpLCAiIiwgc3RiLCAtMSk7CisrICAgICAgdWlfb3V0 X2ZpZWxkX3N0cmVhbSAob3V0LCAidHlwZSIsIHN0Yik7CisrICAgICAgZG9fY2xlYW51cHMgKGNs ZWFudXApOworKyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsKKysgICAg ICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICByZXR1cm4gUFlfQlRf RVJST1I7CisrICAgIH0KKysKKysgIHJldHVybiBQWV9CVF9PSzsKKyt9CisrCisrLyogSGVscGVy IGZ1bmN0aW9uIHdoaWNoIG91dHB1dHMgYSB2YWx1ZSB0byBhbiBvdXRwdXQgZmllbGQgaW4gYQor KyAgIHN0cmVhbS4gIE9VVCBpcyB0aGUgdWktb3V0IHN0cnVjdHVyZSB0aGUgdmFsdWUgd2lsbCBi ZSBvdXRwdXQgdG8sCisrICAgVkFMIGlzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcHJpbnRlZCwg T1BUUyBjb250YWlucyB0aGUgdmFsdWUKKysgICBwcmludGluZyBvcHRpb25zLCBBUkdTX1RZUEUg aXMgYW4gZW51bWVyYXRvciBkZXNjcmliaW5nIHRoZQorKyAgIGFyZ3VtZW50IGZvcm1hdCwgYW5k IExBTkdVQUdFIGlzIHRoZSBsYW5ndWFnZV9kZWZuIHRoYXQgdGhlIHZhbHVlCisrICAgd2lsbCBi ZSBwcmludGVkIHdpdGguICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uIGVycm9yLCB3aXRoIGFueSBH REIKKysgICBleGNlcHRpb25zIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBleGNlcHRpb24sIG9yIFBZ X0JUX09LIG9uCisrICAgc3VjY2Vzcy4gKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMK KytweV9wcmludF92YWx1ZSAoc3RydWN0IHVpX291dCAqb3V0LCBzdHJ1Y3QgdmFsdWUgKnZhbCwK KysJCWNvbnN0IHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zICpvcHRzLAorKwkJaW50IGluZGVu dCwKKysJCWVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQljb25zdCBzdHJ1Y3QgbGFu Z3VhZ2VfZGVmbiAqbGFuZ3VhZ2UpCisreworKyAgaW50IHNob3VsZF9wcmludCA9IDA7CisrICB2 b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrICBpbnQgbG9jYWxfaW5kZW50 ID0gKDQgKiBpbmRlbnQpOworKworKyAgLyogTmV2ZXIgc2V0IGFuIGluZGVudCBsZXZlbCBmb3Ig Y29tbW9uX3ZhbF9wcmludCBpZiBNSS4gICovCisrICBpZiAodWlfb3V0X2lzX21pX2xpa2VfcCAo b3V0KSkKKysgICAgbG9jYWxfaW5kZW50ID0gMDsKKysKKysgIC8qIE1JIGRvZXMgbm90IHByaW50 IGNlcnRhaW4gdmFsdWVzLCBkaWZmZXJlbnRpYXRlZCBieSB0eXBlLAorKyAgICAgZGVwZW5kaW5n IG9uIHdoYXQgQVJHU19UWVBFIGluZGljYXRlcy4gIFRlc3QgdHlwZSBhZ2FpbnN0IG9wdGlvbi4K KysgICAgIEZvciBDTEkgcHJpbnQgYWxsIHZhbHVlcy4gICovCisrICBpZiAoYXJnc190eXBlID09 IE1JX1BSSU5UX1NJTVBMRV9WQUxVRVMKKysgICAgICB8fCBhcmdzX3R5cGUgPT0gTUlfUFJJTlRf QUxMX1ZBTFVFUykKKysgICAgeworKyAgICAgIHN0cnVjdCB0eXBlICp0eXBlID0gTlVMTDsKKysK KysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgdHlw ZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKHZhbCkpOworKwl9CisrICAgICAgaWYgKGV4 Y2VwdC5yZWFzb24gPCAwKQorKwl7CisrCSAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2Vw dCk7CisrCSAgcmV0dXJuIFBZX0JUX0VSUk9SOworKwl9CisrCisrICAgICAgaWYgKGFyZ3NfdHlw ZSA9PSBNSV9QUklOVF9BTExfVkFMVUVTKQorKwlzaG91bGRfcHJpbnQgPSAxOworKyAgICAgIGVs c2UgaWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9TSU1QTEVfVkFMVUVTCisrCSAgICAgICAmJiBU WVBFX0NPREUgKHR5cGUpICE9IFRZUEVfQ09ERV9BUlJBWQorKwkgICAgICAgJiYgVFlQRV9DT0RF ICh0eXBlKSAhPSBUWVBFX0NPREVfU1RSVUNUCisrCSAgICAgICAmJiBUWVBFX0NPREUgKHR5cGUp ICE9IFRZUEVfQ09ERV9VTklPTikKKysJc2hvdWxkX3ByaW50ID0gMTsKKysgICAgfQorKyAgZWxz ZSBpZiAoYXJnc190eXBlICE9IE5PX1ZBTFVFUykKKysgICAgc2hvdWxkX3ByaW50ID0gMTsKKysK KysgIGlmIChzaG91bGRfcHJpbnQpCisrICAgIHsKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgc3RydWN0IHVpX2ZpbGUgKnN0YjsKKysJICBzdHJ1 Y3QgY2xlYW51cCAqY2xlYW51cDsKKysKKysJICBzdGIgPSBtZW1fZmlsZW9wZW4gKCk7CisrCSAg Y2xlYW51cCA9IG1ha2VfY2xlYW51cF91aV9maWxlX2RlbGV0ZSAoc3RiKTsKKysJICBjb21tb25f dmFsX3ByaW50ICh2YWwsIHN0YiwgaW5kZW50LCBvcHRzLCBsYW5ndWFnZSk7CisrCSAgdWlfb3V0 X2ZpZWxkX3N0cmVhbSAob3V0LCAidmFsdWUiLCBzdGIpOworKwkgIGRvX2NsZWFudXBzIChjbGVh bnVwKTsKKysJfQorKyAgICAgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysJeworKwkgIGdkYnB5 X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkgIHJldHVybiBQWV9CVF9FUlJPUjsKKysJ fQorKyAgICB9CisrCisrICByZXR1cm4gUFlfQlRfT0s7CisrfQorKworKy8qIEhlbHBlciBmdW5j dGlvbiB0byBjYWxsIGEgUHl0aG9uIG1ldGhvZCBhbmQgZXh0cmFjdCBhbiBpdGVyYXRvcgorKyAg IGZyb20gdGhlIHJlc3VsdC4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFueXRoaW5nIGJ1dCBh biBpdGVyYXRvcgorKyAgIHRoZSBleGNlcHRpb24gaXMgcHJlc2VydmVkIGFuZCBOVUxMIGlzIHJl dHVybmVkLiAgRklMVEVSIGlzIHRoZQorKyAgIFB5dGhvbiBvYmplY3QgdG8gY2FsbCwgYW5kIEZV TkMgaXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4gIFJldHVybnMKKysgICBhIFB5T2JqZWN0LCBv ciBOVUxMIG9uIGVycm9yIHdpdGggdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiBzZXQuCisrICAg VGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIGFuIGl0ZXJhdG9yLCBvciBOVUxMLiAgKi8KKysKKytz dGF0aWMgUHlPYmplY3QgKgorK2dldF9weV9pdGVyX2Zyb21fZnVuYyAoUHlPYmplY3QgKmZpbHRl ciwgY2hhciAqZnVuYykKKyt7CisrICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAoZmlsdGVy LCBmdW5jKSkKKysgICAgeworKyAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeU9iamVjdF9DYWxs TWV0aG9kIChmaWx0ZXIsIGZ1bmMsIE5VTEwpOworKworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVM TCkKKysJeworKwkgIGlmIChyZXN1bHQgPT0gUHlfTm9uZSkKKysJICAgIHsKKysJICAgICAgcmV0 dXJuIHJlc3VsdDsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIFB5T2JqZWN0 ICppdGVyYXRvciA9IFB5T2JqZWN0X0dldEl0ZXIgKHJlc3VsdCk7CisrCisrCSAgICAgIFB5X0RF Q1JFRiAocmVzdWx0KTsKKysJICAgICAgcmV0dXJuIGl0ZXJhdG9yOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysgIGVsc2UKKysgICAgUHlfUkVUVVJOX05PTkU7CisrCisrICByZXR1cm4gTlVMTDsK Kyt9CisrCisrLyogIEhlbHBlciBmdW5jdGlvbiB0byBvdXRwdXQgYSBzaW5nbGUgZnJhbWUgYXJn dW1lbnQgYW5kIHZhbHVlIHRvIGFuCisrICAgIG91dHB1dCBzdHJlYW0uICBUaGlzIGZ1bmN0aW9u IHdpbGwgYWNjb3VudCBmb3IgZW50cnkgdmFsdWVzIGlmIHRoZQorKyAgICBGViBwYXJhbWV0ZXIg aXMgcG9wdWxhdGVkLCB0aGUgZnJhbWUgYXJndW1lbnQgaGFzIGVudHJ5IHZhbHVlcworKyAgICBh c3NvY2lhdGVkIHdpdGggdGhlbSwgYW5kIHRoZSBhcHByb3ByaWF0ZSAic2V0IGVudHJ5LXZhbHVl IgorKyAgICBvcHRpb25zIGFyZSBzZXQuICBXaWxsIG91dHB1dCBpbiBDTEkgb3IgTUkgbGlrZSBm b3JtYXQgZGVwZW5kaW5nCisrICAgIG9uIHRoZSB0eXBlIG9mIG91dHB1dCBzdHJlYW0gZGV0ZWN0 ZWQuICBPVVQgaXMgdGhlIG91dHB1dCBzdHJlYW0sCisrICAgIFNZTV9OQU1FIGlzIHRoZSBuYW1l IG9mIHRoZSBzeW1ib2wuICBJZiBTWU1fTkFNRSBpcyBwb3B1bGF0ZWQgdGhlbgorKyAgICBpdCBt dXN0IGhhdmUgYW4gYWNjb21wYW55aW5nIHZhbHVlIGluIHRoZSBwYXJhbWV0ZXIgRlYuICBGQSBp cyBhCisrICAgIGZyYW1lIGFyZ3VtZW50IHN0cnVjdHVyZS4gIElmIEZBIGlzIHBvcHVsYXRlZCwg Ym90aCBTWU1fTkFNRSBhbmQKKysgICAgRlYgYXJlIGlnbm9yZWQuICBPUFRTIGNvbnRhaW5zIHRo ZSB2YWx1ZSBwcmludGluZyBvcHRpb25zLAorKyAgICBBUkdTX1RZUEUgaXMgYW4gZW51bWVyYXRv ciBkZXNjcmliaW5nIHRoZSBhcmd1bWVudCBmb3JtYXQsCisrICAgIFBSSU5UX0FSR1NfRklFTEQg aXMgYSBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB3ZSBvdXRwdXQgIkFSR1M9MSIKKysgICAgaW4g TUkgb3V0cHV0IGluIGNvbW1hbmRzIHdoZXJlIGJvdGggYXJndW1lbnRzIGFuZCBsb2NhbHMgYXJl CisrICAgIHByaW50ZWQuICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uIGVycm9yLCB3aXRoIGFueSBH REIgZXhjZXB0aW9ucworKyAgICBjb252ZXJ0ZWQgdG8gYSBQeXRob24gZXhjZXB0aW9uLCBvciBQ WV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytw eV9wcmludF9zaW5nbGVfYXJnIChzdHJ1Y3QgdWlfb3V0ICpvdXQsCisrCQkgICAgIGNvbnN0IGNo YXIgKnN5bV9uYW1lLAorKwkJICAgICBzdHJ1Y3QgZnJhbWVfYXJnICpmYSwKKysJCSAgICAgc3Ry dWN0IHZhbHVlICpmdiwKKysJCSAgICAgY29uc3Qgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMg Km9wdHMsCisrCQkgICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQkgICAgIGlu dCBwcmludF9hcmdzX2ZpZWxkLAorKwkJICAgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAq bGFuZ3VhZ2UpCisreworKyAgc3RydWN0IHZhbHVlICp2YWw7CisrICB2b2xhdGlsZSBzdHJ1Y3Qg Z2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrCisrICBpZiAoZmEgIT0gTlVMTCkKKysgICAgeworKyAg ICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2VfZGVmIChTWU1CT0xfTEFOR1VBR0UgKGZhLT5zeW0pKTsK KysgICAgICB2YWwgPSBmYS0+dmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHZhbCA9IGZ2Owor KworKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysgICAgeworKyAgICAg IHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBO VUxMKTsKKysKKysgICAgICAvKiAgTUkgaGFzIHZhcnlpbmcgcnVsZXMgZm9yIHR1cGxlcywgYnV0 IGdlbmVyYWxseSBpZiB0aGVyZSBpcyBvbmx5CisrICAgICAgb25lIGVsZW1lbnQgaW4gZWFjaCBp dGVtIGluIHRoZSBsaXN0LCBkbyBub3Qgc3RhcnQgYSB0dXBsZS4gIFRoZQorKyAgICAgIGV4Y2Vw dGlvbiBpcyAtc3RhY2stbGlzdC12YXJpYWJsZXMgd2hpY2ggZW1pdHMgYW4gQVJHUz0iMSIgZmll bGQKKysgICAgICBpZiB0aGUgdmFsdWUgaXMgYSBmcmFtZSBhcmd1bWVudC4gIFRoaXMgaXMgZGVu b3RlZCBpbiB0aGlzCisrICAgICAgZnVuY3Rpb24gd2l0aCBQUklOVF9BUkdTX0ZJRUxEIHdoaWNo IGlzIGZsYWcgZnJvbSB0aGUgY2FsbGVyIHRvCisrICAgICAgZW1pdCB0aGUgQVJHUyBmaWVsZC4g ICovCisrICAgICAgaWYgKHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisrCXsKKysJICBpZiAo cHJpbnRfYXJnc19maWVsZCB8fCBhcmdzX3R5cGUgIT0gTk9fVkFMVUVTKQorKwkgICAgbWFrZV9j bGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQgKG91dCwgTlVMTCk7CisrCX0KKysKKysgICAg ICBhbm5vdGF0ZV9hcmdfYmVnaW4gKCk7CisrCisrICAgICAgLyogSWYgZnJhbWUgYXJndW1lbnQg aXMgcG9wdWxhdGVkLCBjaGVjayBmb3IgZW50cnktdmFsdWVzIGFuZCB0aGUKKysJIGVudHJ5IHZh bHVlIG9wdGlvbnMuICAqLworKyAgICAgIGlmIChmYSAhPSBOVUxMKQorKwl7CisrCSAgc3RydWN0 IHVpX2ZpbGUgKnN0YjsKKysKKysJICBzdGIgPSBtZW1fZmlsZW9wZW4gKCk7CisrCSAgbWFrZV9j bGVhbnVwX3VpX2ZpbGVfZGVsZXRlIChzdGIpOworKwkgIGZwcmludGZfc3ltYm9sX2ZpbHRlcmVk IChzdGIsIFNZTUJPTF9QUklOVF9OQU1FIChmYS0+c3ltKSwKKysJCQkJICAgU1lNQk9MX0xBTkdV QUdFIChmYS0+c3ltKSwKKysJCQkJICAgRE1HTF9QQVJBTVMgfCBETUdMX0FOU0kpOworKwkgIGlm IChmYS0+ZW50cnlfa2luZCA9PSBwcmludF9lbnRyeV92YWx1ZXNfY29tcGFjdCkKKysJICAgIHsK KysJICAgICAgZnB1dHNfZmlsdGVyZWQgKCI9Iiwgc3RiKTsKKysKKysJICAgICAgZnByaW50Zl9z eW1ib2xfZmlsdGVyZWQgKHN0YiwgU1lNQk9MX1BSSU5UX05BTUUgKGZhLT5zeW0pLAorKwkJCQkg ICAgICAgU1lNQk9MX0xBTkdVQUdFIChmYS0+c3ltKSwKKysJCQkJICAgICAgIERNR0xfUEFSQU1T IHwgRE1HTF9BTlNJKTsKKysJICAgIH0KKysJICBpZiAoZmEtPmVudHJ5X2tpbmQgPT0gcHJpbnRf ZW50cnlfdmFsdWVzX29ubHkKKysJICAgICAgfHwgZmEtPmVudHJ5X2tpbmQgPT0gcHJpbnRfZW50 cnlfdmFsdWVzX2NvbXBhY3QpCisrCSAgICB7CisrCSAgICAgIGZwdXRzX2ZpbHRlcmVkICgiQGVu dHJ5Iiwgc3RiKTsKKysJICAgIH0KKysJICB1aV9vdXRfZmllbGRfc3RyZWFtIChvdXQsICJuYW1l Iiwgc3RiKTsKKysJfQorKyAgICAgIGVsc2UKKysJLyogT3RoZXJ3aXNlLCBqdXN0IG91dHB1dCB0 aGUgbmFtZS4gICovCisrCXVpX291dF9maWVsZF9zdHJpbmcgKG91dCwgIm5hbWUiLCBzeW1fbmFt ZSk7CisrCisrICAgICAgYW5ub3RhdGVfYXJnX25hbWVfZW5kICgpOworKworKyAgICAgIGlmICgh IHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisrCXVpX291dF90ZXh0IChvdXQsICI9Iik7Cisr CisrICAgICAgaWYgKHByaW50X2FyZ3NfZmllbGQpCisrCXVpX291dF9maWVsZF9pbnQgKG91dCwg ImFyZyIsIDEpOworKworKyAgICAgIC8qIEZvciBNSSBwcmludCB0aGUgdHlwZSwgYnV0IG9ubHkg Zm9yIHNpbXBsZSB2YWx1ZXMuICBUaGlzIHNlZW1zCisrCSB3ZWlyZCwgYnV0IHRoaXMgaXMgaG93 IE1JIGNob29zZSB0byBmb3JtYXQgdGhlIHZhcmlvdXMgb3V0cHV0CisrCSB0eXBlcy4gICovCisr ICAgICAgaWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9TSU1QTEVfVkFMVUVTKQorKwl7CisrCSAg aWYgKHB5X3ByaW50X3R5cGUgKG91dCwgdmFsKSA9PSBQWV9CVF9FUlJPUikKKysJICAgIHsKKysJ ICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKysJICAgICAgZ290byBlcnJvcjsKKysJICAg IH0KKysJfQorKworKyAgICAgIGFubm90YXRlX2FyZ192YWx1ZSAodmFsdWVfdHlwZSAodmFsKSk7 CisrCisrICAgICAgLyogSWYgdGhlIG91dHB1dCBpcyB0byB0aGUgQ0xJLCBhbmQgdGhlIHVzZXIg b3B0aW9uICJzZXQgcHJpbnQKKysJIGZyYW1lLWFyZ3VtZW50cyIgaXMgc2V0IHRvIG5vbmUsIGp1 c3Qgb3V0cHV0ICIuLi4iLiAgKi8KKysgICAgICBpZiAoISB1aV9vdXRfaXNfbWlfbGlrZV9wIChv dXQpICYmIGFyZ3NfdHlwZSA9PSBOT19WQUxVRVMpCisrCXVpX291dF9maWVsZF9zdHJpbmcgKG91 dCwgInZhbHVlIiwgIi4uLiIpOworKyAgICAgIGVsc2UKKysJeworKwkgIC8qIE90aGVyd2lzZSwg cHJpbnQgdGhlIHZhbHVlIGZvciBib3RoIE1JIGFuZCB0aGUgQ0xJLCBleGNlcHQKKysJICAgICBm b3IgdGhlIGNhc2Ugb2YgTUlfUFJJTlRfTk9fVkFMVUVTLiAgKi8KKysJICBpZiAoYXJnc190eXBl ICE9IE5PX1ZBTFVFUykKKysJICAgIHsKKysJICAgICAgaWYgKHB5X3ByaW50X3ZhbHVlIChvdXQs IHZhbCwgb3B0cywgMCwgYXJnc190eXBlLCBsYW5ndWFnZSkKKysJCSAgPT0gUFlfQlRfRVJST1Ip CisrCQl7CisrCQkgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisrCQkgIGdvdG8gZXJyb3I7Cisr CQl9CisrCSAgICB9CisrCX0KKysKKysgICAgICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworKyAg ICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsKKysgICAgICBnZGJweV9jb252 ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICBnb3RvIGVycm9yOworKyAgICB9CisrCisr ICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVycm9yOgorKyAgcmV0dXJuIFBZX0JUX0VSUk9SOwor K30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gbG9vcCBvdmVyIGZyYW1lIGFyZ3VtZW50cyBw cm92aWRlZCBieSB0aGUKKysgICAiZnJhbWVfYXJndW1lbnRzIiBQeXRob24gQVBJLiAgRWxlbWVu dHMgaW4gdGhlIGl0ZXJhdG9yIG11c3QKKysgICBjb25mb3JtIHRvIHRoZSAiU3ltYm9sIFZhbHVl IiBpbnRlcmZhY2UuICBJVEVSIGlzIHRoZSBQeXRob24KKysgICBpdGVyYWJsZSBvYmplY3QsIE9V VCBpcyB0aGUgb3V0cHV0IHN0cmVhbSwgQVJHU19UWVBFIGlzIGFuCisrICAgZW51bWVyYXRvciBk ZXNjcmliaW5nIHRoZSBhcmd1bWVudCBmb3JtYXQsIFBSSU5UX0FSR1NfRklFTEQgaXMgYQorKyAg IGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHdlIG91dHB1dCAiQVJHUz0xIiBpbiBNSSBvdXRwdXQg aW4gY29tbWFuZHMKKysgICB3aGVyZSBib3RoIGFyZ3VtZW50cyBhbmQgbG9jYWxzIGFyZSBwcmlu dGVkLCBhbmQgRlJBTUUgaXMgdGhlCisrICAgYmFja2luZyBmcmFtZS4gIFJldHVybnMgUFlfQlRf RVJST1Igb24gZXJyb3IsIHdpdGggYW55IEdEQgorKyAgIGV4Y2VwdGlvbnMgY29udmVydGVkIHRv IGEgUHl0aG9uIGV4Y2VwdGlvbiwgb3IgUFlfQlRfT0sgb24KKysgICBzdWNjZXNzLiAgKi8KKysK KytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytlbnVtZXJhdGVfYXJncyAoUHlPYmplY3QgKml0 ZXIsCisrCQlzdHJ1Y3QgdWlfb3V0ICpvdXQsCisrCQllbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190 eXBlLAorKwkJaW50IHByaW50X2FyZ3NfZmllbGQsCisrCQlzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJh bWUpCisreworKyAgUHlPYmplY3QgKml0ZW07CisrICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9u cyBvcHRzOworKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworKworKyAg Z2V0X3VzZXJfcHJpbnRfb3B0aW9ucyAoJm9wdHMpOworKworKyAgaWYgKGFyZ3NfdHlwZSA9PSBD TElfU0NBTEFSX1ZBTFVFUykKKysgICAgeworKyAgICAgIC8qIFRydWUgaW4gInN1bW1hcnkiIG1v ZGUsIGZhbHNlIG90aGVyd2lzZS4gICovCisrICAgICAgb3B0cy5zdW1tYXJ5ID0gMTsKKysgICAg fQorKworKyAgb3B0cy5kZXJlZl9yZWYgPSAxOworKworKyAgVFJZX0NBVENIIChleGNlcHQsIFJF VFVSTl9NQVNLX0FMTCkKKysgICAgeworKyAgICAgIGFubm90YXRlX2ZyYW1lX2FyZ3MgKCk7Cisr ICAgIH0KKysgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysgICAgeworKyAgICAgIGdkYnB5X2Nv bnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKyAgICAgIGdvdG8gZXJyb3I7CisrICAgIH0KKysK KysgIC8qICBDb2xsZWN0IHRoZSBmaXJzdCBhcmd1bWVudCBvdXRzaWRlIG9mIHRoZSBsb29wLCBz byBvdXRwdXQgb2YKKysgICAgICBjb21tYXMgaW4gdGhlIGFyZ3VtZW50IG91dHB1dCBpcyBjb3Jy ZWN0LiAgQXQgdGhlIGVuZCBvZiB0aGUKKysgICAgICBsb29wIGJsb2NrIGNvbGxlY3QgYW5vdGhl ciBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLCBhbmQsIGlmIGl0IGlzCisrICAgICAgbm90IG51bGwg ZW1pdCBhIGNvbW1hLiAgKi8KKysgIGl0ZW0gPSBQeUl0ZXJfTmV4dCAoaXRlcik7CisrICBpZiAo aXRlbSA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkICgpKQorKyAgICBnb3RvIGVycm9yOworKwor KyAgd2hpbGUgKGl0ZW0pCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVm biAqbGFuZ3VhZ2U7CisrICAgICAgY2hhciAqc3ltX25hbWU7CisrICAgICAgc3RydWN0IHN5bWJv bCAqc3ltOworKyAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsOworKyAgICAgIGVudW0gcHlfYnRfc3Rh dHVzIHN1Y2Nlc3MgPSBQWV9CVF9FUlJPUjsKKysKKysgICAgICBzdWNjZXNzID0gZXh0cmFjdF9z eW0gKGl0ZW0sICZzeW1fbmFtZSwgJnN5bSwgJmxhbmd1YWdlKTsKKysgICAgICBpZiAoc3VjY2Vz cyA9PSBQWV9CVF9FUlJPUikKKysJeworKwkgIFB5X0RFQ1JFRiAoaXRlbSk7CisrCSAgZ290byBl cnJvcjsKKysJfQorKworKyAgICAgIHN1Y2Nlc3MgPSBleHRyYWN0X3ZhbHVlIChpdGVtLCAmdmFs KTsKKysgICAgICBpZiAoc3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJeworKwkgIHhmcmVlIChz eW1fbmFtZSk7CisrCSAgUHlfREVDUkVGIChpdGVtKTsKKysJICBnb3RvIGVycm9yOworKwl9Cisr CisrICAgICAgUHlfREVDUkVGIChpdGVtKTsKKysgICAgICBpdGVtID0gTlVMTDsKKysKKysgICAg ICBpZiAoc3ltICYmIHVpX291dF9pc19taV9saWtlX3AgKG91dCkKKysJICAmJiAhIG1pX3Nob3Vs ZF9wcmludCAoc3ltLCBNSV9QUklOVF9BUkdTKSkKKysJeworKwkgIHhmcmVlIChzeW1fbmFtZSk7 CisrCSAgY29udGludWU7CisrCX0KKysKKysgICAgICAvKiBJZiB0aGUgb2JqZWN0IGRpZCBub3Qg cHJvdmlkZSBhIHZhbHVlLCByZWFkIGl0IHVzaW5nCisrCSByZWFkX2ZyYW1lX2FyZ3MgYW5kIGFj Y291bnQgZm9yIGVudHJ5IHZhbHVlcywgaWYgYW55LiAgKi8KKysgICAgICBpZiAodmFsID09IE5V TEwpCisrCXsKKysJICBzdHJ1Y3QgZnJhbWVfYXJnIGFyZywgZW50cnlhcmc7CisrCisrCSAgLyog SWYgdGhlcmUgaXMgbm8gdmFsdWUsIGFuZCBhbHNvIG5vIHN5bWJvbCwgc2V0IGVycm9yIGFuZAor KwkgICAgIGV4aXQuICAqLworKwkgIGlmIChzeW0gPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19SdW50aW1lRXJyb3IsCisrCQkJICAgICAgIF8oIk5vIHN5 bWJvbCBvciB2YWx1ZSBwcm92aWRlZC4iKSk7CisrCSAgICAgIHhmcmVlIChzeW1fbmFtZSk7Cisr CSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9CisrCisrCSAgVFJZX0NBVENIIChleGNlcHQsIFJF VFVSTl9NQVNLX0FMTCkKKysJICAgIHsKKysJICAgICAgcmVhZF9mcmFtZV9hcmcgKHN5bSwgZnJh bWUsICZhcmcsICZlbnRyeWFyZyk7CisrCSAgICB9CisrCSAgaWYgKGV4Y2VwdC5yZWFzb24gPCAw KQorKwkgICAgeworKwkgICAgICB4ZnJlZSAoc3ltX25hbWUpOworKwkgICAgICBnZGJweV9jb252 ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICAgICAgZ290byBlcnJvcjsKKysJICAgIH0KKysK KysJICAvKiBUaGUgb2JqZWN0IGhhcyBub3QgcHJvdmlkZWQgYSB2YWx1ZSwgc28gdGhpcyBpcyBh IGZyYW1lCisrCSAgICAgYXJndW1lbnQgdG8gYmUgcmVhZCBieSBHREIuICBJbiB0aGlzIGNhc2Ug d2UgaGF2ZSB0bworKwkgICAgIGFjY291bnQgZm9yIGVudHJ5LXZhbHVlcy4gICovCisrCisrCSAg aWYgKGFyZy5lbnRyeV9raW5kICE9IHByaW50X2VudHJ5X3ZhbHVlc19vbmx5KQorKwkgICAgewor KwkgICAgICBpZiAocHlfcHJpbnRfc2luZ2xlX2FyZyAob3V0LCBOVUxMLCAmYXJnLAorKwkJCQkg ICAgICAgTlVMTCwgJm9wdHMsCisrCQkJCSAgICAgICBhcmdzX3R5cGUsCisrCQkJCSAgICAgICBw cmludF9hcmdzX2ZpZWxkLAorKwkJCQkgICAgICAgTlVMTCkgPT0gUFlfQlRfRVJST1IpCisrCQl7 CisrCQkgIHhmcmVlIChhcmcuZXJyb3IpOworKwkJICB4ZnJlZSAoZW50cnlhcmcuZXJyb3IpOwor KwkJICB4ZnJlZSAoc3ltX25hbWUpOworKwkJICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgfQor KworKwkgIGlmIChlbnRyeWFyZy5lbnRyeV9raW5kICE9IHByaW50X2VudHJ5X3ZhbHVlc19ubykK KysJICAgIHsKKysJICAgICAgaWYgKGFyZy5lbnRyeV9raW5kICE9IHByaW50X2VudHJ5X3ZhbHVl c19vbmx5KQorKwkJeworKwkJICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor KwkJICAgIHsKKysJCSAgICAgIHVpX291dF90ZXh0IChvdXQsICIsICIpOworKwkJICAgICAgdWlf b3V0X3dyYXBfaGludCAob3V0LCAiICAgICIpOworKwkJICAgIH0KKysJCSAgaWYgKGV4Y2VwdC5y ZWFzb24gPCAwKQorKwkJICAgIHsKKysJCSAgICAgIHhmcmVlIChhcmcuZXJyb3IpOworKwkJICAg ICAgeGZyZWUgKGVudHJ5YXJnLmVycm9yKTsKKysJCSAgICAgIHhmcmVlIChzeW1fbmFtZSk7Cisr CQkgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJCSAgICAgIGdvdG8g ZXJyb3I7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAocHlfcHJpbnRfc2luZ2xlX2Fy ZyAob3V0LCBOVUxMLCAmZW50cnlhcmcsIE5VTEwsCisrCQkJCSAgICAgICZvcHRzLCBhcmdzX3R5 cGUsCisrCQkJCSAgICAgIHByaW50X2FyZ3NfZmllbGQsIE5VTEwpID09IFBZX0JUX0VSUk9SKQor KwkJeworKwkJICAgICAgeGZyZWUgKGFyZy5lcnJvcik7CisrCQkgICAgICB4ZnJlZSAoZW50cnlh cmcuZXJyb3IpOworKwkJICAgICAgeGZyZWUgKHN5bV9uYW1lKTsKKysJCSAgICAgIGdvdG8gZXJy b3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgeGZyZWUgKGFyZy5lcnJvcik7CisrCSAgeGZyZWUg KGVudHJ5YXJnLmVycm9yKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8qIElmIHRoZSBv YmplY3QgaGFzIHByb3ZpZGVkIGEgdmFsdWUsIHdlIGp1c3QgcHJpbnQgdGhhdC4gICovCisrCSAg aWYgKHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBpZiAocHlfcHJpbnRfc2luZ2xlX2Fy ZyAob3V0LCBzeW1fbmFtZSwgTlVMTCwgdmFsLCAmb3B0cywKKysJCQkJICAgICAgIGFyZ3NfdHlw ZSwgcHJpbnRfYXJnc19maWVsZCwKKysJCQkJICAgICAgIGxhbmd1YWdlKSA9PSBQWV9CVF9FUlJP UikKKysJCXsKKysJCSAgeGZyZWUgKHN5bV9uYW1lKTsKKysJCSAgZ290byBlcnJvcjsKKysJCX0K KysJICAgIH0KKysJfQorKworKyAgICAgIHhmcmVlIChzeW1fbmFtZSk7CisrCisrICAgICAgLyog Q29sbGVjdCB0aGUgbmV4dCBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLiAgSWYKKysJIHRoaXMgaXMg dGhlIGxhc3QgaXRlbSwgZG8gbm90IHByaW50IHRoZQorKwkgY29tbWEuICAqLworKyAgICAgIGl0 ZW0gPSBQeUl0ZXJfTmV4dCAoaXRlcik7CisrICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkKKysJewor KwkgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrCSAgICB7CisrCSAgICAg IHVpX291dF90ZXh0IChvdXQsICIsICIpOworKwkgICAgfQorKwkgIGlmIChleGNlcHQucmVhc29u IDwgMCkKKysJICAgIHsKKysJICAgICAgUHlfREVDUkVGIChpdGVtKTsKKysJICAgICAgZ2RicHlf Y29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisrCSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9 CisrCX0KKysgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKysJZ290byBlcnJvcjsK KysKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAg YW5ub3RhdGVfYXJnX2VuZCAoKTsKKysJfQorKyAgICAgIGlmIChleGNlcHQucmVhc29uIDwgMCkK KysJeworKwkgIFB5X0RFQ1JFRiAoaXRlbSk7CisrCSAgZ2RicHlfY29udmVydF9leGNlcHRpb24g KGV4Y2VwdCk7CisrCSAgZ290byBlcnJvcjsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gUFlf QlRfT0s7CisrCisrIGVycm9yOgorKyAgcmV0dXJuIFBZX0JUX0VSUk9SOworK30KKysKKysKKysv KiBIZWxwZXIgZnVuY3Rpb24gdG8gbG9vcCBvdmVyIHZhcmlhYmxlcyBwcm92aWRlZCBieSB0aGUK KysgICAiZnJhbWVfbG9jYWxzIiBQeXRob24gQVBJLiAgRWxlbWVudHMgaW4gdGhlIGl0ZXJhYmxl IG11c3QgY29uZm9ybQorKyAgIHRvIHRoZSAiU3ltYm9sIFZhbHVlIiBpbnRlcmZhY2UuICBJVEVS IGlzIHRoZSBQeXRob24gaXRlcmFibGUKKysgICBvYmplY3QsIE9VVCBpcyB0aGUgb3V0cHV0IHN0 cmVhbSwgSU5ERU5UIGlzIHdoZXRoZXIgd2Ugc2hvdWxkCisrICAgaW5kZW50IHRoZSBvdXRwdXQg KGZvciBDTEkpLCBBUkdTX1RZUEUgaXMgYW4gZW51bWVyYXRvciBkZXNjcmliaW5nCisrICAgdGhl IGFyZ3VtZW50IGZvcm1hdCwgUFJJTlRfQVJHU19GSUVMRCBpcyBmbGFnIHdoaWNoIGluZGljYXRl cworKyAgIHdoZXRoZXIgdG8gb3V0cHV0IHRoZSBBUkdTIGZpZWxkIGluIHRoZSBjYXNlIG9mCisr ICAgLXN0YWNrLWxpc3QtdmFyaWFibGVzIGFuZCBGUkFNRSBpcyB0aGUgYmFja2luZyBmcmFtZS4g IFJldHVybnMKKysgICBQWV9CVF9FUlJPUiBvbiBlcnJvciwgd2l0aCBhbnkgR0RCIGV4Y2VwdGlv bnMgY29udmVydGVkIHRvIGEgUHl0aG9uCisrICAgZXhjZXB0aW9uLCBvciBQWV9CVF9PSyBvbiBz dWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytlbnVtZXJhdGVfbG9j YWxzIChQeU9iamVjdCAqaXRlciwKKysJCSAgc3RydWN0IHVpX291dCAqb3V0LAorKwkJICBpbnQg aW5kZW50LAorKwkJICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAorKwkJICBpbnQgcHJp bnRfYXJnc19maWVsZCwKKysJCSAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lKQorK3sKKysgIFB5 T2JqZWN0ICppdGVtOworKyAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMgb3B0czsKKysKKysg IGdldF91c2VyX3ByaW50X29wdGlvbnMgKCZvcHRzKTsKKysgIG9wdHMuZGVyZWZfcmVmID0gMTsK KysKKysgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0IChpdGVyKSkpCisrICAgIHsKKysgICAg ICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2U7CisrICAgICAgY2hhciAqc3lt X25hbWU7CisrICAgICAgc3RydWN0IHZhbHVlICp2YWw7CisrICAgICAgZW51bSBweV9idF9zdGF0 dXMgIHN1Y2Nlc3MgPSBQWV9CVF9FUlJPUjsKKysgICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW07Cisr ICAgICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworKyAgICAgIGludCBs b2NhbF9pbmRlbnQgPSA4ICsgKDggKiBpbmRlbnQpOworKyAgICAgIHN0cnVjdCBjbGVhbnVwICps b2NhbHNfY2xlYW51cHM7CisrCisrICAgICAgbG9jYWxzX2NsZWFudXBzID0gbWFrZV9jbGVhbnVw X3B5X2RlY3JlZiAoaXRlbSk7CisrCisrICAgICAgc3VjY2VzcyA9IGV4dHJhY3Rfc3ltIChpdGVt LCAmc3ltX25hbWUsICZzeW0sICZsYW5ndWFnZSk7CisrICAgICAgaWYgKHN1Y2Nlc3MgPT0gUFlf QlRfRVJST1IpCisrCXsKKysJICBkb19jbGVhbnVwcyAobG9jYWxzX2NsZWFudXBzKTsKKysJICBn b3RvIGVycm9yOworKwl9CisrCisrICAgICAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgc3ltX25hbWUp OworKworKyAgICAgIHN1Y2Nlc3MgPSBleHRyYWN0X3ZhbHVlIChpdGVtLCAmdmFsKTsKKysgICAg ICBpZiAoc3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJeworKwkgIGRvX2NsZWFudXBzIChsb2Nh bHNfY2xlYW51cHMpOworKwkgIGdvdG8gZXJyb3I7CisrCX0KKysKKysgICAgICBpZiAoc3ltICE9 IE5VTEwgJiYgdWlfb3V0X2lzX21pX2xpa2VfcCAob3V0KQorKwkgICYmICEgbWlfc2hvdWxkX3By aW50IChzeW0sIE1JX1BSSU5UX0xPQ0FMUykpCisrCXsKKysJICBkb19jbGVhbnVwcyAobG9jYWxz X2NsZWFudXBzKTsKKysJICBjb250aW51ZTsKKysJfQorKworKyAgICAgIC8qIElmIHRoZSBvYmpl Y3QgZGlkIG5vdCBwcm92aWRlIGEgdmFsdWUsIHJlYWQgaXQuICAqLworKyAgICAgIGlmICh2YWwg PT0gTlVMTCkKKysJeworKwkgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisr CSAgICB7CisrCSAgICAgIHZhbCA9IHJlYWRfdmFyX3ZhbHVlIChzeW0sIGZyYW1lKTsKKysJICAg IH0KKysJICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCSAgICB7CisrCSAgICAgIGdkYnB5X2Nv bnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkgICAgICBkb19jbGVhbnVwcyAobG9jYWxzX2Ns ZWFudXBzKTsKKysJICAgICAgZ290byBlcnJvcjsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8q IFdpdGggUFJJTlRfTk9fVkFMVUVTLCBNSSBkb2VzIG5vdCBlbWl0IGEgdHVwbGUgbm9ybWFsbHkg YXMKKysJIGVhY2ggb3V0cHV0IGNvbnRhaW5zIG9ubHkgb25lIGZpZWxkLiAgVGhlIGV4Y2VwdGlv biBpcworKwkgLXN0YWNrLWxpc3QtdmFyaWFibGVzLCB3aGljaCBhbHdheXMgcHJvdmlkZXMgYSB0 dXBsZS4gICovCisrICAgICAgaWYgKHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisrCXsKKysJ ICBpZiAocHJpbnRfYXJnc19maWVsZCB8fCBhcmdzX3R5cGUgIT0gTk9fVkFMVUVTKQorKwkgICAg bWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQgKG91dCwgTlVMTCk7CisrCX0KKysg ICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgaWYgKCEg dWlfb3V0X2lzX21pX2xpa2VfcCAob3V0KSkKKysJICAgIHsKKysJICAgICAgLyogSWYgdGhlIG91 dHB1dCBpcyBub3QgTUkgd2UgaW5kZW50IGxvY2Fscy4gICovCisrCSAgICAgIHVpX291dF9zcGFj ZXMgKG91dCwgbG9jYWxfaW5kZW50KTsKKysJICAgIH0KKysKKysJICB1aV9vdXRfZmllbGRfc3Ry aW5nIChvdXQsICJuYW1lIiwgc3ltX25hbWUpOworKworKwkgIGlmICghIHVpX291dF9pc19taV9s aWtlX3AgKG91dCkpCisrCSAgICB1aV9vdXRfdGV4dCAob3V0LCAiID0gIik7CisrCX0KKysgICAg ICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCXsKKysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlv biAoZXhjZXB0KTsKKysJICBkb19jbGVhbnVwcyAobG9jYWxzX2NsZWFudXBzKTsKKysJICBnb3Rv IGVycm9yOworKwl9CisrCisrICAgICAgaWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9TSU1QTEVf VkFMVUVTKQorKwl7CisrCSAgaWYgKHB5X3ByaW50X3R5cGUgKG91dCwgdmFsKSA9PSBQWV9CVF9F UlJPUikKKysJICAgIHsKKysJICAgICAgZG9fY2xlYW51cHMgKGxvY2Fsc19jbGVhbnVwcyk7Cisr CSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9CisrCX0KKysKKysgICAgICAvKiBDTEkgYWx3YXlz IHByaW50cyB2YWx1ZXMgZm9yIGxvY2Fscy4gIE1JIHVzZXMgdGhlCisrCSBzaW1wbGUvbm8vYWxs IHN5c3RlbS4gICovCisrICAgICAgaWYgKCEgdWlfb3V0X2lzX21pX2xpa2VfcCAob3V0KSkKKysJ eworKwkgIGludCB2YWxfaW5kZW50ID0gKGluZGVudCArIDEpICogNDsKKysKKysJICBpZiAocHlf cHJpbnRfdmFsdWUgKG91dCwgdmFsLCAmb3B0cywgdmFsX2luZGVudCwgYXJnc190eXBlLAorKwkJ CSAgICAgIGxhbmd1YWdlKSA9PSAgUFlfQlRfRVJST1IpCisrCSAgICB7CisrCSAgICAgIGRvX2Ns ZWFudXBzIChsb2NhbHNfY2xlYW51cHMpOworKwkgICAgICBnb3RvIGVycm9yOworKwkgICAgfQor Kwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWYgKGFyZ3NfdHlwZSAhPSBOT19WQUxVRVMpCisr CSAgICB7CisrCSAgICAgIGlmIChweV9wcmludF92YWx1ZSAob3V0LCB2YWwsICZvcHRzLCAwLCBh cmdzX3R5cGUsCisrCQkJCSAgbGFuZ3VhZ2UpID09ICBQWV9CVF9FUlJPUikKKysJCXsKKysJCSAg ZG9fY2xlYW51cHMgKGxvY2Fsc19jbGVhbnVwcyk7CisrCQkgIGdvdG8gZXJyb3I7CisrCQl9Cisr CSAgICB9CisrCX0KKysKKysgICAgICBkb19jbGVhbnVwcyAobG9jYWxzX2NsZWFudXBzKTsKKysK KysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgdWlf b3V0X3RleHQgKG91dCwgIlxuIik7CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDAp CisrCXsKKysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBnb3RvIGVy cm9yOworKwl9CisrICAgIH0KKysKKysgIGlmIChpdGVtID09IE5VTEwgJiYgUHlFcnJfT2NjdXJy ZWQgKCkpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVy cm9yOgorKyAgcmV0dXJuIFBZX0JUX0VSUk9SOworK30KKysKKysvKiAgSGVscGVyIGZ1bmN0aW9u IGZvciAtc3RhY2stbGlzdC12YXJpYWJsZXMuICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uCisrICAg IGVycm9yLCBvciBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9i dF9zdGF0dXMKKytweV9taV9wcmludF92YXJpYWJsZXMgKFB5T2JqZWN0ICpmaWx0ZXIsIHN0cnVj dCB1aV9vdXQgKm91dCwKKysJCSAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyAqb3B0 cywKKysJCSAgICAgICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAorKwkJICAgICAgIHN0 cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkKKyt7CisrICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NoYWlu OworKyAgUHlPYmplY3QgKmFyZ3NfaXRlcjsKKysgIFB5T2JqZWN0ICpsb2NhbHNfaXRlcjsKKysK KysgIGFyZ3NfaXRlciA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVyLCAiZnJhbWVfYXJn cyIpOworKyAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVwX3B5X3hkZWNyZWYgKGFyZ3NfaXRlcik7 CisrICBpZiAoYXJnc19pdGVyID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICBsb2Nh bHNfaXRlciA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVyLCAiZnJhbWVfbG9jYWxzIik7 CisrICBpZiAobG9jYWxzX2l0ZXIgPT0gTlVMTCkKKysgICAgZ290byBlcnJvcjsKKysKKysgIG1h a2VfY2xlYW51cF9weV9kZWNyZWYgKGxvY2Fsc19pdGVyKTsKKysgIG1ha2VfY2xlYW51cF91aV9v dXRfbGlzdF9iZWdpbl9lbmQgKG91dCwgInZhcmlhYmxlcyIpOworKworKyAgaWYgKGFyZ3NfaXRl ciAhPSBQeV9Ob25lKQorKyAgICBpZiAoZW51bWVyYXRlX2FyZ3MgKGFyZ3NfaXRlciwgb3V0LCBh cmdzX3R5cGUsIDEsIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikKKysgICAgICBnb3RvIGVycm9yOwor KworKyAgaWYgKGxvY2Fsc19pdGVyICE9IFB5X05vbmUpCisrICAgIGlmIChlbnVtZXJhdGVfbG9j YWxzIChsb2NhbHNfaXRlciwgb3V0LCAxLCBhcmdzX3R5cGUsIDEsIGZyYW1lKQorKwk9PSBQWV9C VF9FUlJPUikKKysgICAgICBnb3RvIGVycm9yOworKworKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFp bik7CisrICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVycm9yOgorKyAgZG9fY2xlYW51cHMgKG9s ZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfRVJST1I7CisrfQorKworKy8qIEhlbHBlciBmdW5j dGlvbiBmb3IgcHJpbnRpbmcgbG9jYWxzLiAgVGhpcyBmdW5jdGlvbiBsYXJnZWx5IGp1c3QKKysg ICBjcmVhdGVzIHRoZSB3cmFwcGluZyB0dXBsZSwgYW5kIGNhbGxzIGVudW1lcmF0ZV9sb2NhbHMu ICBSZXR1cm5zCisrICAgUFlfQlRfRVJST1Igb24gZXJyb3IsIG9yIFBZX0JUX09LIG9uIHN1Y2Nl c3MuKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF9sb2NhbHMgKFB5 T2JqZWN0ICpmaWx0ZXIsCisrCQkgc3RydWN0IHVpX291dCAqb3V0LAorKwkJIGVudW0gcHlfZnJh bWVfYXJncyBhcmdzX3R5cGUsCisrCQkgaW50IGluZGVudCwKKysJCSBzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWUpCisreworKyAgUHlPYmplY3QgKmxvY2Fsc19pdGVyID0gZ2V0X3B5X2l0ZXJfZnJv bV9mdW5jIChmaWx0ZXIsCisrCQkJCQkJICJmcmFtZV9sb2NhbHMiKTsKKysgIHN0cnVjdCBjbGVh bnVwICpvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAobG9jYWxzX2l0ZXIpOwor KworKyAgaWYgKGxvY2Fsc19pdGVyID09IE5VTEwpCisrICAgIGdvdG8gbG9jYWxzX2Vycm9yOwor KworKyAgbWFrZV9jbGVhbnVwX3VpX291dF9saXN0X2JlZ2luX2VuZCAob3V0LCAibG9jYWxzIik7 CisrCisrICBpZiAobG9jYWxzX2l0ZXIgIT0gUHlfTm9uZSkKKysgICAgaWYgKGVudW1lcmF0ZV9s b2NhbHMgKGxvY2Fsc19pdGVyLCBvdXQsIGluZGVudCwgYXJnc190eXBlLAorKwkJCSAgMCwgZnJh bWUpID09IFBZX0JUX0VSUk9SKQorKyAgICAgIGdvdG8gbG9jYWxzX2Vycm9yOworKworKyAgZG9f Y2xlYW51cHMgKG9sZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfT0s7OworKworKyBsb2NhbHNf ZXJyb3I6CisrICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKKysgIHJldHVybiBQWV9CVF9FUlJP UjsKKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwcmludGluZyBmcmFtZSBhcmd1bWVu dHMuICBUaGlzIGZ1bmN0aW9uCisrICAgbGFyZ2VseSBqdXN0IGNyZWF0ZXMgdGhlIHdyYXBwaW5n IHR1cGxlLCBhbmQgY2FsbHMgZW51bWVyYXRlX2FyZ3MuCisrICAgUmV0dXJucyBQWV9CVF9FUlJP UiBvbiBlcnJvciwgd2l0aCBhbnkgR0RCIGV4Y2VwdGlvbnMgY29udmVydGVkIHRvCisrICAgYSBQ eXRob24gZXhjZXB0aW9uLCBvciBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMg ZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF9hcmdzIChQeU9iamVjdCAqZmlsdGVyLAorKwkg ICAgICAgc3RydWN0IHVpX291dCAqb3V0LAorKwkgICAgICAgZW51bSBweV9mcmFtZV9hcmdzIGFy Z3NfdHlwZSwKKysJICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkKKyt7CisrICBQeU9i amVjdCAqYXJnc19pdGVyICA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVyLCAiZnJhbWVf YXJncyIpOworKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbiA9IG1ha2VfY2xlYW51cF9weV94 ZGVjcmVmIChhcmdzX2l0ZXIpOworKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhj ZXB0OworKworKyAgaWYgKGFyZ3NfaXRlciA9PSBOVUxMKQorKyAgICBnb3RvIGFyZ3NfZXJyb3I7 CisrCisrICBtYWtlX2NsZWFudXBfdWlfb3V0X2xpc3RfYmVnaW5fZW5kIChvdXQsICJhcmdzIik7 CisrCisrICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKyAgICB7CisrICAg ICAgYW5ub3RhdGVfZnJhbWVfYXJncyAoKTsKKysgICAgICBpZiAoISB1aV9vdXRfaXNfbWlfbGlr ZV9wIChvdXQpKQorKwl1aV9vdXRfdGV4dCAob3V0LCAiICgiKTsKKysgICAgfQorKyAgaWYgKGV4 Y2VwdC5yZWFzb24gPCAwKQorKyAgICB7CisrICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24g KGV4Y2VwdCk7CisrICAgICAgZ290byBhcmdzX2Vycm9yOworKyAgICB9CisrCisrICBpZiAoYXJn c19pdGVyICE9IFB5X05vbmUpCisrICAgIGlmIChlbnVtZXJhdGVfYXJncyAoYXJnc19pdGVyLCBv dXQsIGFyZ3NfdHlwZSwgMCwgZnJhbWUpID09IFBZX0JUX0VSUk9SKQorKyAgICAgIGdvdG8gYXJn c19lcnJvcjsKKysKKysgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrICAg IHsKKysgICAgICBpZiAoISB1aV9vdXRfaXNfbWlfbGlrZV9wIChvdXQpKQorKwl1aV9vdXRfdGV4 dCAob3V0LCAiKSIpOworKyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsK KysgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICBnb3RvIGFy Z3NfZXJyb3I7CisrICAgIH0KKysKKysgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworKyAgcmV0 dXJuIFBZX0JUX09LOworKworKyBhcmdzX2Vycm9yOgorKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFp bik7CisrICByZXR1cm4gUFlfQlRfRVJST1I7CisrfQorKworKy8qICBQcmludCBhIHNpbmdsZSBm cmFtZSB0byB0aGUgZGVzaWduYXRlZCBvdXRwdXQgc3RyZWFtLCBkZXRlY3RpbmcKKysgICAgd2hl dGhlciB0aGUgb3V0cHV0IGlzIE1JIG9yIGNvbnNvbGUsIGFuZCBmb3JtYXR0aW5nIHRoZSBvdXRw dXQKKysgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiB0aGF0IHByb3RvY29sLiAg RklMVEVSIGlzIHRoZQorKyAgICBmcmFtZS1maWx0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnJh bWUuICBGTEFHUyBpcyBhbiBpbnRlZ2VyCisrICAgIGRlc2NyaWJpbmcgdGhlIHZhcmlvdXMgcHJp bnQgb3B0aW9ucy4gIFRoZSBGTEFHUyB2YXJpYWJsZXMgaXMKKysgICAgZGVzY3JpYmVkIGluICJh cHBseV9mcmFtZV9maWx0ZXIiIGZ1bmN0aW9uLiAgQVJHU19UWVBFIGlzIGFuCisrICAgIGVudW1l cmF0b3IgZGVzY3JpYmluZyB0aGUgYXJndW1lbnQgZm9ybWF0LiAgT1VUIGlzIHRoZSBvdXRwdXQK KysgICAgc3RyZWFtIHRvIHByaW50LCBJTkRFTlQgaXMgdGhlIGxldmVsIG9mIGluZGVudGlvbiBm b3IgdGhpcyBmcmFtZQorKyAgICAoaW4gdGhlIGNhc2Ugb2YgZWxpZGVkIGZyYW1lcyksIGFuZCBM RVZFTFNfUFJJTlRFRCBpcyBhIGhhc2gtdGFibGUKKysgICAgY29udGFpbmluZyBhbGwgdGhlIGZy YW1lcyBsZXZlbCB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByaW50ZWQuCisrICAgIElmIGEgZnJh bWUgbGV2ZWwgaGFzIGJlZW4gcHJpbnRlZCwgZG8gbm90IHByaW50IGl0IGFnYWluIChpbiB0aGUK KysgICAgY2FzZSBvZiBlbGlkZWQgZnJhbWVzKS4gIFJldHVybnMgUFlfQlRfRVJST1Igb24gZXJy b3IsIHdpdGggYW55CisrICAgIEdEQiBleGNlcHRpb25zIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBl eGNlcHRpb24sIG9yIFBZX0JUX0NPTVBMRVRFRAorKyAgICBvbiBzdWNjZXNzLiAgKi8KKysKKytz dGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF9mcmFtZSAoUHlPYmplY3QgKmZpbHRl ciwgaW50IGZsYWdzLCBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAorKwkJc3RydWN0IHVp X291dCAqb3V0LCBpbnQgaW5kZW50LCBodGFiX3QgbGV2ZWxzX3ByaW50ZWQpCisreworKyAgaW50 IGhhc19hZGRyID0gMDsKKysgIENPUkVfQUREUiBhZGRyZXNzID0gMDsKKysgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoID0gTlVMTDsKKysgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSA9IE5VTEw7 CisrICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cF9zdGFjayA9IG1ha2VfY2xlYW51cCAobnVsbF9j bGVhbnVwLCBOVUxMKTsKKysgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zIG9wdHM7CisrICBQ eU9iamVjdCAqcHlfaW5mX2ZyYW1lLCAqZWxpZGVkOworKyAgaW50IHByaW50X2xldmVsLCBwcmlu dF9mcmFtZV9pbmZvLCBwcmludF9hcmdzLCBwcmludF9sb2NhbHM7CisrICB2b2xhdGlsZSBzdHJ1 Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrCisrICAvKiBFeHRyYWN0IHByaW50IHNldHRpbmdz IGZyb20gRkxBR1MuICAqLworKyAgcHJpbnRfbGV2ZWwgPSAoZmxhZ3MgJiBQUklOVF9MRVZFTCkg PyAxIDogMDsKKysgIHByaW50X2ZyYW1lX2luZm8gPSAoZmxhZ3MgJiBQUklOVF9GUkFNRV9JTkZP KSA/IDEgOiAwOworKyAgcHJpbnRfYXJncyA9IChmbGFncyAmIFBSSU5UX0FSR1MpID8gMSA6IDA7 CisrICBwcmludF9sb2NhbHMgPSAoZmxhZ3MgJiBQUklOVF9MT0NBTFMpID8gMSA6IDA7CisrCisr ICBnZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7CisrCisrICAvKiBHZXQgdGhlIHVuZGVy bHlpbmcgZnJhbWUuICBUaGlzIGlzIG5lZWRlZCB0byBkZXRlcm1pbmUgR0RCCisrICBhcmNoaXRl Y3R1cmUsIGFuZCBhbHNvLCBpbiB0aGUgY2FzZXMgb2YgZnJhbWUgdmFyaWFibGVzL2FyZ3VtZW50 cyB0bworKyAgcmVhZCB0aGVtIGlmIHRoZXkgcmV0dXJuZWQgZmlsdGVyIG9iamVjdCByZXF1aXJl cyB1cyB0byBkbyBzby4gICovCisrICBweV9pbmZfZnJhbWUgPSBQeU9iamVjdF9DYWxsTWV0aG9k IChmaWx0ZXIsICJpbmZlcmlvcl9mcmFtZSIsIE5VTEwpOworKyAgaWYgKHB5X2luZl9mcmFtZSA9 PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKworKyAgZnJhbWUgPSBmcmFtZV9vYmplY3RfdG9f ZnJhbWVfaW5mbyAocHlfaW5mX2ZyYW1lKTs7CisrCisrICBQeV9ERUNSRUYgKHB5X2luZl9mcmFt ZSk7CisrCisrICBpZiAoZnJhbWUgPT0gTlVMTCkKKysgICAgZ290byBlcnJvcjsKKysKKysgIFRS WV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrICAgIHsKKysgICAgICBnZGJhcmNo ID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsKKysgICAgfQorKyAgaWYgKGV4Y2VwdC5yZWFzb24g PCAwKQorKyAgICB7CisrICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7Cisr ICAgICAgZ290byBlcnJvcjsKKysgICAgfQorKworKworKyAgLyogc3RhY2stbGlzdC12YXJpYWJs ZXMuICAqLworKyAgaWYgKHByaW50X2xvY2FscyAmJiBwcmludF9hcmdzICYmICEgcHJpbnRfZnJh bWVfaW5mbykKKysgICAgeworKyAgICAgIGlmIChweV9taV9wcmludF92YXJpYWJsZXMgKGZpbHRl ciwgb3V0LCAmb3B0cywKKysJCQkJIGFyZ3NfdHlwZSwgZnJhbWUpID09IFBZX0JUX0VSUk9SKQor Kwlnb3RvIGVycm9yOworKyAgICAgIGVsc2UKKysJeworKwkgIGRvX2NsZWFudXBzIChjbGVhbnVw X3N0YWNrKTsKKysJICByZXR1cm4gUFlfQlRfQ09NUExFVEVEOworKwl9CisrICAgIH0KKysKKysg IC8qIC1zdGFjay1saXN0LWxvY2FscyBkb2VzIG5vdCByZXF1aXJlIGEKKysgICAgIHdyYXBwaW5n IGZyYW1lIGF0dHJpYnV0ZS4gICovCisrICBpZiAocHJpbnRfZnJhbWVfaW5mbyB8fCAocHJpbnRf YXJncyAmJiAhIHByaW50X2xvY2FscykpCisrICAgIG1ha2VfY2xlYW51cF91aV9vdXRfdHVwbGVf YmVnaW5fZW5kIChvdXQsICJmcmFtZSIpOworKworKyAgaWYgKHByaW50X2ZyYW1lX2luZm8pCisr ICAgIHsKKysgICAgICAvKiBFbGlkZWQgZnJhbWVzIGFyZSBhbHNvIHByaW50ZWQgd2l0aCB0aGlz IGZ1bmN0aW9uIChyZWN1cnNpdmVseSkKKysJIGFuZCBhcmUgcHJpbnRlZCB3aXRoIGluZGVudGlv bi4gICovCisrICAgICAgaWYgKGluZGVudCA+IDApCisrCXsKKysJVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKKysJICB7CisrCSAgICB1aV9vdXRfc3BhY2VzIChvdXQsIGluZGVu dCo0KTsKKysJICB9CisrCWlmIChleGNlcHQucmVhc29uIDwgMCkKKysJICB7CisrCSAgICBnZGJw eV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICAgIGdvdG8gZXJyb3I7CisrCSAgfQor Kwl9CisrCisrICAgICAgLyogVGhlIGFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIGZyYW1lIGFubm90 YXRpb25zLCBhbmQgYWxzbyBmb3IKKysJIGFkZHJlc3MgcHJpbnRpbmcuICAqLworKyAgICAgIGlm IChQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChmaWx0ZXIsICJhZGRyZXNzIikpCisrCXsKKysJICBQ eU9iamVjdCAqcGFkZHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kIChmaWx0ZXIsICJhZGRyZXNzIiwg TlVMTCk7CisrCSAgaWYgKHBhZGRyICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGlmIChwYWRk ciAhPSBQeV9Ob25lKQorKwkJeworKwkJICBhZGRyZXNzID0gUHlMb25nX0FzTG9uZyAocGFkZHIp OworKwkJICBoYXNfYWRkciA9IDE7CisrCQl9CisrCSAgICAgIFB5X0RFQ1JFRiAocGFkZHIpOwor KwkgICAgfQorKwkgIGVsc2UKKysJICAgIGdvdG8gZXJyb3I7CisrCX0KKysgICAgfQorKworKyAg LyogUHJpbnQgZnJhbWUgbGV2ZWwuICBNSSBkb2VzIG5vdCByZXF1aXJlIHRoZSBsZXZlbCBpZgor KyAgICAgbG9jYWxzL3ZhcmlhYmxlcyBvbmx5IGFyZSBiZWluZyBwcmludGVkLiAgKi8KKysgIGlm ICgocHJpbnRfZnJhbWVfaW5mbyB8fCBwcmludF9hcmdzKSAmJiBwcmludF9sZXZlbCkKKysgICAg eworKyAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICoqc2xvdDsKKysgICAgICBpbnQgbGV2ZWw7Cisr ICAgICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0OworKworKyAgICAgIHNs b3QgPSAoc3RydWN0IGZyYW1lX2luZm8gKiopIGh0YWJfZmluZF9zbG90IChsZXZlbHNfcHJpbnRl ZCwKKysJCQkJCQkgICAgZnJhbWUsIElOU0VSVCk7CisrICAgICAgVFJZX0NBVENIIChleGNlcHQs IFJFVFVSTl9NQVNLX0FMTCkKKysJeworKwkgIGxldmVsID0gZnJhbWVfcmVsYXRpdmVfbGV2ZWwg KGZyYW1lKTsKKysKKysJICAvKiBDaGVjayBpZiB0aGlzIGZyYW1lIGhhcyBhbHJlYWR5IGJlZW4g cHJpbnRlZCAodGhlcmUgYXJlIGNhc2VzCisrCSAgICAgd2hlcmUgZWxpZGVkIHN5bnRoZXRpYyBk dW1teS1mcmFtZXMgaGF2ZSB0byAnYm9ycm93JyB0aGUgZnJhbWUKKysJICAgICBhcmNoaXRlY3R1 cmUgZnJvbSB0aGUgZWxpZGluZyBmcmFtZS4gIElmIHRoYXQgaXMgdGhlIGNhc2UsIGRvCisrCSAg ICAgbm90IHByaW50ICdsZXZlbCcsIGJ1dCBwcmludCBzcGFjZXMuICAqLworKwkgIGlmICgqc2xv dCA9PSBmcmFtZSkKKysJICAgIHVpX291dF9maWVsZF9za2lwIChvdXQsICJsZXZlbCIpOworKwkg IGVsc2UKKysJICAgIHsKKysJICAgICAgKnNsb3QgPSBmcmFtZTsKKysJICAgICAgYW5ub3RhdGVf ZnJhbWVfYmVnaW4gKHByaW50X2xldmVsID8gbGV2ZWwgOiAwLAorKwkJCQkgICAgZ2RiYXJjaCwg YWRkcmVzcyk7CisrCSAgICAgIHVpX291dF90ZXh0IChvdXQsICIjIik7CisrCSAgICAgIHVpX291 dF9maWVsZF9mbXRfaW50IChvdXQsIDIsIHVpX2xlZnQsICJsZXZlbCIsCisrCQkJCSAgICBsZXZl bCk7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCXsKKysJ ICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBnb3RvIGVycm9yOworKwl9 CisrICAgIH0KKysKKysgIGlmIChwcmludF9mcmFtZV9pbmZvKQorKyAgICB7CisrICAgICAgLyog UHJpbnQgYWRkcmVzcyB0byB0aGUgYWRkcmVzcyBmaWVsZC4gIElmIGFuIGFkZHJlc3MgaXMgbm90 IHByb3ZpZGVkLAorKwkgcHJpbnQgbm90aGluZy4gICovCisrICAgICAgaWYgKG9wdHMuYWRkcmVz c3ByaW50ICYmIGhhc19hZGRyKQorKwl7CisrCSAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9N QVNLX0FMTCkKKysJICAgIHsKKysJICAgICAgYW5ub3RhdGVfZnJhbWVfYWRkcmVzcyAoKTsKKysJ ICAgICAgdWlfb3V0X2ZpZWxkX2NvcmVfYWRkciAob3V0LCAiYWRkciIsIGdkYmFyY2gsIGFkZHJl c3MpOworKwkgICAgICBhbm5vdGF0ZV9mcmFtZV9hZGRyZXNzX2VuZCAoKTsKKysJICAgICAgdWlf b3V0X3RleHQgKG91dCwgIiBpbiAiKTsKKysJICAgIH0KKysJICBpZiAoZXhjZXB0LnJlYXNvbiA8 IDApCisrCSAgICB7CisrCSAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOwor KwkgICAgICBnb3RvIGVycm9yOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogUHJpbnQgZnJh bWUgZnVuY3Rpb24gbmFtZS4gICovCisrICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcg KGZpbHRlciwgImZ1bmN0aW9uIikpCisrCXsKKysJICBQeU9iamVjdCAqcHlfZnVuYyA9IFB5T2Jq ZWN0X0NhbGxNZXRob2QgKGZpbHRlciwgImZ1bmN0aW9uIiwgTlVMTCk7CisrCisrCSAgaWYgKHB5 X2Z1bmMgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24gPSBO VUxMOworKworKwkgICAgICBpZiAoZ2RicHlfaXNfc3RyaW5nIChweV9mdW5jKSkKKysJCXsKKysJ CSAgZnVuY3Rpb24gPSBQeVN0cmluZ19Bc1N0cmluZyAocHlfZnVuYyk7CisrCisrCQkgIGlmIChm dW5jdGlvbiA9PSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIFB5X0RFQ1JFRiAocHlfZnVuYyk7 CisrCQkgICAgICBnb3RvIGVycm9yOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZSBpZiAo UHlMb25nX0NoZWNrIChweV9mdW5jKSkKKysJCXsKKysJCSAgQ09SRV9BRERSIGFkZHIgPSBQeUxv bmdfQXNVbnNpZ25lZExvbmdMb25nIChweV9mdW5jKTsKKysJCSAgc3RydWN0IG1pbmltYWxfc3lt Ym9sICptc3ltYm9sOworKworKwkJICBpZiAoUHlFcnJfT2NjdXJyZWQgKCkpCisrCQkgICAgZ290 byBlcnJvcjsKKysKKysJCSAgbXN5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5bWJvbF9ieV9wYyAo YWRkcik7CisrCQkgIGlmIChtc3ltYm9sICE9IE5VTEwpCisrCQkgICAgZnVuY3Rpb24gPSBTWU1C T0xfUFJJTlRfTkFNRSAobXN5bWJvbCk7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHB5X2Z1bmMg IT0gUHlfTm9uZSkKKysJCXsKKysJCSAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19SdW50aW1lRXJy b3IsCisrCQkJCSAgIF8oIkZyYW1lRGVjb3JhdG9yLmZ1bmN0aW9uOiBleHBlY3RpbmcgYSAiIFwK KysJCQkJICAgICAiU3RyaW5nLCBpbnRlZ2VyIG9yIE5vbmUuIikpOworKwkJICBQeV9ERUNSRUYg KHB5X2Z1bmMpOworKwkJICBnb3RvIGVycm9yOworKwkJfQorKworKworKwkgICAgICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwkJeworKwkJICBhbm5vdGF0ZV9mcmFtZV9m dW5jdGlvbl9uYW1lICgpOworKwkJICBpZiAoZnVuY3Rpb24gPT0gTlVMTCkKKysJCSAgICB1aV9v dXRfZmllbGRfc2tpcCAob3V0LCAiZnVuYyIpOworKwkJICBlbHNlCisrCQkgICAgdWlfb3V0X2Zp ZWxkX3N0cmluZyAob3V0LCAiZnVuYyIsIGZ1bmN0aW9uKTsKKysJCX0KKysJICAgICAgaWYgKGV4 Y2VwdC5yZWFzb24gPCAwKQorKwkJeworKwkJICBQeV9ERUNSRUYgKHB5X2Z1bmMpOworKwkJICBn ZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJCSAgZ290byBlcnJvcjsKKysJCX0K KysJICAgIH0KKysJICBQeV9ERUNSRUYgKHB5X2Z1bmMpOworKwl9CisrICAgICAgZWxzZQorKwln b3RvIGVycm9yOworKyAgICB9CisrCisrCisrICAvKiBGcmFtZSBhcmd1bWVudHMuICBDaGVjayB0 aGUgcmVzdWx0LCBhbmQgZXJyb3IgaWYgc29tZXRoaW5nIHdlbnQKKysgICAgIHdyb25nLiAgKi8K KysgIGlmIChwcmludF9hcmdzKQorKyAgICB7CisrICAgICAgaWYgKHB5X3ByaW50X2FyZ3MgKGZp bHRlciwgb3V0LCBhcmdzX3R5cGUsIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikKKysJZ290byBlcnJv cjsKKysgICAgfQorKworKyAgLyogRmlsZSBuYW1lL3NvdXJjZS9saW5lIG51bWJlciBpbmZvcm1h dGlvbi4gICovCisrICBpZiAocHJpbnRfZnJhbWVfaW5mbykKKysgICAgeworKyAgICAgIFRSWV9D QVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrCXsKKysJICBhbm5vdGF0ZV9mcmFtZV9z b3VyY2VfYmVnaW4gKCk7CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCXsK KysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBnb3RvIGVycm9yOwor Kwl9CisrCisrICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKGZpbHRlciwgImZpbGVu YW1lIikpCisrCXsKKysJICBQeU9iamVjdCAqcHlfZm4gPSBQeU9iamVjdF9DYWxsTWV0aG9kIChm aWx0ZXIsICJmaWxlbmFtZSIsCisrCQkJCQkJIE5VTEwpOworKwkgIGlmIChweV9mbiAhPSBOVUxM KQorKwkgICAgeworKwkgICAgICBpZiAocHlfZm4gIT0gUHlfTm9uZSkKKysJCXsKKysJCSAgY2hh ciAqZmlsZW5hbWUgPSBQeVN0cmluZ19Bc1N0cmluZyAocHlfZm4pOworKworKwkJICBpZiAoZmls ZW5hbWUgPT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBQeV9ERUNSRUYgKHB5X2ZuKTsKKysJ CSAgICAgIGdvdG8gZXJyb3I7CisrCQkgICAgfQorKwkJICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVU VVJOX01BU0tfQUxMKQorKwkJICAgIHsKKysJCSAgICAgIHVpX291dF93cmFwX2hpbnQgKG91dCwg IiAgICIpOworKwkJICAgICAgdWlfb3V0X3RleHQgKG91dCwgIiBhdCAiKTsKKysJCSAgICAgIGFu bm90YXRlX2ZyYW1lX3NvdXJjZV9maWxlICgpOworKwkJICAgICAgdWlfb3V0X2ZpZWxkX3N0cmlu ZyAob3V0LCAiZmlsZSIsIGZpbGVuYW1lKTsKKysJCSAgICAgIGFubm90YXRlX2ZyYW1lX3NvdXJj ZV9maWxlX2VuZCAoKTsKKysJCSAgICB9CisrCQkgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysJ CSAgICB7CisrCQkgICAgICBQeV9ERUNSRUYgKHB5X2ZuKTsKKysJCSAgICAgIGdkYnB5X2NvbnZl cnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkJICAgICAgZ290byBlcnJvcjsKKysJCSAgICB9Cisr CQl9CisrCSAgICAgIFB5X0RFQ1JFRiAocHlfZm4pOworKwkgICAgfQorKwkgIGVsc2UKKysJICAg IGdvdG8gZXJyb3I7CisrCX0KKysKKysgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyAo ZmlsdGVyLCAibGluZSIpKQorKwl7CisrCSAgUHlPYmplY3QgKnB5X2xpbmUgPSBQeU9iamVjdF9D YWxsTWV0aG9kIChmaWx0ZXIsICJsaW5lIiwgTlVMTCk7CisrCSAgaW50IGxpbmU7CisrCisrCSAg aWYgKHB5X2xpbmUgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaWYgKHB5X2xpbmUgIT0gUHlf Tm9uZSkKKysJCXsKKysJCSAgbGluZSA9IFB5TG9uZ19Bc0xvbmcgKHB5X2xpbmUpOworKwkJICBU UllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwkJICAgIHsKKysJCSAgICAgIHVp X291dF90ZXh0IChvdXQsICI6Iik7CisrCQkgICAgICBhbm5vdGF0ZV9mcmFtZV9zb3VyY2VfbGlu ZSAoKTsKKysJCSAgICAgIHVpX291dF9maWVsZF9pbnQgKG91dCwgImxpbmUiLCBsaW5lKTsKKysJ CSAgICB9CisrCQkgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysJCSAgICB7CisrCQkgICAgICBQ eV9ERUNSRUYgKHB5X2xpbmUpOworKwkJICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4 Y2VwdCk7CisrCQkgICAgICBnb3RvIGVycm9yOworKwkJICAgIH0KKysJCX0KKysJICAgICAgUHlf REVDUkVGIChweV9saW5lKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICBnb3RvIGVycm9yOwor Kwl9CisrICAgIH0KKysKKysgIC8qIEZvciBNSSB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgImNo aWxkcmVuIiBsaXN0IHBvcHVsYXRpb24gb2YKKysgICAgIGVsaWRlZCBmcmFtZXMsIHNvIGlmIE1J IG91dHB1dCBkZXRlY3RlZCBkbyBub3Qgc2VuZCBuZXdsaW5lLiAgKi8KKysgIGlmICghIHVpX291 dF9pc19taV9saWtlX3AgKG91dCkpCisrICAgIHsKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwg UkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgYW5ub3RhdGVfZnJhbWVfZW5kICgpOworKwkgIHVp X291dF90ZXh0IChvdXQsICJcbiIpOworKwl9CisrICAgICAgaWYgKGV4Y2VwdC5yZWFzb24gPCAw KQorKwl7CisrCSAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisrCSAgZ290byBl cnJvcjsKKysJfQorKyAgICB9CisrCisrICBpZiAocHJpbnRfbG9jYWxzKQorKyAgICB7CisrICAg ICAgaWYgKHB5X3ByaW50X2xvY2FscyAoZmlsdGVyLCBvdXQsIGFyZ3NfdHlwZSwgaW5kZW50LAor KwkJCSAgIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikKKysJZ290byBlcnJvcjsKKysgICAgfQorKwor KyAgLyogRmluYWxseSByZWN1cnNpdmVseSBwcmludCBlbGlkZWQgZnJhbWVzLCBpZiBhbnkuICAq LworKyAgZWxpZGVkICA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVyLCAiZWxpZGVkIik7 CisrICBpZiAoZWxpZGVkID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICBtYWtlX2Ns ZWFudXBfcHlfZGVjcmVmIChlbGlkZWQpOworKyAgaWYgKGVsaWRlZCAhPSBQeV9Ob25lKQorKyAg ICB7CisrICAgICAgUHlPYmplY3QgKml0ZW07CisrCisrICAgICAgbWFrZV9jbGVhbnVwX3VpX291 dF9saXN0X2JlZ2luX2VuZCAob3V0LCAiY2hpbGRyZW4iKTsKKysKKysgICAgICBpZiAoISB1aV9v dXRfaXNfbWlfbGlrZV9wIChvdXQpKQorKwlpbmRlbnQrKzsKKysKKysgICAgICB3aGlsZSAoKGl0 ZW0gPSBQeUl0ZXJfTmV4dCAoZWxpZGVkKSkpCisrCXsKKysJICBlbnVtIHB5X2J0X3N0YXR1cyBz dWNjZXNzID0gcHlfcHJpbnRfZnJhbWUgKGl0ZW0sIGZsYWdzLAorKwkJCQkJCSAgICAgIGFyZ3Nf dHlwZSwgb3V0LAorKwkJCQkJCSAgICAgIGluZGVudCwKKysJCQkJCQkgICAgICBsZXZlbHNfcHJp bnRlZCk7CisrCisrCSAgaWYgKHN1Y2Nlc3MgPT0gUFlfQlRfRVJST1IpCisrCSAgICB7CisrCSAg ICAgIFB5X0RFQ1JFRiAoaXRlbSk7CisrCSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9CisrCisr CSAgUHlfREVDUkVGIChpdGVtKTsKKysJfQorKyAgICAgIGlmIChpdGVtID09IE5VTEwgJiYgUHlF cnJfT2NjdXJyZWQgKCkpCisrCWdvdG8gZXJyb3I7CisrICAgIH0KKysKKysKKysgIGRvX2NsZWFu dXBzIChjbGVhbnVwX3N0YWNrKTsKKysgIHJldHVybiBQWV9CVF9DT01QTEVURUQ7CisrCisrIGVy cm9yOgorKyAgZG9fY2xlYW51cHMgKGNsZWFudXBfc3RhY2spOworKyAgcmV0dXJuIFBZX0JUX0VS Uk9SOworK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhdGUgZnJhbWUgZmlsdGVy IGludm9jYXRpb24gYXQgc3RhcnRpbmcKKysgICBmcmFtZSBGUkFNRS4gICovCisrCisrc3RhdGlj IFB5T2JqZWN0ICoKKytib290c3RyYXBfcHl0aG9uX2ZyYW1lX2ZpbHRlcnMgKHN0cnVjdCBmcmFt ZV9pbmZvICpmcmFtZSwKKysJCQkJaW50IGZyYW1lX2xvdywgaW50IGZyYW1lX2hpZ2gpCisrewor KyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzID0KKysgICAgbWFrZV9jbGVhbnVwIChudWxsX2Ns ZWFudXAsIE5VTEwpOworKyAgUHlPYmplY3QgKm1vZHVsZSwgKnNvcnRfZnVuYywgKml0ZXJhYmxl LCAqZnJhbWVfb2JqLCAqaXRlcmF0b3I7CisrICBQeU9iamVjdCAqcHlfZnJhbWVfbG93LCAqcHlf ZnJhbWVfaGlnaDsKKysKKysgIGZyYW1lX29iaiA9IGZyYW1lX2luZm9fdG9fZnJhbWVfb2JqZWN0 IChmcmFtZSk7CisrICBpZiAoZnJhbWVfb2JqID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7Cisr ICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChmcmFtZV9vYmopOworKworKyAgbW9kdWxlID0gUHlJ bXBvcnRfSW1wb3J0TW9kdWxlICgiZ2RiLmZyYW1lcyIpOworKyAgaWYgKG1vZHVsZSA9PSBOVUxM KQorKyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAobW9kdWxlKTsK KysKKysgIHNvcnRfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcgKG1vZHVsZSwgImV4ZWN1 dGVfZnJhbWVfZmlsdGVycyIpOworKyAgaWYgKHNvcnRfZnVuYyA9PSBOVUxMKQorKyAgICBnb3Rv IGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoc29ydF9mdW5jKTsKKysKKysgIHB5 X2ZyYW1lX2xvdyA9IFB5SW50X0Zyb21Mb25nIChmcmFtZV9sb3cpOworKyAgaWYgKHB5X2ZyYW1l X2xvdyA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3Jl ZiAocHlfZnJhbWVfbG93KTsKKysKKysgIHB5X2ZyYW1lX2hpZ2ggPSBQeUludF9Gcm9tTG9uZyAo ZnJhbWVfaGlnaCk7CisrICBpZiAocHlfZnJhbWVfaGlnaCA9PSBOVUxMKQorKyAgICBnb3RvIGVy cm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlfZnJhbWVfaGlnaCk7CisrCisrICBp dGVyYWJsZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MgKHNvcnRfZnVuYywgZnJhbWVf b2JqLAorKwkJCQkJICAgcHlfZnJhbWVfbG93LAorKwkJCQkJICAgcHlfZnJhbWVfaGlnaCwKKysJ CQkJCSAgIE5VTEwpOworKyAgaWYgKGl0ZXJhYmxlID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7 CisrCisrICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworKworKyAgaWYgKGl0ZXJhYmxlICE9IFB5 X05vbmUpCisrICAgIHsKKysgICAgICBpdGVyYXRvciA9IFB5T2JqZWN0X0dldEl0ZXIgKGl0ZXJh YmxlKTsKKysgICAgICBQeV9ERUNSRUYgKGl0ZXJhYmxlKTsKKysgICAgfQorKyAgZWxzZQorKyAg ICB7CisrICAgICAgcmV0dXJuIGl0ZXJhYmxlOworKyAgICB9CisrCisrICByZXR1cm4gaXRlcmF0 b3I7CisrCisrIGVycm9yOgorKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKysgIHJldHVybiBO VUxMOworK30KKysKKysvKiAgVGhpcyBpcyB0aGUgb25seSBwdWJsaWNseSBleHBvcnRlZCBmdW5j dGlvbiBpbiB0aGlzIGZpbGUuICBGUkFNRQorKyAgICBpcyB0aGUgc291cmNlIGZyYW1lIHRvIHN0 YXJ0IGZyYW1lLWZpbHRlciBpbnZvY2F0aW9uLiAgRkxBR1MgaXMgYW4KKysgICAgaW50ZWdlciBo b2xkaW5nIHRoZSBmbGFncyBmb3IgcHJpbnRpbmcuICBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIG9m CisrICAgIHRoZSBGUkFNRV9GSUxURVJfRkxBR1MgZW51bSBkZW5vdGVzIHRoZSBtYWtlLXVwIG9m IEZMQUdTOgorKyAgICBQUklOVF9MRVZFTCBpcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRv IHByaW50IHRoZSBmcmFtZSdzCisrICAgIHJlbGF0aXZlIGxldmVsIGluIHRoZSBvdXRwdXQuICBQ UklOVF9GUkFNRV9JTkZPIGlzIGEgZmxhZyB0aGF0CisrICAgIGluZGljYXRlcyB3aGV0aGVyIHRo aXMgZnVuY3Rpb24gc2hvdWxkIHByaW50IHRoZSBmcmFtZQorKyAgICBpbmZvcm1hdGlvbiwgUFJJ TlRfQVJHUyBpcyBhIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBwcmludAorKyAgICBm cmFtZSBhcmd1bWVudHMsIGFuZCBQUklOVF9MT0NBTFMsIGxpa2V3aXNlLCB3aXRoIGZyYW1lIGxv Y2FsCisrICAgIHZhcmlhYmxlcy4gIEFSR1NfVFlQRSBpcyBhbiBlbnVtZXJhdG9yIGRlc2NyaWJp bmcgdGhlIGFyZ3VtZW50CisrICAgIGZvcm1hdCwgT1VUIGlzIHRoZSBvdXRwdXQgc3RyZWFtIHRv IHByaW50LiAgRlJBTUVfTE9XIGlzIHRoZQorKyAgICBiZWdpbm5pbmcgb2YgdGhlIHNsaWNlIG9m IGZyYW1lcyB0byBwcmludCwgYW5kIEZSQU1FX0hJR0ggaXMgdGhlCisrICAgIHVwcGVyIGxpbWl0 IG9mIHRoZSBmcmFtZXMgdG8gY291bnQuICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uIGVycm9yLAor KyAgICBvciBQWV9CVF9DT01QTEVURUQgb24gc3VjY2Vzcy4qLworKworK2VudW0gcHlfYnRfc3Rh dHVzCisrYXBwbHlfZnJhbWVfZmlsdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCBm bGFncywKKysJCSAgICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAorKwkJICAgIHN0cnVj dCB1aV9vdXQgKm91dCwgaW50IGZyYW1lX2xvdywKKysJCSAgICBpbnQgZnJhbWVfaGlnaCkKKysK Kyt7CisrICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IE5VTEw7CisrICBzdHJ1Y3QgY2xlYW51 cCAqY2xlYW51cHM7CisrICBlbnVtIHB5X2J0X3N0YXR1cyBzdWNjZXNzID0gUFlfQlRfRVJST1I7 CisrICBQeU9iamVjdCAqaXRlcmFibGU7CisrICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlv biBleGNlcHQ7CisrICBQeU9iamVjdCAqaXRlbTsKKysgIGh0YWJfdCBsZXZlbHNfcHJpbnRlZDsK KysKKysgIGNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFyY2gsIGN1cnJlbnRfbGFu Z3VhZ2UpOworKworKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysgICAg eworKyAgICAgIGdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAoZnJhbWUpOworKyAgICB9CisrICBp ZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsKKysgICAgICBnZGJweV9jb252ZXJ0X2V4Y2Vw dGlvbiAoZXhjZXB0KTsKKysgICAgICBnb3RvIGVycm9yOworKyAgICB9CisrCisrICBpdGVyYWJs ZSA9IGJvb3RzdHJhcF9weXRob25fZnJhbWVfZmlsdGVycyAoZnJhbWUsIGZyYW1lX2xvdywgZnJh bWVfaGlnaCk7CisrCisrICBpZiAoaXRlcmFibGUgPT0gTlVMTCkKKysgICAgZ290byBlcnJvcjsK KysKKysgIC8qIElmIGl0ZXJhYmxlIGlzIE5vbmUsIHRoZW4gdGhlcmUgYXJlIG5vIGZyYW1lIGZp bHRlcnMgcmVnaXN0ZXJlZC4KKysgICAgIElmIHRoaXMgaXMgdGhlIGNhc2UsIGRlZmVyIHRvIGRl ZmF1bHQgR0RCIHByaW50aW5nIHJvdXRpbmVzIGluIE1JCisrICAgICBhbmQgQ0xJLiAgKi8KKysg IG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKGl0ZXJhYmxlKTsKKysgIGlmIChpdGVyYWJsZSA9PSBQ eV9Ob25lKQorKyAgICB7CisrICAgICAgc3VjY2VzcyA9IFBZX0JUX05PX0ZJTFRFUlM7CisrICAg ICAgZ290byBkb25lOworKyAgICB9CisrCisrICBsZXZlbHNfcHJpbnRlZCA9IGh0YWJfY3JlYXRl ICgyMCwKKysJCQkJaHRhYl9oYXNoX3BvaW50ZXIsCisrCQkJCWh0YWJfZXFfcG9pbnRlciwKKysJ CQkJTlVMTCk7CisrICBtYWtlX2NsZWFudXBfaHRhYl9kZWxldGUgKGxldmVsc19wcmludGVkKTsK KysKKysgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0IChpdGVyYWJsZSkpKQorKyAgICB7Cisr ICAgICAgc3VjY2VzcyA9IHB5X3ByaW50X2ZyYW1lIChpdGVtLCBmbGFncywgYXJnc190eXBlLCBv dXQsIDAsCisrCQkJCWxldmVsc19wcmludGVkKTsKKysKKysgICAgICAvKiBEbyBub3QgZXhpdCBv biBlcnJvciBwcmludGluZyBhIHNpbmdsZSBmcmFtZS4gIFByaW50IHRoZQorKwkgZXJyb3IgYW5k IGNvbnRpbnVlIHdpdGggb3RoZXIgZnJhbWVzLiAgKi8KKysgICAgICBpZiAoc3VjY2VzcyA9PSBQ WV9CVF9FUlJPUikKKysJZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisrCisrICAgICAgUHlfREVDUkVG IChpdGVtKTsKKysgICAgfQorKworKyAgaWYgKGl0ZW0gPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJl ZCAoKSkKKysgICAgZ290byBlcnJvcjsKKysKKysgZG9uZToKKysgIGRvX2NsZWFudXBzIChjbGVh bnVwcyk7CisrICByZXR1cm4gc3VjY2VzczsKKysKKysgZXJyb3I6CisrICBnZGJweV9wcmludF9z dGFjayAoKTsKKysgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisrICByZXR1cm4gUFlfQlRfRVJS T1I7CisrfQorSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMKKz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMJMjAxMy0wNS0yMCAy MjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9weXRob24vcHktb2JqZmls ZS5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMTEyMTY1NzY3ICswMjAwCitAQCAtMzMsNiArMzMsOCBA QCB0eXBlZGVmIHN0cnVjdAorICAgLyogVGhlIHByZXR0eS1wcmludGVyIGxpc3Qgb2YgZnVuY3Rp b25zLiAgKi8KKyAgIFB5T2JqZWN0ICpwcmludGVyczsKKyAKKysgIC8qIFRoZSBmcmFtZSBmaWx0 ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLworKyAgUHlPYmplY3QgKmZyYW1lX2ZpbHRlcnM7Cisg ICAvKiBUaGUgdHlwZS1wcmludGVyIGxpc3QuICAqLworICAgUHlPYmplY3QgKnR5cGVfcHJpbnRl cnM7CisgfSBvYmpmaWxlX29iamVjdDsKK0BAIC02MSw2ICs2Myw3IEBAIG9iamZweV9kZWFsbG9j IChQeU9iamVjdCAqbykKKyAgIG9iamZpbGVfb2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0 ICopIG87CisgCisgICBQeV9YREVDUkVGIChzZWxmLT5wcmludGVycyk7CisrICBQeV9YREVDUkVG IChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAgIFB5X1hERUNSRUYgKHNlbGYtPnR5cGVfcHJpbnRl cnMpOworICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOworIH0KK0BAIC04MSw2ICs4 NCwxMyBAQCBvYmpmcHlfbmV3IChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0CisgCSAgcmV0 dXJuIE5VTEw7CisgCX0KKyAKKysgICAgICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gUHlEaWN0X05l dyAoKTsKKysgICAgICBpZiAoIXNlbGYtPmZyYW1lX2ZpbHRlcnMpCisrCXsKKysJICBQeV9ERUNS RUYgKHNlbGYpOworKwkgIHJldHVybiBOVUxMOworKwl9CisrCisgICAgICAgc2VsZi0+dHlwZV9w cmludGVycyA9IFB5TGlzdF9OZXcgKDApOworICAgICAgIGlmICghc2VsZi0+dHlwZV9wcmludGVy cykKKyAJeworQEAgLTEyOSw2ICsxMzksNDcgQEAgb2JqZnB5X3NldF9wcmludGVycyAoUHlPYmpl Y3QgKm8sIFB5T2JqZQorICAgcmV0dXJuIDA7CisgfQorIAorKy8qIFJldHVybiB0aGUgUHl0aG9u IGRpY3Rpb25hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgZnJhbWUgZmlsdGVycyBmb3IKKysgICB0 aGlzIG9iamVjdCBmaWxlLiAgKi8KKytQeU9iamVjdCAqCisrb2JqZnB5X2dldF9mcmFtZV9maWx0 ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQorK3sKKysgIG9iamZpbGVfb2JqZWN0ICpz ZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisrCisrICBQeV9JTkNSRUYgKHNlbGYtPmZyYW1l X2ZpbHRlcnMpOworKyAgcmV0dXJuIHNlbGYtPmZyYW1lX2ZpbHRlcnM7CisrfQorKworKy8qIFNl dCB0aGlzIG9iamVjdCBmaWxlJ3MgZnJhbWUgZmlsdGVycyBkaWN0aW9uYXJ5IHRvIEZJTFRFUlMu ICAqLworK3N0YXRpYyBpbnQKKytvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMgKFB5T2JqZWN0ICpv LCBQeU9iamVjdCAqZmlsdGVycywgdm9pZCAqaWdub3JlKQorK3sKKysgIFB5T2JqZWN0ICp0bXA7 CisrICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxlX29iamVjdCAqKSBvOworKworKyAg aWYgKCEgZmlsdGVycykKKysgICAgeworKyAgICAgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfVHlw ZUVycm9yLAorKwkJICAgICAgIF8oIkNhbm5vdCBkZWxldGUgdGhlIGZyYW1lIGZpbHRlcnMgYXR0 cmlidXRlLiIpKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgIGlmICghIFB5RGlj dF9DaGVjayAoZmlsdGVycykpCisrICAgIHsKKysgICAgICBQeUVycl9TZXRTdHJpbmcgKFB5RXhj X1R5cGVFcnJvciwKKysJCSAgICAgICBfKCJUaGUgZnJhbWVfZmlsdGVycyBhdHRyaWJ1dGUgbXVz dCBiZSBhIGRpY3Rpb25hcnkuIikpOworKyAgICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAg LyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQgUkhTIGFyZSByZWxhdGVkIHNvbWVob3cu ICAqLworKyAgdG1wID0gc2VsZi0+ZnJhbWVfZmlsdGVyczsKKysgIFB5X0lOQ1JFRiAoZmlsdGVy cyk7CisrICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gZmlsdGVyczsKKysgIFB5X1hERUNSRUYgKHRt cCk7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisgLyogR2V0IHRoZSAndHlwZV9wcmludGVycycg YXR0cmlidXRlLiAgKi8KKyAKKyBzdGF0aWMgUHlPYmplY3QgKgorQEAgLTIyNSw2ICsyNzYsMTMg QEAgb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbAorIAkgICAgICByZXR1 cm4gTlVMTDsKKyAJICAgIH0KKyAKKysJICBvYmplY3QtPmZyYW1lX2ZpbHRlcnMgPSBQeURpY3Rf TmV3ICgpOworKwkgIGlmICghb2JqZWN0LT5mcmFtZV9maWx0ZXJzKQorKwkgICAgeworKwkgICAg ICBQeV9ERUNSRUYgKG9iamVjdCk7CisrCSAgICAgIHJldHVybiBOVUxMOworKwkgICAgfQorKwor IAkgIG9iamVjdC0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOworIAkgIGlmICghb2Jq ZWN0LT50eXBlX3ByaW50ZXJzKQorIAkgICAgeworQEAgLTI3MCw2ICszMjgsOCBAQCBzdGF0aWMg UHlHZXRTZXREZWYgb2JqZmlsZV9nZXRzZXRbXSA9CisgICAgICJUaGUgb2JqZmlsZSdzIGZpbGVu YW1lLCBvciBOb25lLiIsIE5VTEwgfSwKKyAgIHsgInByZXR0eV9wcmludGVycyIsIG9iamZweV9n ZXRfcHJpbnRlcnMsIG9iamZweV9zZXRfcHJpbnRlcnMsCisgICAgICJQcmV0dHkgcHJpbnRlcnMu IiwgTlVMTCB9LAorKyAgeyAiZnJhbWVfZmlsdGVycyIsIG9iamZweV9nZXRfZnJhbWVfZmlsdGVy cywKKysgICAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzLCAiRnJhbWUgRmlsdGVycy4iLCBOVUxM IH0sCisgICB7ICJ0eXBlX3ByaW50ZXJzIiwgb2JqZnB5X2dldF90eXBlX3ByaW50ZXJzLCBvYmpm cHlfc2V0X3R5cGVfcHJpbnRlcnMsCisgICAgICJUeXBlIHByaW50ZXJzLiIsIE5VTEwgfSwKKyAg IHsgTlVMTCB9CitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5LXByb2dzcGFjZS5jCis9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMJMjAxMy0w NS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9weXRob24vcHkt cHJvZ3NwYWNlLmMJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTIxNjU3NjcgKzAyMDAKK0BAIC0zNSw2 ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0CisgICAvKiBUaGUgcHJldHR5LXByaW50ZXIgbGlzdCBv ZiBmdW5jdGlvbnMuICAqLworICAgUHlPYmplY3QgKnByaW50ZXJzOworIAorKyAgLyogVGhlIGZy YW1lIGZpbHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCisrICBQeU9iamVjdCAqZnJhbWVfZmls dGVyczsKKyAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCisgICBQeU9iamVjdCAqdHlw ZV9wcmludGVyczsKKyB9IHBzcGFjZV9vYmplY3Q7CitAQCAtNjksNiArNzEsNyBAQCBwc3B5X2Rl YWxsb2MgKFB5T2JqZWN0ICpzZWxmKQorICAgcHNwYWNlX29iamVjdCAqcHNfc2VsZiA9IChwc3Bh Y2Vfb2JqZWN0ICopIHNlbGY7CisgCisgICBQeV9YREVDUkVGIChwc19zZWxmLT5wcmludGVycyk7 CisrICBQeV9YREVDUkVGIChwc19zZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAgIFB5X1hERUNSRUYg KHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOworICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNl bGYpOworIH0KK0BAIC04OSw2ICs5MiwxMyBAQCBwc3B5X25ldyAoUHlUeXBlT2JqZWN0ICp0eXBl LCBQeU9iamVjdCAqCisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKyAKKysgICAgICBzZWxmLT5mcmFt ZV9maWx0ZXJzID0gUHlEaWN0X05ldyAoKTsKKysgICAgICBpZiAoIXNlbGYtPmZyYW1lX2ZpbHRl cnMpCisrCXsKKysJICBQeV9ERUNSRUYgKHNlbGYpOworKwkgIHJldHVybiBOVUxMOworKwl9Cisr CisgICAgICAgc2VsZi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOworICAgICAgIGlm ICghc2VsZi0+dHlwZV9wcmludGVycykKKyAJeworQEAgLTEzNyw2ICsxNDcsNDcgQEAgcHNweV9z ZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdAorICAgcmV0dXJuIDA7CisgfQorIAor Ky8qIFJldHVybiB0aGUgUHl0aG9uIGRpY3Rpb25hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgZnJh bWUgZmlsdGVycyBmb3IKKysgICB0aGlzIHByb2dyYW0gc3BhY2UuICAqLworK1B5T2JqZWN0ICoK Kytwc3B5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQorK3sK KysgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBvOworKworKyAgUHlf SU5DUkVGIChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKKysgIHJldHVybiBzZWxmLT5mcmFtZV9maWx0 ZXJzOworK30KKysKKysvKiBTZXQgdGhpcyBvYmplY3QgZmlsZSdzIGZyYW1lIGZpbHRlcnMgZGlj dGlvbmFyeSB0byBGSUxURVJTLiAgKi8KKytzdGF0aWMgaW50CisrcHNweV9zZXRfZnJhbWVfZmls dGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdub3JlKQorK3sKKysg IFB5T2JqZWN0ICp0bXA7CisrICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3Qg KikgbzsKKysKKysgIGlmICghIGZyYW1lKQorKyAgICB7CisrICAgICAgUHlFcnJfU2V0U3RyaW5n IChQeUV4Y19UeXBlRXJyb3IsCisrCQkgICAgICAgImNhbm5vdCBkZWxldGUgdGhlIGZyYW1lIGZp bHRlciBhdHRyaWJ1dGUiKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysgIGlmICgh IFB5RGljdF9DaGVjayAoZnJhbWUpKQorKyAgICB7CisrICAgICAgUHlFcnJfU2V0U3RyaW5nIChQ eUV4Y19UeXBlRXJyb3IsCisrCQkgICAgICAgInRoZSBmcmFtZSBmaWx0ZXIgYXR0cmlidXRlIG11 c3QgYmUgYSBkaWN0aW9uYXJ5Iik7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAv KiBUYWtlIGNhcmUgaW4gY2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJlbGF0ZWQgc29tZWhvdy4g ICovCisrICB0bXAgPSBzZWxmLT5mcmFtZV9maWx0ZXJzOworKyAgUHlfSU5DUkVGIChmcmFtZSk7 CisrICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gZnJhbWU7CisrICBQeV9YREVDUkVGICh0bXApOwor KworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIEdldCB0aGUgJ3R5cGVfcHJpbnRlcnMnIGF0dHJp YnV0ZS4gICovCisgCisgc3RhdGljIFB5T2JqZWN0ICoKK0BAIC0yMjEsNiArMjcyLDEzIEBAIHBz cGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV8KKyAJICAgICAgcmV0dXJuIE5V TEw7CisgCSAgICB9CisgCisrCSAgb2JqZWN0LT5mcmFtZV9maWx0ZXJzID0gUHlEaWN0X05ldyAo KTsKKysJICBpZiAoIW9iamVjdC0+ZnJhbWVfZmlsdGVycykKKysJICAgIHsKKysJICAgICAgUHlf REVDUkVGIChvYmplY3QpOworKwkgICAgICByZXR1cm4gTlVMTDsKKysJICAgIH0KKysKKyAJICBv YmplY3QtPnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKyAJICBpZiAoIW9iamVjdC0+ dHlwZV9wcmludGVycykKKyAJICAgIHsKK0BAIC0yNTcsNiArMzE1LDggQEAgc3RhdGljIFB5R2V0 U2V0RGVmIHBzcGFjZV9nZXRzZXRbXSA9CisgICAgICJUaGUgcHJvZ3NwYWNlJ3MgbWFpbiBmaWxl bmFtZSwgb3IgTm9uZS4iLCBOVUxMIH0sCisgICB7ICJwcmV0dHlfcHJpbnRlcnMiLCBwc3B5X2dl dF9wcmludGVycywgcHNweV9zZXRfcHJpbnRlcnMsCisgICAgICJQcmV0dHkgcHJpbnRlcnMuIiwg TlVMTCB9LAorKyAgeyAiZnJhbWVfZmlsdGVycyIsIHBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMsIHBz cHlfc2V0X2ZyYW1lX2ZpbHRlcnMsCisrICAgICJGcmFtZSBmaWx0ZXJzLiIsIE5VTEwgfSwKKyAg IHsgInR5cGVfcHJpbnRlcnMiLCBwc3B5X2dldF90eXBlX3ByaW50ZXJzLCBwc3B5X3NldF90eXBl X3ByaW50ZXJzLAorICAgICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0sCisgICB7IE5VTEwgfQor SW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9weS11dGlscy5jCis9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2Ri LTcuNi5vcmlnL2dkYi9weXRob24vcHktdXRpbHMuYwkyMDEzLTA1LTIwIDIyOjIzOjM2Ljc0ODIx NTE0NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9weS11dGlscy5jCTIwMTMtMDUtMjAg MjI6MjU6NTIuMTEzMTY1NzY2ICswMjAwCitAQCAtNDgsNiArNDgsMjggQEAgbWFrZV9jbGVhbnVw X3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KQorICAgcmV0dXJuIG1ha2VfY2xlYW51cCAocHlfZGVj cmVmLCAodm9pZCAqKSBweSk7CisgfQorIAorKy8qIFRoaXMgaXMgYSBjbGVhbnVwIGZ1bmN0aW9u IHdoaWNoIGRlY3JlbWVudHMgdGhlIHJlZmNvdW50IG9uIGEKKysgICBQeXRob24gb2JqZWN0LiAg VGhpcyBmdW5jdGlvbiBhY2NvdW50cyBhcHByb3ByaWF0ZWx5IGZvciBOVUxMCisrICAgcmVmZXJl bmNlcy4gICovCisrCisrc3RhdGljIHZvaWQKKytweV94ZGVjcmVmICh2b2lkICpwKQorK3sKKysg IFB5T2JqZWN0ICpweSA9IHA7CisrCisrICBQeV9YREVDUkVGIChweSk7CisrfQorKworKy8qIFJl dHVybiBhIG5ldyBjbGVhbnVwIHdoaWNoIHdpbGwgZGVjcmVtZW50IHRoZSBQeXRob24gb2JqZWN0 J3MKKysgICByZWZjb3VudCB3aGVuIHJ1bi4gIEFjY291bnQgZm9yIGFuZCBvcGVyYXRlIG9uIE5V TEwgcmVmZXJlbmNlcworKyAgIGNvcnJlY3RseS4gICovCisrCisrc3RydWN0IGNsZWFudXAgKgor K21ha2VfY2xlYW51cF9weV94ZGVjcmVmIChQeU9iamVjdCAqcHkpCisreworKyAgcmV0dXJuIG1h a2VfY2xlYW51cCAocHlfeGRlY3JlZiwgcHkpOworK30KKysKKyAvKiBDb252ZXJ0cyBhIFB5dGhv biA4LWJpdCBzdHJpbmcgdG8gYSB1bmljb2RlIHN0cmluZyBvYmplY3QuICBBc3N1bWVzIHRoZQor ICAgIDgtYml0IHN0cmluZyBpcyBpbiB0aGUgaG9zdCBjaGFyc2V0LiAgSWYgYW4gZXJyb3Igb2Nj dXJzIGR1cmluZyBjb252ZXJzaW9uLAorICAgIHJldHVybnMgTlVMTCB3aXRoIGEgcHl0aG9uIGV4 Y2VwdGlvbiBzZXQuCitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5dGhvbi1pbnRlcm5hbC5o Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHl0aG9uLWludGVybmFs LmgJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9w eXRob24vcHl0aG9uLWludGVybmFsLmgJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTMxNjU3NjYgKzAy MDAKK0BAIC0yNTEsOSArMjUxLDExIEBAIFB5T2JqZWN0ICpmcmFtZV9pbmZvX3RvX2ZyYW1lX29i amVjdCAoc3QKKyAKKyBQeU9iamVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmplY3QgKHN0cnVjdCBw cm9ncmFtX3NwYWNlICopOworIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVycyAoUHlPYmplY3Qg Kiwgdm9pZCAqKTsKKytQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3Qg Kiwgdm9pZCAqKTsKKyAKKyBQeU9iamVjdCAqb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3Ry dWN0IG9iamZpbGUgKik7CisgUHlPYmplY3QgKm9iamZweV9nZXRfcHJpbnRlcnMgKFB5T2JqZWN0 ICosIHZvaWQgKik7CisrUHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfZmlsdGVycyAoUHlPYmpl Y3QgKiwgdm9pZCAqKTsKKyAKKyBQeU9iamVjdCAqZ2RiYXJjaF90b19hcmNoX29iamVjdCAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gpOworIAorQEAgLTMwNCw2ICszMDYsNyBAQCB2b2lkIGdkYnB5 X2luaXRpYWxpemVfbmV3X29iamZpbGVfZXZlbnQKKyB2b2lkIGdkYnB5X2luaXRpYWxpemVfYXJj aCAodm9pZCk7CisgCisgc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9weV9kZWNyZWYgKFB5 T2JqZWN0ICpweSk7Cisrc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9weV94ZGVjcmVmIChQ eU9iamVjdCAqcHkpOworIAorIHN0cnVjdCBjbGVhbnVwICplbnN1cmVfcHl0aG9uX2VudiAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgCQkJCSAgIGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZu ICpsYW5ndWFnZSk7CitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5dGhvbi5jCis9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHl0aG9uLmMJMjAxMy0wNS0yMCAyMjoy MzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9weXRob24vcHl0aG9uLmMJMjAx My0wNS0yMCAyMjoyNTo1Mi4xMTMxNjU3NjYgKzAyMDAKK0BAIC0xNDQyLDYgKzE0NDIsMTUgQEAg ZnJlZV90eXBlX3ByaW50ZXJzICh2b2lkICphcmcpCisgeworIH0KKyAKKytlbnVtIHB5X2J0X3N0 YXR1cworK2FwcGx5X2ZyYW1lX2ZpbHRlciAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQg ZmxhZ3MsCisrCQkgICAgZW51bSBweV9mcmFtZV9hcmdzIGFyZ3NfdHlwZSwKKysJCSAgICBzdHJ1 Y3QgdWlfb3V0ICpvdXQsIGludCBmcmFtZV9sb3csCisrCQkgICAgaW50IGZyYW1lX2hpZ2gpCisr eworKyAgcmV0dXJuIFBZX0JUX05PX0ZJTFRFUlM7CisrfQorKworICNlbmRpZiAvKiBIQVZFX1BZ VEhPTiAqLworIAorIAwKK0luZGV4OiBnZGItNy42L2dkYi9weXRob24vcHl0aG9uLmgKKz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL3B5dGhvbi9weXRob24uaAkyMDEzLTA1LTIwIDIy OjIzOjM2Ljc0ODIxNTE0NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9weXRob24uaAky MDEzLTA1LTIwIDIyOjI1OjUyLjExMzE2NTc2NiArMDIwMAorQEAgLTIxLDYgKzIxLDcgQEAKKyAj ZGVmaW5lIEdEQl9QWVRIT05fSAorIAorICNpbmNsdWRlICJ2YWx1ZS5oIgorKyNpbmNsdWRlICJt aS9taS1jbWRzLmgiCisgCisgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0OworIAorQEAgLTI4LDYg KzI5LDY2IEBAIHN0cnVjdCBicmVha3BvaW50X29iamVjdDsKKyAgICBFLmcuIFdoZW4gdGhlIHBy b2dyYW0gbG9hZHMgbGliZm9vLnNvLCBsb29rIGZvciBsaWJmb28tZ2RiLnB5LiAgKi8KKyAjZGVm aW5lIEdEQlBZX0FVVE9fRklMRV9OQU1FICItZ2RiLnB5IgorIAorKy8qIFB5dGhvbiBmcmFtZS1m aWx0ZXIgc3RhdHVzIHJldHVybiB2YWx1ZXMuICAqLworK2VudW0gcHlfYnRfc3RhdHVzCisrICB7 CisrICAgIC8qIFJldHVybiB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBpbiBwcm9jZXNzaW5n IGZyYW1lIGZpbHRlcnMsCisrICAgICAgIG9yIHdoZW4gcHJpbnRpbmcgdGhlIHN0YWNrLiAgKi8K KysgICAgUFlfQlRfRVJST1IgPSAtMSwKKysKKysgICAgLyogUmV0dXJuIGZyb20gaW50ZXJuYWwg cm91dGluZXMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24KKysgICAgICAgc3VjY2VlZGVk LiAgKi8KKysgICAgUFlfQlRfT0sgPSAxLAorKworKyAgICAvKiBSZXR1cm4gd2hlbiB0aGUgZnJh bWUgZmlsdGVyIHByb2Nlc3MgaXMgY29tcGxldGUsIGFuZCBhbGwKKysgICAgICAgb3BlcmF0aW9u cyBoYXZlIHN1Y2NlZWRlZC4gICovCisrICAgIFBZX0JUX0NPTVBMRVRFRCA9IDIsCisrCisrICAg IC8qIFJldHVybiB3aGVuIHRoZSBmcmFtZSBmaWx0ZXIgcHJvY2VzcyBpcyBjb21wbGV0ZSwgYnV0 IHRoZXJlCisrICAgICAgIHdlcmUgbm8gZmlsdGVyIHJlZ2lzdGVyZWQgYW5kIGVuYWJsZWQgdG8g cHJvY2Vzcy4gKi8KKysgICAgUFlfQlRfTk9fRklMVEVSUyA9IDMKKysgIH07CisrCisrLyogRmxh Z3MgdG8gcGFzcyB0byBhcHBseV9mcmFtZV9maWx0ZXIuICAqLworKworK2VudW0gZnJhbWVfZmls dGVyX2ZsYWdzCisrICB7CisrICAgIC8qIFNldCB0aGlzIGZsYWcgaWYgZnJhbWUgbGV2ZWwgaXMg dG8gYmUgcHJpbnRlZC4gICovCisrICAgIFBSSU5UX0xFVkVMID0gMSwKKysKKysgICAgLyogU2V0 IHRoaXMgZmxhZyBpZiBmcmFtZSBpbmZvcm1hdGlvbiBpcyB0byBiZSBwcmludGVkLiAgKi8KKysg ICAgUFJJTlRfRlJBTUVfSU5GTyA9IDIsCisrCisrICAgIC8qIFNldCB0aGlzIGZsYWcgaWYgZnJh bWUgYXJndW1lbnRzIGFyZSB0byBiZSBwcmludGVkLiAgKi8KKysgICAgUFJJTlRfQVJHUyA9IDQs CisrCisrICAgIC8qIFNldCB0aGlzIGZsYWcgaWYgZnJhbWUgbG9jYWxzIGFyZSB0byBiZSBwcmlu dGVkLiAgKi8KKysgICAgUFJJTlRfTE9DQUxTID0gOCwKKysgIH07CisrCisrLyogQSBjaG9pY2Ug b2YgdGhlIGRpZmZlcmVudCBmcmFtZSBhcmd1bWVudCBwcmludGluZyBzdHJhdGVnaWVzIHRoYXQK KysgICBjYW4gb2NjdXIgaW4gZGlmZmVyZW50IGNhc2VzIG9mIGZyYW1lIGZpbHRlciBpbnN0YW50 aWF0aW9uLiAgKi8KKyt0eXBlZGVmIGVudW0gcHlfZnJhbWVfYXJncworK3sKKysgIC8qIFByaW50 IG5vIHZhbHVlcyBmb3IgYXJndW1lbnRzIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBNSS4gKi8KKysg IE5PX1ZBTFVFUyA9IFBSSU5UX05PX1ZBTFVFUywKKysKKysgIE1JX1BSSU5UX0FMTF9WQUxVRVMg PSBQUklOVF9BTExfVkFMVUVTLAorKworKyAgLyogUHJpbnQgb25seSBzaW1wbGUgdmFsdWVzICh3 aGF0IE1JIGRlZmluZXMgYXMgInNpbXBsZSIpIGZvcgorKyAgICAgYXJndW1lbnRzIHdoZW4gaW52 b2tlZCBmcm9tIHRoZSBNSS4gKi8KKysgIE1JX1BSSU5UX1NJTVBMRV9WQUxVRVMgPSBQUklOVF9T SU1QTEVfVkFMVUVTLAorKworKworKyAgLyogUHJpbnQgb25seSBzY2FsYXIgdmFsdWVzIGZvciBh cmd1bWVudHMgd2hlbiBpbnZva2VkIGZyb20gdGhlCisrICAgICBDTEkuICovCisrICBDTElfU0NB TEFSX1ZBTFVFUywKKysKKysgIC8qIFByaW50IGFsbCB2YWx1ZXMgZm9yIGFyZ3VtZW50cyB3aGVu IGludm9rZWQgZnJvbSB0aGUKKysgICAgIENMSS4gKi8KKysgIENMSV9BTExfVkFMVUVTCisrfSBw eV9mcmFtZV9hcmdzOworKworIGV4dGVybiB2b2lkIGZpbmlzaF9weXRob25faW5pdGlhbGl6YXRp b24gKHZvaWQpOworIAorIHZvaWQgZXZhbF9weXRob25fZnJvbV9jb250cm9sX2NvbW1hbmQgKHN0 cnVjdCBjb21tYW5kX2xpbmUgKik7CitAQCAtNDMsNiArMTA0LDExIEBAIGludCBhcHBseV92YWxf cHJldHR5X3ByaW50ZXIgKHN0cnVjdCB0eXAKKyAJCQkgICAgICBjb25zdCBzdHJ1Y3QgdmFsdWVf cHJpbnRfb3B0aW9ucyAqb3B0aW9ucywKKyAJCQkgICAgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2Vf ZGVmbiAqbGFuZ3VhZ2UpOworIAorK2VudW0gcHlfYnRfc3RhdHVzIGFwcGx5X2ZyYW1lX2ZpbHRl ciAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQgZmxhZ3MsCisrCQkJCSAgICAgIGVudW0g cHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQkJCSAgICAgIHN0cnVjdCB1aV9vdXQgKm91dCwg aW50IGZyYW1lX2xvdywKKysJCQkJICAgICAgaW50IGZyYW1lX2hpZ2gpOworKworIHZvaWQgcHJl c2VydmVfcHl0aG9uX3ZhbHVlcyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGh0YWJfdCBjb3Bp ZWRfdHlwZXMpOworIAorIHZvaWQgZ2RicHlfbG9hZF9hdXRvX3NjcmlwdHNfZm9yX29iamZpbGUg KHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKK0luZGV4OiBnZGItNy42L2dkYi9weXRob24vbGli L2dkYi9GcmFtZURlY29yYXRvci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAx LTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9saWIv Z2RiL0ZyYW1lRGVjb3JhdG9yLnB5CTIwMTMtMDUtMjAgMjI6MjU6NTIuMTEzMTY1NzY2ICswMjAw CitAQCAtMCwwICsxLDI4NSBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKytp bXBvcnQgZ2RiCisrCisrY2xhc3MgRnJhbWVEZWNvcmF0b3Iob2JqZWN0KToKKysgICAgIiIiQmFz aWMgaW1wbGVtZW50YXRpb24gb2YgYSBGcmFtZSBEZWNvcmF0b3IiIiIKKysKKysgICAgIiIiIFRo aXMgYmFzZSBmcmFtZSBkZWNvcmF0b3IgZGVjb3JhdGVzIGEgZnJhbWUgb3IgYW5vdGhlciBmcmFt ZQorKyAgICBkZWNvcmF0b3IsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZSBtZXRob2RzLiAgSWYg dGhpcyBvYmplY3QgaXMKKysgICAgd3JhcHBpbmcgYSBmcmFtZSBkZWNvcmF0b3IsIGRlZmVyIHRv IHRoYXQgd3JhcHBlZCBvYmplY3QncyBtZXRob2QKKysgICAgaWYgaXQgaGFzIG9uZS4gIFRoaXMg YWxsb3dzIGZvciBmcmFtZSBkZWNvcmF0b3JzIHRoYXQgaGF2ZQorKyAgICBzdWItY2xhc3NlZCBG cmFtZURlY29yYXRvciBvYmplY3QsIGJ1dCBhbHNvIHdyYXAgb3RoZXIgZnJhbWUKKysgICAgZGVj b3JhdG9ycyBvbiB0aGUgc2FtZSBmcmFtZSB0byBjb3JyZWN0bHkgZXhlY3V0ZS4KKysKKysgICAg RS5nCisrCisrICAgIElmIHRoZSByZXN1bHQgb2YgZnJhbWUgZmlsdGVycyBydW5uaW5nIG1lYW5z IHdlIGhhdmUgb25lIGdkYi5GcmFtZQorKyAgICB3cmFwcGVkIGJ5IG11bHRpcGxlIGZyYW1lIGRl Y29yYXRvcnMsIGFsbCBzdWItY2xhc3NlZCBmcm9tCisrICAgIEZyYW1lRGVjb3JhdG9yLCB0aGUg cmVzdWx0aW5nIGhpZXJhcmNoeSB3aWxsIGJlOgorKworKyAgICBEZWNvcmF0b3IxCisrICAgICAg LS0gKHdyYXBzKSBEZWNvcmF0b3IyCisrICAgICAgICAtLSAod3JhcHMpIEZyYW1lRGVjb3JhdG9y CisrICAgICAgICAgIC0tICh3cmFwcykgZ2RiLkZyYW1lCisrCisrICAgIEluIHRoaXMgY2FzZSB3 ZSBoYXZlIHR3byBmcmFtZSBkZWNvcmF0b3JzLCBib3RoIG9mIHdoaWNoIGFyZQorKyAgICBzdWIt Y2xhc3NlZCBmcm9tIEZyYW1lRGVjb3JhdG9yLiAgSWYgRGVjb3JhdG9yMSBqdXN0IG92ZXJyaWRl cyB0aGUKKysgICAgJ2Z1bmN0aW9uJyBtZXRob2QsIHRoZW4gYWxsIG9mIHRoZSBvdGhlciBtZXRo b2RzIGFyZSBjYXJyaWVkIG91dAorKyAgICBieSB0aGUgc3VwZXItY2xhc3MgRnJhbWVEZWNvcmF0 b3IuICBCdXQgRGVjb3JhdG9yMiBtYXkgaGF2ZQorKyAgICBvdmVycmlkZW4gb3RoZXIgbWV0aG9k cywgc28gRnJhbWVEZWNvcmF0b3Igd2lsbCBsb29rIGF0IHRoZQorKyAgICAnYmFzZScgcGFyYW1l dGVyIGFuZCBkZWZlciB0byB0aGF0IGNsYXNzJ3MgbWV0aG9kcy4gIEFuZCBzbyBvbiwKKysgICAg ZG93biB0aGUgY2hhaW4uIiIiCisrCisrICAgICMgJ2Jhc2UnIGNhbiByZWZlciB0byBhIGdkYi5G cmFtZSBvciBhbm90aGVyIGZyYW1lIGRlY29yYXRvci4gIEluCisrICAgICMgdGhlIGxhdHRlciBj YXNlLCB0aGUgY2hpbGQgY2xhc3Mgd2lsbCBoYXZlIGNhbGxlZCB0aGUgc3VwZXIKKysgICAgIyBt ZXRob2QgYW5kIF9iYXNlIHdpbGwgYmUgYW4gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIEZyYW1l IEZpbHRlcgorKyAgICAjIGNsYXNzLgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZSk6Cisr ICAgICAgICBzZWxmLl9iYXNlID0gYmFzZQorKworKyAgICBAc3RhdGljbWV0aG9kCisrICAgIGRl ZiBfaXNfbGltaXRlZF9mcmFtZShmcmFtZSk6CisrICAgICAgICAiIiJJbnRlcm5hbCB1dGlsaXR5 IHRvIGRldGVybWluZSBpZiB0aGUgZnJhbWUgaXMgc3BlY2lhbCBvcgorKyAgICAgICAgbGltaXRl ZC4iIiIKKysgICAgICAgIHNhbCA9IGZyYW1lLmZpbmRfc2FsKCkKKysKKysgICAgICAgIGlmIChu b3Qgc2FsLnN5bXRhYiBvciBub3Qgc2FsLnN5bXRhYi5maWxlbmFtZQorKyAgICAgICAgICAgIG9y IGZyYW1lLnR5cGUoKSA9PSBnZGIuRFVNTVlfRlJBTUUKKysgICAgICAgICAgICBvciBmcmFtZS50 eXBlKCkgPT0gZ2RiLlNJR1RSQU1QX0ZSQU1FKToKKysKKysgICAgICAgICAgICByZXR1cm4gVHJ1 ZQorKworKyAgICAgICAgcmV0dXJuIEZhbHNlCisrCisrICAgIGRlZiBlbGlkZWQoc2VsZik6Cisr ICAgICAgICAiIiJSZXR1cm4gYW55IGVsaWRlZCBmcmFtZXMgdGhhdCB0aGlzIGNsYXNzIG1pZ2h0 IGJlCisrICAgICAgICB3cmFwcGluZywgb3IgTm9uZS4iIiIKKysgICAgICAgIGlmIGhhc2F0dHIo c2VsZi5fYmFzZSwgImVsaWRlZCIpOgorKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNlLmVs aWRlZCgpCisrCisrICAgICAgICByZXR1cm4gTm9uZQorKworKyAgICBkZWYgZnVuY3Rpb24oc2Vs Zik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSdzIGZ1bmN0aW9u IG9yIGFuIGFkZHJlc3Mgb2YKKysgICAgICAgIHRoZSBmdW5jdGlvbiBvZiB0aGUgZnJhbWUuICBG aXJzdCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhCisrICAgICAgICBzcGVjaWFsIGZyYW1lLiAgSWYg bm90LCB0cnkgdG8gZGV0ZXJtaW5lIGZpbGVuYW1lIGZyb20gR0RCJ3MKKysgICAgICAgIGZyYW1l IGludGVybmFsIGZ1bmN0aW9uIEFQSS4gIEZpbmFsbHksIGlmIGEgbmFtZSBjYW5ub3QgYmUKKysg ICAgICAgIGRldGVybWluZWQgcmV0dXJuIHRoZSBhZGRyZXNzLiAgSWYgdGhpcyBmdW5jdGlvbiBy ZXR1cm5zIGFuCisrICAgICAgICBhZGRyZXNzLCBHREIgd2lsbCBhdHRlbXB0IHRvIGRldGVybWlu ZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tCisrICAgICAgICBpdHMgaW50ZXJuYWwgbWluaW1hbCBz eW1ib2xzIHN0b3JlIChmb3IgZXhhbXBsZSwgZm9yIGluZmVyaW9ycworKyAgICAgICAgd2l0aG91 dCBkZWJ1Zy1pbmZvKS4iIiIKKysKKysgICAgICAgICMgQm90aCBnZGIuRnJhbWUsIGFuZCBGcmFt ZURlY29yYXRvciBoYXZlIGEgbWV0aG9kIGNhbGxlZAorKyAgICAgICAgIyAiZnVuY3Rpb24iLCBz byBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0IHRoaXMgaXMuCisrICAgICAgICBpZiBub3QgaXNpbnN0 YW5jZShzZWxmLl9iYXNlLCBnZGIuRnJhbWUpOgorKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2Vs Zi5fYmFzZSwgImZ1bmN0aW9uIik6CisrICAgICAgICAgICAgICAgICMgSWYgaXQgaXMgbm90IGEg Z2RiLkZyYW1lLCBhbmQgdGhlcmUgaXMgYWxyZWFkeSBhCisrICAgICAgICAgICAgICAgICMgImZ1 bmN0aW9uIiBtZXRob2QsIHVzZSB0aGF0LgorKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5f YmFzZS5mdW5jdGlvbigpCisrCisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5mZXJpb3JfZnJhbWUo KQorKworKyAgICAgICAgaWYgZnJhbWUudHlwZSgpID09IGdkYi5EVU1NWV9GUkFNRToKKysgICAg ICAgICAgICByZXR1cm4gIjxmdW5jdGlvbiBjYWxsZWQgZnJvbSBnZGI+IgorKyAgICAgICAgZWxp ZiBmcmFtZS50eXBlKCkgPT0gZ2RiLlNJR1RSQU1QX0ZSQU1FOgorKyAgICAgICAgICAgIHJldHVy biAiPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4iCisrCisrICAgICAgICBmdW5jID0gZnJhbWUuZnVu Y3Rpb24oKQorKworKyAgICAgICAgIyBJZiB3ZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBmdW5jdGlv biBuYW1lLCByZXR1cm4gdGhlCisrICAgICAgICAjIGFkZHJlc3MuICBJZiBHREIgZGV0ZWN0cyBh biBpbnRlZ2VyIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbgorKyAgICAgICAgIyBpdCB3aWxsIGF0 dGVtcHQgdG8gZmluZCB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIG1pbmltYWwKKysgICAgICAgICMg c3ltYm9scyB2aWEgaXRzIG93biBpbnRlcm5hbCBmdW5jdGlvbnMuCisrICAgICAgICBpZiBmdW5j ID09IE5vbmU6CisrICAgICAgICAgICAgcGMgPSBmcmFtZS5wYygpCisrICAgICAgICAgICAgcmV0 dXJuIHBjCisrCisrICAgICAgICByZXR1cm4gc3RyKGZ1bmMpCisrCisrICAgIGRlZiBhZGRyZXNz KHNlbGYpOgorKyAgICAgICAgIiIiIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUncyBw YyIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9iYXNlLCAiYWRkcmVzcyIpOgorKyAg ICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNlLmFkZHJlc3MoKQorKworKyAgICAgICAgZnJhbWUg PSBzZWxmLmluZmVyaW9yX2ZyYW1lKCkKKysgICAgICAgIHJldHVybiBmcmFtZS5wYygpCisrCisr ICAgIGRlZiBmaWxlbmFtZShzZWxmKToKKysgICAgICAgICIiIiBSZXR1cm4gdGhlIGZpbGVuYW1l IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1lLCBkZXRlY3RpbmcKKysgICAgICAgIGFuZCByZXR1 cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgbmFtZSBpcyB0aGlzIGlzIGEgc2hhcmVkCisr ICAgICAgICBsaWJyYXJ5LiIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9iYXNlLCAi ZmlsZW5hbWUiKToKKysgICAgICAgICAgICByZXR1cm4gc2VsZi5fYmFzZS5maWxlbmFtZSgpCisr CisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5mZXJpb3JfZnJhbWUoKQorKyAgICAgICAgc2FsID0g ZnJhbWUuZmluZF9zYWwoKQorKyAgICAgICAgaWYgbm90IHNhbC5zeW10YWIgb3Igbm90IHNhbC5z eW10YWIuZmlsZW5hbWU6CisrICAgICAgICAgICAgcGMgPSBmcmFtZS5wYygpCisrICAgICAgICAg ICAgcmV0dXJuIGdkYi5zb2xpYl9uYW1lKHBjKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAg ICByZXR1cm4gc2FsLnN5bXRhYi5maWxlbmFtZQorKworKyAgICBkZWYgZnJhbWVfYXJncyhzZWxm KToKKysgICAgICAgICIiIiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgZnJhbWUgYXJndW1lbnRzIGZv ciB0aGlzIGZyYW1lLCBpZgorKyAgICAgICAgYW55LiAgVGhlIGl0ZXJhYmxlIG9iamVjdCBjb250 YWlucyBvYmplY3RzIGNvbmZvcm1pbmcgd2l0aCB0aGUKKysgICAgICAgIFN5bWJvbC9WYWx1ZSBp bnRlcmZhY2UuICBJZiB0aGVyZSBhcmUgbm8gZnJhbWUgYXJndW1lbnRzLCBvcgorKyAgICAgICAg aWYgdGhpcyBmcmFtZSBpcyBkZWVtZWQgdG8gYmUgYSBzcGVjaWFsIGNhc2UsIHJldHVybiBOb25l LiIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9iYXNlLCAiZnJhbWVfYXJncyIpOgor KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNlLmZyYW1lX2FyZ3MoKQorKworKyAgICAgICAg ZnJhbWUgPSBzZWxmLmluZmVyaW9yX2ZyYW1lKCkKKysgICAgICAgIGlmIHNlbGYuX2lzX2xpbWl0 ZWRfZnJhbWUoZnJhbWUpOgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICBh cmdzID0gRnJhbWVWYXJzKGZyYW1lKQorKyAgICAgICAgcmV0dXJuIGFyZ3MuZmV0Y2hfZnJhbWVf YXJncygpCisrCisrICAgIGRlZiBmcmFtZV9sb2NhbHMoc2VsZik6CisrICAgICAgICAiIiIgUmV0 dXJuIGFuIGl0ZXJhYmxlIG9mIGxvY2FsIHZhcmlhYmxlcyBmb3IgdGhpcyBmcmFtZSwgaWYKKysg ICAgICAgIGFueS4gIFRoZSBpdGVyYWJsZSBvYmplY3QgY29udGFpbnMgb2JqZWN0cyBjb25mb3Jt aW5nIHdpdGggdGhlCisrICAgICAgICBTeW1ib2wvVmFsdWUgaW50ZXJmYWNlLiAgSWYgdGhlcmUg YXJlIG5vIGZyYW1lIGxvY2Fscywgb3IgaWYKKysgICAgICAgIHRoaXMgZnJhbWUgaXMgZGVlbWVk IHRvIGJlIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gTm9uZS4iIiIKKysKKysgICAgICAgIGlmIGhh c2F0dHIoc2VsZi5fYmFzZSwgImZyYW1lX2xvY2FscyIpOgorKyAgICAgICAgICAgIHJldHVybiBz ZWxmLl9iYXNlLmZyYW1lX2xvY2FscygpCisrCisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5mZXJp b3JfZnJhbWUoKQorKyAgICAgICAgaWYgc2VsZi5faXNfbGltaXRlZF9mcmFtZShmcmFtZSk6Cisr ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysKKysgICAgICAgIGFyZ3MgPSBGcmFtZVZhcnMoZnJh bWUpCisrICAgICAgICByZXR1cm4gYXJncy5mZXRjaF9mcmFtZV9sb2NhbHMoKQorKworKyAgICBk ZWYgbGluZShzZWxmKToKKysgICAgICAgICIiIiBSZXR1cm4gbGluZSBudW1iZXIgaW5mb3JtYXRp b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSdzCisrICAgICAgICBwYy4gIElmIHN5bWJvbCB0 YWJsZS9saW5lIGluZm9ybWF0aW9uIGRvZXMgbm90IGV4aXN0LCBvciBpZgorKyAgICAgICAgdGhp cyBmcmFtZSBpcyBkZWVtZWQgdG8gYmUgYSBzcGVjaWFsIGNhc2UsIHJldHVybiBOb25lIiIiCisr CisrICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2Jhc2UsICJsaW5lIik6CisrICAgICAgICAgICAg cmV0dXJuIHNlbGYuX2Jhc2UubGluZSgpCisrCisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5mZXJp b3JfZnJhbWUoKQorKyAgICAgICAgaWYgc2VsZi5faXNfbGltaXRlZF9mcmFtZShmcmFtZSk6Cisr ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysKKysgICAgICAgIHNhbCA9IGZyYW1lLmZpbmRfc2Fs KCkKKysgICAgICAgIGlmIChzYWwpOgorKyAgICAgICAgICAgIHJldHVybiBzYWwubGluZQorKyAg ICAgICAgZWxzZToKKysgICAgICAgICAgICByZXR1cm4gTm9uZQorKworKyAgICBkZWYgaW5mZXJp b3JfZnJhbWUoc2VsZik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSBnZGIuRnJhbWUgdW5kZXJw aW5uaW5nIHRoaXMgZnJhbWUgZGVjb3JhdG9yLiIiIgorKworKyAgICAgICAgIyBJZiAnYmFzZScg aXMgYSBmcmFtZSBkZWNvcmF0b3IsIHdlIHdhbnQgdG8gY2FsbCBpdHMgaW5mZXJpb3IKKysgICAg ICAgICMgZnJhbWUgbWV0aG9kLiAgSWYgJ19iYXNlJyBpcyBhIGdkYi5GcmFtZSwganVzdCByZXR1 cm4gdGhhdC4KKysgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fYmFzZSwgImluZmVyaW9yX2ZyYW1l Iik6CisrICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2UuaW5mZXJpb3JfZnJhbWUoKQorKyAg ICAgICAgcmV0dXJuIHNlbGYuX2Jhc2UKKysKKytjbGFzcyBTeW1WYWx1ZVdyYXBwZXIob2JqZWN0 KToKKysgICAgIiIiQSBjb250YWluZXIgY2xhc3MgY29uZm9ybWluZyB0byB0aGUgU3ltYm9sL1Zh bHVlIGludGVyZmFjZQorKyAgICB3aGljaCBob2xkcyBmcmFtZSBsb2NhbHMgb3IgZnJhbWUgYXJn dW1lbnRzLiIiIgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ltYm9sLCB2YWx1ZSk6CisrICAg ICAgICBzZWxmLnN5bSA9IHN5bWJvbAorKyAgICAgICAgc2VsZi52YWwgPSB2YWx1ZQorKworKyAg ICBkZWYgdmFsdWUoc2VsZik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSB2YWx1ZSBhc3NvY2lh dGVkIHdpdGggdGhpcyBzeW1ib2wsIG9yIE5vbmUiIiIKKysgICAgICAgIHJldHVybiBzZWxmLnZh bAorKworKyAgICBkZWYgc3ltYm9sKHNlbGYpOgorKyAgICAgICAgIiIiIFJldHVybiB0aGUgc3lt Ym9sLCBvciBQeXRob24gdGV4dCwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKysgICAgICAgIHN5bWJv bCwgb3IgTm9uZSIiIgorKyAgICAgICAgcmV0dXJuIHNlbGYuc3ltCisrCisrY2xhc3MgRnJhbWVW YXJzKG9iamVjdCk6CisrCisrICAgICIiIlV0aWxpdHkgY2xhc3MgdG8gZmV0Y2ggYW5kIHN0b3Jl IGZyYW1lIGxvY2FsIHZhcmlhYmxlcywgb3IKKysgICAgZnJhbWUgYXJndW1lbnRzLiIiIgorKwor KyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorKyAgICAgICAgc2VsZi5mcmFtZSA9IGZy YW1lCisrICAgICAgICBzZWxmLnN5bWJvbF9jbGFzcyA9IHsKKysgICAgICAgICAgICBnZGIuU1lN Qk9MX0xPQ19TVEFUSUM6IFRydWUsCisrICAgICAgICAgICAgZ2RiLlNZTUJPTF9MT0NfUkVHSVNU RVI6IFRydWUsCisrICAgICAgICAgICAgZ2RiLlNZTUJPTF9MT0NfQVJHOiBUcnVlLAorKyAgICAg ICAgICAgIGdkYi5TWU1CT0xfTE9DX1JFRl9BUkc6IFRydWUsCisrICAgICAgICAgICAgZ2RiLlNZ TUJPTF9MT0NfTE9DQUw6IFRydWUsCisrCSAgICBnZGIuU1lNQk9MX0xPQ19SRUdQQVJNX0FERFI6 IFRydWUsCisrCSAgICBnZGIuU1lNQk9MX0xPQ19DT01QVVRFRDogVHJ1ZQorKyAgICAgICAgICAg IH0KKysKKysgICAgZGVmIGZldGNoX2Ioc2VsZiwgc3ltKToKKysgICAgICAgICIiIiBMb2NhbCB1 dGlsaXR5IG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYWNjb3JkaW5nIHRvIFN5bWJvbAorKyAgICAg ICAgdHlwZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgaXRlcmF0b3IuICBO b3QgYWxsCisrICAgICAgICBzeW1ib2xzIGFyZSBmZXRjaGVkLCBhbmQgb25seSBzeW1ib2xzIHRo YXQgcmV0dXJuCisrICAgICAgICBUcnVlIGZyb20gdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGZldGNo ZWQuIiIiCisrCisrICAgICAgICAjIFNZTSBtYXkgYmUgYSBzdHJpbmcgaW5zdGVhZCBvZiBhIHN5 bWJvbCBpbiB0aGUgY2FzZSBvZgorKyAgICAgICAgIyBzeW50aGV0aWMgbG9jYWwgYXJndW1lbnRz IG9yIGxvY2Fscy4gIElmIHRoYXQgaXMgdGhlIGNhc2UsCisrICAgICAgICAjIGFsd2F5cyBmZXRj aC4KKysgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3ltLCBiYXNlc3RyaW5nKToKKysgICAgICAgICAg ICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgc3ltX3R5cGUgPSBzeW0uYWRkcl9jbGFzcworKwor KyAgICAgICAgcmV0dXJuIHNlbGYuc3ltYm9sX2NsYXNzLmdldChzeW1fdHlwZSwgRmFsc2UpCisr CisrICAgIGRlZiBmZXRjaF9mcmFtZV9sb2NhbHMoc2VsZik6CisrICAgICAgICAiIiJQdWJsaWMg dXRpbGl0eSBtZXRob2QgdG8gZmV0Y2ggZnJhbWUgbG9jYWwgdmFyaWFibGVzIGZvcgorKyAgICAg ICAgdGhlIHN0b3JlZCBmcmFtZS4gIEZyYW1lIGFyZ3VtZW50cyBhcmUgbm90IGZldGNoZWQuICBJ ZiB0aGVyZQorKyAgICAgICAgYXJlIG5vIGZyYW1lIGxvY2FsIHZhcmlhYmxlcywgcmV0dXJuIGFu IGVtcHR5IGxpc3QuIiIiCisrICAgICAgICBsdmFycyA9IFtdCisrCisrICAgICAgICBibG9jayA9 IHNlbGYuZnJhbWUuYmxvY2soKQorKworKyAgICAgICAgd2hpbGUgYmxvY2sgIT0gTm9uZToKKysg ICAgICAgICAgICBpZiBibG9jay5pc19nbG9iYWwgb3IgYmxvY2suaXNfc3RhdGljOgorKyAgICAg ICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgIGZvciBzeW0gaW4gYmxvY2s6CisrICAgICAg ICAgICAgICAgIGlmIHN5bS5pc19hcmd1bWVudDoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOworKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZldGNoX2Ioc3ltKToKKysgICAgICAgICAg ICAgICAgICAgIGx2YXJzLmFwcGVuZChTeW1WYWx1ZVdyYXBwZXIoc3ltLCBOb25lKSkKKysKKysg ICAgICAgICAgICBibG9jayA9IGJsb2NrLnN1cGVyYmxvY2sKKysKKysgICAgICAgIHJldHVybiBs dmFycworKworKyAgICBkZWYgZmV0Y2hfZnJhbWVfYXJncyhzZWxmKToKKysgICAgICAgICIiIlB1 YmxpYyB1dGlsaXR5IG1ldGhvZCB0byBmZXRjaCBmcmFtZSBhcmd1bWVudHMgZm9yIHRoZQorKyAg ICAgICAgc3RvcmVkIGZyYW1lLiAgRnJhbWUgYXJndW1lbnRzIGFyZSB0aGUgb25seSB0eXBlIGZl dGNoZWQuICBJZgorKyAgICAgICAgdGhlcmUgYXJlIG5vIGZyYW1lIGFyZ3VtZW50IHZhcmlhYmxl cywgcmV0dXJuIGFuIGVtcHR5IGxpc3QuIiIiCisrCisrICAgICAgICBhcmdzID0gW10KKysgICAg ICAgIGJsb2NrID0gc2VsZi5mcmFtZS5ibG9jaygpCisrICAgICAgICB3aGlsZSBibG9jayAhPSBO b25lOgorKyAgICAgICAgICAgIGlmIGJsb2NrLmZ1bmN0aW9uICE9IE5vbmU6CisrICAgICAgICAg ICAgICAgIGJyZWFrCisrICAgICAgICAgICAgYmxvY2sgPSBibG9jay5zdXBlcmJsb2NrCisrCisr ICAgICAgICBpZiBibG9jayAhPSBOb25lOgorKyAgICAgICAgICAgIGZvciBzeW0gaW4gYmxvY2s6 CisrICAgICAgICAgICAgICAgIGlmIG5vdCBzeW0uaXNfYXJndW1lbnQ6CisrICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoU3ltVmFsdWVX cmFwcGVyKHN5bSwgTm9uZSkpCisrCisrICAgICAgICByZXR1cm4gYXJncworSW5kZXg6IGdkYi03 LjYvZ2RiL3B5dGhvbi9saWIvZ2RiL0ZyYW1lSXRlcmF0b3IucHkKKz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAv ZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGItNy42 L2dkYi9weXRob24vbGliL2dkYi9GcmFtZUl0ZXJhdG9yLnB5CTIwMTMtMDUtMjAgMjI6MjU6NTIu MTE0MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMTMg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorKworK2ltcG9ydCBnZGIKKytpbXBvcnQgaXRlcnRvb2xzCisrCisrY2xhc3MgRnJh bWVJdGVyYXRvcihvYmplY3QpOgorKyAgICAiIiJBIGdkYi5GcmFtZSBpdGVyYXRvci4gIEl0ZXJh dGVzIG92ZXIgZ2RiLkZyYW1lcyBvciBvYmplY3RzIHRoYXQKKysgICAgY29uZm9ybSB0byB0aGF0 IGludGVyZmFjZS4iIiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lX29iaik6Cisr ICAgICAgICAiIiJJbml0aWFsaXplIGEgRnJhbWVJdGVyYXRvci4KKysKKysgICAgICAgIEFyZ3Vt ZW50czoKKysgICAgICAgICAgICBmcmFtZV9vYmogdGhlIHN0YXJ0aW5nIGZyYW1lLiIiIgorKwor KyAgICAgICAgc3VwZXIoRnJhbWVJdGVyYXRvciwgc2VsZikuX19pbml0X18oKQorKyAgICAgICAg c2VsZi5mcmFtZSA9IGZyYW1lX29iagorKworKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisrICAg ICAgICByZXR1cm4gc2VsZgorKworKyAgICBkZWYgbmV4dChzZWxmKToKKysgICAgICAgICIiIm5l eHQgaW1wbGVtZW50YXRpb24uCisrCisrICAgICAgICBSZXR1cm5zOgorKyAgICAgICAgICAgIFRo ZSBuZXh0IG9sZGVzdCBmcmFtZS4iIiIKKysKKysgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUK KysgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVy YXRpb24KKysgICAgICAgIHNlbGYuZnJhbWUgPSByZXN1bHQub2xkZXIoKQorKyAgICAgICAgcmV0 dXJuIHJlc3VsdAorSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9saWIvZ2RiL2ZyYW1lcy5weQor PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCAr MDAwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9saWIvZ2RiL2ZyYW1lcy5weQkyMDEzLTA1LTIw IDIyOjI1OjUyLjExNDE2NTc2NiArMDIwMAorQEAgLTAsMCArMSwyMjkgQEAKKysjIEZyYW1lLWZp bHRlciBjb21tYW5kcy4KKysjIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIiIiSW50 ZXJuYWwgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggZnJhbWUtZmlsdGVycy4iIiIKKysKKytp bXBvcnQgZ2RiCisrZnJvbSBnZGIuRnJhbWVJdGVyYXRvciBpbXBvcnQgRnJhbWVJdGVyYXRvcgor K2Zyb20gZ2RiLkZyYW1lRGVjb3JhdG9yIGltcG9ydCBGcmFtZURlY29yYXRvcgorK2ltcG9ydCBp dGVydG9vbHMKKytpbXBvcnQgY29sbGVjdGlvbnMKKysKKytkZWYgZ2V0X3ByaW9yaXR5KGZpbHRl cl9pdGVtKToKKysgICAgIiIiIEludGVybmFsIHdvcmtlciBmdW5jdGlvbiB0byByZXR1cm4gdGhl IGZyYW1lLWZpbHRlcidzIHByaW9yaXR5CisrICAgIGZyb20gYSBmcmFtZSBmaWx0ZXIgb2JqZWN0 LiAgVGhpcyBpcyBhIGZhaWwgZnJlZSBmdW5jdGlvbiBhcyBpdCBpcworKyAgICB1c2VkIGluIHNv cnRpbmcgYW5kIGZpbHRlcmluZy4gIElmIGEgYmFkbHkgaW1wbGVtZW50ZWQgZnJhbWUKKysgICAg ZmlsdGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgcHJpb3JpdHkgYXR0cmlidXRlLCByZXR1cm4g emVybworKyAgICAob3RoZXJ3aXNlIHNvcnRpbmcvZmlsdGVyaW5nIHdpbGwgZmFpbCBhbmQgcHJl dmVudCBvdGhlciBmcmFtZQorKyAgICBmaWx0ZXJzIGZyb20gZXhlY3V0aW5nKS4KKysKKysgICAg QXJndW1lbnRzOgorKyAgICAgICAgZmlsdGVyX2l0ZW06IEFuIG9iamVjdCBjb25mb3JtaW5nIHRv IHRoZSBmcmFtZSBmaWx0ZXIKKysgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuCisrCisr ICAgIFJldHVybnM6CisrICAgICAgICBUaGUgcHJpb3JpdHkgb2YgdGhlIGZyYW1lIGZpbHRlciBm cm9tIHRoZSAicHJpb3JpdHkiCisrICAgICAgICBhdHRyaWJ1dGUsIG9yIHplcm8uCisrICAgICIi IgorKyAgICAjIERvIG5vdCBmYWlsIGhlcmUsIGFzIHRoZSBzb3J0IHdpbGwgZmFpbC4gIElmIGEg ZmlsdGVyIGhhcyBub3QKKysgICAgIyAoaW5jb3JyZWN0bHkpIHNldCBhIHByaW9yaXR5LCBzZXQg aXQgdG8gemVyby4KKysgICAgcmV0dXJuIGdldGF0dHIoZmlsdGVyX2l0ZW0sICJwcmlvcml0eSIs IDApCisrCisrZGVmIHNldF9wcmlvcml0eShmaWx0ZXJfaXRlbSwgcHJpb3JpdHkpOgorKyAgICAi IiIgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIHNldCB0aGUgZnJhbWUtZmlsdGVyJ3MgcHJp b3JpdHkuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIGZpbHRlcl9pdGVtOiBBbiBvYmpl Y3QgY29uZm9ybWluZyB0byB0aGUgZnJhbWUgZmlsdGVyCisrICAgICAgICAgICAgICAgICAgICAg aW50ZXJmYWNlLgorKyAgICAgICAgcHJpb3JpdHk6IFRoZSBwcmlvcml0eSB0byBhc3NpZ24gYXMg YW4gaW50ZWdlci4KKysgICAgIiIiCisrCisrICAgIGZpbHRlcl9pdGVtLnByaW9yaXR5ID0gcHJp b3JpdHkKKysKKytkZWYgZ2V0X2VuYWJsZWQoZmlsdGVyX2l0ZW0pOgorKyAgICAiIiIgSW50ZXJu YWwgd29ya2VyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGZpbHRlcidzIGVuYWJsZWQgc3RhdGUKKysg ICAgZnJvbSBhIGZyYW1lIGZpbHRlciBvYmplY3QuICBUaGlzIGlzIGEgZmFpbCBmcmVlIGZ1bmN0 aW9uIGFzIGl0IGlzCisrICAgIHVzZWQgaW4gc29ydGluZyBhbmQgZmlsdGVyaW5nLiAgSWYgYSBi YWRseSBpbXBsZW1lbnRlZCBmcmFtZQorKyAgICBmaWx0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRo ZSBlbmFibGVkIGF0dHJpYnV0ZSwgcmV0dXJuIEZhbHNlCisrICAgIChvdGhlcndpc2Ugc29ydGlu Zy9maWx0ZXJpbmcgd2lsbCBmYWlsIGFuZCBwcmV2ZW50IG90aGVyIGZyYW1lCisrICAgIGZpbHRl cnMgZnJvbSBleGVjdXRpbmcpLgorKworKyAgICBBcmd1bWVudHM6CisrICAgICAgICBmaWx0ZXJf aXRlbTogQW4gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIGZyYW1lIGZpbHRlcgorKyAgICAgICAg ICAgICAgICAgICAgIGludGVyZmFjZS4KKysKKysgICAgUmV0dXJuczoKKysgICAgICAgIFRoZSBl bmFibGVkIHN0YXRlIG9mIHRoZSBmcmFtZSBmaWx0ZXIgZnJvbSB0aGUgImVuYWJsZWQiCisrICAg ICAgICBhdHRyaWJ1dGUsIG9yIEZhbHNlLgorKyAgICAiIiIKKysKKysgICAgIyBJZiB0aGUgZmls dGVyIGNsYXNzIGlzIGJhZGx5IGltcGxlbWVudGVkIHdoZW4gY2FsbGVkIGZyb20gdGhlCisrICAg ICMgUHl0aG9uIGZpbHRlciBjb21tYW5kLCBkbyBub3QgY2Vhc2UgZmlsdGVyIG9wZXJhdGlvbnMs IGp1c3Qgc2V0CisrICAgICMgZW5hYmxlZCB0byBGYWxzZS4KKysgICAgcmV0dXJuIGdldGF0dHIo ZmlsdGVyX2l0ZW0sICJlbmFibGVkIiwgRmFsc2UpCisrCisrZGVmIHNldF9lbmFibGVkKGZpbHRl cl9pdGVtLCBzdGF0ZSk6CisrICAgICIiIiBJbnRlcm5hbCBXb3JrZXIgZnVuY3Rpb24gdG8gc2V0 IHRoZSBmcmFtZS1maWx0ZXIncyBlbmFibGVkCisrICAgIHN0YXRlLgorKworKyAgICBBcmd1bWVu dHM6CisrICAgICAgICBmaWx0ZXJfaXRlbTogQW4gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIGZy YW1lIGZpbHRlcgorKyAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4KKysgICAgICAgIHN0 YXRlOiBUcnVlIG9yIEZhbHNlLCBkZXBlbmRpbmcgb24gZGVzaXJlZCBzdGF0ZS4KKysgICAgIiIi CisrCisrICAgIGZpbHRlcl9pdGVtLmVuYWJsZWQgPSBzdGF0ZQorKworK2RlZiByZXR1cm5fbGlz dChuYW1lKToKKysgICAgIiIiIEludGVybmFsIFdvcmtlciBmdW5jdGlvbiB0byByZXR1cm4gdGhl IGZyYW1lIGZpbHRlcgorKyAgICBkaWN0aW9uYXJ5LCBkZXBlbmRpbmcgb24gdGhlIG5hbWUgc3Vw cGxpZWQgYXMgYW4gYXJndW1lbnQuICBJZiB0aGUKKysgICAgbmFtZSBpcyBub3QgImFsbCIsICJn bG9iYWwiIG9yICJwcm9nc3BhY2UiLCBpdCBpcyBhc3N1bWVkIHRvIG5hbWUKKysgICAgYW4gb2Jq ZWN0LWZpbGUuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIG5hbWU6IFRoZSBuYW1lIG9m IHRoZSBsaXN0LCBhcyBzcGVjaWZpZWQgYnkgR0RCIHVzZXIgY29tbWFuZHMuCisrCisrICAgIFJl dHVybnM6CisrICAgICAgICBBIGRpY3Rpb25hcnkgb2JqZWN0IGZvciBhIHNpbmdsZSBzcGVjaWZp ZWQgZGljdGlvbmFyeSwgb3IgYQorKyAgICAgICAgbGlzdCBjb250YWluaW5nIGFsbCB0aGUgaXRl bXMgZm9yICJhbGwiCisrCisrICAgIFJhaXNlczoKKysgICAgICAgIGdkYi5HZGJFcnJvcjogIEEg ZGljdGlvbmFyeSBvZiB0aGF0IG5hbWUgY2Fubm90IGJlIGZvdW5kLgorKyAgICAiIiIKKysKKysg ICAgIyBJZiBhbGwgZGljdGlvbmFyaWVzIGFyZSB3YW50ZWQgaW4gdGhlIGNhc2Ugb2YgImFsbCIg d2UKKysgICAgIyBjYW5ub3QgcmV0dXJuIGEgY29tYmluZWQgZGljdGlvbmFyeSBhcyBrZXlzKCkg bWF5IGNsYXNoIGluCisrICAgICMgYmV0d2VlbiBkaWZmZXJlbnQgZGljdGlvbmFyaWVzLiAgQXMg d2UganVzdCB3YW50IGFsbCB0aGUgZnJhbWUKKysgICAgIyBmaWx0ZXJzIHRvIGVuYWJsZS9kaXNh YmxlIHRoZW0gYWxsLCBqdXN0IHJldHVybiB0aGUgY29tYmluZWQKKysgICAgIyBpdGVtcygpIGFz IGEgbGlzdC4KKysgICAgaWYgbmFtZSA9PSAiYWxsIjoKKysgICAgICAgIGFsbF9kaWN0cyA9IGdk Yi5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrICAgICAgICBhbGxfZGljdHMgPSBhbGxfZGljdHMg KyBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrICAgICAg ICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKysgICAgICAgICAgICBhbGxfZGljdHMg PSBhbGxfZGljdHMgKyBvYmpmaWxlLmZyYW1lX2ZpbHRlcnMudmFsdWVzKCkKKysgICAgICAgICAg ICByZXR1cm4gYWxsX2RpY3RzCisrCisrICAgIGlmIG5hbWUgPT0gImdsb2JhbCI6CisrICAgICAg ICByZXR1cm4gZ2RiLmZyYW1lX2ZpbHRlcnMKKysgICAgZWxzZToKKysgICAgICAgIGlmIG5hbWUg PT0gInByb2dzcGFjZSI6CisrICAgICAgICAgICAgY3AgPSBnZGIuY3VycmVudF9wcm9nc3BhY2Uo KQorKyAgICAgICAgICAgIHJldHVybiBjcC5mcmFtZV9maWx0ZXJzCisrICAgICAgICBlbHNlOgor KyAgICAgICAgICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorKyAgICAgICAgICAg ICAgICBpZiBuYW1lID09IG9iamZpbGUuZmlsZW5hbWU6CisrICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gb2JqZmlsZS5mcmFtZV9maWx0ZXJzCisrCisrICAgIG1zZyA9ICJDYW5ub3QgZmluZCBm cmFtZS1maWx0ZXIgZGljdGlvbmFyeSBmb3IgJyIgKyBuYW1lICsgIiciCisrICAgIHJhaXNlIGdk Yi5HZGJFcnJvcihtc2cpCisrCisrZGVmIF9zb3J0X2xpc3QoKToKKysgICAgIiIiIEludGVybmFs IFdvcmtlciBmdW5jdGlvbiB0byBtZXJnZSBhbGwga25vd24gZnJhbWUtZmlsdGVyCisrICAgIGxp c3RzLCBwcnVuZSBhbnkgZmlsdGVycyB3aXRoIHRoZSBzdGF0ZSBzZXQgdG8gImRpc2FibGVkIiwg YW5kCisrICAgIHNvcnQgdGhlIGxpc3Qgb24gdGhlIGZyYW1lLWZpbHRlcidzICJwcmlvcml0eSIg YXR0cmlidXRlLgorKworKyAgICBSZXR1cm5zOgorKyAgICAgICAgc29ydGVkX2xpc3Q6IEEgc29y dGVkLCBwcnVuZWQgbGlzdCBvZiBmcmFtZSBmaWx0ZXJzIHRvCisrICAgICAgICAgICAgICAgICAg ICAgZXhlY3V0ZS4KKysgICAgIiIiCisrCisrICAgIGFsbF9maWx0ZXJzID0gW10KKysgICAgZm9y IG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisrICAgICAgICBhbGxfZmlsdGVycyA9IGFsbF9m aWx0ZXJzICsgb2JqZmlsZS5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrICAgIGNwID0gZ2RiLmN1 cnJlbnRfcHJvZ3NwYWNlKCkKKysKKysgICAgYWxsX2ZpbHRlcnMgPSBhbGxfZmlsdGVycyArIGNw LmZyYW1lX2ZpbHRlcnMudmFsdWVzKCkKKysgICAgYWxsX2ZpbHRlcnMgPSBhbGxfZmlsdGVycyAr IGdkYi5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrCisrICAgIHNvcnRlZF9mcmFtZV9maWx0ZXJz ID0gc29ydGVkKGFsbF9maWx0ZXJzLCBrZXkgPSBnZXRfcHJpb3JpdHksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPSBUcnVlKQorKworKyAgICBzb3J0ZWRfZnJh bWVfZmlsdGVycyA9IGZpbHRlcihnZXRfZW5hYmxlZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc29ydGVkX2ZyYW1lX2ZpbHRlcnMpCisrCisrICAgIHJldHVybiBzb3J0ZWRf ZnJhbWVfZmlsdGVycworKworK2RlZiBleGVjdXRlX2ZyYW1lX2ZpbHRlcnMoZnJhbWUsIGZyYW1l X2xvdywgZnJhbWVfaGlnaCk6CisrICAgICIiIiBJbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQgZnJv bSBHREIgdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGNoYWluCisrICAgIG9mIGZyYW1lIGZpbHRlcnMu ICBFYWNoIGZpbHRlciBpcyBleGVjdXRlZCBpbiBwcmlvcml0eSBvcmRlci4KKysgICAgQWZ0ZXIg dGhlIGV4ZWN1dGlvbiBjb21wbGV0ZXMsIHNsaWNlIHRoZSBpdGVyYXRvciB0byBmcmFtZV9sb3cg LQorKyAgICBmcmFtZV9oaWdoIHJhbmdlLgorKworKyAgICBBcmd1bWVudHM6CisrICAgICAgICBm cmFtZTogVGhlIGluaXRpYWwgZnJhbWUuCisrCisrICAgICAgICBmcmFtZV9sb3c6IFRoZSBsb3cg cmFuZ2Ugb2YgdGhlIHNsaWNlLiAgSWYgdGhpcyBpcyBhIG5lZ2F0aXZlCisrICAgICAgICBpbnRl Z2VyIHRoZW4gaXQgaW5kaWNhdGVzIGEgYmFja3dhcmQgc2xpY2UgKGllIGJ0IC00KSB3aGljaAor KyAgICAgICAgY291bnRzIGJhY2t3YXJkIGZyb20gdGhlIGxhc3QgZnJhbWUgaW4gdGhlIGJhY2t0 cmFjZS4KKysKKysgICAgICAgIGZyYW1lX2hpZ2g6IFRoZSBoaWdoIHJhbmdlIG9mIHRoZSBzbGlj ZS4gIElmIHRoaXMgaXMgLTEgdGhlbgorKyAgICAgICAgaXQgaW5kaWNhdGVzIGFsbCBmcmFtZXMg dW50aWwgdGhlIGVuZCBvZiB0aGUgc3RhY2sgZnJvbQorKyAgICAgICAgZnJhbWVfbG93LgorKwor KyAgICBSZXR1cm5zOgorKyAgICAgICAgZnJhbWVfaXRlcmF0b3I6IFRoZSBzbGljZWQgaXRlcmF0 b3IgYWZ0ZXIgYWxsIGZyYW1lCisrICAgICAgICBmaWx0ZXJzIGhhdmUgaGFkIGEgY2hhbmdlIHRv IGV4ZWN1dGUsIG9yIE5vbmUgaWYgbm8gZnJhbWUKKysgICAgICAgIGZpbHRlcnMgYXJlIHJlZ2lz dGVyZWQuCisrICAgICIiIgorKworKyAgICAjIEdldCBhIHNvcnRlZCBsaXN0IG9mIGZyYW1lIGZp bHRlcnMuCisrICAgIHNvcnRlZF9saXN0ID0gX3NvcnRfbGlzdCgpCisrCisrICAgICMgQ2hlY2sg dG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZnJhbWUtZmlsdGVycy4gIElmIG5vdCwganVzdAorKyAg ICAjIHJldHVybiBOb25lIGFuZCBsZXQgZGVmYXVsdCBiYWNrdHJhY2UgcHJpbnRpbmcgb2NjdXIu CisrICAgIGlmIGxlbihzb3J0ZWRfbGlzdCkgPT0gMDoKKysgICAgICAgIHJldHVybiBOb25lCisr CisrICAgIGZyYW1lX2l0ZXJhdG9yID0gRnJhbWVJdGVyYXRvcihmcmFtZSkKKysKKysgICAgIyBB cHBseSBhIGJhc2ljIGZyYW1lIGRlY29yYXRvciB0byBhbGwgZ2RiLkZyYW1lcy4gIFRoaXMgdW5p ZmllcyB0aGUKKysgICAgIyBpbnRlcmZhY2UuCisrICAgIGZyYW1lX2l0ZXJhdG9yID0gaXRlcnRv b2xzLmltYXAoRnJhbWVEZWNvcmF0b3IsIGZyYW1lX2l0ZXJhdG9yKQorKworKyAgICBmb3IgZmYg aW4gc29ydGVkX2xpc3Q6CisrICAgICAgICBmcmFtZV9pdGVyYXRvciA9IGZmLmZpbHRlcihmcmFt ZV9pdGVyYXRvcikKKysKKysgICAgIyBTbGljaW5nCisrCisrICAgICMgSXMgdGhpcyBhIHNsaWNl IGZyb20gdGhlIGVuZCBvZiB0aGUgYmFja3RyYWNlLCBpZSBidCAtMj8KKysgICAgaWYgZnJhbWVf bG93IDwgMDoKKysgICAgICAgIGNvdW50ID0gMAorKyAgICAgICAgc2xpY2VfbGVuZ3RoID0gYWJz KGZyYW1lX2xvdykKKysgICAgICAgICMgV2UgY2Fubm90IHVzZSBNQVhMRU4gYXJndW1lbnQgZm9y IGRlcXVlIGFzIGl0IGlzIDIuNiBvbndhcmRzCisrICAgICAgICAjIGFuZCBzb21lIEdEQiB2ZXJz aW9ucyBtaWdodCBiZSA8IDIuNi4KKysgICAgICAgIHNsaWNlZCA9IGNvbGxlY3Rpb25zLmRlcXVl KCkKKysKKysgICAgICAgIGZvciBmcmFtZV9pdGVtIGluIGZyYW1lX2l0ZXJhdG9yOgorKyAgICAg ICAgICAgIGlmIGNvdW50ID49IHNsaWNlX2xlbmd0aDoKKysgICAgICAgICAgICAgICAgc2xpY2Vk LnBvcGxlZnQoKTsKKysgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQorKyAgICAgICAgICAg IHNsaWNlZC5hcHBlbmQoZnJhbWVfaXRlbSkKKysKKysgICAgICAgIHJldHVybiBpdGVyKHNsaWNl ZCkKKysKKysgICAgIyAtMSBmb3IgZnJhbWVfaGlnaCBtZWFucyB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBiYWNrdHJhY2UuICBTZXQgdG8KKysgICAgIyBOb25lIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRv IGluZGljYXRlIHRvIGl0ZXJ0b29scy5pc2xpY2UgdG8KKysgICAgIyBzbGljZSB0byB0aGUgZW5k IG9mIHRoZSBpdGVyYXRvci4KKysgICAgaWYgZnJhbWVfaGlnaCA9PSAtMToKKysgICAgICAgIGZy YW1lX2hpZ2ggPSBOb25lCisrICAgIGVsc2U6CisrICAgICAgICAjIEFzIGZyYW1lcyBzdGFydCBm cm9tIDAsIGFkZCBvbmUgdG8gZnJhbWVfaGlnaCBzbyBpc2xpY2UKKysgICAgICAgICMgY29ycmVj dGx5IGZpbmRzIHRoZSBlbmQKKysgICAgICAgIGZyYW1lX2hpZ2ggPSBmcmFtZV9oaWdoICsgMTsK KysKKysgICAgc2xpY2VkID0gaXRlcnRvb2xzLmlzbGljZShmcmFtZV9pdGVyYXRvciwgZnJhbWVf bG93LCBmcmFtZV9oaWdoKQorKworKyAgICByZXR1cm4gc2xpY2VkCitJbmRleDogZ2RiLTcuNi9n ZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9y aWcvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CTIwMTMtMDUtMjAgMjI6MjM6MzYuNzQ4 MjE1MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkJ MjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTQxNjU3NjYgKzAyMDAKK0BAIC02Nyw2ICs2Nyw4IEBAIHBy ZXR0eV9wcmludGVycyA9IFtdCisgCisgIyBJbml0aWFsIHR5cGUgcHJpbnRlcnMuCisgdHlwZV9w cmludGVycyA9IFtdCisrIyBJbml0aWFsIGZyYW1lIGZpbHRlcnMuCisrZnJhbWVfZmlsdGVycyA9 IHt9CisgCisgIyBDb252ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIncyBweXRob24gZGlyZWN0b3J5 CisgUFlUSE9ORElSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykp CitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9mcmFtZV9maWx0ZXJz LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAw MDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9mcmFtZV9m aWx0ZXJzLnB5CTIwMTMtMDUtMjAgMjI6MjU6NTIuMTE0MTY1NzY2ICswMjAwCitAQCAtMCwwICsx LDQ2MSBAQAorKyMgRnJhbWUtZmlsdGVyIGNvbW1hbmRzLgorKyMgQ29weXJpZ2h0IChDKSAyMDEz IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KKysKKysiIiJHREIgY29tbWFuZHMgZm9yIHdvcmtpbmcgd2l0aCBmcmFtZS1maWx0 ZXJzLiIiIgorKworK2ltcG9ydCBnZGIKKytpbXBvcnQgY29weQorK2Zyb20gZ2RiLkZyYW1lSXRl cmF0b3IgaW1wb3J0IEZyYW1lSXRlcmF0b3IKKytmcm9tIGdkYi5GcmFtZURlY29yYXRvciBpbXBv cnQgRnJhbWVEZWNvcmF0b3IKKytpbXBvcnQgZ2RiLmZyYW1lcworK2ltcG9ydCBpdGVydG9vbHMK KysKKysjIEdEQiBDb21tYW5kcy4KKytjbGFzcyBTZXRGaWx0ZXJQcmVmaXhDbWQoZ2RiLkNvbW1h bmQpOgorKyAgICAiIiJQcmVmaXggY29tbWFuZCBmb3IgJ3NldCcgZnJhbWUtZmlsdGVyIHJlbGF0 ZWQgb3BlcmF0aW9ucy4iIiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorKyAgICAgICAg c3VwZXIoU2V0RmlsdGVyUHJlZml4Q21kLCBzZWxmKS5fX2luaXRfXygic2V0IGZyYW1lLWZpbHRl ciIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdk Yi5DT01NQU5EX09CU0NVUkUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdkYi5DT01QTEVURV9OT05FLCBUcnVlKQorKworK2NsYXNzIFNob3dGaWx0 ZXJQcmVmaXhDbWQoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJQcmVmaXggY29tbWFuZCBmb3IgJ3No b3cnIGZyYW1lLWZpbHRlciByZWxhdGVkIG9wZXJhdGlvbnMuIiIiCisrICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysgICAgICAgIHN1cGVyKFNob3dGaWx0ZXJQcmVmaXhDbWQsIHNlbGYpLl9faW5p dF9fKCJzaG93IGZyYW1lLWZpbHRlciIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9PQlNDVVJFLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUsIFRy dWUpCisrY2xhc3MgSW5mb0ZyYW1lRmlsdGVyKGdkYi5Db21tYW5kKToKKysgICAgIiIiTGlzdCBh bGwgcmVnaXN0ZXJlZCBQeXRob24gZnJhbWUtZmlsdGVycy4KKysKKysgICAgVXNhZ2U6IGluZm8g ZnJhbWUtZmlsdGVycworKyAgICAiIiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorKyAg ICAgICAgc3VwZXIoSW5mb0ZyYW1lRmlsdGVyLCBzZWxmKS5fX2luaXRfXygiaW5mbyBmcmFtZS1m aWx0ZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZGIuQ09NTUFORF9EQVRBKQorKyAgICBAc3RhdGljbWV0aG9kCisrICAgIGRlZiBlbmFibGVkX3N0 cmluZyhzdGF0ZSk6CisrICAgICAgICAiIiJSZXR1cm4gIlllcyIgaWYgZmlsdGVyIGlzIGVuYWJs ZWQsIG90aGVyd2lzZSAiTm8iLiIiIgorKyAgICAgICAgaWYgc3RhdGU6CisrICAgICAgICAgICAg cmV0dXJuICJZZXMiCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHJldHVybiAiTm8iCisr CisrICAgIGRlZiBsaXN0X2ZyYW1lX2ZpbHRlcnMoc2VsZiwgZnJhbWVfZmlsdGVycyk6CisrICAg ICAgICAiIiIgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIGxpc3QgYW5kIHByaW50IGZyYW1l IGZpbHRlcnMKKysgICAgICAgIGluIGEgZGljdGlvbmFyeS4KKysKKysgICAgICAgIEFyZ3VtZW50 czoKKysgICAgICAgICAgIGZyYW1lX2ZpbHRlcnM6IFRoZSBuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5 LCBhcworKyAgICAgICAgICAgc3BlY2lmaWVkIGJ5IEdEQiB1c2VyIGNvbW1hbmRzLgorKyAgICAg ICAgIiIiCisrCisrICAgICAgICBzb3J0ZWRfZnJhbWVfZmlsdGVycyA9IHNvcnRlZChmcmFtZV9m aWx0ZXJzLml0ZW1zKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr ZXk9bGFtYmRhIGk6IGdkYi5mcmFtZXMuZ2V0X3ByaW9yaXR5KGlbMV0pLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZT1UcnVlKQorKworKyAgICAgICAgaWYg bGVuKHNvcnRlZF9mcmFtZV9maWx0ZXJzKSA9PSAwOgorKyAgICAgICAgICAgIHByaW50KCIgIE5v IGZyYW1lIGZpbHRlcnMgcmVnaXN0ZXJlZC4iKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAg ICBwcmludCgiICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZSIpCisrICAgICAgICAgICAgZm9yIGZy YW1lX2ZpbHRlciBpbiBzb3J0ZWRfZnJhbWVfZmlsdGVyczoKKysgICAgICAgICAgICAgICAgbmFt ZSA9IGZyYW1lX2ZpbHRlclswXQorKyAgICAgICAgICAgICAgICB0cnk6CisrICAgICAgICAgICAg ICAgICAgICBwcmlvcml0eSA9ICd7Ojw4fScuZm9ybWF0KAorKyAgICAgICAgICAgICAgICAgICAg ICAgIHN0cihnZGIuZnJhbWVzLmdldF9wcmlvcml0eShmcmFtZV9maWx0ZXJbMV0pKSkKKysgICAg ICAgICAgICAgICAgICAgIGVuYWJsZWQgPSAnezo8N30nLmZvcm1hdCgKKysgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLmVuYWJsZWRfc3RyaW5nKGdkYi5mcmFtZXMuZ2V0X2VuYWJsZWQoZnJh bWVfZmlsdGVyWzFdKSkpCisrICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK KysgICAgICAgICAgICAgICAgICAgIHByaW50KCIgIEVycm9yIHByaW50aW5nIGZpbHRlciAnIitu YW1lKyInOiAiK3N0cihlKSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAg ICAgICAgIHByaW50KCIgICVzICAlcyAgJXMiICUgKHByaW9yaXR5LCBlbmFibGVkLCBuYW1lKSkK KysKKysgICAgZGVmIHByaW50X2xpc3Qoc2VsZiwgdGl0bGUsIGZpbHRlcl9saXN0LCBibGFua19s aW5lKToKKysgICAgICAgIHByaW50KHRpdGxlKQorKyAgICAgICAgc2VsZi5saXN0X2ZyYW1lX2Zp bHRlcnMoZmlsdGVyX2xpc3QpCisrICAgICAgICBpZiBibGFua19saW5lOgorKyAgICAgICAgICAg IHByaW50KCIiKQorKworKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgorKyAg ICAgICAgc2VsZi5wcmludF9saXN0KCJnbG9iYWwgZnJhbWUtZmlsdGVyczoiLCBnZGIuZnJhbWVf ZmlsdGVycywgVHJ1ZSkKKysKKysgICAgICAgIGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkK KysgICAgICAgIHNlbGYucHJpbnRfbGlzdCgicHJvZ3NwYWNlICVzIGZyYW1lLWZpbHRlcnM6IiAl IGNwLmZpbGVuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNwLmZyYW1lX2ZpbHRlcnMs IFRydWUpCisrCisrICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKysgICAg ICAgICAgICBzZWxmLnByaW50X2xpc3QoIm9iamZpbGUgJXMgZnJhbWUtZmlsdGVyczoiICUgb2Jq ZmlsZS5maWxlbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZmlsZS5mcmFt ZV9maWx0ZXJzLCBGYWxzZSkKKysKKysjIEludGVybmFsIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9u cy4KKysKKytkZWYgX2VuYWJsZV9wYXJzZV9hcmcoY21kX25hbWUsIGFyZyk6CisrICAgICIiIiBJ bnRlcm5hbCB3b3JrZXIgZnVuY3Rpb24gdG8gdGFrZSBhbiBhcmd1bWVudCBmcm9tCisrICAgIGVu YWJsZS9kaXNhYmxlIGFuZCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMuCisrCisrICAgIEFy Z3VtZW50czoKKysgICAgICAgIGNtZF9uYW1lOiBOYW1lIG9mIHRoZSBjb21tYW5kIGludm9raW5n IHRoaXMgZnVuY3Rpb24uCisrICAgICAgICBhcmdzOiBUaGUgYXJndW1lbnQgYXMgYSBzdHJpbmcu CisrCisrICAgIFJldHVybnM6CisrICAgICAgICBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGRpY3Rp b25hcnksIGFuZCB0aGUgYXJndW1lbnQsIG9yIGp1c3QKKysgICAgICAgIHRoZSBkaWN0aW9uYXJ5 IGluIHRoZSBjYXNlIG9mICJhbGwiLgorKyAgICAiIiIKKysKKysgICAgYXJndiA9IGdkYi5zdHJp bmdfdG9fYXJndihhcmcpOworKyAgICBhcmdjID0gbGVuKGFyZ3YpCisrICAgIGlmIGFyZ3ZbMF0g PT0gImFsbCIgYW5kIGFyZ2MgPiAxOgorKyAgICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKGNtZF9u YW1lICsgIjogd2l0aCAnYWxsJyAiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJ5b3Ug bWF5IG5vdCBzcGVjaWZ5IGEgZmlsdGVyLiIpCisrICAgIGVsc2U6CisrICAgICAgICBpZiBhcmd2 WzBdICE9ICJhbGwiIGFuZCBhcmdjICE9IDI6CisrICAgICAgICAgICAgcmFpc2UgZ2RiLkdkYkVy cm9yKGNtZF9uYW1lICsgIiB0YWtlcyBleGFjdGx5IHR3byBhcmd1bWVudHMuIikKKysKKysgICAg cmV0dXJuIGFyZ3YKKysKKytkZWYgX2RvX2VuYWJsZV9mcmFtZV9maWx0ZXIoY29tbWFuZF90dXBs ZSwgZmxhZyk6CisrICAgICIiIldvcmtlciBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIGZyYW1lX2Zp bHRlcnMuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIGNvbW1hbmRfdHlwZTogQSB0dXBs ZSB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGJlaW5nIHRoZQorKyAgICAgICAgICAgICAgICAgICAg ICBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgYmVpbmcKKysgICAgICAg ICAgICAgICAgICAgICAgdGhlIGZyYW1lIGZpbHRlciBuYW1lLgorKyAgICAgICAgZmxhZzogVHJ1 ZSBmb3IgRW5hYmxlLCBGYWxzZSBmb3IgRGlzYWJsZS4KKysgICAgIiIiCisrCisrICAgIGxpc3Rf b3AgPSBjb21tYW5kX3R1cGxlWzBdCisrICAgIG9wX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9s aXN0KGxpc3Rfb3ApCisrCisrICAgIGlmIGxpc3Rfb3AgPT0gImFsbCI6CisrICAgICAgICBmb3Ig aXRlbSBpbiBvcF9saXN0OgorKyAgICAgICAgICAgIGdkYi5mcmFtZXMuc2V0X2VuYWJsZWQoaXRl bSwgZmxhZykKKysgICAgZWxzZToKKysgICAgICAgIGZyYW1lX2ZpbHRlciA9IGNvbW1hbmRfdHVw bGVbMV0KKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBmZiA9IG9wX2xpc3RbZnJhbWVfZmls dGVyXQorKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorKyAgICAgICAgICAgIG1zZyA9ICJmcmFt ZS1maWx0ZXIgJyIgKyBzdHIobmFtZSkgKyAiJyBub3QgZm91bmQuIgorKyAgICAgICAgICAgIHJh aXNlIGdkYi5HZGJFcnJvcihtc2cpCisrCisrICAgICAgICBnZGIuZnJhbWVzLnNldF9lbmFibGVk KGZmLCBmbGFnKQorKworK2RlZiBfY29tcGxldGVfZnJhbWVfZmlsdGVyX2xpc3QodGV4dCwgd29y ZCwgYWxsX2ZsYWcpOgorKyAgICAiIiJXb3JrZXIgZm9yIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5 IG5hbWUgY29tcGxldGlvbi4KKysKKysgICAgQXJndW1lbnRzOgorKyAgICAgICAgdGV4dDogVGhl IGZ1bGwgdGV4dCBvZiB0aGUgY29tbWFuZCBsaW5lLgorKyAgICAgICAgd29yZDogVGhlIG1vc3Qg cmVjZW50IHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZS4KKysgICAgICAgIGFsbF9mbGFnOiBXaGV0 aGVyIHRvIGluY2x1ZGUgdGhlIHdvcmQgImFsbCIgaW4gY29tcGxldGlvbi4KKysKKysgICAgUmV0 dXJuczoKKysgICAgICAgIEEgbGlzdCBvZiBzdWdnZXN0ZWQgZnJhbWUgZmlsdGVyIGRpY3Rpb25h cnkgbmFtZSBjb21wbGV0aW9ucworKyAgICAgICAgZnJvbSB0ZXh0L3dvcmQgYW5hbHlzaXMuICBU aGlzIGxpc3QgY2FuIGJlIGVtcHR5IHdoZW4gdGhlcmUKKysgICAgICAgIGFyZSBubyBzdWdnZXN0 aW9ucyBmb3IgY29tcGxldGlvbi4KKysgICAgICAgICIiIgorKyAgICBpZiBhbGxfZmxhZyA9PSBU cnVlOgorKyAgICAgICAgZmlsdGVyX2xvY2F0aW9ucyA9IFsiYWxsIiwgImdsb2JhbCIsICJwcm9n c3BhY2UiXQorKyAgICBlbHNlOgorKyAgICAgICAgZmlsdGVyX2xvY2F0aW9ucyA9IFsiZ2xvYmFs IiwgInByb2dzcGFjZSJdCisrICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgorKyAg ICAgICAgZmlsdGVyX2xvY2F0aW9ucy5hcHBlbmQob2JqZmlsZS5maWxlbmFtZSkKKysKKysgICAg IyBJZiB0aGUgdXNlciBqdXN0IGFza2VkIGZvciBjb21wbGV0aW9ucyB3aXRoIG5vIGNvbXBsZXRp b24KKysgICAgIyBoaW50cywganVzdCByZXR1cm4gYWxsIHRoZSBmcmFtZSBmaWx0ZXIgZGljdGlv bmFyaWVzIHdlIGtub3cKKysgICAgIyBhYm91dC4KKysgICAgaWYgKHRleHQgPT0gIiIpOgorKyAg ICAgICAgcmV0dXJuIGZpbHRlcl9sb2NhdGlvbnMKKysKKysgICAgIyBPdGhlcndpc2UgZmlsdGVy IG9uIHdoYXQgd2Uga25vdy4KKysgICAgZmxpc3QgPSBmaWx0ZXIobGFtYmRhIHgseT10ZXh0Ongu c3RhcnRzd2l0aCh5KSwgZmlsdGVyX2xvY2F0aW9ucykKKysKKysgICAgIyBJZiB3ZSBvbmx5IGhh dmUgb25lIGNvbXBsZXRpb24sIGNvbXBsZXRlIGl0IGFuZCByZXR1cm4gaXQuCisrICAgIGlmIGxl bihmbGlzdCkgPT0gMToKKysgICAgICAgIGZsaXN0WzBdID0gZmxpc3RbMF1bbGVuKHRleHQpLWxl bih3b3JkKTpdCisrCisrICAgICMgT3RoZXJ3aXNlLCByZXR1cm4gYW4gZW1wdHkgbGlzdCwgb3Ig YSBsaXN0IG9mIGZyYW1lIGZpbHRlcgorKyAgICAjIGRpY3Rpb25hcmllcyB0aGF0IHRoZSBwcmV2 aW91cyBmaWx0ZXIgb3BlcmF0aW9uIHJldHVybmVkLgorKyAgICByZXR1cm4gZmxpc3QKKysKKytk ZWYgX2NvbXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdvcmQsIHByaW50ZXJfZGljdCk6CisrICAg ICIiIldvcmtlciBmb3IgZnJhbWUgZmlsdGVyIG5hbWUgY29tcGxldGlvbi4KKysKKysgICAgQXJn dW1lbnRzOgorKworKyAgICAgICAgd29yZDogVGhlIG1vc3QgcmVjZW50IHdvcmQgb2YgdGhlIGNv bW1hbmQgbGluZS4KKysKKysgICAgICAgIHByaW50ZXJfZGljdDogVGhlIGZyYW1lIGZpbHRlciBk aWN0aW9uYXJ5IHRvIHNlYXJjaCBmb3IgZnJhbWUKKysgICAgICAgIGZpbHRlciBuYW1lIGNvbXBs ZXRpb25zLgorKworKyAgICAgICAgUmV0dXJuczogQSBsaXN0IG9mIHN1Z2dlc3RlZCBmcmFtZSBm aWx0ZXIgbmFtZSBjb21wbGV0aW9ucworKyAgICAgICAgZnJvbSB3b3JkIGFuYWx5c2lzIG9mIHRo ZSBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeS4gIFRoaXMgbGlzdAorKyAgICAgICAgY2FuIGJlIGVt cHR5IHdoZW4gdGhlcmUgYXJlIG5vIHN1Z2dlc3Rpb25zIGZvciBjb21wbGV0aW9uLgorKyAgICAi IiIKKysKKysgICAgcHJpbnRlcl9rZXlzID0gcHJpbnRlcl9kaWN0LmtleXMoKQorKyAgICBpZiAo d29yZCA9PSAiIik6CisrICAgICAgICByZXR1cm4gcHJpbnRlcl9rZXlzCisrCisrICAgIGZsaXN0 ID0gZmlsdGVyKGxhbWJkYSB4LHk9d29yZDp4LnN0YXJ0c3dpdGgoeSksIHByaW50ZXJfa2V5cykK KysgICAgcmV0dXJuIGZsaXN0CisrCisrY2xhc3MgRW5hYmxlRnJhbWVGaWx0ZXIoZ2RiLkNvbW1h bmQpOgorKyAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgZnJhbWUt ZmlsdGVyLgorKworKyAgICBVc2FnZTogZW5hYmxlIGZyYW1lLWZpbHRlciBlbmFibGUgRElDVElP TkFSWSBbTkFNRV0KKysKKysgICAgRElDVElPTkFSWSBpcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUg ZmlsdGVyIGRpY3Rpb25hcnkgb24gd2hpY2ggdG8KKysgICAgb3BlcmF0ZS4gIElmIGRpY3Rpb25h cnkgaXMgc2V0IHRvICJhbGwiLCBwZXJmb3JtIG9wZXJhdGlvbnMgb24gYWxsCisrICAgIGRpY3Rp b25hcmllcy4gIE5hbWVkIGRpY3Rpb25hcmllcyBhcmU6ICJnbG9iYWwiIGZvciB0aGUgZ2xvYmFs CisrICAgIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCAicHJvZ3NwYWNlIiBmb3IgdGhlIHByb2dy YW0gc3BhY2UncyBmcmFtZQorKyAgICBmaWx0ZXIgZGljdGlvbmFyeS4gIElmIGVpdGhlciBhbGws IG9yIHRoZSB0d28gbmFtZWQgZGljdGlvbmFyaWVzCisrICAgIGFyZSBub3Qgc3BlY2lmaWVkLCB0 aGUgZGljdGlvbmFyeSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG5hbWUKKysgICAgb2YgdGhl IG9iamVjdC1maWxlIG5hbWUuCisrCisrICAgIE5BTUUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUg ZnJhbWUtZmlsdGVyIHRvIG9wZXJhdGUgb24uICBJZgorKyAgICBESUNUSU9OQVJZIGlzICJhbGwi LCBOQU1FIGlzIGlnbm9yZWQuCisrICAgICIiIgorKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisr ICAgICAgICBzdXBlcihFbmFibGVGcmFtZUZpbHRlciwgc2VsZikuX19pbml0X18oImVuYWJsZSBm cmFtZS1maWx0ZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorKyAgICBkZWYgY29tcGxldGUoc2VsZiwgdGV4dCwg d29yZCk6CisrICAgICAgICAiIiJDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBib3RoIGZyYW1lIGZp bHRlciBkaWN0aW9uYXJ5LCBhbmQKKysgICAgICAgIGZyYW1lIGZpbHRlciBuYW1lLiIiIgorKyAg ICAgICAgaWYgdGV4dC5jb3VudCgiICIpID09IDA6CisrICAgICAgICAgICAgcmV0dXJuIF9jb21w bGV0ZV9mcmFtZV9maWx0ZXJfbGlzdCh0ZXh0LCB3b3JkLCBUcnVlKQorKyAgICAgICAgZWxzZToK KysgICAgICAgICAgICBwcmludGVyX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KHRleHQu c3BsaXQoKVswXS5yc3RyaXAoKSkKKysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1l X2ZpbHRlcl9uYW1lKHdvcmQsIHByaW50ZXJfbGlzdCkKKysKKysgICAgZGVmIGludm9rZShzZWxm LCBhcmcsIGZyb21fdHR5KToKKysgICAgICAgIGNvbW1hbmRfdHVwbGUgPSBfZW5hYmxlX3BhcnNl X2FyZygiZW5hYmxlIGZyYW1lLWZpbHRlciIsIGFyZykKKysgICAgICAgIF9kb19lbmFibGVfZnJh bWVfZmlsdGVyKGNvbW1hbmRfdHVwbGUsIFRydWUpCisrCisrCisrY2xhc3MgRGlzYWJsZUZyYW1l RmlsdGVyKGdkYi5Db21tYW5kKToKKysgICAgIiIiR0RCIGNvbW1hbmQgdG8gZGlzYWJsZSB0aGUg c3BlY2lmaWVkIGZyYW1lLWZpbHRlci4KKysKKysgICAgVXNhZ2U6IGRpc2FibGUgZnJhbWUtZmls dGVyIGRpc2FibGUgRElDVElPTkFSWSBbTkFNRV0KKysKKysgICAgRElDVElPTkFSWSBpcyB0aGUg bmFtZSBvZiB0aGUgZnJhbWUgZmlsdGVyIGRpY3Rpb25hcnkgb24gd2hpY2ggdG8KKysgICAgb3Bl cmF0ZS4gIElmIGRpY3Rpb25hcnkgaXMgc2V0IHRvICJhbGwiLCBwZXJmb3JtIG9wZXJhdGlvbnMg b24gYWxsCisrICAgIGRpY3Rpb25hcmllcy4gIE5hbWVkIGRpY3Rpb25hcmllcyBhcmU6ICJnbG9i YWwiIGZvciB0aGUgZ2xvYmFsCisrICAgIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCAicHJvZ3Nw YWNlIiBmb3IgdGhlIHByb2dyYW0gc3BhY2UncyBmcmFtZQorKyAgICBmaWx0ZXIgZGljdGlvbmFy eS4gIElmIGVpdGhlciBhbGwsIG9yIHRoZSB0d28gbmFtZWQgZGljdGlvbmFyaWVzCisrICAgIGFy ZSBub3Qgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhl IG5hbWUKKysgICAgb2YgdGhlIG9iamVjdC1maWxlIG5hbWUuCisrCisrICAgIE5BTUUgbWF0Y2hl cyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUtZmlsdGVyIHRvIG9wZXJhdGUgb24uICBJZgorKyAgICBE SUNUSU9OQVJZIGlzICJhbGwiLCBOQU1FIGlzIGlnbm9yZWQuCisrICAgICIiIgorKyAgICBkZWYg X19pbml0X18oc2VsZik6CisrICAgICAgICBzdXBlcihEaXNhYmxlRnJhbWVGaWx0ZXIsIHNlbGYp Ll9faW5pdF9fKCJkaXNhYmxlIGZyYW1lLWZpbHRlciIsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorKworKyAgICBk ZWYgY29tcGxldGUoc2VsZiwgdGV4dCwgd29yZCk6CisrICAgICAgICAiIiJDb21wbGV0aW9uIGZ1 bmN0aW9uIGZvciBib3RoIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCBhbmQKKysgICAgICAgIGZy YW1lIGZpbHRlciBuYW1lLiIiIgorKyAgICAgICAgaWYgdGV4dC5jb3VudCgiICIpID09IDA6Cisr ICAgICAgICAgICAgcmV0dXJuIF9jb21wbGV0ZV9mcmFtZV9maWx0ZXJfbGlzdCh0ZXh0LCB3b3Jk LCBUcnVlKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBwcmludGVyX2xpc3QgPSBnZGIu ZnJhbWVzLnJldHVybl9saXN0KHRleHQuc3BsaXQoKVswXS5yc3RyaXAoKSkKKysgICAgICAgICAg ICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdvcmQsIHByaW50ZXJfbGlzdCkK KysKKysgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKysgICAgICAgIGNvbW1h bmRfdHVwbGUgPSBfZW5hYmxlX3BhcnNlX2FyZygiZGlzYWJsZSBmcmFtZS1maWx0ZXIiLCBhcmcp CisrICAgICAgICBfZG9fZW5hYmxlX2ZyYW1lX2ZpbHRlcihjb21tYW5kX3R1cGxlLCBGYWxzZSkK KysKKytjbGFzcyBTZXRGcmFtZUZpbHRlclByaW9yaXR5KGdkYi5Db21tYW5kKToKKysgICAgIiIi R0RCIGNvbW1hbmQgdG8gc2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lLWZp bHRlci4KKysKKysgICAgVXNhZ2U6IHNldCBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgRElDVElPTkFS WSBOQU1FIFBSSU9SSVRZCisrCisrICAgIERJQ1RJT05BUlkgaXMgdGhlIG5hbWUgb2YgdGhlIGZy YW1lIGZpbHRlciBkaWN0aW9uYXJ5IG9uIHdoaWNoIHRvCisrICAgIG9wZXJhdGUuICBOYW1lZCBk aWN0aW9uYXJpZXMgYXJlOiAiZ2xvYmFsIiBmb3IgdGhlIGdsb2JhbCBmcmFtZQorKyAgICBmaWx0 ZXIgZGljdGlvbmFyeSwgInByb2dzcGFjZSIgZm9yIHRoZSBwcm9ncmFtIHNwYWNlJ3MgZnJhbWVm aWx0ZXIKKysgICAgZGljdGlvbmFyeS4gIElmIGVpdGhlciBvZiB0aGVzZSB0d28gYXJlIG5vdCBz cGVjaWZpZWQsIHRoZQorKyAgICBkaWN0aW9uYXJ5IG5hbWUgaXMgYXNzdW1lZCB0byBiZSB0aGUg bmFtZSBvZiB0aGUgb2JqZWN0LWZpbGUgbmFtZS4KKysKKysgICAgTkFNRSBtYXRjaGVzIHRoZSBu YW1lIG9mIHRoZSBmcmFtZSBmaWx0ZXIgdG8gb3BlcmF0ZSBvbi4KKysKKysgICAgUFJJT1JJVFkg aXMgdGhlIGFuIGludGVnZXIgdG8gYXNzaWduIHRoZSBuZXcgcHJpb3JpdHkgdG8gdGhlIGZyYW1l CisrICAgIGZpbHRlci4KKysgICAgIiIiCisrCisrICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKysg ICAgICAgIHN1cGVyKFNldEZyYW1lRmlsdGVyUHJpb3JpdHksIHNlbGYpLl9faW5pdF9fKCJzZXQg ZnJhbWUtZmlsdGVyICIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInByaW9yaXR5IiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisrCisrICAgIGRlZiBf cGFyc2VfcHJpX2FyZyhzZWxmLCBhcmcpOgorKyAgICAgICAgIiIiSW50ZXJuYWwgd29ya2VyIHRv IHBhcnNlIGEgcHJpb3JpdHkgZnJvbSBhIHR1cGxlLgorKworKyAgICAgICAgQXJndW1lbnRzOgor KyAgICAgICAgICAgIGFyZzogVHVwbGUgd2hpY2ggY29udGFpbnMgdGhlIGFyZ3VtZW50cyBmcm9t IHRoZSBjb21tYW5kLgorKworKyAgICAgICAgUmV0dXJuczoKKysgICAgICAgICAgICBBIHR1cGxl IGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnksIG5hbWUgYW5kIHByaW9yaXR5IGZyb20KKysgICAg ICAgICAgICB0aGUgYXJndW1lbnRzLgorKworKyAgICAgICAgUmFpc2VzOgorKyAgICAgICAgICAg IGdkYi5HZGJFcnJvcjogQW4gZXJyb3IgcGFyc2luZyB0aGUgYXJndW1lbnRzLgorKyAgICAgICAg IiIiCisrCisrICAgICAgICBhcmd2ID0gZ2RiLnN0cmluZ190b19hcmd2KGFyZyk7CisrICAgICAg ICBhcmdjID0gbGVuKGFyZ3YpCisrICAgICAgICBpZiBhcmdjICE9IDM6CisrICAgICAgICAgICAg cHJpbnQoInNldCBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgIiBcCisrICAgICAgICAgICAgICAgICAg InRha2VzIGV4YWN0bHkgdGhyZWUgYXJndW1lbnRzLiIpCisrICAgICAgICAgICAgcmV0dXJuIE5v bmUKKysKKysgICAgICAgIHJldHVybiBhcmd2CisrCisrICAgIGRlZiBfc2V0X2ZpbHRlcl9wcmlv cml0eShzZWxmLCBjb21tYW5kX3R1cGxlKToKKysgICAgICAgICIiIkludGVybmFsIHdvcmtlciBm b3Igc2V0dGluZyBwcmlvcml0eSBvZiBmcmFtZS1maWx0ZXJzLCBieQorKyAgICAgICAgcGFyc2lu ZyBhIHR1cGxlIGFuZCBjYWxsaW5nIF9zZXRfcHJpb3JpdHkgd2l0aCB0aGUgcGFyc2VkCisrICAg ICAgICB0dXBsZS4KKysKKysgICAgICAgIEFyZ3VtZW50czoKKysgICAgICAgICAgICBjb21tYW5k X3R1cGxlOiBUdXBsZSB3aGljaCBjb250YWlucyB0aGUgYXJndW1lbnRzIGZyb20gdGhlCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4KKysgICAgICAgICIiIgorKworKyAgICAg ICAgbGlzdF9vcCA9IGNvbW1hbmRfdHVwbGVbMF0KKysgICAgICAgIGZyYW1lX2ZpbHRlciA9IGNv bW1hbmRfdHVwbGVbMV0KKysgICAgICAgIHByaW9yaXR5ID0gY29tbWFuZF90dXBsZVsyXQorKwor KyAgICAgICAgb3BfbGlzdCA9IGdkYi5mcmFtZXMucmV0dXJuX2xpc3QobGlzdF9vcCkKKysKKysg ICAgICAgIHRyeToKKysgICAgICAgICAgICBmZiA9IG9wX2xpc3RbZnJhbWVfZmlsdGVyXQorKyAg ICAgICAgZXhjZXB0IEtleUVycm9yOgorKyAgICAgICAgICAgIG1zZyA9ICJmcmFtZS1maWx0ZXIg JyIgKyBzdHIobmFtZSkgKyAiJyBub3QgZm91bmQuIgorKyAgICAgICAgICAgIHJhaXNlIGdkYi5H ZGJFcnJvcihtc2cpCisrCisrICAgICAgICBnZGIuZnJhbWVzLnNldF9wcmlvcml0eShmZiwgcHJp b3JpdHkpCisrCisrICAgIGRlZiBjb21wbGV0ZShzZWxmLCB0ZXh0LCB3b3JkKToKKysgICAgICAg ICIiIkNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGJvdGggZnJhbWUgZmlsdGVyIGRpY3Rpb25hcnks IGFuZAorKyAgICAgICAgZnJhbWUgZmlsdGVyIG5hbWUuIiIiCisrICAgICAgICBpZiB0ZXh0LmNv dW50KCIgIikgPT0gMDoKKysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1lX2ZpbHRl cl9saXN0KHRleHQsIHdvcmQsIEZhbHNlKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBw cmludGVyX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KHRleHQuc3BsaXQoKVswXS5yc3Ry aXAoKSkKKysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdv cmQsIHByaW50ZXJfbGlzdCkKKysKKysgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5 KToKKysgICAgICAgIGNvbW1hbmRfdHVwbGUgPSBzZWxmLl9wYXJzZV9wcmlfYXJnKGFyZykKKysg ICAgICAgIGlmIGNvbW1hbmRfdHVwbGUgIT0gTm9uZToKKysgICAgICAgICAgICBzZWxmLl9zZXRf ZmlsdGVyX3ByaW9yaXR5KGNvbW1hbmRfdHVwbGUpCisrCisrY2xhc3MgU2hvd0ZyYW1lRmlsdGVy UHJpb3JpdHkoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJHREIgY29tbWFuZCB0byBzaG93IHRoZSBw cmlvcml0eSBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lLWZpbHRlci4KKysKKysgICAgVXNhZ2U6IHNo b3cgZnJhbWUtZmlsdGVyIHByaW9yaXR5IERJQ1RJT05BUlkgTkFNRQorKworKyAgICBESUNUSU9O QVJZIGlzIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeSBvbiB3aGljaCB0 bworKyAgICBvcGVyYXRlLiAgTmFtZWQgZGljdGlvbmFyaWVzIGFyZTogImdsb2JhbCIgZm9yIHRo ZSBnbG9iYWwgZnJhbWUKKysgICAgZmlsdGVyIGRpY3Rpb25hcnksICJwcm9nc3BhY2UiIGZvciB0 aGUgcHJvZ3JhbSBzcGFjZSdzIGZyYW1lZmlsdGVyCisrICAgIGRpY3Rpb25hcnkuICBJZiBlaXRo ZXIgb2YgdGhlc2UgdHdvIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGUKKysgICAgZGljdGlvbmFyeSBu YW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIG9iamVjdC1maWxlIG5hbWUuCisr CisrICAgIE5BTUUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUtZmlsdGVyIHRvIG9wZXJh dGUgb24uCisrICAgICIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBz dXBlcihTaG93RnJhbWVGaWx0ZXJQcmlvcml0eSwgc2VsZikuX19pbml0X18oInNob3cgZnJhbWUt ZmlsdGVyICIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJwcmlvcml0eSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKysKKysgICAgZGVmIF9wYXJz ZV9wcmlfYXJnKHNlbGYsIGFyZyk6CisrICAgICAgICAiIiJJbnRlcm5hbCB3b3JrZXIgdG8gcGFy c2UgYSBkaWN0aW9uYXJ5IGFuZCBuYW1lIGZyb20gYQorKyAgICAgICAgdHVwbGUuCisrCisrICAg ICAgICBBcmd1bWVudHM6CisrICAgICAgICAgICAgYXJnOiBUdXBsZSB3aGljaCBjb250YWlucyB0 aGUgYXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQuCisrCisrICAgICAgICBSZXR1cm5zOgorKyAg ICAgICAgICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeSwgIGFuZCBmcmFtZSBm aWx0ZXIgbmFtZS4KKysKKysgICAgICAgIFJhaXNlczoKKysgICAgICAgICAgICBnZGIuR2RiRXJy b3I6IEFuIGVycm9yIHBhcnNpbmcgdGhlIGFyZ3VtZW50cy4KKysgICAgICAgICIiIgorKworKyAg ICAgICAgYXJndiA9IGdkYi5zdHJpbmdfdG9fYXJndihhcmcpOworKyAgICAgICAgYXJnYyA9IGxl bihhcmd2KQorKyAgICAgICAgaWYgYXJnYyAhPSAyOgorKyAgICAgICAgICAgIHByaW50KCJzaG93 IGZyYW1lLWZpbHRlciBwcmlvcml0eSAiIFwKKysgICAgICAgICAgICAgICAgICAidGFrZXMgZXhh Y3RseSB0d28gYXJndW1lbnRzLiIpCisrICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysKKysgICAg ICAgIHJldHVybiBhcmd2CisrCisrICAgIGRlZiBnZXRfZmlsdGVyX3ByaW9yaXR5KHNlbGYsIGZy YW1lX2ZpbHRlcnMsIG5hbWUpOgorKyAgICAgICAgIiIiV29ya2VyIGZvciByZXRyaWV2aW5nIHRo ZSBwcmlvcml0eSBvZiBmcmFtZV9maWx0ZXJzLgorKworKyAgICAgICAgQXJndW1lbnRzOgorKyAg ICAgICAgICAgIGZyYW1lX2ZpbHRlcnM6IE5hbWUgb2YgZnJhbWUgZmlsdGVyIGRpY3Rpb25hcnku CisrICAgICAgICAgICAgbmFtZTogb2JqZWN0IHRvIHNlbGVjdCBwcmludGVycy4KKysKKysgICAg ICAgIFJldHVybnM6CisrICAgICAgICAgICAgVGhlIHByaW9yaXR5IG9mIHRoZSBmcmFtZSBmaWx0 ZXIuCisrCisrICAgICAgICBSYWlzZXM6CisrICAgICAgICAgICAgZ2RiLkdkYkVycm9yOiBBIGZy YW1lIGZpbHRlciBjYW5ub3QgYmUgZm91bmQuCisrICAgICAgICAiIiIKKysKKysgICAgICAgIG9w X2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KGZyYW1lX2ZpbHRlcnMpCisrCisrICAgICAg ICB0cnk6CisrICAgICAgICAgICAgZmYgPSBvcF9saXN0W25hbWVdCisrICAgICAgICBleGNlcHQg S2V5RXJyb3I6CisrICAgICAgICAgICAgbXNnID0gImZyYW1lLWZpbHRlciAnIiArIHN0cihuYW1l KSArICInIG5vdCBmb3VuZC4iCisrICAgICAgICAgICAgcmFpc2UgZ2RiLkdkYkVycm9yKG1zZykK KysKKysgICAgICAgIHJldHVybiBnZGIuZnJhbWVzLmdldF9wcmlvcml0eShmZikKKysKKysgICAg ZGVmIGNvbXBsZXRlKHNlbGYsIHRleHQsIHdvcmQpOgorKyAgICAgICAgIiIiQ29tcGxldGlvbiBm dW5jdGlvbiBmb3IgYm90aCBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeSwgYW5kCisrICAgICAgICBm cmFtZSBmaWx0ZXIgbmFtZS4iIiIKKysKKysgICAgICAgIGlmIHRleHQuY291bnQoIiAiKSA9PSAw OgorKyAgICAgICAgICAgIHJldHVybiBfY29tcGxldGVfZnJhbWVfZmlsdGVyX2xpc3QodGV4dCwg d29yZCwgRmFsc2UpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHByaW50ZXJfbGlzdCA9 IGZyYW1lLl9yZXR1cm5fbGlzdCh0ZXh0LnNwbGl0KClbMF0ucnN0cmlwKCkpCisrICAgICAgICAg ICAgcmV0dXJuIF9jb21wbGV0ZV9mcmFtZV9maWx0ZXJfbmFtZSh3b3JkLCBwcmludGVyX2xpc3Qp CisrCisrICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6CisrICAgICAgICBjb21t YW5kX3R1cGxlID0gc2VsZi5fcGFyc2VfcHJpX2FyZyhhcmcpCisrICAgICAgICBpZiBjb21tYW5k X3R1cGxlID09IE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBmaWx0ZXJfbmFt ZSA9IGNvbW1hbmRfdHVwbGVbMV0KKysgICAgICAgIGxpc3RfbmFtZSA9IGNvbW1hbmRfdHVwbGVb MF0KKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBwcmlvcml0eSA9IHNlbGYuZ2V0X2ZpbHRl cl9wcmlvcml0eShsaXN0X25hbWUsIGZpbHRlcl9uYW1lKTsKKysgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKKysgICAgICAgICAgICBwcmludCgiRXJyb3IgcHJpbnRpbmcgZmlsdGVyIHBy aW9yaXR5IGZvciAnIituYW1lKyInOiIrc3RyKGUpKQorKyAgICAgICAgZWxzZToKKysgICAgICAg ICAgICBwcmludCgiUHJpb3JpdHkgb2YgZmlsdGVyICciICsgZmlsdGVyX25hbWUgKyAiJyBpbiBs aXN0ICciIFwKKysgICAgICAgICAgICAgICAgKyBsaXN0X25hbWUgKyAiJyBpczogIiArIHN0cihw cmlvcml0eSkpCisrCisrIyBSZWdpc3RlciBjb21tYW5kcworK1NldEZpbHRlclByZWZpeENtZCgp CisrU2hvd0ZpbHRlclByZWZpeENtZCgpCisrSW5mb0ZyYW1lRmlsdGVyKCkKKytFbmFibGVGcmFt ZUZpbHRlcigpCisrRGlzYWJsZUZyYW1lRmlsdGVyKCkKKytTZXRGcmFtZUZpbHRlclByaW9yaXR5 KCkKKytTaG93RnJhbWVGaWx0ZXJQcmlvcml0eSgpCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1 aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXItZ2RiLnB5LmluCis9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0g L2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcu Ni9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXItZ2RiLnB5LmluCTIwMTMt MDUtMjAgMjI6MjU6NTIuMTE0MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDQ4IEBACisrIyBDb3B5 cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysj IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdE QiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKysjIGZyYW1lLWZpbHRlcnMuCisr aW1wb3J0IGdkYgorK2ltcG9ydCBpdGVydG9vbHMKKytmcm9tIGdkYi5GcmFtZURlY29yYXRvciBp bXBvcnQgRnJhbWVEZWNvcmF0b3IKKysKKysKKytjbGFzcyBGcmFtZU9iakZpbGUgKCk6CisrCisr ICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisrICAgICAgICBzZWxmLm5hbWUgPSAiRmlsdGVyMSIK KysgICAgICAgIHNlbGYucHJpb3JpdHkgPSAxCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBGYWxz ZQorKyAgICAgICAgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZnJhbWVfZmlsdGVycyBbIlByb2dz cGFjZSIgKyBzZWxmLm5hbWVdID0gc2VsZgorKyAgICAgICAgZ2RiLmN1cnJlbnRfb2JqZmlsZSgp LmZyYW1lX2ZpbHRlcnMgWyJPYmplY3RGaWxlIiArIHNlbGYubmFtZV0gPSBzZWxmCisrCisrICAg IGRlZiBmaWx0ZXIgKHNlbGYsIGZyYW1lX2l0ZXIpOgorKyAgICAgICAgcmV0dXJuIGZyYW1lX2l0 ZXIKKysKKytjbGFzcyBGcmFtZU9iakZpbGUyICgpOgorKworKyAgICBkZWYgX19pbml0X18gKHNl bGYpOgorKyAgICAgICAgc2VsZi5uYW1lID0gIkZpbHRlcjIiCisrICAgICAgICBzZWxmLnByaW9y aXR5ID0gMTAwCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAgICAgICBnZGIuY3Vy cmVudF9wcm9nc3BhY2UoKS5mcmFtZV9maWx0ZXJzIFsiUHJvZ3NwYWNlIiArIHNlbGYubmFtZV0g PSBzZWxmCisrICAgICAgICBnZGIuY3VycmVudF9vYmpmaWxlKCkuZnJhbWVfZmlsdGVycyBbIk9i amVjdEZpbGUiICsgc2VsZi5uYW1lXSA9IHNlbGYKKysKKysgICAgZGVmIGZpbHRlciAoc2VsZiwg ZnJhbWVfaXRlcik6CisrICAgICAgICByZXR1cm4gZnJhbWVfaXRlcgorKworK0ZyYW1lT2JqRmls ZSgpCisrRnJhbWVPYmpGaWxlMigpCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi5w eXRob24vcHktZnJhbWVmaWx0ZXItbWkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcw LTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmMJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTQx NjU3NjYgKzAyMDAKK0BAIC0wLDAgKzEsMTM4IEBACisrLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0 IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKysKKysgICBDb3B5cmlnaHQgMjAxMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK3ZvaWQgZnVuY2Eodm9p ZCk7CisraW50IGNvdW50ID0gMDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNoYXIgKm5v dGhpbmc7CisrICBpbnQgZjsKKysgIHNob3J0IHM7CisrfSBmb29iYXI7CisrCisrdm9pZCBlbmRf ZnVuYyAoaW50IGZvbywgY2hhciAqYmFyLCBmb29iYXIgKmZiLCBmb29iYXIgYmYpCisreworKyAg Y29uc3QgY2hhciAqc3RyID0gIlRoZSBFbmQiOworKyAgY29uc3QgY2hhciAqc3QyID0gIklzIE5l YXIiOworKyAgaW50IGIgPSAxMjsKKysgIHNob3J0IGMgPSA1OworKyAgeworKyAgICBpbnQgZCA9 IDE1OworKyAgICBpbnQgZSA9IDE0OworKyAgICBjb25zdCBjaGFyICpmb28gPSAiSW5zaWRlIGJs b2NrIjsKKysgICAgeworKyAgICAgIGludCBmID0gNDI7CisrICAgICAgaW50IGcgPSAxOTsKKysg ICAgICBjb25zdCBjaGFyICpiYXIgPSAiSW5zaWRlIGJsb2NrIHgyIjsKKysgICAgICB7CisrCXNo b3J0IGggPSA5OworKwloID0gaCArMTsgIC8qIElubmVyIHRlc3QgYnJlYWtwb2ludCAgKi8KKysg ICAgICB9CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybjsgLyogQmFja3RyYWNlIGVuZCBicmVh a3BvaW50ICovCisrfQorKworK3ZvaWQgZnVuY2IoaW50IGopCisreworKyAgc3RydWN0IGZvbwor KyAgeworKyAgICBpbnQgYTsKKysgICAgaW50IGI7CisrICB9OworKworKyAgc3RydWN0IGZvbyBi YXI7CisrCisrICBiYXIuYSA9IDQyOworKyAgYmFyLmIgPSA4NDsKKysKKysgIGZ1bmNhKCk7Cisr ICByZXR1cm47CisrfQorKworK3ZvaWQgZnVuY2Eodm9pZCkKKyt7CisrICBmb29iYXIgZmI7Cisr ICBmb29iYXIgKmJmOworKworKyAgaWYgKGNvdW50IDwgMTApCisrICAgIHsKKysgICAgICBjb3Vu dCsrOworKyAgICAgIGZ1bmNiKGNvdW50KTsKKysgICAgfQorKworKyAgZmIubm90aGluZyA9ICJG b28gQmFyIjsKKysgIGZiLmYgPSA0MjsKKysgIGZiLnMgPSAxOTsKKysKKysgIGJmID0gbWFsbG9j IChzaXplb2YgKGZvb2JhcikpOworKyAgYmYtPm5vdGhpbmcgPSBtYWxsb2MgKDEyOCk7CisrICBi Zi0+bm90aGluZyA9ICJCYXIgRm9vIjsKKysgIGJmLT5mID0gMjQ7CisrICBiZi0+cyA9IDkxOwor KworKyAgZW5kX2Z1bmMoMjEsICJQYXJhbSIsIGJmLCBmYik7CisrICBmcmVlIChiZi0+bm90aGlu Zyk7CisrICBmcmVlIChiZik7CisrICByZXR1cm47CisrfQorKworKworK3ZvaWQgZnVuYzEodm9p ZCkKKyt7CisrICBmdW5jYSgpOworKyAgcmV0dXJuOworK30KKysKKytpbnQgZnVuYzIodm9pZCkK Kyt7CisrICBmdW5jMSgpOworKyAgcmV0dXJuIDE7CisrfQorKworK3ZvaWQgZnVuYzMoaW50IGkp CisreworKyAgZnVuYzIoKTsKKysKKysgIHJldHVybjsKKyt9CisrCisraW50IGZ1bmM0KGludCBq KQorK3sKKysgIGZ1bmMzKGopOworKworKyAgcmV0dXJuIDI7CisrfQorKworK2ludCBmdW5jNShp bnQgZiwgaW50IGQpCisreworKyAgaW50IGkgPSAwOworKyAgY2hhciAqcmFuZG9tID0gInJhbmRv bSI7CisrICBpPWkrZjsKKysKKysgIGZ1bmM0KGkpOworKyAgcmV0dXJuIGk7CisrfQorKworK21h aW4oKQorK3sKKysgIGZ1bmM1KDMsNSk7CisrfQorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0 ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmV4cAorPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYv bnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYvZ2Ri L3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmV4cAkyMDEzLTA1LTIwIDIy OjI1OjUyLjExNTE2NTc2NiArMDIwMAorQEAgLTAsMCArMSwxNzkgQEAKKysjIENvcHlyaWdodCAo QykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisrCisrIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR0RCIHRlc3Rz dWl0ZS4gIEl0IHRlc3RzIFB5dGhvbi1iYXNlZAorKyMgZnJhbWUtZmlsdGVycy4KKytsb2FkX2xp YiBtaS1zdXBwb3J0LmV4cAorK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisrCisrc2V0IE1JRkxB R1MgIi1pPW1pMiIKKysKKytnZGJfZXhpdAorK2lmIFttaV9nZGJfc3RhcnRdIHsKKysgICAgY29u dGludWUKKyt9CisrCisrc3RhbmRhcmRfdGVzdGZpbGUgcHktZnJhbWVmaWx0ZXItbWkuYworK3Nl dCBweWZpbGUgcHktZnJhbWVmaWx0ZXIucHkKKysKKytpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7c3Jj ZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVn IGFkZGl0aW9uYWxfZmxhZ3M9LURNSX1dICE9ICIiIH0geworKyAgICB1bnRlc3RlZCAke3Rlc3Rm aWxlfS5leHAKKysgICAgcmV0dXJuIC0xCisrfQorKworK21pX2RlbGV0ZV9icmVha3BvaW50cwor K21pX2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorK21pX2dkYl9sb2FkICR7 YmluZmlsZX0KKysKKytpZiB7W2xzZWFyY2ggLWV4YWN0IFttaV9nZXRfZmVhdHVyZXNdIHB5dGhv bl0gPCAwfSB7CisrICAgIHVuc3VwcG9ydGVkICJweXRob24gc3VwcG9ydCBpcyBkaXNhYmxlZCIK KysgICAgcmV0dXJuIC0xCisrfQorKworK21pX3J1bnRvIG1haW4KKysKKytzZXQgcmVtb3RlX3B5 dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7cHlm aWxlfV0KKysKKyttaV9nZGJfdGVzdCAicHl0aG9uIGV4ZWNmaWxlICgnJHtyZW1vdGVfcHl0aG9u X2ZpbGV9JykiICIuKlxcXmRvbmUuIiBcCisrICAgICJMb2FkIHB5dGhvbiBmaWxlIgorKworKyMg TXVsdGlwbGUgYmxvY2tzIHRlc3QKKyttaV9jb250aW51ZV90b19saW5lIFtnZGJfZ2V0X2xpbmVf bnVtYmVyIHtJbm5lciB0ZXN0IGJyZWFrcG9pbnR9ICR7c3JjZmlsZX1dIFwKKysgICJzdGVwIHRv IGJyZWFrcG9pbnQiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxvY2FscyAtLWFsbC12 YWx1ZXMiIFwKKysgICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cImhcIix2YWx1ZT1cIjlc In0se25hbWU9XCJmXCIsdmFsdWU9XCI0MlwifSx7bmFtZT1cImdcIix2YWx1ZT1cIjE5XCJ9LHtu YW1lPVwiYmFyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIkluc2lkZSBibG9jayB4MlxcXFxcIlwifSx7 bmFtZT1cImRcIix2YWx1ZT1cIjE1XCJ9LHtuYW1lPVwiZVwiLHZhbHVlPVwiMTRcIn0se25hbWU9 XCJmb29cIix2YWx1ZT1cIiRoZXggXFxcXFwiSW5zaWRlIGJsb2NrXFxcXFwiXCJ9LHtuYW1lPVwi c3RyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIlRoZSBFbmRcXFxcXCJcIn0se25hbWU9XCJzdDJcIix2 YWx1ZT1cIiRoZXggXFxcXFwiSXMgTmVhclxcXFxcIlwifSx7bmFtZT1cImJcIix2YWx1ZT1cIjEy XCJ9LHtuYW1lPVwiY1wiLHZhbHVlPVwiNVwifVxcXF0iIFwKKysgICAgInN0YWNrLWxpc3QtbG9j YWxzIC0tYWxsLXZhbHVlcyIKKysKKyttaV9nZGJfdGVzdCAiLWVuYWJsZS1mcmFtZS1maWx0ZXJz IiAiLipcXF5kb25lLiIgImVuYWJsZSBmcmFtZSBmaWx0ZXJzIgorK21pX2dkYl90ZXN0ICItc3Rh Y2stbGlzdC1sb2NhbHMgLS1hbGwtdmFsdWVzIiBcCisrICAgICJcXF5kb25lLGxvY2Fscz1cXFxb e25hbWU9XCJoXCIsdmFsdWU9XCI5XCJ9LHtuYW1lPVwiZlwiLHZhbHVlPVwiNDJcIn0se25hbWU9 XCJnXCIsdmFsdWU9XCIxOVwifSx7bmFtZT1cImJhclwiLHZhbHVlPVwiJGhleCBcXFxcXCJJbnNp ZGUgYmxvY2sgeDJcXFxcXCJcIn0se25hbWU9XCJkXCIsdmFsdWU9XCIxNVwifSx7bmFtZT1cImVc Iix2YWx1ZT1cIjE0XCJ9LHtuYW1lPVwiZm9vXCIsdmFsdWU9XCIkaGV4IFxcXFxcIkluc2lkZSBi bG9ja1xcXFxcIlwifSx7bmFtZT1cInN0clwiLHZhbHVlPVwiJGhleCBcXFxcXCJUaGUgRW5kXFxc XFwiXCJ9LHtuYW1lPVwic3QyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIklzIE5lYXJcXFxcXCJcIn0s e25hbWU9XCJiXCIsdmFsdWU9XCIxMlwifSx7bmFtZT1cImNcIix2YWx1ZT1cIjVcIn1cXFxdIiBc CisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLWFsbC12YWx1ZXMgZnJhbWUgZmlsdGVycyBlbmFi bGVkIgorKworK21pX2NvbnRpbnVlX3RvX2xpbmUgW2dkYl9nZXRfbGluZV9udW1iZXIge0JhY2t0 cmFjZSBlbmQgYnJlYWtwb2ludH0gJHtzcmNmaWxlfV0gXAorKyAgInN0ZXAgdG8gYnJlYWtwb2lu dCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtZnJhbWVzIiBcCisrICAgICJcXF5kb25l LHN0YWNrPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiY251Zl9k bmVcIi4qfSxmcmFtZT17bGV2ZWw9XCIxXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYWNudWZcIi4q fSxmcmFtZT17bGV2ZWw9XCIyXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYmNudWZcIi4qfSxmcmFt ZT17bGV2ZWw9XCIzXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYWNudWZcIi4qfSxmcmFtZT17bGV2 ZWw9XCIyMlwiLGFkZHI9XCIkaGV4XCIsZnVuYz1cIjFjbnVmXCIuKixjaGlsZHJlbj1cXFxbZnJh bWU9e2xldmVsPVwiMjNcIixhZGRyPVwiJGhleFwiLGZ1bmM9XCJmdW5jMlwiLip9XFxcXX0sZnJh bWU9e2xldmVsPVwiMjRcIixhZGRyPVwiJGhleFwiLGZ1bmM9XCIzY251ZlwiLip9LGZyYW1lPXts ZXZlbD1cIjI3XCIsYWRkcj1cIiRoZXhcIixmdW5jPVwibmlhbVwiLip9XFxcXS4qIiBcCisrICAg ICJmaWx0ZXJlZCBzdGFjayBsaXN0aW5nIgorK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1mcmFt ZXMgMCAzIiBcCisrICAgICJcXF5kb25lLHN0YWNrPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYWRk cj1cIiRoZXhcIixmdW5jPVwiY251Zl9kbmVcIi4qfSxmcmFtZT17bGV2ZWw9XCIxXCIsYWRkcj1c IiRoZXhcIixmdW5jPVwiYWNudWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIyXCIsYWRkcj1cIiRoZXhc IixmdW5jPVwiYmNudWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIzXCIsYWRkcj1cIiRoZXhcIixmdW5j PVwiYWNudWZcIi4qfVxcXF0iIFwKKysgICAgImZpbHRlcmVkIHN0YWNrIGxpc3QgMCAzIgorK21p X2dkYl90ZXN0ICItc3RhY2stbGlzdC1mcmFtZXMgMjIgMjQiIFwKKysgICAgIlxcXmRvbmUsc3Rh Y2s9XFxcW2ZyYW1lPXtsZXZlbD1cIjIyXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiMWNudWZcIi4q LGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFkZHI9XCIkaGV4XCIsZnVuYz1cImZ1 bmMyXCIuKn1cXFxdfSxmcmFtZT17bGV2ZWw9XCIyNFwiLGFkZHI9XCIkaGV4XCIsZnVuYz1cIjNj bnVmXCIuKn1cXFxdIiBcCisrICAgICJmaWx0ZXJlZCBzdGFjayBsaXN0IDIyIDI0IgorKworKyNz dGFjayBsaXN0IGFyZ3VtZW50cworKworKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1 bWVudHMgMCIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIw XCIsYXJncz1cXFxbbmFtZT1cImZvb1wiLG5hbWU9XCJiYXJcIixuYW1lPVwiZmJcIixuYW1lPVwi YmZcIlxcXF19LGZyYW1lPXtsZXZlbD1cIjFcIixhcmdzPVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9 XCIyXCIsYXJncz1cXFxbbmFtZT1cImpcIlxcXF19LC4qZnJhbWU9e2xldmVsPVwiMjJcIixhcmdz PVxcXFtcXFxdLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFyZ3M9XFxcW1xcXF19 XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW25hbWU9XCJmXCIsbmFtZT1cImRc IlxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJz dGFjay1saXN0LWFyZ3VtZW50cyAwIgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1 bWVudHMgLS1uby1mcmFtZS1maWx0ZXJzIDAiIFwKKysgICAgIlxcXmRvbmUsc3RhY2stYXJncz1c XFxbZnJhbWU9e2xldmVsPVwiMFwiLGFyZ3M9XFxcW25hbWU9XCJmb29cIixuYW1lPVwiYmFyXCIs bmFtZT1cImZiXCIsbmFtZT1cImJmXCJcXFxdfSxmcmFtZT17bGV2ZWw9XCIxXCIsYXJncz1cXFxb XFxcXX0sZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW25hbWU9XCJqXCJcXFxdfSwuKmZyYW1l PXtsZXZlbD1cIjIyXCIsYXJncz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwiMjNcIixhcmdzPVxc XFtcXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbbmFtZT1cImZcIixuYW1lPVwi ZFwiXFxcXX0sZnJhbWU9e2xldmVsPVwiMjdcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAg InN0YWNrLWxpc3QtYXJndW1lbnRzIC0tbm8tZnJhbWUtZmlsdGVycyAwIgorKworK21pX2dkYl90 ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVudHMgMCAwIDMiIFwKKysgICAgIlxcXmRvbmUsc3RhY2st YXJncz1cXFxbZnJhbWU9e2xldmVsPVwiMFwiLGFyZ3M9XFxcW25hbWU9XCJmb29cIixuYW1lPVwi YmFyXCIsbmFtZT1cImZiXCIsbmFtZT1cImJmXCJcXFxdfSxmcmFtZT17bGV2ZWw9XCIxXCIsYXJn cz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW25hbWU9XCJqXCJcXFxdfSxm cmFtZT17bGV2ZWw9XCIzXCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJzdGFjay1saXN0 LWFyZ3VtZW50cyAwIDAgMyIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtYXJndW1lbnRz IDAgMjIgMjciIFwKKysgICAgIlxcXmRvbmUsc3RhY2stYXJncz1cXFxbZnJhbWU9e2xldmVsPVwi MjJcIixhcmdzPVxcXFtcXFxdLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFyZ3M9 XFxcW1xcXF19XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW25hbWU9XCJmXCIs bmFtZT1cImRcIlxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBc CisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAwIDIyIDI3IgorKworK21pX2dkYl90ZXN0ICIt c3RhY2stbGlzdC1hcmd1bWVudHMgMSIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtm cmFtZT17bGV2ZWw9XCIwXCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix2YWx1ZT1cIjIxXCJ9LHtu YW1lPVwiYmFyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIlBhcmFtXFxcXFwiXCJ9LHtuYW1lPVwiZmJc Iix2YWx1ZT1cIiRoZXhcIn0se25hbWU9XCJiZlwiLHZhbHVlPVwie25vdGhpbmcgPSAkaGV4IFxc XFxcIkZvbyBCYXJcXFxcXCIsIGYgPSA0MiwgcyA9IDE5fVwifVxcXF19LGZyYW1lPXtsZXZlbD1c IjFcIixhcmdzPVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbe25hbWU9XCJq XCIsdmFsdWU9XCIxMFwifVxcXF19LC4qZnJhbWU9e2xldmVsPVwiMjJcIixhcmdzPVxcXFtcXFxd LGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFyZ3M9XFxcW1xcXF19XFxcXX0sLipm cmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwiLHZhbHVlPVwiM1wifSx7bmFt ZT1cImRcIix2YWx1ZT1cIjVcIn1cXFxdfSxmcmFtZT17bGV2ZWw9XCIyN1wiLGFyZ3M9XFxcW1xc XF19XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1hcmd1bWVudHMgMSIKKysKKyttaV9nZGJfdGVz dCAiLXN0YWNrLWxpc3QtYXJndW1lbnRzIC0tbm8tZnJhbWUtZmlsdGVycyAxIiBcCisrICAgICJc XF5kb25lLHN0YWNrLWFyZ3M9XFxcW2ZyYW1lPXtsZXZlbD1cIjBcIixhcmdzPVxcXFt7bmFtZT1c ImZvb1wiLHZhbHVlPVwiMjFcIn0se25hbWU9XCJiYXJcIix2YWx1ZT1cIiRoZXggXFxcXFwiUGFy YW1cXFxcXCJcIn0se25hbWU9XCJmYlwiLHZhbHVlPVwiJGhleFwifSx7bmFtZT1cImJmXCIsdmFs dWU9XCJ7bm90aGluZyA9ICRoZXggXFxcXFwiRm9vIEJhclxcXFxcIiwgZiA9IDQyLCBzID0gMTl9 XCJ9XFxcXX0sZnJhbWU9e2xldmVsPVwiMVwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXtsZXZlbD1c IjJcIixhcmdzPVxcXFt7bmFtZT1cImpcIix2YWx1ZT1cIjEwXCJ9XFxcXX0sLipmcmFtZT17bGV2 ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXtsZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxc XX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwiLHZhbHVlPVwiM1wi fSx7bmFtZT1cImRcIix2YWx1ZT1cIjVcIn1cXFxdfSxmcmFtZT17bGV2ZWw9XCIyN1wiLGFyZ3M9 XFxcW1xcXF19XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1hcmd1bWVudHMgLS1uby1mcmFtZS1m aWx0ZXJzIDEiCisrCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWFyZ3VtZW50cyAxIDAg MyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYXJn cz1cXFxbe25hbWU9XCJmb29cIix2YWx1ZT1cIjIxXCJ9LHtuYW1lPVwiYmFyXCIsdmFsdWU9XCIk aGV4IFxcXFxcIlBhcmFtXFxcXFwiXCJ9LHtuYW1lPVwiZmJcIix2YWx1ZT1cIiRoZXhcIn0se25h bWU9XCJiZlwiLHZhbHVlPVwie25vdGhpbmcgPSAkaGV4IFxcXFxcIkZvbyBCYXJcXFxcXCIsIGYg PSA0MiwgcyA9IDE5fVwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjFcIixhcmdzPVxcXFtcXFxdfSxm cmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbe25hbWU9XCJqXCIsdmFsdWU9XCIxMFwifVxcXF19 LGZyYW1lPXtsZXZlbD1cIjNcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0YWNrLWxp c3QtYXJndW1lbnRzIDEgMCAzIgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVu dHMgMSAyMiAyNyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9 XCIyMlwiLGFyZ3M9XFxcW1xcXF0sY2hpbGRyZW49XFxcW2ZyYW1lPXtsZXZlbD1cIjIzXCIsYXJn cz1cXFxbXFxcXX1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbe25hbWU9XCJm XCIsdmFsdWU9XCIzXCJ9LHtuYW1lPVwiZFwiLHZhbHVlPVwiNVwifVxcXF19LGZyYW1lPXtsZXZl bD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50 cyAxIDIyIDI3IgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVudHMgMiIgXAor KyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYXJncz1cXFxb e25hbWU9XCJmb29cIix0eXBlPVwiaW50XCIsdmFsdWU9XCIyMVwifSx7bmFtZT1cImJhclwiLHR5 cGU9XCJjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiUGFyYW1cXFxcXCJcIn0se25hbWU9 XCJmYlwiLHR5cGU9XCJmb29iYXIgXFxcKlwiLHZhbHVlPVwiJGhleFwifSx7bmFtZT1cImJmXCIs dHlwZT1cImZvb2JhclwiXH1cXFxdfSxmcmFtZT17bGV2ZWw9XCIxXCIsYXJncz1cXFxbXFxcXX0s ZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW3tuYW1lPVwialwiLHR5cGU9XCJpbnRcIix2YWx1 ZT1cIjEwXCJ9XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF0sY2hpbGRy ZW49XFxcW2ZyYW1lPXtsZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxcXX1cXFxdfSwuKmZyYW1lPXts ZXZlbD1cIjI2XCIsYXJncz1cXFxbe25hbWU9XCJmXCIsdHlwZT1cImludFwiLHZhbHVlPVwiM1wi fSx7bmFtZT1cImRcIix0eXBlPVwiaW50XCIsdmFsdWU9XCI1XCJ9XFxcXX0sZnJhbWU9e2xldmVs PVwiMjdcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0YWNrLWxpc3QtYXJndW1lbnRz IDIiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZp bHRlcnMgMiIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIw XCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix0eXBlPVwiaW50XCIsdmFsdWU9XCIyMVwifSx7bmFt ZT1cImJhclwiLHR5cGU9XCJjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiUGFyYW1cXFxc XCJcIn0se25hbWU9XCJmYlwiLHR5cGU9XCJmb29iYXIgXFxcKlwiLHZhbHVlPVwiJGhleFwifSx7 bmFtZT1cImJmXCIsdHlwZT1cImZvb2JhclwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjFcIixhcmdz PVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbe25hbWU9XCJqXCIsdHlwZT1c ImludFwiLHZhbHVlPVwiMTBcIn1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjIyXCIsYXJncz1cXFxb XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwiLHR5cGU9XCJp bnRcIix2YWx1ZT1cIjNcIn0se25hbWU9XCJkXCIsdHlwZT1cImludFwiLHZhbHVlPVwiNVwifVxc XF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJzdGFj ay1saXN0LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZpbHRlcnMgMiIKKysKKysKKyttaV9nZGJfdGVz dCAiLXN0YWNrLWxpc3QtYXJndW1lbnRzIDIgMCAzIiBcCisrICAgICJcXF5kb25lLHN0YWNrLWFy Z3M9XFxcW2ZyYW1lPXtsZXZlbD1cIjBcIixhcmdzPVxcXFt7bmFtZT1cImZvb1wiLHR5cGU9XCJp bnRcIix2YWx1ZT1cIjIxXCJ9LHtuYW1lPVwiYmFyXCIsdHlwZT1cImNoYXIgXFxcKlwiLHZhbHVl PVwiJGhleCBcXFxcXCJQYXJhbVxcXFxcIlwifSx7bmFtZT1cImZiXCIsdHlwZT1cImZvb2JhciBc XFwqXCIsdmFsdWU9XCIkaGV4XCJ9LHtuYW1lPVwiYmZcIix0eXBlPVwiZm9vYmFyXCJ9XFxcXX0s ZnJhbWU9e2xldmVsPVwiMVwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXtsZXZlbD1cIjJcIixhcmdz PVxcXFt7bmFtZT1cImpcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIxMFwifVxcXF19LGZyYW1lPXts ZXZlbD1cIjNcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0YWNrLWxpc3QtYXJndW1l bnRzIDIgMCAzIgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVudHMgMiAyMiAy NyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIyMlwiLGFy Z3M9XFxcW1xcXF0sY2hpbGRyZW49XFxcW2ZyYW1lPXtsZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxc XX1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbe25hbWU9XCJmXCIsdHlwZT1c ImludFwiLHZhbHVlPVwiM1wifSx7bmFtZT1cImRcIix0eXBlPVwiaW50XCIsdmFsdWU9XCI1XCJ9 XFxcXX0sZnJhbWU9e2xldmVsPVwiMjdcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0 YWNrLWxpc3QtYXJndW1lbnRzIDIgMjIgMjciCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0 LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZpbHRlcnMgMiAyMiAyNyIgXAorKyAgICAiXFxeZG9uZSxz dGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXts ZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxc W3tuYW1lPVwiZlwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjNcIn0se25hbWU9XCJkXCIsdHlwZT1c ImludFwiLHZhbHVlPVwiNVwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxc XX1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZpbHRlcnMg MiAyMiAyNyIKKysKKysjc3RhY2stbGlzdC1sb2NhbHMKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxp c3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAwIiBcCisrICAgICJcXF5kb25lLGxvY2Fscz1c XFxbbmFtZT1cInN0clwiLG5hbWU9XCJzdDJcIixuYW1lPVwiYlwiLG5hbWU9XCJjXCJcXFxdIiBc CisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZpbHRlcnMgMCIKKysKKyttaV9n ZGJfdGVzdCAiLXN0YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAxIiBcCisrICAg ICJcXF5kb25lLGxvY2Fscz1cXFxbe25hbWU9XCJzdHJcIix2YWx1ZT1cIiRoZXggXFxcXFwiVGhl IEVuZFxcXFxcIlwifSx7bmFtZT1cInN0MlwiLHZhbHVlPVwiJGhleCBcXFxcXCJJcyBOZWFyXFxc XFwiXCJ9LHtuYW1lPVwiYlwiLHZhbHVlPVwiMTJcIn0se25hbWU9XCJjXCIsdmFsdWU9XCI1XCJ9 XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1sb2NhbHMgLS1uby1mcmFtZS1maWx0ZXJzIDEiCisr CisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZpbHRlcnMgMiIg XAorKyAgICAiXFxeZG9uZSxsb2NhbHM9XFxcW3tuYW1lPVwic3RyXCIsdHlwZT1cImNvbnN0IGNo YXIgXFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJUaGUgRW5kXFxcXFwiXCJ9LHtuYW1lPVwic3Qy XCIsdHlwZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJJcyBOZWFyXFxc XFwiXCJ9LHtuYW1lPVwiYlwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjEyXCJ9LHtuYW1lPVwiY1wi LHR5cGU9XCJzaG9ydFwiLHZhbHVlPVwiNVwifVxcXF0iIFwKKysgICAgInN0YWNrLWxpc3QtbG9j YWxzIC0tbm8tZnJhbWUtZmlsdGVycyAyIgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1s b2NhbHMgLS1uby1mcmFtZS1maWx0ZXJzIC0tbm8tdmFsdWVzIiBcCisrICAgICJcXF5kb25lLGxv Y2Fscz1cXFxbbmFtZT1cInN0clwiLG5hbWU9XCJzdDJcIixuYW1lPVwiYlwiLG5hbWU9XCJjXCJc XFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZpbHRlcnMgLS1uby12 YWx1ZXMiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZp bHRlcnMgLS1hbGwtdmFsdWVzIiBcCisrICAgICJcXF5kb25lLGxvY2Fscz1cXFxbe25hbWU9XCJz dHJcIix2YWx1ZT1cIiRoZXggXFxcXFwiVGhlIEVuZFxcXFxcIlwifSx7bmFtZT1cInN0MlwiLHZh bHVlPVwiJGhleCBcXFxcXCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwiLHZhbHVlPVwiMTJc In0se25hbWU9XCJjXCIsdmFsdWU9XCI1XCJ9XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1sb2Nh bHMgLS1uby1mcmFtZS1maWx0ZXJzIC0tYWxsLXZhbHVlcyIKKysKKyttaV9nZGJfdGVzdCAiLXN0 YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAtLXNpbXBsZS12YWx1ZXMiIFwKKysg ICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cInN0clwiLHR5cGU9XCJjb25zdCBjaGFyIFxc XCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiVGhlIEVuZFxcXFxcIlwifSx7bmFtZT1cInN0MlwiLHR5 cGU9XCJjb25zdCBjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiSXMgTmVhclxcXFxcIlwi fSx7bmFtZT1cImJcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIxMlwifSx7bmFtZT1cImNcIix0eXBl PVwic2hvcnRcIix2YWx1ZT1cIjVcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAt LW5vLWZyYW1lLWZpbHRlcnMgLS1zaW1wbGUtdmFsdWVzIgorKworK21pX2dkYl90ZXN0ICItc3Rh Y2stbGlzdC1sb2NhbHMgMCIgXAorKyAgICAiXFxeZG9uZSxsb2NhbHM9XFxcW25hbWU9XCJzdHJc IixuYW1lPVwic3QyXCIsbmFtZT1cImJcIixuYW1lPVwiY1wiXFxcXSIgXAorKyAgICAic3RhY2st bGlzdC1sb2NhbHMgMCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtbG9jYWxzIDEiIFwK KysgICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cInN0clwiLHZhbHVlPVwiJGhleCBcXFxc XCJUaGUgRW5kXFxcXFwiXCJ9LHtuYW1lPVwic3QyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIklzIE5l YXJcXFxcXCJcIn0se25hbWU9XCJiXCIsdmFsdWU9XCIxMlwifSx7bmFtZT1cImNcIix2YWx1ZT1c IjVcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAxIgorKworK21pX2dkYl90ZXN0 ICItc3RhY2stbGlzdC1sb2NhbHMgMiIgXAorKyAgICAiXFxeZG9uZSxsb2NhbHM9XFxcW3tuYW1l PVwic3RyXCIsdHlwZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJUaGUg RW5kXFxcXFwiXCJ9LHtuYW1lPVwic3QyXCIsdHlwZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVl PVwiJGhleCBcXFxcXCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwiLHR5cGU9XCJpbnRcIix2 YWx1ZT1cIjEyXCJ9LHtuYW1lPVwiY1wiLHR5cGU9XCJzaG9ydFwiLHZhbHVlPVwiNVwifVxcXF0i IFwKKysgICAgInN0YWNrLWxpc3QtbG9jYWxzIDIiCisrCisrIyBzdGFjay1saXN0LXZhcmlhYmxl cworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC12YXJpYWJsZXMgLS1uby1mcmFtZS1maWx0ZXJz IDAiIFwKKysgICAgIlxcXmRvbmUsdmFyaWFibGVzPVxcXFt7bmFtZT1cImZvb1wiLGFyZz1cIjFc In0se25hbWU9XCJiYXJcIixhcmc9XCIxXCJ9LHtuYW1lPVwiZmJcIixhcmc9XCIxXCJ9LHtuYW1l PVwiYmZcIixhcmc9XCIxXCJ9LHtuYW1lPVwic3RyXCJ9LHtuYW1lPVwic3QyXCJ9LHtuYW1lPVwi YlwifSx7bmFtZT1cImNcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LXZhcmlhYmxlcyAtLW5v LWZyYW1lLWZpbHRlcnMgMCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtdmFyaWFibGVz IDAiIFwKKysgICAgIlxcXmRvbmUsdmFyaWFibGVzPVxcXFt7bmFtZT1cImZvb1wiLGFyZz1cIjFc In0se25hbWU9XCJiYXJcIixhcmc9XCIxXCJ9LHtuYW1lPVwiZmJcIixhcmc9XCIxXCJ9LHtuYW1l PVwiYmZcIixhcmc9XCIxXCJ9LHtuYW1lPVwic3RyXCJ9LHtuYW1lPVwic3QyXCJ9LHtuYW1lPVwi YlwifSx7bmFtZT1cImNcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LXZhcmlhYmxlcyAwIgor SW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMK Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAg KzAwMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZWZpbHRl ci5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMTE1MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDE1NSBA QAorKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisr CisrICAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisr ICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpbmNsdWRlIDxz dGRsaWIuaD4KKysKKyt2b2lkIGZ1bmNhKHZvaWQpOworK2ludCBjb3VudCA9IDA7CisrCisrdHlw ZWRlZiBzdHJ1Y3QKKyt7CisrICBjaGFyICpub3RoaW5nOworKyAgaW50IGY7CisrICBzaG9ydCBz OworK30gZm9vYmFyOworKworK3ZvaWQgZW5kX2Z1bmMgKGludCBmb28sIGNoYXIgKmJhciwgZm9v YmFyICpmYiwgZm9vYmFyIGJmKQorK3sKKysgIGNvbnN0IGNoYXIgKnN0ciA9ICJUaGUgRW5kIjsK KysgIGNvbnN0IGNoYXIgKnN0MiA9ICJJcyBOZWFyIjsKKysgIGludCBiID0gMTI7CisrICBzaG9y dCBjID0gNTsKKysKKysgIHsKKysgICAgaW50IGQgPSAxNTsKKysgICAgaW50IGUgPSAxNDsKKysg ICAgY29uc3QgY2hhciAqZm9vID0gIkluc2lkZSBibG9jayI7CisrICAgIHsKKysgICAgICBpbnQg ZiA9IDQyOworKyAgICAgIGludCBnID0gMTk7CisrICAgICAgY29uc3QgY2hhciAqYmFyID0gIklu c2lkZSBibG9jayB4MiI7CisrICAgICAgeworKwlzaG9ydCBoID0gOTsKKysJaCA9IGggKzE7ICAv KiBJbm5lciB0ZXN0IGJyZWFrcG9pbnQgICovCisrICAgICAgfQorKyAgICB9CisrICB9CisrCisr ICByZXR1cm47IC8qIEJhY2t0cmFjZSBlbmQgYnJlYWtwb2ludCAqLworK30KKysKKyt2b2lkIGZ1 bmNiKGludCBqKQorK3sKKysgIHN0cnVjdCBmb28KKysgIHsKKysgICAgaW50IGE7CisrICAgIGlu dCBiOworKyAgfTsKKysKKysgIHN0cnVjdCBmb28gYmFyOworKworKyAgYmFyLmEgPSA0MjsKKysg IGJhci5iID0gODQ7CisrCisrICBmdW5jYSgpOworKyAgcmV0dXJuOworK30KKysKKyt2b2lkIGZ1 bmNhKHZvaWQpCisreworKyAgZm9vYmFyIGZiOworKyAgZm9vYmFyICpiZiA9IE5VTEw7CisrCisr ICBpZiAoY291bnQgPCAxMCkKKysgICAgeworKyAgICAgIGNvdW50Kys7CisrICAgICAgZnVuY2Io Y291bnQpOworKyAgICB9CisrCisrICBmYi5ub3RoaW5nID0gIkZvbyBCYXIiOworKyAgZmIuZiA9 IDQyOworKyAgZmIucyA9IDE5OworKworKyAgYmYgPSBhbGxvY2EgKHNpemVvZiAoZm9vYmFyKSk7 CisrICBiZi0+bm90aGluZyA9IGFsbG9jYSAoMTI4KTsKKysgIGJmLT5ub3RoaW5nID0gIkJhciBG b28iOworKyAgYmYtPmYgPSAyNDsKKysgIGJmLT5zID0gOTE7CisrCisrICBlbmRfZnVuYygyMSwg IlBhcmFtIiwgYmYsIGZiKTsKKysgIHJldHVybjsKKyt9CisrCisrCisrdm9pZCBmdW5jMSh2b2lk KQorK3sKKysgIGZ1bmNhKCk7CisrICByZXR1cm47CisrfQorKworK2ludCBmdW5jMihpbnQgZikK Kyt7CisrICBpbnQgYzsKKysgIGNvbnN0IGNoYXIgKmVsaWRlZCA9ICJFbGlkZWQgZnJhbWUiOwor KyAgZm9vYmFyIGZiOworKyAgZm9vYmFyICpiZiA9IE5VTEw7CisrCisrICBmYi5ub3RoaW5nID0g IkVsaWRlZCBGb28gQmFyIjsKKysgIGZiLmYgPSA4NDsKKysgIGZiLnMgPSAzODsKKysKKysgIGJm ID0gYWxsb2NhIChzaXplb2YgKGZvb2JhcikpOworKyAgYmYtPm5vdGhpbmcgPSBhbGxvY2EgKDEy OCk7CisrICBiZi0+bm90aGluZyA9ICJFbGlkZWQgQmFyIEZvbyI7CisrICBiZi0+ZiA9IDQ4Owor KyAgYmYtPnMgPSAxODI7CisrCisrICBmdW5jMSgpOworKyAgcmV0dXJuIDE7CisrfQorKworK3Zv aWQgZnVuYzMoaW50IGkpCisreworKyAgZnVuYzIoaSk7CisrCisrICByZXR1cm47CisrfQorKwor K2ludCBmdW5jNChpbnQgaikKKyt7CisrICBmdW5jMyhqKTsKKysKKysgIHJldHVybiAyOworK30K KysKKytpbnQgZnVuYzUoaW50IGYsIGludCBkKQorK3sKKysgIGludCBpID0gMDsKKysgIGNoYXIg KnJhbmRvbSA9ICJyYW5kb20iOworKyAgaT1pK2Y7CisrCisrICBmdW5jNChpKTsKKysgIHJldHVy biBpOworK30KKysKKyttYWluKCkKKyt7CisrICBpbnQgeiA9IDMyOworKyAgaW50IHkgPSA0NDsK KysgIGNvbnN0IGNoYXIgKmZvbzEgPSAiVGVzdCI7CisrICBmdW5jNSgzLDUpOworK30KK0luZGV4 OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZWZpbHRlci5leHAKKz09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAw MDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZWZpbHRlci5l eHAJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTUxNjU3NjYgKzAyMDAKK0BAIC0wLDAgKzEsMjM5IEBA CisrIyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisr CisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysj IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisr IworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUg PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKysjIGZyYW1lLWZp bHRlcnMuCisrCisrbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKysKKytzdGFuZGFyZF90ZXN0Zmls ZQorKworKyMgV2UgY2Fubm90IHVzZSBwcmVwYXJlX2Zvcl90ZXN0aW5nIGFzIHdlIGhhdmUgdG8g c2V0IHRoZSBzYWZlLXBhdGNoCisrIyB0byBjaGVjayBvYmpmaWxlIGFuZCBwcm9nc3BhY2UgcHJp bnRlcnMuCisraWYge1tidWlsZF9leGVjdXRhYmxlICR0ZXN0ZmlsZS5leHAgJHRlc3RmaWxlICRz cmNmaWxlIGRlYnVnXSA9PSAtMX0geworKyAgICByZXR1cm4gLTEKKyt9CisrCisrIyBTdGFydCB3 aXRoIGEgZnJlc2ggZ2RiLgorK2dkYl9leGl0CisrZ2RiX3N0YXJ0CisrCisrIyBTa2lwIGFsbCB0 ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgorK2lmIHsgW3NraXBfcHl0 aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorKworKyMgTWFrZSB0aGUgLWdkYi5weSBzY3JpcHQg YXZhaWxhYmxlIHRvIGdkYiwgaXQgaXMgYXV0b21hZ2ljYWxseSBsb2FkZWQgYnkgZ2RiLgorKyMg Q2FyZSBpcyB0YWtlbiB0byBwdXQgaXQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBiaW5h cnkgc28gdGhhdAorKyMgZ2RiIHdpbGwgZmluZCBpdC4KKytzZXQgcmVtb3RlX29ial9weXRob25f ZmlsZSBcCisrICAgIFtyZW1vdGVfZG93bmxvYWQgXAorKwkgaG9zdCAke3NyY2Rpcn0vJHtzdWJk aXJ9LyR7dGVzdGZpbGV9LWdkYi5weS5pbiBcCisrCSAke3N1YmRpcn0vJHt0ZXN0ZmlsZX0tZ2Ri LnB5XQorKworK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorK2dkYl90ZXN0 X25vX291dHB1dCAic2V0IGF1dG8tbG9hZCBzYWZlLXBhdGggJHtyZW1vdGVfb2JqX3B5dGhvbl9m aWxlfSIgXAorKyAgICAic2V0IGF1dG8tbG9hZCBzYWZlLXBhdGgiCisrZ2RiX2xvYWQgJHtiaW5m aWxlfQorKyMgVmVyaWZ5IGdkYiBsb2FkZWQgdGhlIHNjcmlwdC4KKytnZGJfdGVzdCAiaW5mbyBh dXRvLWxvYWQgcHl0aG9uLXNjcmlwdHMiICJZZXMuKi8ke3Rlc3RmaWxlfS1nZGIucHkuKiIgXAor KyAgICAiVGVzdCBhdXRvLWxvYWQgaGFkIGxvYWRlZCBweXRob24gc2NyaXB0cyIKKysKKytpZiAh W3J1bnRvX21haW5dIHRoZW4geworKyAgICBwZXJyb3IgImNvdWxkbid0IHJ1biB0byBicmVha3Bv aW50IgorKyAgICByZXR1cm4KKyt9CisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgcHl0aG9uIHBy aW50LXN0YWNrIGZ1bGwiIFwKKysgICAgIlNldCBweXRob24gcHJpbnQtc3RhY2sgdG8gZnVsbCIK KysKKysjIExvYWQgZ2xvYmFsIGZyYW1lLWZpbHRlcnMKKytzZXQgcmVtb3RlX3B5dGhvbl9maWxl IFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LnB5 XQorK2dkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGV4ZWNmaWxlICgnJHtyZW1vdGVfcHl0aG9u X2ZpbGV9JykiIFwKKysgICAgIkxvYWQgcHl0aG9uIGZpbGUiCisrCisrZ2RiX2JyZWFrcG9pbnQg W2dkYl9nZXRfbGluZV9udW1iZXIgIkJhY2t0cmFjZSBlbmQgYnJlYWtwb2ludCJdCisrZ2RiX2Jy ZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgIklubmVyIHRlc3QgYnJlYWtwb2ludCJdCisr Z2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIklubmVyIHRlc3QgYnJlYWtwb2ludCIKKysKKysj IFRlc3QgbXVsdGlwbGUgbG9jYWwgYmxvY2tzLgorK2dkYl90ZXN0ICJidCBmdWxsIG5vLWZpbHRl cnMiIFwKKysgICAgIi4qIzAuKmVuZF9mdW5jLipoID0gOS4qZiA9IDQyLipnID0gMTkuKmJhciA9 ICRoZXggXCJJbnNpZGUgYmxvY2sgeDJcIi4qZCA9IDE1LiplID0gMTQuKmZvbyA9ICRoZXggXCJJ bnNpZGUgYmxvY2tcIi4qc3RyID0gJGhleCBcIlRoZSBFbmRcIi4qc3QyID0gJGhleCBcIklzIE5l YXJcIi4qYiA9IDEyLipjID0gNS4qIiBcCisrICAgICJidCBmdWxsIG5vLWZpbHRlcnMiCisrZ2Ri X3Rlc3QgImJ0IGZ1bGwiIFwKKysgICAgIi4qIzAuKmNudWZfZG5lLipoID0gOS4qZiA9IDQyLipn ID0gMTkuKmJhciA9ICRoZXggXCJJbnNpZGUgYmxvY2sgeDJcIi4qZCA9IDE1LiplID0gMTQuKmZv byA9ICRoZXggXCJJbnNpZGUgYmxvY2tcIi4qc3RyID0gJGhleCBcIlRoZSBFbmRcIi4qc3QyID0g JGhleCBcIklzIE5lYXJcIi4qYiA9IDEyLipjID0gNS4qIiBcCisrICAgICJidCBmdWxsIHdpdGgg ZmlsdGVycyIKKysKKytnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiQmFja3RyYWNlIGVuZCBi cmVha3BvaW50IgorKworKyMgVGVzdCBzZXQvc2hvdworK2dkYl90ZXN0ICJpbmZvIGZyYW1lLWZp bHRlciIgXAorKyAgICAiLio5MDAuKlllcy4qRWxpZGVyLioxMDAuKlllcy4qUmV2ZXJzZS4qMTAu Ki4qTm8uKk9iamVjdC4qMS4qIiBcCisrICAgICJpbmZvIGZyYW1lIGZpbHRlciBiZWZvcmUgc2V0 dGluZyBwcmlvcml0eSIKKytnZGJfdGVzdCAic2hvdyBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgZ2xv YmFsIEVsaWRlciIgXAorKyAgICAiUHJpb3JpdHkgb2YgZmlsdGVyICdFbGlkZXInIGluIGxpc3Qg J2dsb2JhbCcgaXM6IDkwMCIgXAorKyAgICAic2hvdyBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgZ2xv YmFsIEVsaWRlciBiZWZvcmUgc2V0dGluZyIKKytnZGJfdGVzdF9ub19vdXRwdXQgICJzZXQgZnJh bWUtZmlsdGVyIHByaW9yaXR5IGdsb2JhbCBFbGlkZXIgMTAwMCIgXAorKyAgICAic2V0IGZyYW1l LWZpbHRlciBwcmlvdGl5IGdsb2JhbCBFbGlkZXIgMTAwMCIKKytnZGJfdGVzdCAic2hvdyBmcmFt ZS1maWx0ZXIgcHJpb3JpdHkgZ2xvYmFsIEVsaWRlciIgXAorKyAgICAgICAgIlByaW9yaXR5IG9m IGZpbHRlciAnRWxpZGVyJyBpbiBsaXN0ICdnbG9iYWwnIGlzOiAxMDAwIiBcCisrICAgICAgICAi c2hvdyBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgZ2xvYmFsIEVsaWRlciBhZnRlciBzZXR0aW5nIgor K2dkYl90ZXN0ICJpbmZvIGZyYW1lLWZpbHRlciIgXAorKyAgICAiLioxMDAwLipZZXMuKkVsaWRl ci4qMTAwLipZZXMuKlJldmVyc2UuKjEwLiouKk5vLipPYmplY3QuKjEuKiIgXAorKyAgICAiaW5m byBmcmFtZSBmaWx0ZXIgYWZ0ZXIgc2V0dGluZyBwcmlvcml0eSIKKysKKysjIFRlc3QgZW5hYmxl L2Rpc2FibGUKKytnZGJfdGVzdCAiaW5mbyBmcmFtZS1maWx0ZXIiIFwKKysgICAgIi4qMTAwMC4q WWVzLipFbGlkZXIuKjEwMC4qWWVzLipSZXZlcnNlLioxMC4qLipOby4qT2JqZWN0LioxLioiIFwK KysgICAgImluZm8gZnJhbWUgZmlsdGVyIGJlZm9yZSBkaXNhYmxlIGZyYW1lIGZpbHRlciIKKytn ZGJfdGVzdF9ub19vdXRwdXQgICJkaXNhYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgRWxpZGVyIiBc CisrICAgICJkaXNhYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgRWxpZGVyIgorK2dkYl90ZXN0ICJp bmZvIGZyYW1lLWZpbHRlciIgXAorKyAgICAiLioxMDAwLipOby4qRWxpZGVyLioxMDAuKlllcy4q UmV2ZXJzZS4qMTAuKi4qTm8uKk9iamVjdC4qMS4qIiBcCisrICAgICJpbmZvIGZyYW1lIGZpbHRl ciBhZnRlciBkaXNhYmxlIGZyYW1lIGZpbHRlciIKKytnZGJfdGVzdF9ub19vdXRwdXQgICJlbmFi bGUgZnJhbWUtZmlsdGVyIGdsb2JhbCBFbGlkZXIiIFwKKysgICAgImVuYWJsZSBmcmFtZS1maWx0 ZXIgZ2xvYmFsIEVsaWRlciIKKytnZGJfdGVzdCAiaW5mbyBmcmFtZS1maWx0ZXIiIFwKKysgICAg Ii4qMTAwMC4qWWVzLipFbGlkZXIuKjEwMC4qWWVzLipSZXZlcnNlLioxMC4qLipOby4qT2JqZWN0 LioxLioiIFwKKysgICAgImluZm8gZnJhbWUgZmlsdGVyIGFmdGVyIHJlZW5hYmxpbmcgZnJhbWUg ZmlsdGVyIgorKworKyMgVGVzdCBuby1maWx0ZXJzCisrZ2RiX3Rlc3QgImJ0IG5vLWZpbHRlcnMi IFwKKysgICAgIi4qIzAuKmVuZF9mdW5jLiojMjIuKmluIGZ1bmMxLiojMjcuKmluIG1haW4gXFwo XFwpLioiIFwKKysgICAgImJ0IG5vLWZpbHRlcnMiCisrCisrIyBUZXN0IHJldmVyc2UKKytnZGJf dGVzdCAiYnQiIFwKKysgICAgIi4qIzAuKmNudWZfZG5lLiojMjIuKmluIDFjbnVmLiojMjcuKmlu IG5pYW0gXFwoXFwpLioiIFwKKysgICAgImJ0IHdpdGggZnJhbWUgZmlsdGVycyIKKysKKysjIERp c2FibGUgUmV2ZXJzZQorK2dkYl90ZXN0X25vX291dHB1dCAiZGlzYWJsZSBmcmFtZS1maWx0ZXIg Z2xvYmFsIFJldmVyc2UiIFwKKysgICAgImRpc2FibGUgZnJhbWUtZmlsdGVyIGdsb2JhbCBSZXZl cnNlIgorK2dkYl90ZXN0ICJidCIgXAorKyAgICAiLiojMC4qZW5kX2Z1bmMuKiMyMi4qaW4gZnVu YzEuKiMyNy4qaW4gbWFpbiBcXChcXCkuKiIgXAorKyAgICAiYnQgd2l0aCBmcmFtZS1maWx0ZXIg UmV2ZXJzZSBkaXNhYmxlZCIKKytnZGJfdGVzdCAiYnQgLTIiIFwKKysgICAgIi4qIzI2LipmdW5j NS4qIzI3LippbiBtYWluIFxcKFxcKS4qIiBcCisrICAgICJidCAtMiB3aXRoIGZyYW1lLWZpbHRl ciBSZXZlcnNlIGRpc2FibGVkIgorK2dkYl90ZXN0ICJidCAzIiBcCisrICAgICIuKiMwLiplbmRf ZnVuYy4qIzEuKmluIGZ1bmNhIFxcKFxcKS4qIzIuKmluIGZ1bmNiIFxcKGo9MTBcXCkuKiIgXAor KyAgICAiYnQgMyB3aXRoIGZyYW1lLWZpbHRlciBSZXZlcnNlIGRpc2FibGVkIgorK2dkYl90ZXN0 ICJidCBuby1maWx0ZXIgZnVsbCIgXAorKyAgICAiLiojMC4qZW5kX2Z1bmMuKnN0ciA9ICRoZXgg XCJUaGUgRW5kXCIuKnN0MiA9ICRoZXggXCJJcyBOZWFyXCIuKmIgPSAxMi4qYyA9IDUuKiMxLipp biBmdW5jYSBcXChcXCkuKiMyLippbiBmdW5jYiBcXChqPTEwXFwpLipiYXIgPSBce2EgPSA0Miwg YiA9IDg0XH0uKiIgXAorKyAgICAiYnQgbm8tZmlsdGVycyBmdWxsIHdpdGggUmV2ZXJzZSBkaXNh YmxlZCIKKytnZGJfdGVzdCAiYnQgZnVsbCIgXAorKyAgICAiLiojMC4qZW5kX2Z1bmMuKnN0ciA9 ICRoZXggXCJUaGUgRW5kXCIuKnN0MiA9ICRoZXggXCJJcyBOZWFyXCIuKmIgPSAxMi4qYyA9IDUu KiMxLippbiBmdW5jYSBcXChcXCkuKiMyLippbiBmdW5jYiBcXChqPTEwXFwpLipiYXIgPSBce2Eg PSA0MiwgYiA9IDg0XH0uKiMyMi4qaW4gZnVuYzEgXFwoXFwpLiojMjMuKmluIGZ1bmMyIFxcKGY9 M1xcKS4qZWxpZGVkID0gJGhleCBcIkVsaWRlZCBmcmFtZVwiLipmYiA9IFx7bm90aGluZyA9ICRo ZXggXCJFbGlkZWQgRm9vIEJhclwiLCBmID0gODQsIHMgPSAzOFx9LipiZiA9ICRoZXguKiIgXAor KyAgICAiYnQgZnVsbCB3aXRoIFJldmVyc2UgZGlzYWJsZWQiCisrCisrIyBUZXN0IHNldCBwcmlu dCBmcmFtZS1hcmd1bWVudHMKKysjIG5vbmUKKytnZGJfdGVzdF9ub19vdXRwdXQgInNldCBwcmlu dCBmcmFtZS1hcmd1bWVudHMgbm9uZSIgXAorKyAgICAidHVybiBvZmYgZnJhbWUgYXJndW1lbnRz IgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgMSIgXAorKyAgICAiIzAuKmVuZF9mdW5jIFxcKGZv bz1cLlwuXC4sIGJhcj1cLlwuXC4sIGZiPVwuXC5cLiwgYmY9XC5cLlwuXFwpIGF0IC4qcHktZnJh bWVmaWx0ZXIuYy4qIiBcCisrICAgICJidCBuby1maWx0ZXIgMSBubyBhcmdzIgorK2dkYl90ZXN0 ICJidCAxIiBcCisrICAgICIjMC4qZW5kX2Z1bmMgXFwoZm9vPVwuXC5cLiwgYmFyPVwuXC5cLiwg ZmI9XC5cLlwuLCBiZj1cLlwuXC5cXCkgYXQgLipweS1mcmFtZWZpbHRlci5jLioiIFwKKysgICAg ImJ0IDEgbm8gYXJncyIKKysKKysjIHNjYWxhcnMKKytnZGJfdGVzdF9ub19vdXRwdXQgInNldCBw cmludCBmcmFtZS1hcmd1bWVudHMgc2NhbGFycyIgXAorKyAgICAidHVybiBmcmFtZSBhcmd1bWVu dHMgdG8gc2NhbGFycyBvbmx5IgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgMSIgXAorKyAgICAi IzAuKmVuZF9mdW5jIFxcKGZvbz0yMSwgYmFyPSRoZXggXCJQYXJhbVwiLCBmYj0kaGV4LCBiZj1c LlwuXC5cXCkgYXQgLipweS1mcmFtZWZpbHRlci5jLioiIFwKKysgICAgImJ0IG5vLWZpbHRlciAx IHNjYWxhcnMiCisrZ2RiX3Rlc3QgImJ0IDEiIFwKKysgICAgIiMwLiplbmRfZnVuYyBcXChmb289 MjEsIGJhcj0kaGV4IFwiUGFyYW1cIiwgZmI9JGhleCwgYmY9XC5cLlwuXFwpIGF0IC4qcHktZnJh bWVmaWx0ZXIuYy4qIiBcCisrICAgICJidCAxIHNjYWxhcnMiCisrCisrIyBhbGwKKytnZGJfdGVz dF9ub19vdXRwdXQgInNldCBwcmludCBmcmFtZS1hcmd1bWVudHMgYWxsIiBcCisrICAgICJ0dXJu IG9uIGZyYW1lIGFyZ3VtZW50cyIKKytnZGJfdGVzdCAiYnQgbm8tZmlsdGVyIDEiIFwKKysgICAg IiMwLiplbmRfZnVuYyBcXChmb289MjEsIGJhcj0kaGV4IFwiUGFyYW1cIiwgZmI9JGhleCwgYmY9 XHtub3RoaW5nID0gJGhleCBcIkZvbyBCYXJcIiwgZiA9IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5 LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAgICAiYnQgbm8tZmlsdGVyIDEgYWxsIGFyZ3MiCisrZ2Ri X3Rlc3QgImJ0IDEiIFwKKysgICAgIiMwLiplbmRfZnVuYyBcXChmb289MjEsIGJhcj0kaGV4IFwi UGFyYW1cIiwgZmI9JGhleCwgYmY9XHtub3RoaW5nID0gJGhleCBcIkZvbyBCYXJcIiwgZiA9IDQy LCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAgICAiYnQgMSBhbGwg YXJncyIKKysKKysjIHNldCBwcmludCBhZGRyZXNzIG9mZgorK2dkYl90ZXN0X25vX291dHB1dCAi c2V0IHByaW50IGFkZHJlc3Mgb2ZmIiBcCisrICAgICJUdXJuIG9mZiBhZGRyZXNzIHByaW50aW5n IgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgMSIgXAorKyAgICAiIzAgIGVuZF9mdW5jIFxcKGZv bz0yMSwgYmFyPVwiUGFyYW1cIiwgZmI9LCBiZj1ce25vdGhpbmcgPSBcIkZvbyBCYXJcIiwgZiA9 IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAgICAiYnQgbm8t ZmlsdGVyIDEgbm8gYWRkcmVzcyIKKytnZGJfdGVzdCAiYnQgMSIgXAorKyAgICAiIzAgIGVuZF9m dW5jIFxcKGZvbz0yMSwgYmFyPVwiUGFyYW1cIiwgZmI9LCBiZj1ce25vdGhpbmcgPSBcIkZvbyBC YXJcIiwgZiA9IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAg ICAiYnQgMSBubyBhZGRyZXNzcyIKKysKKytyZW1vdGVfZmlsZSBob3N0IGRlbGV0ZSAke3JlbW90 ZV9weXRob25fZmlsZX0KKysKKysjIFRlc3Qgd2l0aCBubyBkZWJ1Z2luZm8KKysKKysjIFdlIGNh bm5vdCB1c2UgcHJlcGFyZV9mb3JfdGVzdGluZyBhcyB3ZSBoYXZlIHRvIHNldCB0aGUgc2FmZS1w YXRjaAorKyMgdG8gY2hlY2sgb2JqZmlsZSBhbmQgcHJvZ3NwYWNlIHByaW50ZXJzLgorK2lmIHtb YnVpbGRfZXhlY3V0YWJsZSAkdGVzdGZpbGUuZXhwICR0ZXN0ZmlsZSAkc3JjZmlsZSB7bm9kZWJ1 Z31dID09IC0xfSB7CisrICAgIHJldHVybiAtMQorK30KKysKKysjIFN0YXJ0IHdpdGggYSBmcmVz aCBnZGIuCisrZ2RiX2V4aXQKKytnZGJfc3RhcnQKKysKKysjIFNraXAgYWxsIHRlc3RzIGlmIFB5 dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCisraWYgeyBbc2tpcF9weXRob25fdGVzdHNd IH0geyBjb250aW51ZSB9CisrCisrIyBNYWtlIHRoZSAtZ2RiLnB5IHNjcmlwdCBhdmFpbGFibGUg dG8gZ2RiLCBpdCBpcyBhdXRvbWFnaWNhbGx5IGxvYWRlZCBieSBnZGIuCisrIyBDYXJlIGlzIHRh a2VuIHRvIHB1dCBpdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGJpbmFyeSBzbyB0aGF0 CisrIyBnZGIgd2lsbCBmaW5kIGl0LgorK3NldCByZW1vdGVfb2JqX3B5dGhvbl9maWxlIFwKKysg ICAgW3JlbW90ZV9kb3dubG9hZCBcCisrCSBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0 ZmlsZX0tZ2RiLnB5LmluIFwKKysJICR7c3ViZGlyfS8ke3Rlc3RmaWxlfS1nZGIucHldCisrCisr Z2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCisrZ2RiX3Rlc3Rfbm9fb3V0cHV0 ICJzZXQgYXV0by1sb2FkIHNhZmUtcGF0aCAke3JlbW90ZV9vYmpfcHl0aG9uX2ZpbGV9IiBcCisr ICAgICJzZXQgYXV0by1sb2FkIHNhZmUtcGF0aCBmb3Igbm8gZGVidWcgaW5mbyIKKytnZGJfbG9h ZCAke2JpbmZpbGV9CisrCisrIyBWZXJpZnkgZ2RiIGxvYWRlZCB0aGUgc2NyaXB0LgorK2dkYl90 ZXN0ICJpbmZvIGF1dG8tbG9hZCBweXRob24tc2NyaXB0cyIgIlllcy4qLyR7dGVzdGZpbGV9LWdk Yi5weS4qIiBcCisrICAgICJTZXQgYXV0b2xvYWQgcGF0aCBmb3Igbm8gZGVidWcgaW5mbyB0ZXN0 cyIKKytpZiAhW3J1bnRvX21haW5dIHRoZW4geworKyAgICBwZXJyb3IgImNvdWxkbid0IHJ1biB0 byBicmVha3BvaW50IgorKyAgICByZXR1cm4KKyt9CisrCisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJz ZXQgcHl0aG9uIHByaW50LXN0YWNrIGZ1bGwiIFwKKysgICAgInNldCBweXRob24gcHJpbnQtc3Rh Y2sgZnVsbCBmb3Igbm8gZGVidWdpbmZvIHRlc3RzIgorKworKyMgTG9hZCBnbG9iYWwgZnJhbWUt ZmlsdGVycworK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3JlbW90ZV9kb3dubG9hZCBob3N0ICR7 c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJw eXRob24gZXhlY2ZpbGUgKCcke3JlbW90ZV9weXRob25fZmlsZX0nKSIgXAorKyAgICAiTG9hZCBw eXRob24gZmlsZSBmb3Igbm8gZGVidWdpbmZvIHRlc3RzIgorKworKyMgRGlzYWJsZSBSZXZlcnNl CisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJkaXNhYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgUmV2ZXJz ZSIgXAorKyAgICAiZGlzYWJsZSBmcmFtZS1maWx0ZXIgZ2xvdmFsIFJldmVyc2UgZm9yIG5vIGRl YnVnaW5mbyIKKytnZGJfdGVzdCAiYnQiIFwKKysgICAgIi4qIzAuLippbiBtYWluIFxcKFxcKS4q IiBcCisrICAgICJidCBmb3Igbm8gZGVidWdpbmZvIgorK2dkYl90ZXN0ICJidCBmdWxsIiBcCisr ICAgICIuKiMwLi4qaW4gbWFpbiBcXChcXCkuKiIgXAorKyAgICAiYnQgZnVsbCBmb3Igbm8gZGVi dWdpbmZvIgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXJzIiBcCisrICAgICIuKiMwLi4qaW4gbWFp biBcXChcXCkuKiIgXAorKyAgICAiYnQgbm8gZmlsdGVycyBmb3Igbm8gZGVidWdpbmZvIgorK2dk Yl90ZXN0ICJidCBuby1maWx0ZXJzIGZ1bGwiIFwKKysgICAgIi4qIzAuLippbiBtYWluIFxcKFxc KS4qIiBcCisrICAgICJidCBuby1maWx0ZXJzIGZ1bGwgbm8gZGVidWdpbmZvIgorSW5kZXg6IGdk Yi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLnB5Cis9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisr KysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXIucHkJMjAx My0wNS0yMCAyMjoyNTo1Mi4xMTUxNjU3NjYgKzAyMDAKK0BAIC0wLDAgKzEsMTE3IEBACisrIyBD b3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKysjIGZyYW1lLWZpbHRlcnMu CisraW1wb3J0IGdkYgorK2ltcG9ydCBpdGVydG9vbHMKKytmcm9tIGdkYi5GcmFtZURlY29yYXRv ciBpbXBvcnQgRnJhbWVEZWNvcmF0b3IKKytpbXBvcnQgY29weQorKworK2NsYXNzIFJldmVyc2Vf RnVuY3Rpb24gKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZv YmopOgorKyAgICAgICAgc3VwZXIoUmV2ZXJzZV9GdW5jdGlvbiwgc2VsZikuX19pbml0X18oZm9i aikKKysgICAgICAgIHNlbGYuZm9iaiA9IGZvYmoKKysKKysgICAgZGVmIGZ1bmN0aW9uIChzZWxm KToKKysgICAgICAgIGZuYW1lID0gc3RyIChzZWxmLmZvYmouZnVuY3Rpb24oKSkKKysgICAgICAg IGlmIChmbmFtZSA9PSBOb25lIG9yIGZuYW1lID09ICIiKToKKysgICAgICAgICAgICByZXR1cm4g Tm9uZQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBmbmFtZSA9IGZuYW1lWzo6LTFdCisr ICAgICAgICByZXR1cm4gZm5hbWUKKysKKytjbGFzcyBEdW1teSAoRnJhbWVEZWNvcmF0b3IpOgor KworKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9iaik6CisrICAgICAgICBzdXBlcihEdW1teSwg c2VsZikuX19pbml0X18oZm9iaikKKysgICAgICAgIHNlbGYuZm9iaiA9IGZvYmoKKysKKysgICAg ZGVmIGZ1bmN0aW9uIChzZWxmKToKKysgICAgICAgIHJldHVybiAiRHVtbXkgZnVuY3Rpb24iCisr CisrICAgIGRlZiBhZGRyZXNzIChzZWxmKToKKysgICAgICAgIHJldHVybiAweDEyMworKworKyAg ICBkZWYgZmlsZW5hbWUgKHNlbGYpOgorKyAgICAgICAgcmV0dXJuICJEdW1teSBmaWxlbmFtZSIK KysKKysgICAgZGVmIGZyYW1lX2FyZ3MgKHNlbGYpOgorKyAgICAgICAgcmV0dXJuIFsoIkZvbyIs Z2RiLlZhbHVlKDEyKSksKCJCYXIiLCJTdHVmZiIpLCAoIkZvb0JhciIsNDIpXQorKworKyAgICBk ZWYgZnJhbWVfbG9jYWxzIChzZWxmKToKKysgICAgICAgIHJldHVybiBbXQorKworKyAgICBkZWYg bGluZSAoc2VsZik6CisrICAgICAgICByZXR1cm4gMAorKworKyAgICBkZWYgZWxpZGVkIChzZWxm KToKKysgICAgICAgIHJldHVybiBOb25lCisrCisrY2xhc3MgRnJhbWVGaWx0ZXIgKCk6CisrCisr ICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisrICAgICAgICBzZWxmLm5hbWUgPSAiUmV2ZXJzZSIK KysgICAgICAgIHNlbGYucHJpb3JpdHkgPSAxMDAKKysgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRy dWUKKysgICAgICAgIGdkYi5mcmFtZV9maWx0ZXJzIFtzZWxmLm5hbWVdID0gc2VsZgorKworKyAg ICBkZWYgZmlsdGVyIChzZWxmLCBmcmFtZV9pdGVyKToKKysgICAgICAgIGZyYW1lX2l0ZXIgPSBp dGVydG9vbHMuaW1hcCAoUmV2ZXJzZV9GdW5jdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZnJhbWVfaXRlcikKKysgICAgICAgIHJldHVybiBmcmFtZV9pdGVyCisr CisrY2xhc3MgRWxpZGluZ0ZyYW1lRGVjb3JhdG9yKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAg ZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lLCBlbGlkZWRfZnJhbWVzKToKKysgICAgICAgIHN1cGVy KEVsaWRpbmdGcmFtZURlY29yYXRvciwgc2VsZikuX19pbml0X18oZnJhbWUpCisrICAgICAgICBz ZWxmLmVsaWRlZF9mcmFtZXMgPSBlbGlkZWRfZnJhbWVzCisrCisrICAgIGRlZiBlbGlkZWQoc2Vs Zik6CisrICAgICAgICByZXR1cm4gaXRlcihzZWxmLmVsaWRlZF9mcmFtZXMpCisrCisrY2xhc3Mg RWxpZGluZ0l0ZXJhdG9yOgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWkpOgorKyAgICAgICAg c2VsZi5pbnB1dF9pdGVyYXRvciA9IGlpCisrCisrICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKysg ICAgICAgIHJldHVybiBzZWxmCisrCisrICAgIGRlZiBuZXh0KHNlbGYpOgorKyAgICAgICAgZnJh bWUgPSBuZXh0KHNlbGYuaW5wdXRfaXRlcmF0b3IpCisrICAgICAgICBpZiBzdHIoZnJhbWUuZnVu Y3Rpb24oKSkgIT0gJ2Z1bmMxJzoKKysgICAgICAgICAgICByZXR1cm4gZnJhbWUKKysKKysgICAg ICAgICMgU3VwcG9zZSB3ZSB3YW50IHRvIHJldHVybiB0aGUgJ2Z1bmMxJyBmcmFtZSBidXQgZWxp ZGUgdGhlCisrICAgICAgICAjIG5leHQgZnJhbWUuICBFLmcuLCBpZiBjYWxsIGluIG91ciBpbnRl cnByZXRlciBsYW5ndWFnZSB0YWtlcworKyAgICAgICAgIyB0d28gQyBmcmFtZXMgdG8gaW1wbGVt ZW50LCBhbmQgdGhlIGZpcnN0IG9uZSB3ZSBzZWUgaXMgdGhlCisrICAgICAgICAjICJzZW50aW5l bCIuCisrICAgICAgICBlbGlkZWQgPSBuZXh0KHNlbGYuaW5wdXRfaXRlcmF0b3IpCisrICAgICAg ICByZXR1cm4gRWxpZGluZ0ZyYW1lRGVjb3JhdG9yKGZyYW1lLCBbZWxpZGVkXSkKKysKKytjbGFz cyBGcmFtZUVsaWRlciAoKToKKysKKysgICAgZGVmIF9faW5pdF9fIChzZWxmKToKKysgICAgICAg IHNlbGYubmFtZSA9ICJFbGlkZXIiCisrICAgICAgICBzZWxmLnByaW9yaXR5ID0gOTAwCisrICAg ICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAgICAgICBnZGIuZnJhbWVfZmlsdGVycyBbc2Vs Zi5uYW1lXSA9IHNlbGYKKysKKysgICAgZGVmIGZpbHRlciAoc2VsZiwgZnJhbWVfaXRlcik6Cisr ICAgICAgICByZXR1cm4gRWxpZGluZ0l0ZXJhdG9yIChmcmFtZV9pdGVyKQorKworK0ZyYW1lRmls dGVyKCkKKytGcmFtZUVsaWRlcigpCgpkaWZmIC0tZ2l0IGEvZ2RiLXVwc3RyZWFtLWZyYW1lZmls dGVycy0yb2YyLnBhdGNoIGIvZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0yb2YyLnBhdGNoCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDZlZjYKLS0tIC9kZXYvbnVsbAor KysgYi9nZGItdXBzdHJlYW0tZnJhbWVmaWx0ZXJzLTJvZjIucGF0Y2gKQEAgLTAsMCArMSwxNzUg QEAKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItY3ZzLzIwMTMtMDUvbXNnMDAxNDEuaHRt bAorCisjIyMgc3JjL2dkYi9DaGFuZ2VMb2cJMjAxMy8wNS8xNyAwNjo1ODozMwkxLjE1NTY1Cisj IyMgc3JjL2dkYi9DaGFuZ2VMb2cJMjAxMy8wNS8xNyAwODozNDoxOAkxLjE1NTY2CisjIyAtMSwz ICsxLDE4IEBACisrMjAxMy0wNS0xNyAgUGhpbCBNdWxkb29uICA8cG11bGRvb25AcmVkaGF0LmNv bT4KKysKKysJKiBmcmFtZS5jIChmcmFtZV9zdGFzaCk6IENvbnZlcnQgdG8gaHRhYi4KKysJKGZy YW1lX2FkZHJfaGFzaCk6IE5ldyBmdW5jdGlvbi4KKysJKGZyYW1lX2FkZHJfaGFzaF9lcSk6IE5l dyBmdW5jdGlvbi4KKysJKGZyYW1lX3N0YXNoX2NyZWF0ZSk6IENvbnZlcnQgZnVuY3Rpb24gdG8g Y3JlYXRlCisrCWEgaGFzaCB0YWJsZS4KKysJKGZyYW1lX3N0YXNoX2FkZCk6IENvbnZlcnQgZnVu Y3Rpb24gdG8gYWRkIGFuIGVudHJ5IHRvIGEgaGFzaAorKwl0YWJsZS4KKysJKGZyYW1lX3N0YXNo X2ZpbmQpOiBDb252ZXJ0IGZ1bmN0aW9uIHRvIHNlYXJjaCB0aGUgaGFzaCB0YWJsZS4KKysJKGZy YW1lX3N0YXNoX2ludmFsaWRhdGUpOiBDb252ZXJ0IGZ1bmN0aW9uIHRvIGVtcHR5IHRoZSBoYXNo CisrCXRhYmxlLgorKwkoZ2V0X2ZyYW1lX2lkKTogT25seSBhZGQgdG8gc3Rhc2ggaWYgYSBmcmFt ZV9pZCBpcyBjcmVhdGVkLgorKwkoX2luaXRpYWxpemVfZnJhbWUpOiBDYWxsIGZyYW1lX3N0YXNo X2NyZWF0ZS4KKysKKyAyMDEzLTA1LTE2ICBZdWUgTHUgIDxoYWNrbHUubmV3Ym9ybkBnbWFpbC5j b20+ICAodGlueSBjaGFuZ2UpCisgCisgCSogY29uZmlndXJlLmFjOiBFbnN1cmUgTUlHIGlzIGF2 YWlsYWJsZSB3aGVuIGJ1aWxkaW5nIGZvciBHTlUgSHVyZAorLS0tIHNyYy9nZGIvZnJhbWUuYwky MDEzLzA0LzEwIDE1OjExOjExCTEuMzE3CisrKysgc3JjL2dkYi9mcmFtZS5jCTIwMTMvMDUvMTcg MDg6MzQ6MTgJMS4zMTgKK0BAIC00Myw2ICs0Myw3IEBACisgI2luY2x1ZGUgImJsb2NrLmgiCisg I2luY2x1ZGUgImlubGluZS1mcmFtZS5oIgorICNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisrI2lu Y2x1ZGUgImhhc2h0YWIuaCIKKyAKKyBzdGF0aWMgc3RydWN0IGZyYW1lX2luZm8gKmdldF9wcmV2 X2ZyYW1lXzEgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKTsKKyBzdGF0aWMgc3RydWN0 IGZyYW1lX2luZm8gKmdldF9wcmV2X2ZyYW1lX3JhdyAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNf ZnJhbWUpOworQEAgLTEyOCwzOCArMTI5LDEwNyBAQAorICAgZW51bSB1bndpbmRfc3RvcF9yZWFz b24gc3RvcF9yZWFzb247CisgfTsKKyAKKy0vKiBBIGZyYW1lIHN0YXNoIHVzZWQgdG8gc3BlZWQg dXAgZnJhbWUgbG9va3Vwcy4gICovCisrLyogQSBmcmFtZSBzdGFzaCB1c2VkIHRvIHNwZWVkIHVw IGZyYW1lIGxvb2t1cHMuICBDcmVhdGUgYSBoYXNoIHRhYmxlCisrICAgdG8gc3Rhc2ggZnJhbWVz IHByZXZpb3VzbHkgYWNjZXNzZWQgZnJvbSB0aGUgZnJhbWUgY2FjaGUgZm9yCisrICAgcXVpY2tl ciBzdWJzZXF1ZW50IHJldHJpZXZhbC4gIFRoZSBoYXNoIHRhYmxlIGlzIGVtcHRpZWQgd2hlbmV2 ZXIKKysgICB0aGUgZnJhbWUgY2FjaGUgaXMgaW52YWxpZGF0ZWQuICAqLworKworK3N0YXRpYyBo dGFiX3QgZnJhbWVfc3Rhc2g7CisrCisrLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gY2FsY3VsYXRl IGEgaGFzaCBmcm9tIHRoZSBmcmFtZV9pZCBhZGRyZXNzZXMsCisrICAgdXNpbmcgYXMgbWFueSB2 YWxpZCBhZGRyZXNzZXMgYXMgcG9zc2libGUuICBGcmFtZXMgYmVsb3cgbGV2ZWwgMAorKyAgIGFy ZSBub3Qgc3RvcmVkIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysKKytzdGF0aWMgaGFzaHZhbF90 CisrZnJhbWVfYWRkcl9oYXNoIChjb25zdCB2b2lkICphcCkKKyt7CisrICBjb25zdCBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZnJhbWUgPSBhcDsKKysgIGNvbnN0IHN0cnVjdCBmcmFtZV9pZCBmX2lkID0g ZnJhbWUtPnRoaXNfaWQudmFsdWU7CisrICBoYXNodmFsX3QgaGFzaCA9IDA7CisrCisrICBnZGJf YXNzZXJ0IChmX2lkLnN0YWNrX2FkZHJfcCB8fCBmX2lkLmNvZGVfYWRkcl9wCisrCSAgICAgIHx8 IGZfaWQuc3BlY2lhbF9hZGRyX3ApOworKworKyAgaWYgKGZfaWQuc3RhY2tfYWRkcl9wKQorKyAg ICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKCZmX2lkLnN0YWNrX2FkZHIsCisrCQkJICAgc2l6ZW9m IChmX2lkLnN0YWNrX2FkZHIpLCBoYXNoKTsKKysgIGlmIChmX2lkLmNvZGVfYWRkcl9wKQorKyAg ICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKCZmX2lkLmNvZGVfYWRkciwKKysJCQkgICBzaXplb2Yg KGZfaWQuY29kZV9hZGRyKSwgaGFzaCk7CisrICBpZiAoZl9pZC5zcGVjaWFsX2FkZHJfcCkKKysg ICAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoICgmZl9pZC5zcGVjaWFsX2FkZHIsCisrCQkJICAgc2l6 ZW9mIChmX2lkLnNwZWNpYWxfYWRkciksIGhhc2gpOworIAorLS8qIFdlIGN1cnJlbnRseSBvbmx5 IHN0YXNoIG9uZSBmcmFtZSBhdCBhIHRpbWUsIGFzIHRoaXMgc2VlbXMgdG8gYmUKKy0gICBzdWZm aWNpZW50IGZvciBub3cuICAqLworLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWVfc3Rh c2ggPSBOVUxMOworKyAgcmV0dXJuIGhhc2g7CisrfQorKworKy8qIEludGVybmFsIGVxdWFsaXR5 IGZ1bmN0aW9uIGZvciB0aGUgaGFzaCB0YWJsZS4gIFRoaXMgZnVuY3Rpb24KKysgICBkZWZlcnMg ZXF1YWxpdHkgb3BlcmF0aW9ucyB0byBmcmFtZV9pZF9lcS4gICovCisrCisrc3RhdGljIGludAor K2ZyYW1lX2FkZHJfaGFzaF9lcSAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKyt7Cisr ICBjb25zdCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZl9lbnRyeSA9IGE7CisrICBjb25zdCBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqZl9lbGVtZW50ID0gYjsKKyAKKy0vKiBBZGQgdGhlIGZvbGxvd2luZyBGUkFN RSB0byB0aGUgZnJhbWUgc3Rhc2guICAqLworKyAgcmV0dXJuIGZyYW1lX2lkX2VxIChmX2VudHJ5 LT50aGlzX2lkLnZhbHVlLAorKwkJICAgICAgZl9lbGVtZW50LT50aGlzX2lkLnZhbHVlKTsKKyt9 CisrCisrLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmcmFtZV9zdGFzaCBoYXNo IHRhYmxlLiAgMTAwIHNlZW1zCisrICAgdG8gYmUgYSBnb29kIGNvbXByb21pc2UgdG8gc3RhcnQg dGhlIGhhc2ggdGFibGUgYXQuICAqLworKworK3N0YXRpYyB2b2lkCisrZnJhbWVfc3Rhc2hfY3Jl YXRlICh2b2lkKQorK3sKKysgIGZyYW1lX3N0YXNoID0gaHRhYl9jcmVhdGUgKDEwMCwKKysJCQkg ICAgIGZyYW1lX2FkZHJfaGFzaCwKKysJCQkgICAgIGZyYW1lX2FkZHJfaGFzaF9lcSwKKysJCQkg ICAgIE5VTEwpOworK30KKysKKysvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBhZGQgYSBmcmFtZSB0 byB0aGUgZnJhbWVfc3Rhc2ggaGFzaCB0YWJsZS4gIERvCisrICAgbm90IHN0b3JlIGZyYW1lcyBi ZWxvdyAwIGFzIHRoZXkgbWF5IG5vdCBoYXZlIGFueSBhZGRyZXNzZXMgdG8KKysgICBjYWxjdWxh dGUgYSBoYXNoLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIGZyYW1lX3N0YXNoX2FkZCAoc3RydWN0 IGZyYW1lX2luZm8gKmZyYW1lKQorIHsKKy0gIGZyYW1lX3N0YXNoID0gZnJhbWU7CisrICAvKiBE byBub3Qgc3Rhc2ggZnJhbWVzIGJlbG93IGxldmVsIDAuICAqLworKyAgaWYgKGZyYW1lLT5sZXZl bCA+PSAwKQorKyAgICB7CisrICAgICAgc3RydWN0IGZyYW1lX2luZm8gKipzbG90OworKworKyAg ICAgIHNsb3QgPSAoc3RydWN0IGZyYW1lX2luZm8gKiopIGh0YWJfZmluZF9zbG90IChmcmFtZV9z dGFzaCwKKysJCQkJCQkgICAgZnJhbWUsCisrCQkJCQkJICAgIElOU0VSVCk7CisrICAgICAgKnNs b3QgPSBmcmFtZTsKKysgICAgfQorIH0KKyAKKy0vKiBTZWFyY2ggdGhlIGZyYW1lIHN0YXNoIGZv ciBhbiBlbnRyeSB3aXRoIHRoZSBnaXZlbiBmcmFtZSBJRC4KKy0gICBJZiBmb3VuZCwgcmV0dXJu IHRoYXQgZnJhbWUuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworKy8qIEludGVybmFsIGZ1 bmN0aW9uIHRvIHNlYXJjaCB0aGUgZnJhbWUgc3Rhc2ggZm9yIGFuIGVudHJ5IHdpdGggdGhlCisr ICAgZ2l2ZW4gZnJhbWUgSUQuICBJZiBmb3VuZCwgcmV0dXJuIHRoYXQgZnJhbWUuICBPdGhlcndp c2UgcmV0dXJuCisrICAgTlVMTC4gICovCisgCisgc3RhdGljIHN0cnVjdCBmcmFtZV9pbmZvICoK KyBmcmFtZV9zdGFzaF9maW5kIChzdHJ1Y3QgZnJhbWVfaWQgaWQpCisgeworLSAgaWYgKGZyYW1l X3N0YXNoICYmIGZyYW1lX2lkX2VxIChmcmFtZV9zdGFzaC0+dGhpc19pZC52YWx1ZSwgaWQpKQor LSAgICByZXR1cm4gZnJhbWVfc3Rhc2g7CisrICBzdHJ1Y3QgZnJhbWVfaW5mbyBkdW1teTsKKysg IHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKyAKKy0gIHJldHVybiBOVUxMOworKyAgZHVtbXku dGhpc19pZC52YWx1ZSA9IGlkOworKyAgZnJhbWUgPSBodGFiX2ZpbmQgKGZyYW1lX3N0YXNoLCAm ZHVtbXkpOworKyAgcmV0dXJuIGZyYW1lOworIH0KKyAKKy0vKiBJbnZhbGlkYXRlIHRoZSBmcmFt ZSBzdGFzaCBieSByZW1vdmluZyBhbGwgZW50cmllcyBpbiBpdC4gICovCisrLyogSW50ZXJuYWwg ZnVuY3Rpb24gdG8gaW52YWxpZGF0ZSB0aGUgZnJhbWUgc3Rhc2ggYnkgcmVtb3ZpbmcgYWxsCisr ICAgZW50cmllcyBpbiBpdC4gIFRoaXMgb25seSBvY2N1cnMgd2hlbiB0aGUgZnJhbWUgY2FjaGUg aXMKKysgICBpbnZhbGlkYXRlZC4gICovCisgCisgc3RhdGljIHZvaWQKKyBmcmFtZV9zdGFzaF9p bnZhbGlkYXRlICh2b2lkKQorIHsKKy0gIGZyYW1lX3N0YXNoID0gTlVMTDsKKysgIGh0YWJfZW1w dHkgKGZyYW1lX3N0YXNoKTsKKyB9CisgCisgLyogRmxhZyB0byBjb250cm9sIGRlYnVnZ2luZy4g ICovCitAQCAtMzQ1LDEwICs0MTUsOSBAQAorIAkgIGZwcmludF9mcmFtZV9pZCAoZ2RiX3N0ZGxv ZywgZmktPnRoaXNfaWQudmFsdWUpOworIAkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywgIiB9XG4iKTsKKyAJfQorKyAgICAgIGZyYW1lX3N0YXNoX2FkZCAoZmkpOworICAgICB9Cisg CistICBmcmFtZV9zdGFzaF9hZGQgKGZpKTsKKy0KKyAgIHJldHVybiBmaS0+dGhpc19pZC52YWx1 ZTsKKyB9CisgCitAQCAtMjQ1MSw2ICsyNTIwLDggQEAKKyB7CisgICBvYnN0YWNrX2luaXQgKCZm cmFtZV9jYWNoZV9vYnN0YWNrKTsKKyAKKysgIGZyYW1lX3N0YXNoX2NyZWF0ZSAoKTsKKysKKyAg IG9ic2VydmVyX2F0dGFjaF90YXJnZXRfY2hhbmdlZCAoZnJhbWVfb2JzZXJ2ZXJfdGFyZ2V0X2No YW5nZWQpOworIAorICAgYWRkX3ByZWZpeF9jbWQgKCJiYWNrdHJhY2UiLCBjbGFzc19tYWludGVu YW5jZSwgc2V0X2JhY2t0cmFjZV9jbWQsIF8oIlwKCmRpZmYgLS1naXQgYS9nZGItdXBzdHJlYW0u cGF0Y2ggYi9nZGItdXBzdHJlYW0ucGF0Y2gKaW5kZXggYmNjNTY2Ny4uMzI0MGFiMiAxMDA2NDQK LS0tIGEvZ2RiLXVwc3RyZWFtLnBhdGNoCisrKyBiL2dkYi11cHN0cmVhbS5wYXRjaApAQCAtMTE5 OSwzICsxMTk5LDk3IEBAIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItY3ZzLzIwMTMtMDQv bXNnMDAwNzAuaHRtbAogIAktKCQoUE9EMk1BTjUpIGdkYmluaXQucG9kIHwgc2VkIC1lICcvXi5p ZiBuIC5uYS9kJyA+ICRALlQkJCQkICYmIFwKICAJCW12IC1mICRALlQkJCQkICRAKSB8fCAocm0g LWYgJEAuVCQkJCQgJiYgZXhpdCAxKQogIAlybSAtZiBnZGJpbml0LnBvZAorCisKKworaHR0cDov L3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNTQxMworaHR0cDovL3Nv dXJjZXdhcmUub3JnL21sL2dkYi1jdnMvMjAxMy0wNS9tc2cwMDA2My5odG1sCisKKyMjIyBzcmMv Z2RiL0NoYW5nZUxvZwkyMDEzLzA0LzI2IDE0OjEzOjEzCTEuMTUyNjAuMi41MAorIyMjIHNyYy9n ZGIvQ2hhbmdlTG9nCTIwMTMvMDUvMDcgMTc6MDQ6NTYJMS4xNTI2MC4yLjUxCisjIyAtMSwzICsx LDEwIEBACisrMjAxMy0wNS0wNyAgU2VyZ2lvIER1cmlnYW4gSnVuaW9yICA8c2VyZ2lvZGpAcmVk aGF0LmNvbT4KKysKKysJUFIgYnJlYWtwb2ludHMvMTU0MTM6CisrCSogYnJlYWtwb2ludC5jIChj b25kaXRpb25fY29tcGxldGVyKTogU2ltcGxpZnkgdGhlIGNvZGUgdG8KKysJZGlzY29uc2lkZXIg bXVsdGlwbGUgbG9jYXRpb25zIG9mIGJyZWFrcG9pbnRzIHdoZW4gY29tcGxldGluZyB0aGUKKysJ ImNvbmRpdGlvbiIgY29tbWFuZC4KKysKKyAyMDEzLTA0LTI2ICBKb2VsIEJyb2JlY2tlciAgPGJy b2JlY2tlckBhZGFjb3JlLmNvbT4KKyAKKyAJKiB2ZXJzaW9uLmluOiBTZXQgdmVyc2lvbiB0byA3 LjYuMC4yMDEzMDQyNi1jdnMuCistLS0gc3JjL2dkYi9icmVha3BvaW50LmMJMjAxMy8wNC8yNSAw ODoxNTozNAkxLjc0NS4yLjUKKysrKyBzcmMvZ2RiL2JyZWFrcG9pbnQuYwkyMDEzLzA1LzA3IDE3 OjA0OjU3CTEuNzQ1LjIuNgorQEAgLTEwMTUsMjcgKzEwMTUsMTQgQEAKKyAgICAgICBsZW4gPSBz dHJsZW4gKHRleHQpOworIAorICAgICAgIEFMTF9CUkVBS1BPSU5UUyAoYikKKy0gICAgICB7Cist CWludCBzaW5nbGUgPSBiLT5sb2MtPm5leHQgPT0gTlVMTDsKKy0Jc3RydWN0IGJwX2xvY2F0aW9u ICpsb2M7CistCWludCBjb3VudCA9IDE7CistCistCWZvciAobG9jID0gYi0+bG9jOyBsb2M7IGxv YyA9IGxvYy0+bmV4dCkKKy0JICB7CistCSAgICBjaGFyIGxvY2F0aW9uWzUwXTsKKy0KKy0JICAg IGlmIChzaW5nbGUpCistCSAgICAgIHhzbnByaW50ZiAobG9jYXRpb24sIHNpemVvZiAobG9jYXRp b24pLCAiJWQiLCBiLT5udW1iZXIpOworLQkgICAgZWxzZQorLQkgICAgICB4c25wcmludGYgKGxv Y2F0aW9uLCBzaXplb2YgKGxvY2F0aW9uKSwgICIlZC4lZCIsIGItPm51bWJlciwKKy0JCQkgY291 bnQpOworKwl7CisrCSAgY2hhciBudW1iZXJbNTBdOworIAorLQkgICAgaWYgKHN0cm5jbXAgKGxv Y2F0aW9uLCB0ZXh0LCBsZW4pID09IDApCistCSAgICAgIFZFQ19zYWZlX3B1c2ggKGNoYXJfcHRy LCByZXN1bHQsIHhzdHJkdXAgKGxvY2F0aW9uKSk7CisrCSAgeHNucHJpbnRmIChudW1iZXIsIHNp emVvZiAobnVtYmVyKSwgIiVkIiwgYi0+bnVtYmVyKTsKKyAKKy0JICAgICsrY291bnQ7CistCSAg fQorLSAgICAgIH0KKysJICBpZiAoc3RybmNtcCAobnVtYmVyLCB0ZXh0LCBsZW4pID09IDApCisr CSAgICBWRUNfc2FmZV9wdXNoIChjaGFyX3B0ciwgcmVzdWx0LCB4c3RyZHVwIChudW1iZXIpKTsK KysJfQorIAorICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgIH0KKyMjIyBzcmMvZ2RiL3Rlc3Rz dWl0ZS9DaGFuZ2VMb2cJMjAxMy8wNS8wMyAxNjoyNjozMgkxLjM1ODAuMi4yMAorIyMjIHNyYy9n ZGIvdGVzdHN1aXRlL0NoYW5nZUxvZwkyMDEzLzA1LzA3IDE3OjA0OjU3CTEuMzU4MC4yLjIxCisj IyAtMSwzICsxLDExIEBACisrMjAxMy0wNS0wNyAgU2VyZ2lvIER1cmlnYW4gSnVuaW9yICA8c2Vy Z2lvZGpAcmVkaGF0LmNvbT4KKysKKysJUFIgYnJlYWtwb2ludHMvMTU0MTM6CisrCSogZ2RiLmJh c2UvcGVuZGluZy5leHA6IEFkZCB0ZXN0IGZvciBjb21wbGV0aW9uIG9mIHRoZSAiY29uZGl0aW9u IgorKwljb21tYW5kIGZvciBwZW5kaW5nIGJyZWFrcG9pbnRzLgorKwkqIGdkYi5saW5lc3BlYy9s aW5lc3BlYy5leDogQWRkIHRlc3QgZm9yIGNvbXBsZXRpb24gb2YgdGhlCisrCSJjb25kaXRpb24i IGNvbW1hbmQgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgbG9jYXRpb25zLgorKworIDIwMTMt MDUtMDMgIEhhZml6IEFiaWQgUWFkZWVyICA8YWJpZGhAY29kZXNvdXJjZXJ5LmNvbT4KKyAKKyAJ KiBzdGF0dXMtc3RvcC5leHAgKHRlc3RfdHN0YXJ0X3RzdGFydCk6IENoZWNrIGZvciBlcnJvcgor LS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3BlbmRpbmcuZXhwCTIwMTMvMDEvMDEgMDY6 MzM6MjYJMS4yNworKysrIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3BlbmRpbmcuZXhwCTIw MTMvMDUvMDcgMTc6MDQ6NTcJMS4yNy4yLjEKK0BAIC01NSw2ICs1NSw5IEBACisgICAgICB9Cisg fQorIAorKyMgQ29tcGxldGUgdGhlIGNvbmRpdGlvbiAoUFIgMTU0MTMpLgorK2dkYl90ZXN0ICJj b21wbGV0ZSBjb25kaXRpb24gIiAiY29uZGl0aW9uIDEiCisrCisgZ2RiX3Rlc3QgImluZm8gYnJl YWsiIFwKKyAgICAgIk51bSAgICAgVHlwZVxbIFxdK0Rpc3AgRW5iIEFkZHJlc3NcWyBcXStXaGF0 LioKKyBcWzAtOVxdK1xbXHQgXF0rYnJlYWtwb2ludCAgICAga2VlcCB5LipQRU5ESU5HLipwZW5k ZnVuYzEuKiIgXAorLS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5saW5lc3BlYy9saW5lc3BlYy5l eHAJMjAxMy8wMS8wMSAwNjo0MToyNAkxLjYKKysrKyBzcmMvZ2RiL3Rlc3RzdWl0ZS9nZGIubGlu ZXNwZWMvbGluZXNwZWMuZXhwCTIwMTMvMDUvMDcgMTc6MDQ6NTcJMS42LjIuMQorQEAgLTYzLDYg KzYzLDEwIEBACisgICAgICJCcmVha3BvaW50ICRkZWNpbWFsIGF0ICRoZXg6IGR1cG5hbWU6bGFi ZWwuIFxbKFxdMiBsb2NhdGlvbnNcWylcXSIgXAorICAgICAibXVsdGktbG9jYXRpb24gYnJlYWsg dXNpbmcgZHVwbGljYXRlIGZ1bmN0aW9uIG5hbWUgYW5kIGxhYmVsIgorIAorKyMgVGVzdGluZyBp ZiB0aGUgImNvbmRpdGlvbiIgY29tbWFuZCBjb21wbGV0ZXMgb25seSB0aGUgYnJlYWtwb2ludHMs CisrIyBub3QgdGhlIGxvY2F0aW9ucy4KKytnZGJfdGVzdCAiY29tcGxldGUgY29uZGl0aW9uICIg ImNvbmRpdGlvbiAkZGVjaW1hbFxyXG5jb25kaXRpb24gJGRlY2ltYWxcclxuY29uZGl0aW9uICRk ZWNpbWFsIgorKworIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGJyZWFrcG9pbnQgcGVuZGluZyBv ZmYiIFwKKyAgICAgImRpc2FibGUgcGVuZGluZyBicmVha3BvaW50cyBmb3IgbGluZXNwZWMgdGVz dHMiCisgCgpkaWZmIC0tZ2l0IGEvZ2RiLnNwZWMgYi9nZGIuc3BlYwppbmRleCAxNmJjM2YwLi44 YWFkYTA0IDEwMDY0NAotLS0gYS9nZGIuc3BlYworKysgYi9nZGIuc3BlYwpAQCAtMzYsNyArMzYs NyBAQCBWZXJzaW9uOiA3LjYKIAogIyBUaGUgcmVsZWFzZSBhbHdheXMgY29udGFpbnMgYSBsZWFk aW5nIHJlc2VydmVkIG51bWJlciwgc3RhcnQgaXQgYXQgMS4KICMgYHVwc3RyZWFtJyBpcyBub3Qg YSBwYXJ0IG9mIGBuYW1lJyB0byBzdGF5IGZ1bGx5IHJwbSBkZXBlbmRlbmNpZXMgY29tcGF0aWJs ZSBmb3IgdGhlIHRlc3RpbmcuCi1SZWxlYXNlOiAyOSV7P2Rpc3R9CitSZWxlYXNlOiAzMCV7P2Rp c3R9CiAKIExpY2Vuc2U6IEdQTHYzKyBhbmQgR1BMdjMrIHdpdGggZXhjZXB0aW9ucyBhbmQgR1BM djIrIGFuZCBHUEx2Misgd2l0aCBleGNlcHRpb25zIGFuZCBHUEwrIGFuZCBMR1BMdjIrIGFuZCBC U0QgYW5kIFB1YmxpYyBEb21haW4KIEdyb3VwOiBEZXZlbG9wbWVudC9EZWJ1Z2dlcnMKQEAgLTI2 Niw2ICsyNjYsOSBAQCBQYXRjaDIzMTogZ2RiLTYuMy1iejIwMjY4OS1leGVjLWZyb20tcHRocmVh ZC10ZXN0LnBhdGNoCiBQYXRjaDIzMjogZ2RiLXVwc3RyZWFtLnBhdGNoCiBQYXRjaDgyODogZ2Ri LXVwc3RyZWFtLW1hbi1nY29yZS0xb2YyLnBhdGNoCiBQYXRjaDgyOTogZ2RiLXVwc3RyZWFtLW1h bi1nY29yZS0yb2YyLnBhdGNoCisjIEJhY2twb3J0ZWQgUHl0aG9uIGZyYW1lIGZpbHRlcnMgKFBo aWwgTXVsZG9vbikuCitQYXRjaDgzNjogZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0xb2YyLnBh dGNoCitQYXRjaDgzNzogZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0yb2YyLnBhdGNoCiAKICMg VGVzdGNhc2UgZm9yIFBQQyBQb3dlcjYvREZQIGluc3RydWN0aW9ucyBkaXNhc3NlbWJseSAoQlog MjMwMDAwKS4KICM9ZmVkb3JhdGVzdCtwcGMKQEAgLTc4MCw2ICs3ODMsOCBAQCBmaW5kIC1uYW1l ICIqLmluZm8qInx4YXJncyBybSAtZgogJXBhdGNoMjMyIC1wMQogJXBhdGNoODI4IC1wMQogJXBh dGNoODI5IC1wMQorJXBhdGNoODM2IC1wMQorJXBhdGNoODM3IC1wMQogJXBhdGNoMSAtcDEKICVw YXRjaDMgLXAxCiAKQEAgLTEzOTcsOCArMTQwMiwxMiBAQCBmaQogJWVuZGlmICMgMCV7IT9lbDU6 MX0gfHwgIiV7X3RhcmdldF9jcHV9IiA9PSAibm9hcmNoIgogCiAlY2hhbmdlbG9nCisqIFR1ZSBN YXkgMjEgMjAxMyBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4gLSA3 LjYtMzAuZmMxOQorLSBCYWNrcG9ydGVkIFB5dGhvbiBmcmFtZSBmaWx0ZXJzIChQaGlsIE11bGRv b24pLgorLSBCYWNrcG9ydGVkIGJyZWFrcG9pbnQgY29uZGl0aW9ucyBjcmFzaCBmaXggKFNlcmdp byBEdXJpZ2FuIEp1bmlvcikuCisKICogU3VuIE1heSAxOSAyMDEzIEphbiBLcmF0b2NodmlsIDxq YW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOS5mYzE5Ci0tIEZpeCBwZXJmb3JtYW5j ZSByZWdyZXNzaW9uIHdoZW4gaW5mZXJpb3Igb3BlbnMgbWFueSBsaWJyYXJpZXMgKEdhcnkgQmVu c29uKS4KKy0gRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gb3BlbmluZyBtYW55IGxpYnJhcmll cyAoR2FyeSBCZW5zb24sIEJaIDk2NTEwNikuCiAKICogVGh1IE1heSAgOSAyMDEzIEphbiBLcmF0 b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOC5mYzE5CiAtIEZpeCBu ZWVkbGVzcyBleHBhbnNpb24gb2Ygbm9uLWdkYmluZGV4IHN5bXRhYnMgKERvdWcgRXZhbnMpLgo=