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] gdb-17.2-rebase-f44: Backported Python frame filters (Phil Muldoon). Date: Sat, 27 Jun 2026 23:56:14 GMT Message-ID: <178260457426.1.3053214192822514885.rpms-gdb-89fbbfccaf09@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: gdb-17.2-rebase-f44 X-Git-Rev: 89fbbfccaf093284eadb1af638486ee5b1701a81 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvZ2RiCiAgICAgICAgICAgIEJyYW5jaCA6IGdkYi0xNy4yLXJlYmFzZS1mNDQK ICAgICAgICAgICAgQ29tbWl0IDogODlmYmJmY2NhZjA5MzI4NGVhZGIxYWY2Mzg0ODZlZTViMTcw MWE4MQogICAgICAgICAgICBBdXRob3IgOiBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxA cmVkaGF0LmNvbT4KICAgICAgICAgICAgRGF0ZSAgIDogMjAxMy0wNS0yMVQxMzo1NDozMyswMjow MAogICAgICAgICAgICBTdGF0cyAgOiArNTg2MS8tNTYyIGluIDcgZmlsZShzKQogICAgICAgICAg ICBVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2dkYi9jLzg5ZmJi ZmNjYWYwOTMyODRlYWRiMWFmNjM4NDg2ZWU1YjE3MDFhODE/YnJhbmNoPWdkYi0xNy4yLXJlYmFz ZS1mNDQKCiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgQmFja3BvcnRlZCBQeXRob24gZnJh bWUgZmlsdGVycyAoUGhpbCBNdWxkb29uKS4KCi0gQmFja3BvcnRlZCBicmVha3BvaW50IGNvbmRp dGlvbnMgY3Jhc2ggZml4IChTZXJnaW8gRHVyaWdhbiBKdW5pb3IpLgoKLS0tCmRpZmYgLS1naXQg YS9nZGItNi4zLWdzdGFjay0yMDA1MDQxMS5wYXRjaCBiL2dkYi02LjMtZ3N0YWNrLTIwMDUwNDEx LnBhdGNoCmluZGV4IDVmZTkwMmMuLmI3M2VlZmYgMTAwNjQ0Ci0tLSBhL2dkYi02LjMtZ3N0YWNr LTIwMDUwNDExLnBhdGNoCisrKyBiL2dkYi02LjMtZ3N0YWNrLTIwMDUwNDExLnBhdGNoCkBAIC00 LDExICs0LDExIEBACiAJdG8gaW5zdGFsbCBhbmQgdW5pbnN0YWxsLgogCSogZ3N0YWNrLnNoLCBn c3RhY2suMTogTmV3IGZpbGVzLgogCi1JbmRleDogZ2RiLTcuNS45MS4yMDEzMDQwNy9nZGIvTWFr ZWZpbGUuaW4KK0luZGV4OiBnZGItNy42L2dkYi9NYWtlZmlsZS5pbgogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0t IGdkYi03LjUuOTEuMjAxMzA0MDcub3JpZy9nZGIvTWFrZWZpbGUuaW4JMjAxMy0wNC0xMSAxNjo1 MDozMy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnZGItNy41LjkxLjIwMTMwNDA3L2dkYi9NYWtlZmls ZS5pbgkyMDEzLTA0LTExIDE2OjUyOjUxLjAzMjI4MDI5NCArMDIwMAotQEAgLTEwMjcsNyArMTAy Nyw3IEBAIGluZm8gaW5zdGFsbC1pbmZvIGNsZWFuLWluZm8gZHZpIHBkZiBpbnMKKy0tLSBnZGIt Ny42Lm9yaWcvZ2RiL01ha2VmaWxlLmluCTIwMTMtMDUtMjEgMTM6MjY6MzMuNDk2ODIwNzYzICsw MjAwCisrKysgZ2RiLTcuNi9nZGIvTWFrZWZpbGUuaW4JMjAxMy0wNS0yMSAxMzoyNjozMy42MDk4 MTk1NzkgKzAyMDAKK0BAIC0xMDI5LDcgKzEwMjksNyBAQCBpbmZvIGluc3RhbGwtaW5mbyBjbGVh bi1pbmZvIGR2aSBwZGYgaW5zCiAgaW5zdGFsbDogYWxsCiAgCUAkKE1BS0UpICQoRkxBR1NfVE9f UEFTUykgaW5zdGFsbC1vbmx5CiAgCkBAIC0xNyw3ICsxNyw3IEBAIEluZGV4OiBnZGItNy41Ljkx LjIwMTMwNDA3L2dkYi9NYWtlZmlsZS5pbgogIAl0cmFuc2Zvcm1lZF9uYW1lPWB0PSckKHByb2dy YW1fdHJhbnNmb3JtX25hbWUpJzsgXAogIAkJCSAgZWNobyBnZGIgfCBzZWQgLWUgIiQkdCJgIDsg XAogIAkJaWYgdGVzdCAieCQkdHJhbnNmb3JtZWRfbmFtZSIgPSB4OyB0aGVuIFwKLUBAIC0xMDU4 LDcgKzEwNTgsMjUgQEAgaW5zdGFsbC1vbmx5OiAkKENPTkZJR19JTlNUQUxMKQorQEAgLTEwNjAs NyArMTA2MCwyNSBAQCBpbnN0YWxsLW9ubHk6ICQoQ09ORklHX0lOU1RBTEwpCiAgaW5zdGFsbC1w eXRob246CiAgCSQoU0hFTEwpICQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoREVTVERJUikk KEdEQl9EQVRBRElSKS9weXRob24vZ2RiCiAgCkBAIC00NCw3ICs0NCw3IEBAIEluZGV4OiBnZGIt Ny41LjkxLjIwMTMwNDA3L2dkYi9NYWtlZmlsZS5pbgogIAl0cmFuc2Zvcm1lZF9uYW1lPWB0PSck KHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJzsgXAogIAkJCSAgZWNobyBnZGIgfCBzZWQgLWUgJCR0 YCA7IFwKICAJCWlmIHRlc3QgIngkJHRyYW5zZm9ybWVkX25hbWUiID0geDsgdGhlbiBcCi1AQCAt MTA4MSw2ICsxMDk5LDE4IEBAIHVuaW5zdGFsbDogZm9yY2UgJChDT05GSUdfVU5JTlNUQUxMKQor QEAgLTEwODMsNiArMTEwMSwxOCBAQCB1bmluc3RhbGw6IGZvcmNlICQoQ09ORklHX1VOSU5TVEFM TCkKICAJZmkKICAJQCQoTUFLRSkgRE89dW5pbnN0YWxsICJET0RJUlM9JChTVUJESVJTKSIgJChG TEFHU19UT19QQVNTKSBzdWJkaXJfZG8KICAKQEAgLTYzLDEwICs2MywxMCBAQCBJbmRleDogZ2Ri LTcuNS45MS4yMDEzMDQwNy9nZGIvTWFrZWZpbGUuaW4KICAjIFRoZSBDKysgbmFtZSBwYXJzZXIg Y2FuIGJlIGJ1aWx0IHN0YW5kYWxvbmUgZm9yIHRlc3RpbmcuCiAgdGVzdC1jcC1uYW1lLXBhcnNl ci5vOiBjcC1uYW1lLXBhcnNlci5jCiAgCSQoQ09NUElMRSkgLURURVNUX0NQTkFNRVMgY3AtbmFt ZS1wYXJzZXIuYwotSW5kZXg6IGdkYi03LjUuOTEuMjAxMzA0MDcvZ2RiL2dzdGFjay5zaAorSW5k ZXg6IGdkYi03LjYvZ2RiL2dzdGFjay5zaAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0tIC9kZXYvbnVsbAkxOTcw LTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAotKysrIGdkYi03LjUuOTEuMjAxMzA0MDcv Z2RiL2dzdGFjay5zaAkyMDEzLTA0LTExIDE2OjUyOjIyLjA5MzI4MTYxNiArMDIwMAorKysrIGdk Yi03LjYvZ2RiL2dzdGFjay5zaAkyMDEzLTA1LTIxIDEzOjI2OjU1LjQzNDYyNTkwOCArMDIwMAog QEAgLTAsMCArMSw0MyBAQAogKyMhL2Jpbi9zaAogKwpAQCAtMTAxLDcgKzEwMSw3IEBAIEluZGV4 OiBnZGItNy41LjkxLjIwMTMwNDA3L2dkYi9nc3RhY2suc2gKICsKICsjIFJ1biBHREIsIHN0cmlw IG91dCB1bndhbnRlZCBub2lzZS4KICsjIC0tcmVhZG5ldmVyIGlzIG5vIGxvbmdlciB1c2VkIHNp bmNlIC5nZGJfaW5kZXggaXMgbm93IGluIHVzZS4KLSskR0RCIC0tcXVpZXQgLW54IC9wcm9jLyQx L2V4ZSAkMSA8PEVPRiAyPiYxIHwgCisrJEdEQiAtLXF1aWV0IC1ueCAkR0RCQVJHUyAvcHJvYy8k MS9leGUgJDEgPDxFT0YgMj4mMSB8IAogK3NldCB3aWR0aCAwCiArc2V0IGhlaWdodCAwCiArc2V0 IHBhZ2luYXRpb24gbm8KQEAgLTExMSwxMCArMTExLDEwIEBAIEluZGV4OiBnZGItNy41LjkxLjIw MTMwNDA3L2dkYi9nc3RhY2suc2gKICsgICAgLWUgJ3MvXlwoKGdkYikgXCkqLy8nIFwKICsgICAg LWUgJy9eIy9wJyBcCiArICAgIC1lICcvXlRocmVhZC9wJwotSW5kZXg6IGdkYi03LjUuOTEuMjAx MzA0MDcvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9nc3RhY2suZXhwCitJbmRleDogZ2RiLTcuNi9n ZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dzdGFjay5leHAKID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAvZGV2L251 bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41LjkxLjIw MTMwNDA3L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmV4cAkyMDEzLTA0LTExIDE2OjUy OjIyLjA5MzI4MTYxNiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9n c3RhY2suZXhwCTIwMTMtMDUtMjEgMTM6MjY6NTUuNDM0NjI1OTA4ICswMjAwCiBAQCAtMCwwICsx LDY2IEBACiArIyBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCiArCkBAIC0xNjcsNyArMTY3LDcgQEAgSW5kZXg6IGdkYi03LjUuOTEuMjAxMzA0MDcvZ2Ri L3Rlc3RzdWl0ZS9nZGIuYmFzZS9nc3RhY2suZXhwCiArIyBleGl0aW5nIHRoZSBmdW5jdGlvbi4g IFN0aWxsIHdlIGNvdWxkIHJldHJ5IHRoZSBnc3RhY2sgY29tbWFuZCBpZiB3ZSBmYWlsLgogKwog K3NldCB0ZXN0ICJzcGF3biBnc3RhY2siCi0rc2V0IGNvbW1hbmQgInNoIC1jIEdEQj0kR0RCXFwg c2hcXCAke3NyY2Rpcn0vLi4vZ3N0YWNrLnNoXFwgJHBpZFxcO2VjaG9cXCBHU1RBQ0stRU5EIgor K3NldCBjb21tYW5kICJzaCAtYyBHREI9JEdEQlxcIEdEQkFSR1M9LWRhdGEtZGlyZWN0b3J5XFxc XFxcICRCVUlMRF9EQVRBX0RJUkVDVE9SWVxcIHNoXFwgJHtzcmNkaXJ9Ly4uL2dzdGFjay5zaFxc ICRwaWRcXDtlY2hvXFwgR1NUQUNLLUVORCIKICtzZXQgcmVzIFtyZW1vdGVfc3Bhd24gaG9zdCAk Y29tbWFuZF07CiAraWYgeyAkcmVzIDwgMCB8fCAkcmVzID09ICIiIH0gewogKyAgICBwZXJyb3Ig IlNwYXduaW5nICRjb21tYW5kIGZhaWxlZC4iCkBAIC0xODIsMTAgKzE4MiwxMCBAQCBJbmRleDog Z2RiLTcuNS45MS4yMDEzMDQwNy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2dzdGFjay5leHAKICtn ZGJfZXhpdAogKwogK3JlbW90ZV9leGVjIGhvc3QgImtpbGwgLTkgJHBpZCIKLUluZGV4OiBnZGIt Ny41LjkxLjIwMTMwNDA3L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMKK0luZGV4OiBn ZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMKID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tLSAv ZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKLSsrKyBnZGItNy41 LjkxLjIwMTMwNDA3L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvZ3N0YWNrLmMJMjAxMy0wNC0xMSAx Njo1MjoyMi4wOTMyODE2MTYgKzAyMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLmJh c2UvZ3N0YWNrLmMJMjAxMy0wNS0yMSAxMzoyNjozMy42MTA4MTk1NjkgKzAyMDAKIEBAIC0wLDAg KzEsNDMgQEAKICsvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05VIGRlYnVn Z2VyLgogKwoKZGlmZiAtLWdpdCBhL2dkYi02LjUtQkVBLXRlc3RzdWl0ZS5wYXRjaCBiL2dkYi02 LjUtQkVBLXRlc3RzdWl0ZS5wYXRjaAppbmRleCA3NmQ3NTY2Li43YzU3NzhjIDEwMDY0NAotLS0g YS9nZGItNi41LUJFQS10ZXN0c3VpdGUucGF0Y2gKKysrIGIvZ2RiLTYuNS1CRUEtdGVzdHN1aXRl LnBhdGNoCkBAIC0xLDkgKzEsNyBAQAotSW5kZXg6IC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFk cy90aHJlYWRjcmFzaC5jCitJbmRleDogZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRz L3RocmVhZGNyYXNoLmMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVJDUyBmaWxlOiBnZGIvdGVzdHN1aXRlL2dkYi50 aHJlYWRzL3RocmVhZGNyYXNoLmMKLWRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90 aHJlYWRjcmFzaC5jCi0tLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKLSsr KyAuL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guYwkzMSBPY3QgMjAwNiAx Nzo1NDozOCAtMDAwMAorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAw MCArMDAwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFz aC5jCTIwMTMtMDUtMjEgMTM6MzU6NDUuNTkyMDU5Nzg2ICswMjAwCiBAQCAtMCwwICsxLDMwMSBA QAogKy8qCiArICogVGhlIHBvaW50IG9mIHRoaXMgcHJvZ3JhbSBpcyB0byBjcmFzaCBpbiBhIG11 bHRpLXRocmVhZGVkIGFwcC4KQEAgLTMwNiwxMiArMzA0LDEwIEBAIGRpZmYgLU4gZ2RiL3Rlc3Rz dWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5jCiArICAgCiArICAgcmV0dXJuIDA7CiArfQot SW5kZXg6IC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKK0luZGV4 OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guZXhwCiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci1SQ1MgZmlsZTogZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5l eHAKLWRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKLS0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAotKysrIC4vZ2RiL3Rlc3RzdWl0 ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAJMzEgT2N0IDIwMDYgMTc6NTQ6MzggLTAwMDAK Ky0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBn ZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFkY3Jhc2guZXhwCTIwMTMtMDUt MjEgMTM6MzY6MDEuNDUxMDU2NzQ2ICswMjAwCiBAQCAtMCwwICsxLDM3IEBACiArIyB0aHJlYWRj cmFzaC5leHAgLSBUaGUgcG9pbnQgb2YgdGhpcyBwcm9ncmFtIGlzIHRvIGNyYXNoIGluIGEgbXVs dGktdGhyZWFkZWQgYXBwLgogKwpAQCAtMzM3LDcgKzMzMyw3IEBAIGRpZmYgLU4gZ2RiL3Rlc3Rz dWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKICt9CiArCiArIyAke3NoZWxsZmlsZX0g YXJndW1lbnQgbXVzdCBub3QgY29udGFpbiBhbnkgZGlyZWN0b3JpZXMuCi0rc2V0IGZkIFtvcGVu ICJ8YmFzaCAke3NoZWxsZmlsZX0gJHtiaW5maWxlfSAkR0RCIC1udyAkR0RCRkxBR1MiIHJdCisr c2V0IGZkIFtvcGVuICJ8YmFzaCAke3NoZWxsZmlsZX0gJHtiaW5maWxlfSAkR0RCICRJTlRFUk5B TF9HREJGTEFHUyAkR0RCRkxBR1MgW2hvc3RfaW5mbyBnZGJfb3B0c10iIHJdCiArd2hpbGUgeyBb Z2V0cyAkZmQgbGluZV0gPj0gMCB9IHsKICsgICAgaWYgW3JlZ2V4cCAiIFBBU1M6ICguKikkIiAk bGluZSB0cmFzaCBtZXNzYWdlXSB7CiArCXBhc3MgJG1lc3NhZ2UKQEAgLTM1MCwxMiArMzQ2LDEw IEBAIGRpZmYgLU4gZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5leHAKICt9 CiArCiArcmV0dXJuIDAKLUluZGV4OiAuL2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFk Y3Jhc2guc2gKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFk Y3Jhc2guc2gKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLVJDUyBmaWxlOiBnZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRz L3RocmVhZGNyYXNoLnNoCi1kaWZmIC1OIGdkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhyZWFk Y3Jhc2guc2gKLS0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAotKysrIC4v Z2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5zaAkzMSBPY3QgMjAwNiAxNzo1 NDozOCAtMDAwMAorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCAr MDAwMAorKysrIGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5z aAkyMDEzLTA1LTIxIDEzOjM1OjQ1LjU5MzA1OTc4NiArMDIwMAogQEAgLTAsMCArMSwzMjQgQEAK ICsjISAvYmluL2Jhc2gKICsKQEAgLTY4MSwxMiArNjc1LDEwIEBAIGRpZmYgLU4gZ2RiL3Rlc3Rz dWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5zaAogK3JtIC1yZiAkV09SS0RJUgogKwogK2V4 aXQgJEZBSUxVUkVTCi1JbmRleDogLi9nZGIvdGVzdHN1aXRlL2dkYi50aHJlYWRzL3RocmVhZGNy YXNoLnNoLW9yaWcKK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnRocmVhZHMvdGhy ZWFkY3Jhc2guc2gtb3JpZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUkNTIGZpbGU6IGdkYi90ZXN0c3VpdGUvZ2Ri LnRocmVhZHMvdGhyZWFkY3Jhc2guc2gtb3JpZwotZGlmZiAtTiBnZGIvdGVzdHN1aXRlL2dkYi50 aHJlYWRzL3RocmVhZGNyYXNoLnNoLW9yaWcKLS0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAotKysrIC4vZ2RiL3Rlc3RzdWl0ZS9nZGIudGhyZWFkcy90aHJlYWRjcmFzaC5z aC1vcmlnCTMxIE9jdCAyMDA2IDE3OjU0OjM4IC0wMDAwCistLS0gL2Rldi9udWxsCTE5NzAtMDEt MDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dk Yi50aHJlYWRzL3RocmVhZGNyYXNoLnNoLW9yaWcJMjAxMy0wNS0yMSAxMzozNTo0NS41OTMwNTk3 ODYgKzAyMDAKIEBAIC0wLDAgKzEsMjQ4IEBACiArIyEgL2Jpbi9iYXNoCiArCgpkaWZmIC0tZ2l0 IGEvZ2RiLWFyY2hlci5wYXRjaCBiL2dkYi1hcmNoZXIucGF0Y2gKaW5kZXggNDA2MGNjMC4uYWIw NjU3ZiAxMDA2NDQKLS0tIGEvZ2RiLWFyY2hlci5wYXRjaAorKysgYi9nZGItYXJjaGVyLnBhdGNo CkBAIC0yLDcgKzIsNyBAQCBodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL3dpa2kvUHJvamVjdEFy Y2hlcgogaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi93aWtpL0FyY2hlckJyYW5jaE1hbmFnZW1l bnQKIAogR0lUIHNuYXBzaG90OgotY29tbWl0IDkyY2YyZDUzYTljNjliNGZiMzYxZGU2NjJkZTkx MDBjNmU3MmNhYTAKK2NvbW1pdCBiMWY4YzY4MjEzMDNmNmViMDg3ZmI3ZjU3NDA1NDgzYWM4ODEy MjI3CiAKIGJyYW5jaCBqYW5rcmF0b2NodmlsL2ZlZG9yYTE5IC0gdGhlIG1lcmdlIG9mIGJyYW5j aGVzOgogamFua3JhdG9jaHZpbC92bGEKQEAgLTE2OSwyMiArMTY5LDE3IEBAIGluZGV4IGNhOGQ4 OWIuLjgxMWFkNzIgMTAwNjQ0CiAgCQkJICAgIHBsb25nZXN0IChoaWdoX2JvdW5kIC0gbG93X2Jv dW5kICsgMSkpOwogIAlmcHJpbnRmX2ZpbHRlcmVkIChzdHJlYW0sIChpc192ZWN0b3IgPyAiKSkp IiA6ICJdIikpOwogZGlmZiAtLWdpdCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBi L2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgotaW5kZXggZDk4YWM3Ny4uZTI0ODM5OSAx MDA2NDQKK2luZGV4IGQ5OGFjNzcuLmY2YTRiOTkgMTAwNjQ0CiAtLS0gYS9nZGIvZGF0YS1kaXJl Y3RvcnkvTWFrZWZpbGUuaW4KICsrKyBiL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgot QEAgLTUyLDE3ICs1MiwyOCBAQCBTWVNDQUxMU19GSUxFUyA9IFwKLSBQWVRIT05fRElSID0gcHl0 aG9uCitAQCAtNTMsMTYgKzUzLDIxIEBAIFBZVEhPTl9ESVIgPSBweXRob24KICBQWVRIT05fSU5T VEFMTF9ESVIgPSAkKERFU1RESVIpJChHREJfREFUQURJUikvJChQWVRIT05fRElSKQogIFBZVEhP Tl9GSUxFUyA9IFwKLSsJZ2RiL0ZyYW1lSXRlcmF0b3IucHkgXAotKwlnZGIvRnJhbWVXcmFwcGVy LnB5IFwKICAJZ2RiL19faW5pdF9fLnB5IFwKIC0JZ2RiL3R5cGVzLnB5IFwKIC0JZ2RiL3ByaW50 aW5nLnB5IFwKIC0JZ2RiL3Byb21wdC5weSBcCi0rCWdkYi9iYWNrdHJhY2UucHkgXAogIAlnZGIv Y29tbWFuZC9fX2luaXRfXy5weSBcCi0rCWdkYi9jb21tYW5kL2JhY2t0cmFjZS5weSBcCiArCWdk Yi9jb21tYW5kL2lnbm9yZV9lcnJvcnMucHkgXAogKwlnZGIvY29tbWFuZC9wYWhvbGUucHkgXAog IAlnZGIvY29tbWFuZC90eXBlX3ByaW50ZXJzLnB5IFwKQEAgLTE5NCw4ICsxODksNiBAQCBpbmRl eCBkOThhYzc3Li5lMjQ4Mzk5IDEwMDY0NAogIAlnZGIvZnVuY3Rpb24vX19pbml0X18ucHkgXAog LQlnZGIvZnVuY3Rpb24vc3RyZm5zLnB5CiArCWdkYi9mdW5jdGlvbi9zdHJmbnMucHkgXAotKwln ZGIvY29tbWFuZC9yZXF1aXJlLnB5IFwKLSsJZ2RiL2NvbW1hbmQvdXB0by5weSBcCiArCWdkYi9m dW5jdGlvbi9fX2luaXRfXy5weSBcCiArCWdkYi9mdW5jdGlvbi9jYWxsZXJfaXMucHkgXAogKwln ZGIvZnVuY3Rpb24vaW5fc2NvcGUucHkgXApAQCAtMzc3OCwzMjMgKzM3NzEsNiBAQCBpbmRleCAx NTU3MDNkLi41NDVhNjE1IDEwMDY0NAogKyAgb2JzZXJ2ZXJfYXR0YWNoX21hcmtfdXNlZCAocHJp bnRfdHlwZXNfbWFya191c2VkKTsKICsjZW5kaWYKICB9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhv bi9saWIvZ2RiL0ZyYW1lSXRlcmF0b3IucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvRnJhbWVJdGVy YXRvci5weQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjU2NTQ1NDYKLS0t LSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRob24vbGliL2dkYi9GcmFtZUl0ZXJhdG9yLnB5Ci1A QCAtMCwwICsxLDMzIEBACi0rIyBJdGVyYXRvciBvdmVyIGZyYW1lcy4KLSsKLSsjIENvcHlyaWdo dCAoQykgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQot KyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0rY2xhc3MgRnJhbWVJdGVyYXRvcjoKLSsgICAg IiIiQW4gaXRlcmF0b3IgdGhhdCBpdGVyYXRlcyBvdmVyIGZyYW1lcy4iIiIKLSsKLSsgICAgZGVm IF9faW5pdF9fIChzZWxmLCBmcmFtZSk6Ci0rICAgICAgICAiSW5pdGlhbGl6ZSBhIEZyYW1lSXRl cmF0b3IuICBGUkFNRSBpcyB0aGUgc3RhcnRpbmcgZnJhbWUuIgotKyAgICAgICAgc2VsZi5mcmFt ZSA9IGZyYW1lCi0rCi0rICAgIGRlZiBfX2l0ZXJfXyAoc2VsZik6Ci0rICAgICAgICByZXR1cm4g c2VsZgotKwotKyAgICBkZWYgbmV4dCAoc2VsZik6Ci0rICAgICAgICByZXN1bHQgPSBzZWxmLmZy YW1lCi0rICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSsgICAgICAgICAgICByYWlzZSBTdG9w SXRlcmF0aW9uCi0rICAgICAgICBzZWxmLmZyYW1lID0gcmVzdWx0Lm9sZGVyICgpCi0rICAgICAg ICByZXR1cm4gcmVzdWx0Ci1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL0ZyYW1lV3Jh cHBlci5weSBiL2dkYi9weXRob24vbGliL2dkYi9GcmFtZVdyYXBwZXIucHkKLW5ldyBmaWxlIG1v ZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5iNzkwYTU0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvRnJhbWVXcmFwcGVyLnB5Ci1AQCAtMCwwICsxLDExMiBAQAotKyMg V3JhcHBlciBBUEkgZm9yIGZyYW1lcy4KLSsKLSsjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCi0rCi0raW1wb3J0IGdkYgotKwotKyMgRklYTUU6IGFyZ3VhYmx5IGFsbCB0aGlzIHNo b3VsZCBiZSBvbiBGcmFtZSBzb21laG93LgotK2NsYXNzIEZyYW1lV3JhcHBlcjoKLSsgICAgZGVm IF9faW5pdF9fIChzZWxmLCBmcmFtZSk6Ci0rICAgICAgICBzZWxmLmZyYW1lID0gZnJhbWU7Ci0r Ci0rICAgIGRlZiB3cml0ZV9zeW1ib2wgKHNlbGYsIHN0cmVhbSwgc3ltLCBibG9jayk6Ci0rICAg ICAgICBpZiBsZW4gKHN5bS5saW5rYWdlX25hbWUpOgotKyAgICAgICAgICAgIG5zeW0sIGlzX2Zp ZWxkX29mX3RoaXMgPSBnZGIubG9va3VwX3N5bWJvbCAoc3ltLmxpbmthZ2VfbmFtZSwgYmxvY2sp Ci0rICAgICAgICAgICAgaWYgbnN5bS5hZGRyX2NsYXNzICE9IGdkYi5TWU1CT0xfTE9DX1JFR0lT VEVSOgotKyAgICAgICAgICAgICAgICBzeW0gPSBuc3ltCi0rCi0rICAgICAgICBzdHJlYW0ud3Jp dGUgKHN5bS5wcmludF9uYW1lICsgIj0iKQotKyAgICAgICAgdHJ5OgotKyAgICAgICAgICAgIHZh bCA9IHNlbGYucmVhZF92YXIgKHN5bSkKLSsgICAgICAgICAgICBpZiB2YWwgIT0gTm9uZToKLSsg ICAgICAgICAgICAgICAgdmFsID0gc3RyICh2YWwpCi0rICAgICAgICAjIEZJWE1FOiB3b3VsZCBi ZSBuaWNlIHRvIGhhdmUgYSBtb3JlIHByZWNpc2UgZXhjZXB0aW9uIGhlcmUuCi0rICAgICAgICBl eGNlcHQgUnVudGltZUVycm9yLCB0ZXh0OgotKyAgICAgICAgICAgIHZhbCA9IHRleHQKLSsgICAg ICAgIGlmIHZhbCA9PSBOb25lOgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIj8/PyIpCi0r ICAgICAgICBlbHNlOgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoc3RyICh2YWwpKQotKwot KyAgICBkZWYgcHJpbnRfZnJhbWVfbG9jYWxzIChzZWxmLCBzdHJlYW0sIGZ1bmMpOgotKyAgICAg ICAgaWYgbm90IGZ1bmM6Ci0rICAgICAgICAgICAgcmV0dXJuCi0rCi0rICAgICAgICBmaXJzdCA9 IFRydWUKLSsgICAgICAgIGJsb2NrID0gZnVuYy52YWx1ZQotKwotKyAgICAgICAgZm9yIHN5bSBp biBibG9jazoKLSsgICAgICAgICAgICBpZiBzeW0uaXNfYXJndW1lbnQ6Ci0rICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwotKwotKyAgICAgICAgICAgIHNlbGYud3JpdGVfc3ltYm9sIChzdHJlYW0s IHN5bSwgYmxvY2spCi0rICAgICAgICAgICAgc3RyZWFtLndyaXRlICgnXG4nKQotKwotKyAgICBk ZWYgcHJpbnRfZnJhbWVfYXJncyAoc2VsZiwgc3RyZWFtLCBmdW5jKToKLSsgICAgICAgIGlmIG5v dCBmdW5jOgotKyAgICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAgZmlyc3QgPSBUcnVlCi0r ICAgICAgICBibG9jayA9IGZ1bmMudmFsdWUKLSsKLSsgICAgICAgIGZvciBzeW0gaW4gYmxvY2s6 Ci0rICAgICAgICAgICAgaWYgbm90IHN5bS5pc19hcmd1bWVudDoKLSsgICAgICAgICAgICAgICAg Y29udGludWU7Ci0rCi0rICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotKyAgICAgICAgICAgICAg ICBzdHJlYW0ud3JpdGUgKCIsICIpCi0rCi0rICAgICAgICAgICAgc2VsZi53cml0ZV9zeW1ib2wg KHN0cmVhbSwgc3ltLCBibG9jaykKLSsgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCi0rCi0rICAg ICMgRklYTUU6IHRoaXMgc2hvdWxkIHByb2JhYmx5IGp1c3QgYmUgYSBtZXRob2Qgb24gZ2RiLkZy YW1lLgotKyAgICAjIEJ1dCB0aGVuIHdlIG5lZWQgc3RyZWFtIHdyYXBwZXJzLgotKyAgICBkZWYg ZGVzY3JpYmUgKHNlbGYsIHN0cmVhbSwgZnVsbCk6Ci0rICAgICAgICBpZiBzZWxmLnR5cGUgKCkg PT0gZ2RiLkRVTU1ZX0ZSQU1FOgotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiA8ZnVuY3Rp b24gY2FsbGVkIGZyb20gZ2RiPlxuIikKLSsgICAgICAgIGVsaWYgc2VsZi50eXBlICgpID09IGdk Yi5TSUdUUkFNUF9GUkFNRToKLSsgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgPHNpZ25hbCBo YW5kbGVyIGNhbGxlZD5cbiIpCi0rICAgICAgICBlbHNlOgotKyAgICAgICAgICAgIHNhbCA9IHNl bGYuZmluZF9zYWwgKCkKLSsgICAgICAgICAgICBwYyA9IHNlbGYucGMgKCkKLSsgICAgICAgICAg ICBuYW1lID0gc2VsZi5uYW1lICgpCi0rICAgICAgICAgICAgaWYgbm90IG5hbWU6Ci0rICAgICAg ICAgICAgICAgIG5hbWUgPSAiPz8iCi0rICAgICAgICAgICAgaWYgcGMgIT0gc2FsLnBjIG9yIG5v dCBzYWwuc3ltdGFiOgotKyAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgMHglMDh4IGlu IiAlIHBjKQotKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiAiICsgbmFtZSArICIgKCIpCi0r Ci0rICAgICAgICAgICAgZnVuYyA9IHNlbGYuZnVuY3Rpb24gKCkKLSsgICAgICAgICAgICBzZWxm LnByaW50X2ZyYW1lX2FyZ3MgKHN0cmVhbSwgZnVuYykKLSsKLSsgICAgICAgICAgICBzdHJlYW0u d3JpdGUgKCIpIikKLSsKLSsgICAgICAgICAgICBpZiBzYWwuc3ltdGFiIGFuZCBzYWwuc3ltdGFi LmZpbGVuYW1lOgotKyAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUgKCIgYXQgIiArIHNhbC5z eW10YWIuZmlsZW5hbWUpCi0rICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIjoiICsgc3Ry IChzYWwubGluZSkpCi0rCi0rICAgICAgICAgICAgaWYgbm90IHNlbGYubmFtZSAoKSBvciAobm90 IHNhbC5zeW10YWIgb3Igbm90IHNhbC5zeW10YWIuZmlsZW5hbWUpOgotKyAgICAgICAgICAgICAg ICBsaWIgPSBnZGIuc29saWJfYWRkcmVzcyAocGMpCi0rICAgICAgICAgICAgICAgIGlmIGxpYjoK LSsgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSAoIiBmcm9tICIgKyBsaWIpCi0rCi0r ICAgICAgICAgICAgc3RyZWFtLndyaXRlICgiXG4iKQotKwotKyAgICAgICAgICAgIGlmIGZ1bGw6 Ci0rICAgICAgICAgICAgICAgIHNlbGYucHJpbnRfZnJhbWVfbG9jYWxzIChzdHJlYW0sIGZ1bmMp Ci0rCi0rICAgIGRlZiBfX2dldGF0dHJfXyAoc2VsZiwgbmFtZSk6Ci0rICAgICAgICByZXR1cm4g Z2V0YXR0ciAoc2VsZi5mcmFtZSwgbmFtZSkKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9n ZGIvYmFja3RyYWNlLnB5IGIvZ2RiL3B5dGhvbi9saWIvZ2RiL2JhY2t0cmFjZS5weQotbmV3IGZp bGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjZiYjRmYjEKLS0tLSAvZGV2L251bGwKLSsr KyBiL2dkYi9weXRob24vbGliL2dkYi9iYWNrdHJhY2UucHkKLUBAIC0wLDAgKzEsNDIgQEAKLSsj IEZpbHRlcmluZyBiYWNrdHJhY2UuCi0rCi0rIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTEgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMg b2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgotKwotK2ltcG9ydCBnZGIKLStpbXBvcnQgaXRlcnRvb2xzCi0rCi0rIyBPdXIgb25seSBl eHBvcnRzLgotK19fYWxsX18gPSBbJ3B1c2hfZnJhbWVfZmlsdGVyJywgJ2NyZWF0ZV9mcmFtZV9m aWx0ZXInXQotKwotK2ZyYW1lX2ZpbHRlciA9IE5vbmUKLSsKLStkZWYgcHVzaF9mcmFtZV9maWx0 ZXIgKGNvbnN0cnVjdG9yKToKLSsgICAgIiIiUmVnaXN0ZXIgYSBuZXcgYmFja3RyYWNlIGZpbHRl ciBjbGFzcyB3aXRoIHRoZSAnYmFja3RyYWNlJyBjb21tYW5kLgotK1RoZSBmaWx0ZXIgd2lsbCBi ZSBwYXNzZWQgYW4gaXRlcmF0b3IgYXMgYW4gYXJndW1lbnQuICBUaGUgaXRlcmF0b3IKLSt3aWxs IHJldHVybiBnZGIuRnJhbWUtbGlrZSBvYmplY3RzLiAgVGhlIGZpbHRlciBzaG91bGQgaW4gdHVy biBhY3QgYXMKLSthbiBpdGVyYXRvciByZXR1cm5pbmcgc3VjaCBvYmplY3RzLiIiIgotKyAgICBn bG9iYWwgZnJhbWVfZmlsdGVyCi0rICAgIGlmIGZyYW1lX2ZpbHRlciA9PSBOb25lOgotKyAgICAg ICAgZnJhbWVfZmlsdGVyID0gY29uc3RydWN0b3IKLSsgICAgZWxzZToKLSsgICAgICAgIGZyYW1l X2ZpbHRlciA9IGxhbWJkYSBpdGVyYXRvciwgZmlsdGVyID0gZnJhbWVfZmlsdGVyOiBjb25zdHJ1 Y3RvciAoZmlsdGVyIChpdGVyYXRvcikpCi0rCi0rZGVmIGNyZWF0ZV9mcmFtZV9maWx0ZXIgKGl0 ZXIpOgotKyAgICBnbG9iYWwgZnJhbWVfZmlsdGVyCi0rICAgIGlmIGZyYW1lX2ZpbHRlciBpcyBO b25lOgotKyAgICAgICAgcmV0dXJuIGl0ZXIKLSsgICAgcmV0dXJuIGZyYW1lX2ZpbHRlciAoaXRl cikKLSsKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9iYWNrdHJhY2Uu cHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9iYWNrdHJhY2UucHkKLW5ldyBmaWxlIG1v ZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lZWVhOTA5Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9n ZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9iYWNrdHJhY2UucHkKLUBAIC0wLDAgKzEsMTA2IEBA Ci0rIyBOZXcgYmFja3RyYWNlIGNvbW1hbmQuCi0rCi0rIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw MDksIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK LSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgotKwotK2ltcG9ydCBnZGIKLStpbXBvcnQgZ2RiLmJhY2t0cmFjZQot K2ltcG9ydCBpdGVydG9vbHMKLStmcm9tIGdkYi5GcmFtZUl0ZXJhdG9yIGltcG9ydCBGcmFtZUl0 ZXJhdG9yCi0rZnJvbSBnZGIuRnJhbWVXcmFwcGVyIGltcG9ydCBGcmFtZVdyYXBwZXIKLStpbXBv cnQgc3lzCi0rCi0rY2xhc3MgUmV2ZXJzZUJhY2t0cmFjZVBhcmFtZXRlciAoZ2RiLlBhcmFtZXRl cik6Ci0rICAgICIiIlRoZSBuZXctYmFja3RyYWNlIGNvbW1hbmQgY2FuIHNob3cgYmFja3RyYWNl cyBpbiAncmV2ZXJzZScgb3JkZXIuCi0rVGhpcyBtZWFucyB0aGF0IHRoZSBpbm5lcm1vc3QgZnJh bWUgd2lsbCBiZSBwcmludGVkIGxhc3QuCi0rTm90ZSB0aGF0IHJldmVyc2UgYmFja3RyYWNlcyBh cmUgbW9yZSBleHBlbnNpdmUgdG8gY29tcHV0ZS4iIiIKLSsKLSsgICAgc2V0X2RvYyA9ICJFbmFi bGUgb3IgZGlzYWJsZSByZXZlcnNlIGJhY2t0cmFjZXMuIgotKyAgICBzaG93X2RvYyA9ICJTaG93 IHdoZXRoZXIgYmFja3RyYWNlcyB3aWxsIGJlIHByaW50ZWQgaW4gcmV2ZXJzZSBvcmRlci4iCi0r Ci0rICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSsgICAgICAgIGdkYi5QYXJhbWV0ZXIuX19pbml0 X18gKHNlbGYsICJyZXZlcnNlLWJhY2t0cmFjZSIsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnZGIuQ09NTUFORF9TVEFDSywgZ2RiLlBBUkFNX0JPT0xFQU4pCi0rICAgICAgICAj IERlZmF1bHQgdG8gY29tcGF0aWJpbGl0eSB3aXRoIGdkYi4KLSsgICAgICAgIHNlbGYudmFsdWUg PSBGYWxzZQotKwotK2NsYXNzIEZpbHRlcmluZ0JhY2t0cmFjZSAoZ2RiLkNvbW1hbmQpOgotKyAg ICAiIiJQcmludCBiYWNrdHJhY2Ugb2YgYWxsIHN0YWNrIGZyYW1lcywgb3IgaW5uZXJtb3N0IENP VU5UIGZyYW1lcy4KLStXaXRoIGEgbmVnYXRpdmUgYXJndW1lbnQsIHByaW50IG91dGVybW9zdCAt Q09VTlQgZnJhbWVzLgotK1VzZSBvZiB0aGUgJ2Z1bGwnIHF1YWxpZmllciBhbHNvIHByaW50cyB0 aGUgdmFsdWVzIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMuCi0rVXNlIG9mIHRoZSAncmF3JyBxdWFs aWZpZXIgYXZvaWRzIGFueSBmaWx0ZXJpbmcgYnkgbG9hZGFibGUgbW9kdWxlcy4KLSsiIiIKLSsK LSsgICAgZGVmIF9faW5pdF9fIChzZWxmKToKLSsgICAgICAgICMgRklYTUU6IHRoaXMgaXMgbm90 IHdvcmtpbmcgcXVpdGUgd2VsbCBlbm91Z2ggdG8gcmVwbGFjZQotKyAgICAgICAgIyAiYmFja3Ry YWNlIiB5ZXQuCi0rICAgICAgICBnZGIuQ29tbWFuZC5fX2luaXRfXyAoc2VsZiwgIm5ldy1iYWNr dHJhY2UiLCBnZGIuQ09NTUFORF9TVEFDSykKLSsgICAgICAgIHNlbGYucmV2ZXJzZSA9IFJldmVy c2VCYWNrdHJhY2VQYXJhbWV0ZXIoKQotKwotKyAgICBkZWYgcmV2ZXJzZV9pdGVyIChzZWxmLCBp dGVyKToKLSsgICAgICAgIHJlc3VsdCA9IFtdCi0rICAgICAgICBmb3IgaXRlbSBpbiBpdGVyOgot KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQgKGl0ZW0pCi0rICAgICAgICByZXN1bHQucmV2ZXJz ZSgpCi0rICAgICAgICByZXR1cm4gcmVzdWx0Ci0rCi0rICAgIGRlZiBmaW5hbF9uIChzZWxmLCBp dGVyLCB4KToKLSsgICAgICAgIHJlc3VsdCA9IFtdCi0rICAgICAgICBmb3IgaXRlbSBpbiBpdGVy OgotKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQgKGl0ZW0pCi0rICAgICAgICByZXR1cm4gcmVz dWx0W3g6XQotKwotKyAgICBkZWYgaW52b2tlIChzZWxmLCBhcmcsIGZyb21fdHR5KToKLSsgICAg ICAgIGkgPSAwCi0rICAgICAgICBjb3VudCA9IDAKLSsgICAgICAgIGZpbHRlciA9IFRydWUKLSsg ICAgICAgIGZ1bGwgPSBGYWxzZQotKwotKyAgICAgICAgZm9yIHdvcmQgaW4gYXJnLnNwbGl0ICgi ICIpOgotKyAgICAgICAgICAgIGlmIHdvcmQgPT0gJyc6Ci0rICAgICAgICAgICAgICAgIGNvbnRp bnVlCi0rICAgICAgICAgICAgZWxpZiB3b3JkID09ICdyYXcnOgotKyAgICAgICAgICAgICAgICBm aWx0ZXIgPSBGYWxzZQotKyAgICAgICAgICAgIGVsaWYgd29yZCA9PSAnZnVsbCc6Ci0rICAgICAg ICAgICAgICAgIGZ1bGwgPSBUcnVlCi0rICAgICAgICAgICAgZWxzZToKLSsgICAgICAgICAgICAg ICAgY291bnQgPSBpbnQgKHdvcmQpCi0rCi0rICAgICAgICAjIEZJWE1FOiBwcm92aWRlIG9wdGlv biB0byBzdGFydCBhdCBzZWxlY3RlZCBmcmFtZQotKyAgICAgICAgIyBIb3dldmVyLCBzaG91bGQg c3RpbGwgbnVtYmVyIGFzIGlmIHN0YXJ0aW5nIGZyb20gbmV3ZXN0Ci0rICAgICAgICBuZXdlc3Rf ZnJhbWUgPSBnZGIubmV3ZXN0X2ZyYW1lKCkKLSsgICAgICAgIGl0ZXIgPSBpdGVydG9vbHMuaW1h cCAoRnJhbWVXcmFwcGVyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZUl0 ZXJhdG9yIChuZXdlc3RfZnJhbWUpKQotKyAgICAgICAgaWYgZmlsdGVyOgotKyAgICAgICAgICAg IGl0ZXIgPSBnZGIuYmFja3RyYWNlLmNyZWF0ZV9mcmFtZV9maWx0ZXIgKGl0ZXIpCi0rCi0rICAg ICAgICAjIE5vdyB3cmFwIGluIGFuIGl0ZXJhdG9yIHRoYXQgbnVtYmVycyB0aGUgZnJhbWVzLgot KyAgICAgICAgaXRlciA9IGl0ZXJ0b29scy5pemlwIChpdGVydG9vbHMuY291bnQgKDApLCBpdGVy KQotKwotKyAgICAgICAgIyBSZXZlcnNlIGlmIHRoZSB1c2VyIHdhbnRlZCB0aGF0LgotKyAgICAg ICAgaWYgc2VsZi5yZXZlcnNlLnZhbHVlOgotKyAgICAgICAgICAgIGl0ZXIgPSBzZWxmLnJldmVy c2VfaXRlciAoaXRlcikKLSsKLSsgICAgICAgICMgRXh0cmFjdCBzdWItcmFuZ2UgdXNlciB3YW50 cy4KLSsgICAgICAgIGlmIGNvdW50IDwgMDoKLSsgICAgICAgICAgICBpdGVyID0gc2VsZi5maW5h bF9uIChpdGVyLCBjb3VudCkKLSsgICAgICAgIGVsaWYgY291bnQgPiAwOgotKyAgICAgICAgICAg IGl0ZXIgPSBpdGVydG9vbHMuaXNsaWNlIChpdGVyLCAwLCBjb3VudCkKLSsKLSsgICAgICAgIGZv ciBwYWlyIGluIGl0ZXI6Ci0rICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSAoIiMlLTJkIiAl IHBhaXJbMF0pCi0rICAgICAgICAgICAgcGFpclsxXS5kZXNjcmliZSAoc3lzLnN0ZG91dCwgZnVs bCkKLSsKLStGaWx0ZXJpbmdCYWNrdHJhY2UoKQogZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGli L2dkYi9jb21tYW5kL2lnbm9yZV9lcnJvcnMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFu ZC9pZ25vcmVfZXJyb3JzLnB5CiBuZXcgZmlsZSBtb2RlIDEwMDY0NAogaW5kZXggMDAwMDAwMC4u NmZhNDhmZgpAQCAtNDIyNSwyMDQgKzM5MDEsNiBAQCBpbmRleCAwMDAwMDAwLi42MzZmOTlkCiAr ICAgICAgICBzZWxmLnBhaG9sZSAodHlwZSwgMCwgJycpCiArCiArUGFob2xlKCkKLWRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9yZXF1aXJlLnB5IGIvZ2RiL3B5dGhvbi9s aWIvZ2RiL2NvbW1hbmQvcmVxdWlyZS5weQotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAw MDAwMDAuLjFmYmMxZTgKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRob24vbGliL2dkYi9j b21tYW5kL3JlcXVpcmUucHkKLUBAIC0wLDAgKzEsNTcgQEAKLSsjIERlbWFuZC1sb2FkaW5nIGNv bW1hbmRzLgotKwotKyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotKwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStpbXBv cnQgZ2RiCi0raW1wb3J0IG9zCi0rCi0rY2xhc3MgUmVxdWlyZUNvbW1hbmQgKGdkYi5Db21tYW5k KToKLSsgICAgIiIiUHJlZml4IGNvbW1hbmQgZm9yIHJlcXVpcmluZyBmZWF0dXJlcy4iIiIKLSsK LSsgICAgZGVmIF9faW5pdF9fIChzZWxmKToKLSsgICAgICAgIHN1cGVyIChSZXF1aXJlQ29tbWFu ZCwgc2VsZikuX19pbml0X18gKCJyZXF1aXJlIiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NVUFBPUlQsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCi0rCi0r Y2xhc3MgUmVxdWlyZVN1YmNvbW1hbmQgKGdkYi5Db21tYW5kKToKLSsgICAgIiIiRGVtYW5kLWxv YWQgYSBjb21tYW5kIGJ5IG5hbWUuIiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbmFt ZSk6Ci0rICAgICAgICBzZWxmLl9fZG9jX18gPSAiRGVtYW5kLWxvYWQgYSAlcyBieSBuYW1lLiIg JSBuYW1lCi0rICAgICAgICBzdXBlciAoUmVxdWlyZVN1YmNvbW1hbmQsIHNlbGYpLl9faW5pdF9f ICgicmVxdWlyZSAlcyIgJSBuYW1lLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1VQUE9SVCkKLSsgICAgICAgIHNlbGYubmFt ZSA9IG5hbWUKLSsKLSsgICAgZGVmIGludm9rZSAoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Ci0rICAg ICAgICBmb3IgY21kIGluIGFyZy5zcGxpdCgpOgotKyAgICAgICAgICAgIGV4ZWMgKCdpbXBvcnQg Z2RiLicgKyBzZWxmLm5hbWUgKyAnLicgKyBjbWQsIGdsb2JhbHMgKCkpCi0rCi0rICAgIGRlZiBj b21wbGV0ZSAoc2VsZiwgdGV4dCwgd29yZCk6Ci0rICAgICAgICBkaXIgPSBnZGIucHl0aG9uZGly ICsgJy9nZGIvJyArIHNlbGYubmFtZQotKyAgICAgICAgcmVzdWx0ID0gW10KLSsgICAgICAgIGZv ciBmaWxlIGluIG9zLmxpc3RkaXIoZGlyKToKLSsgICAgICAgICAgICBpZiBub3QgZmlsZS5zdGFy dHN3aXRoICh3b3JkKSBvciBub3QgZmlsZS5lbmRzd2l0aCAoJy5weScpOgotKyAgICAgICAgICAg ICAgICBjb250aW51ZQotKyAgICAgICAgICAgIGZlYXR1cmUgPSBmaWxlWzA6LTNdCi0rICAgICAg ICAgICAgaWYgZmVhdHVyZSA9PSAncmVxdWlyZScgb3IgZmVhdHVyZSA9PSAnX19pbml0X18nOgot KyAgICAgICAgICAgICAgICBjb250aW51ZQotKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQgKGZl YXR1cmUpCi0rICAgICAgICByZXR1cm4gcmVzdWx0Ci0rCi0rUmVxdWlyZUNvbW1hbmQoKQotK1Jl cXVpcmVTdWJjb21tYW5kKCJjb21tYW5kIikKLStSZXF1aXJlU3ViY29tbWFuZCgiZnVuY3Rpb24i KQotZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9jb21tYW5kL3VwdG8ucHkgYi9nZGIv cHl0aG9uL2xpYi9nZGIvY29tbWFuZC91cHRvLnB5Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5k ZXggMDAwMDAwMC4uZmFmNTRlZAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3B5dGhvbi9saWIv Z2RiL2NvbW1hbmQvdXB0by5weQotQEAgLTAsMCArMSwxMjkgQEAKLSsjIHVwdG8gY29tbWFuZC4K LSsKLSsjIENvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K LSsKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0rCi0raW1wb3J0IGdkYgotK2ltcG9y dCByZQotK2Zyb20gZ2RiLkZyYW1lSXRlcmF0b3IgaW1wb3J0IEZyYW1lSXRlcmF0b3IKLStmcm9t IGdkYi5GcmFtZVdyYXBwZXIgaW1wb3J0IEZyYW1lV3JhcHBlcgotKwotK2NsYXNzIFVwdG9QcmVm aXggKGdkYi5Db21tYW5kKToKLSsgICAgZGVmIF9faW5pdF9fIChzZWxmKToKLSsgICAgICAgIHN1 cGVyIChVcHRvUHJlZml4LCBzZWxmKS5fX2luaXRfXyAoInVwdG8iLCBnZGIuQ09NTUFORF9TVEFD SywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0g VHJ1ZSkKLSsKLStjbGFzcyBVcHRvSW1wbGVtZW50YXRpb24gKGdkYi5Db21tYW5kKToKLSsgICAg ZGVmIF9faW5pdF9fIChzZWxmLCBzdWJjb21tYW5kKToKLSsgICAgICAgIHN1cGVyIChVcHRvSW1w bGVtZW50YXRpb24sIHNlbGYpLl9faW5pdF9fICgidXB0byAiICsgc3ViY29tbWFuZCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFO RF9TVEFDSykKLSsKLSsgICAgZGVmIHNlYXJjaCAoc2VsZik6Ci0rICAgICAgICBzYXZlZCA9IGdk Yi5zZWxlY3RlZF9mcmFtZSAoKQotKyAgICAgICAgaXRlciA9IEZyYW1lSXRlcmF0b3IgKHNhdmVk KQotKyAgICAgICAgZm91bmQgPSBGYWxzZQotKyAgICAgICAgdHJ5OgotKyAgICAgICAgICAgIGZv ciBmcmFtZSBpbiBpdGVyOgotKyAgICAgICAgICAgICAgICBmcmFtZS5zZWxlY3QgKCkKLSsgICAg ICAgICAgICAgICAgdHJ5OgotKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5maWx0ZXIgKGZy YW1lKToKLSsgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyID0gRnJhbWVXcmFwcGVyIChm cmFtZSkKLSsgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmRlc2NyaWJlIChzeXMuc3Rk b3V0LCBGYWxzZSkKLSsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSsgICAgICAgICAg ICAgICAgZXhjZXB0OgotKyAgICAgICAgICAgICAgICAgICAgcGFzcwotKyAgICAgICAgZXhjZXB0 OgotKyAgICAgICAgICAgIHBhc3MKLSsgICAgICAgIHNhdmVkLnNlbGVjdCAoKQotKyAgICAgICAg cmFpc2UgUnVudGltZUVycm9yLCAnQ291bGQgbm90IGZpbmQgYSBtYXRjaGluZyBmcmFtZScKLSsK LSsgICAgZGVmIGludm9rZSAoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Ci0rICAgICAgICBzZWxmLnJ4 ID0gcmUuY29tcGlsZSAoYXJnKQotKyAgICAgICAgc2VsZi5zZWFyY2ggKCkKLSsKLStjbGFzcyBV cHRvU3ltYm9sQ29tbWFuZCAoVXB0b0ltcGxlbWVudGF0aW9uKToKLSsgICAgIiIiU2VsZWN0IGFu ZCBwcmludCBzb21lIGNhbGxpbmcgc3RhY2sgZnJhbWUsIGJhc2VkIG9uIHN5bWJvbC4KLStUaGUg YXJndW1lbnQgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uICBUaGlzIGNvbW1hbmQgbW92ZXMgdXAg dGhlCi0rc3RhY2ssIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmcmFtZSB3aG9zZSBzeW1ib2wgbWF0 Y2hlcyB0aGUgcmVndWxhcgotK2V4cHJlc3Npb24uIiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyAo c2VsZik6Ci0rICAgICAgICBzdXBlciAoVXB0b1N5bWJvbENvbW1hbmQsIHNlbGYpLl9faW5pdF9f ICgic3ltYm9sIikKLSsKLSsgICAgZGVmIGZpbHRlciAoc2VsZiwgZnJhbWUpOgotKyAgICAgICAg bmFtZSA9IGZyYW1lLm5hbWUgKCkKLSsgICAgICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6Ci0rICAg ICAgICAgICAgaWYgc2VsZi5yeC5zZWFyY2ggKG5hbWUpIGlzIG5vdCBOb25lOgotKyAgICAgICAg ICAgICAgICByZXR1cm4gVHJ1ZQotKyAgICAgICAgcmV0dXJuIEZhbHNlCi0rCi0rY2xhc3MgVXB0 b1NvdXJjZUNvbW1hbmQgKFVwdG9JbXBsZW1lbnRhdGlvbik6Ci0rICAgICIiIlNlbGVjdCBhbmQg cHJpbnQgc29tZSBjYWxsaW5nIHN0YWNrIGZyYW1lLCBiYXNlZCBvbiBzb3VyY2UgZmlsZS4KLStU aGUgYXJndW1lbnQgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uICBUaGlzIGNvbW1hbmQgbW92ZXMg dXAgdGhlCi0rc3RhY2ssIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmcmFtZSB3aG9zZSBzb3VyY2Ug ZmlsZSBuYW1lIG1hdGNoZXMgdGhlCi0rcmVndWxhciBleHByZXNzaW9uLiIiIgotKwotKyAgICBk ZWYgX19pbml0X18gKHNlbGYpOgotKyAgICAgICAgc3VwZXIgKFVwdG9Tb3VyY2VDb21tYW5kLCBz ZWxmKS5fX2luaXRfXyAoInNvdXJjZSIpCi0rCi0rICAgIGRlZiBmaWx0ZXIgKHNlbGYsIGZyYW1l KToKLSsgICAgICAgIG5hbWUgPSBmcmFtZS5maW5kX3NhbCAoKS5zeW10YWIuZmlsZW5hbWUKLSsg ICAgICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6Ci0rICAgICAgICAgICAgaWYgc2VsZi5yeC5zZWFy Y2ggKG5hbWUpIGlzIG5vdCBOb25lOgotKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotKyAg ICAgICAgcmV0dXJuIEZhbHNlCi0rCi0rY2xhc3MgVXB0b09iamVjdENvbW1hbmQgKFVwdG9JbXBs ZW1lbnRhdGlvbik6Ci0rICAgICIiIlNlbGVjdCBhbmQgcHJpbnQgc29tZSBjYWxsaW5nIHN0YWNr IGZyYW1lLCBiYXNlZCBvbiBvYmplY3QgZmlsZS4KLStUaGUgYXJndW1lbnQgaXMgYSByZWd1bGFy IGV4cHJlc3Npb24uICBUaGlzIGNvbW1hbmQgbW92ZXMgdXAgdGhlCi0rc3RhY2ssIHN0b3BwaW5n IGF0IHRoZSBmaXJzdCBmcmFtZSB3aG9zZSBvYmplY3QgZmlsZSBuYW1lIG1hdGNoZXMgdGhlCi0r cmVndWxhciBleHByZXNzaW9uLiIiIgotKwotKyAgICBkZWYgX19pbml0X18gKHNlbGYpOgotKyAg ICAgICAgc3VwZXIgKFVwdG9PYmplY3RDb21tYW5kLCBzZWxmKS5fX2luaXRfXyAoIm9iamVjdCIp Ci0rCi0rICAgIGRlZiBmaWx0ZXIgKHNlbGYsIGZyYW1lKToKLSsgICAgICAgIG5hbWUgPSBmcmFt ZS5maW5kX3NhbCAoKS5zeW10YWIub2JqZmlsZS5maWxlbmFtZQotKyAgICAgICAgaWYgbmFtZSBp cyBub3QgTm9uZToKLSsgICAgICAgICAgICBpZiBzZWxmLnJ4LnNlYXJjaCAobmFtZSkgaXMgbm90 IE5vbmU6Ci0rICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0rICAgICAgICByZXR1cm4gRmFs c2UKLSsKLStjbGFzcyBVcHRvV2hlcmVDb21tYW5kIChVcHRvSW1wbGVtZW50YXRpb24pOgotKyAg ICAiIiJTZWxlY3QgYW5kIHByaW50IHNvbWUgY2FsbGluZyBzdGFjayBmcmFtZSwgYmFzZWQgb24g ZXhwcmVzc2lvbi4KLStUaGUgYXJndW1lbnQgaXMgYW4gZXhwcmVzc2lvbi4gIFRoaXMgY29tbWFu ZCBtb3ZlcyB1cCB0aGUgc3RhY2ssCi0rcGFyc2luZyBhbmQgZXZhbHVhdGluZyB0aGUgZXhwcmVz c2lvbiBpbiBlYWNoIGZyYW1lLiAgVGhpcyBzdG9wcyB3aGVuCi0rdGhlIGV4cHJlc3Npb24gZXZh bHVhdGVzIHRvIGEgbm9uLXplcm8gKHRydWUpIHZhbHVlLiIiIgotKwotKyAgICBkZWYgX19pbml0 X18gKHNlbGYpOgotKyAgICAgICAgc3VwZXIgKFVwdG9XaGVyZUNvbW1hbmQsIHNlbGYpLl9faW5p dF9fICgid2hlcmUiKQotKwotKyAgICBkZWYgZmlsdGVyIChzZWxmLCBmcmFtZSk6Ci0rICAgICAg ICB0cnk6Ci0rICAgICAgICAgICAgaWYgZ2RiLnBhcnNlX2FuZF9ldmFsIChzZWxmLmV4cHJlc3Np b24pOgotKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotKyAgICAgICAgZXhjZXB0OgotKyAg ICAgICAgICAgIHBhc3MKLSsgICAgICAgIHJldHVybiBGYWxzZQotKwotKyAgICBkZWYgaW52b2tl IChzZWxmLCBhcmcsIGZyb21fdHR5KToKLSsgICAgICAgIHNlbGYuZXhwcmVzc2lvbiA9IGFyZwot KyAgICAgICAgc2VsZi5zZWFyY2ggKCkKLSsKLStVcHRvUHJlZml4ICgpCi0rVXB0b1N5bWJvbENv bW1hbmQgKCkKLStVcHRvU291cmNlQ29tbWFuZCAoKQotK1VwdG9PYmplY3RDb21tYW5kICgpCi0r VXB0b1doZXJlQ29tbWFuZCAoKQogZGlmZiAtLWdpdCBhL2dkYi9weXRob24vbGliL2dkYi9mdW5j dGlvbi9jYWxsZXJfaXMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvZnVuY3Rpb24vY2FsbGVyX2lz LnB5CiBuZXcgZmlsZSBtb2RlIDEwMDY0NAogaW5kZXggMDAwMDAwMC4uMmI5YzVjNwoKZGlmZiAt LWdpdCBhL2dkYi11cHN0cmVhbS1mcmFtZWZpbHRlcnMtMW9mMi5wYXRjaCBiL2dkYi11cHN0cmVh bS1mcmFtZWZpbHRlcnMtMW9mMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5kMGFiMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVy cy0xb2YyLnBhdGNoCkBAIC0wLDAgKzEsNTU1MSBAQAoraHR0cDovL3NvdXJjZXdhcmUub3JnL21s L2dkYi1jdnMvMjAxMy0wNS9tc2cwMDA4NC5odG1sCisKKyMjIyBzcmMvZ2RiL0NoYW5nZUxvZwky MDEzLzA1LzA5IDE4OjAzOjI3CTEuMTU1MzkKKyMjIyBzcmMvZ2RiL0NoYW5nZUxvZwkyMDEzLzA1 LzEwIDEwOjI2OjAxCTEuMTU1NDAKKyMjIC0xLDMgKzEsNTIgQEAKKysyMDEzLTA1LTEwICBQaGls IE11bGRvb24gIDxwbXVsZG9vbkByZWRoYXQuY29tPgorKworKwkqIHN0YWNrLmMgKGJhY2t0cmFj ZV9jb21tYW5kXzEpOiBBZGQgIm5vLWZpbHRlcnMiLCBhbmQgUHl0aG9uIGZyYW1lCisrCWZpbHRl ciBsb2dpYy4KKysJKGJhY2t0cmFjZV9jb21tYW5kKTogQWRkICJuby1maWx0ZXJzIiBvcHRpb24g cGFyc2luZy4KKysJKF9pbml0aWFsaXplX3N0YWNrKTogQWx0ZXIgaGVscCB0byByZWZsZWN0ICJu by1maWx0ZXJzIiBvcHRpb24uCisrCSogTWFrZWZpbGUuaW4gKFNVQkRJUl9QWVRIT05fT0JTKTog QWRkIHB5LWZyYW1lZmlsdGVyLm8KKysJKFNVQkRJUl9QWVRIT05fU1JDUyk6IEFkZCBweS1mcmFt ZWZpbHRlci5jCisrCShweS1mcmFtZS5vKTogQWRkIHRhcmdldAorKwkqIGRhdGEtZGlyZWN0b3J5 L01ha2VmaWxlLmluIChQWVRIT05fRElSKTogQWRkIFB5dGhvbiBmcmFtZQorKwlmaWx0ZXIgZmls ZXMuCisrCSogcHl0aG9uL3B5dGhvbi5oOiBBZGQgbmV3IGZyYW1lIGZpbHRlciBjb25zdGFudHMs IGFuZCBmbGFnIGVudW0uCisrCShhcHBseV9mcmFtZV9maWx0ZXIpOiBBZGQgZGVmaW5pdGlvbi4K KysJKiBweXRob24vcHl0aG9uLmMgKGFwcGx5X2ZyYW1lX2ZpbHRlcik6IE5ldyBub24tUHl0aG9u CisrCWVuYWJsZWQgZnVuY3Rpb24uCisrCSogcHl0aG9uL3B5LXV0aWxzLmMgKHB5X3hkZWNyZWYp OiBOZXcgZnVuY3Rpb24uCisrCShtYWtlX2NsZWFudXBfcHlfeGRlY3JlZik6IERpdHRvLgorKwkq IHB5dGhvbi9weS1vYmpmaWxlLmM6IERlY2xhcmUgZnJhbWVfZmlsdGVycyBkaWN0aW9uYXJ5Lgor Kwkob2JqZnB5X2RlYWxsb2MpOiBBZGQgZnJhbWVfZmlsdGVycyBkZWFsbG9jLgorKwkob2JqZnB5 X25ldyk6IEluaXRpYWxpemUgZnJhbWVfZmlsdGVycyBhdHRyaWJ1dGUuCisrCShvYmpmaWxlX3Rv X29iamZpbGVfb2JqZWN0KTogRGl0dG8uCisrCShvYmpmcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMpOiBO ZXcgZnVuY3Rpb24uCisrCShvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMpOiBOZXcgZnVuY3Rpb24u CisrCSogcHl0aG9uL3B5LXByb2dzcGFjZS5jOiBEZWNsYXJlIGZyYW1lX2ZpbHRlcnMgZGljdGlv bmFyeS4KKysJKHBzcHlfZGVhbGxvYyk6IEFkZCBmcmFtZV9maWx0ZXJzIGRlYWxsb2MuCisrCShw c3B5X25ldyk6IEluaXRpYWxpemUgZnJhbWVfZmlsdGVycyBhdHRyaWJ1dGUuCisrCShwc3BhY2Vl X3RvX3BzcGFjZV9vYmplY3QpOiBEaXR0by4KKysJKHBzcHlfZ2V0X2ZyYW1lX2ZpbHRlcnMpOiBO ZXcgZnVuY3Rpb24uCisrCShwc3B5X3NldF9mcmFtZV9maWx0ZXJzKTogTmV3IGZ1bmN0aW9uLgor KwkqIHB5dGhvbi9weS1mcmFtZWZpbHRlci5jOiBOZXcgZmlsZS4KKysJKiBweXRob24vbGliL2dk Yi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHk6IE5ldyBmaWxlLgorKwkqIHB5dGhvbi9saWIvZ2Ri L2ZyYW1lcy5weTogTmV3IGZpbGUuCisrCSogcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHk6IElu aXRpYWxpemUgZ2xvYmFsIGZyYW1lX2ZpbHRlcnMKKysJZGljdGlvbmFyeQorKwkqIHB5dGhvbi9s aWIvZ2RiL0ZyYW1lRGVjb3JhdG9yLnB5OiBOZXcgZmlsZS4KKysJKiBweXRob24vbGliL2dkYi9G cmFtZUl0ZXJhdG9yLnB5OiBOZXcgZmlsZS4KKysJKiBtaS9taS1jbWRzLmMgKG1pX2NtZHMpOiBB ZGQgZnJhbWUgZmlsdGVycyBjb21tYW5kLgorKwkqIG1pL21pLWNtZHMuaDogRGVjbGFyZS4KKysJ KiBtaS9taS1jbWQtc3RhY2suYyAobWlfY21kX3N0YWNrX2xpc3RfZnJhbWVzKTogQWRkCisrCS0t bm8tZnJhbWUtZmlsdGVyIGxvZ2ljLCBhbmQgUHl0aG9uIGZyYW1lIGZpbHRlciBsb2dpYy4KKysJ KHN0YWNrX2VuYWJsZV9mcmFtZV9maWx0ZXJzKTogTmV3IGZ1bmN0aW9uLgorKwkocGFyc2Vfbm9f ZnJhbWVfb3B0aW9uKTogRGl0dG8uCisrCShtaV9jbWRfc3RhY2tfbGlzdF9mcmFtZXMpOiBBZGQg LS1uby1mcmFtZS1maWx0ZXIgYW5kIFB5dGhvbiBmcmFtZQorKwlmaWx0ZXIgbG9naWMuCisrCSht aV9jbWRfc3RhY2tfbGlzdF9sb2NhbHMpOiBEaXR0by4KKysJKG1pX2NtZF9zdGFja19saXN0X2Fy Z3MpOiBEaXR0by4KKysJKG1pX2NtZF9zdGFja19saXN0X3ZhcmlhYmxlcyk6IERpdHRvLgorKwkq IE5FV1M6IEFkZCBmcmFtZSBmaWx0ZXIgbm90ZS4KKysKKyAyMDEzLTA1LTA5ICBEb3VnIEV2YW5z ICA8ZGplQGdvb2dsZS5jb20+CisgCisgCSogc3ltZmlsZS5jIChzeW1zX2Zyb21fb2JqZmlsZV8x KTogRGVsZXRlIGFyZ3Mgb2Zmc2V0cywgbnVtX29mZnNldHMuCitJbmRleDogZ2RiLTcuNi9nZGIv TWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL01ha2VmaWxlLmlu CTIwMTMtMDUtMjAgMjI6MjM6MzYuNzQ4MjE1MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvTWFr ZWZpbGUuaW4JMjAxMy0wNS0yMCAyMjoyNTo1Mi4wOTYxNjU3NzMgKzAyMDAKK0BAIC0yODQsNiAr Mjg0LDcgQEAgU1VCRElSX1BZVEhPTl9PQlMgPSBcCisgCXB5LWV4aXRlZGV2ZW50Lm8gXAorIAlw eS1maW5pc2hicmVha3BvaW50Lm8gXAorIAlweS1mcmFtZS5vIFwKKysJcHktZnJhbWVmaWx0ZXIu byBcCisgCXB5LWZ1bmN0aW9uLm8gXAorIAlweS1nZGItcmVhZGxpbmUubyBcCisgCXB5LWluZmVy aW9yLm8gXAorQEAgLTMxOCw2ICszMTksNyBAQCBTVUJESVJfUFlUSE9OX1NSQ1MgPSBcCisgCXB5 dGhvbi9weS1leGl0ZWRldmVudC5jIFwKKyAJcHl0aG9uL3B5LWZpbmlzaGJyZWFrcG9pbnQuYyBc CisgCXB5dGhvbi9weS1mcmFtZS5jIFwKKysJcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMgXAorIAlw eXRob24vcHktZnVuY3Rpb24uYyBcCisgCXB5dGhvbi9weS1nZGItcmVhZGxpbmUuYyBcCisgCXB5 dGhvbi9weS1pbmZlcmlvci5jIFwKK0BAIC0yMTM1LDYgKzIxMzcsMTAgQEAgcHktZnJhbWUubzog JChzcmNkaXIpL3B5dGhvbi9weS1mcmFtZS5jCisgCSQoQ09NUElMRSkgJChQWVRIT05fQ0ZMQUdT KSAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1lLmMKKyAJJChQT1NUQ09NUElMRSkKKyAKKytweS1m cmFtZWZpbHRlci5vOiAkKHNyY2RpcikvcHl0aG9uL3B5LWZyYW1lZmlsdGVyLmMKKysJJChDT01Q SUxFKSAkKFBZVEhPTl9DRkxBR1MpICQoc3JjZGlyKS9weXRob24vcHktZnJhbWVmaWx0ZXIuYwor KwkkKFBPU1RDT01QSUxFKQorKworIHB5LWZ1bmN0aW9uLm86ICQoc3JjZGlyKS9weXRob24vcHkt ZnVuY3Rpb24uYworIAkkKENPTVBJTEUpICQoUFlUSE9OX0NGTEFHUykgJChzcmNkaXIpL3B5dGhv bi9weS1mdW5jdGlvbi5jCisgCSQoUE9TVENPTVBJTEUpCitJbmRleDogZ2RiLTcuNi9nZGIvTkVX UworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIvTkVXUwkyMDEzLTA1LTIwIDIyOjIz OjM2Ljc0ODIxNTE0NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL05FV1MJMjAxMy0wNS0yMCAyMjoy NTo1Mi4wOTcxNjU3NzIgKzAyMDAKK0BAIC00LDYgKzQsMTAgQEAKKyAqIE5ld2x5IGluc3RhbGxl ZCAkcHJlZml4L2Jpbi9nY29yZSBhY3RzIGFzIGEgc2hlbGwgaW50ZXJmYWNlIGZvciB0aGUKKyAg IEdEQiBjb21tYW5kIGdjb3JlLgorIAorKyogUHl0aG9uIHNjcmlwdGluZworKworKyAgKiogRnJh bWUgZmlsdGVycyBhbmQgZnJhbWUgZGVjb3JhdG9ycyBoYXZlIGJlZW4gYWRkZWQuCisrCisgKioq IENoYW5nZXMgaW4gR0RCIDcuNgorIAorICogVGFyZ2V0IHJlY29yZCBoYXMgYmVlbiByZW5hbWVk IHRvIHJlY29yZC1mdWxsLgorSW5kZXg6IGdkYi03LjYvZ2RiL3N0YWNrLmMKKz09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K Ky0tLSBnZGItNy42Lm9yaWcvZ2RiL3N0YWNrLmMJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUx NDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9zdGFjay5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMDk4 MTY1NzcyICswMjAwCitAQCAtNTQsNiArNTQsNyBAQAorIAorICNpbmNsdWRlICJwc3ltdGFiLmgi CisgI2luY2x1ZGUgInN5bWZpbGUuaCIKKysjaW5jbHVkZSAicHl0aG9uL3B5dGhvbi5oIgorIAor IHZvaWQgKCpkZXByZWNhdGVkX3NlbGVjdGVkX2ZyYW1lX2xldmVsX2NoYW5nZWRfaG9vaykgKGlu dCk7CisgCitAQCAtMTY1NSwxMyArMTY1NiwxNSBAQCBmcmFtZV9pbmZvIChjaGFyICphZGRyX2V4 cCwgaW50IGZyb21fdHR5CisgICAgZnJhbWVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorLWJhY2t0 cmFjZV9jb21tYW5kXzEgKGNoYXIgKmNvdW50X2V4cCwgaW50IHNob3dfbG9jYWxzLCBpbnQgZnJv bV90dHkpCisrYmFja3RyYWNlX2NvbW1hbmRfMSAoY2hhciAqY291bnRfZXhwLCBpbnQgc2hvd19s b2NhbHMsIGludCBub19maWx0ZXJzLAorKwkJICAgICBpbnQgZnJvbV90dHkpCisgeworICAgc3Ry dWN0IGZyYW1lX2luZm8gKmZpOworICAgaW50IGNvdW50OworICAgaW50IGk7CisgICBzdHJ1Y3Qg ZnJhbWVfaW5mbyAqdHJhaWxpbmc7CistICBpbnQgdHJhaWxpbmdfbGV2ZWw7CisrICBpbnQgdHJh aWxpbmdfbGV2ZWwsIHB5X3N0YXJ0ID0gMCwgcHlfZW5kID0gMDsKKysgIGVudW0gcHlfYnRfc3Rh dHVzIHJlc3VsdCA9IFBZX0JUX0VSUk9SOworIAorICAgaWYgKCF0YXJnZXRfaGFzX3N0YWNrKQor ICAgICBlcnJvciAoXygiTm8gc3RhY2suIikpOworQEAgLTE2ODAsNiArMTY4Myw3IEBAIGJhY2t0 cmFjZV9jb21tYW5kXzEgKGNoYXIgKmNvdW50X2V4cCwgaW4KKyAJeworIAkgIHN0cnVjdCBmcmFt ZV9pbmZvICpjdXJyZW50OworIAorKwkgIHB5X3N0YXJ0ID0gY291bnQ7CisgCSAgY291bnQgPSAt Y291bnQ7CisgCisgCSAgY3VycmVudCA9IHRyYWlsaW5nOworQEAgLTE3MDEsOSArMTcwNSwxNyBA QCBiYWNrdHJhY2VfY29tbWFuZF8xIChjaGFyICpjb3VudF9leHAsIGluCisgCisgCSAgY291bnQg PSAtMTsKKyAJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHB5X3N0YXJ0ID0gMDsKKysJICBweV9l bmQgPSBjb3VudDsKKysJfQorICAgICB9CisgICBlbHNlCistICAgIGNvdW50ID0gLTE7CisrICAg IHsKKysgICAgICBweV9lbmQgPSAtMTsKKysgICAgICBjb3VudCA9IC0xOworKyAgICB9CisgCisg ICBpZiAoaW5mb192ZXJib3NlKQorICAgICB7CitAQCAtMTcyMywxNiArMTczNSw0MCBAQCBiYWNr dHJhY2VfY29tbWFuZF8xIChjaGFyICpjb3VudF9leHAsIGluCisgCX0KKyAgICAgfQorIAorLSAg Zm9yIChpID0gMCwgZmkgPSB0cmFpbGluZzsgZmkgJiYgY291bnQtLTsgaSsrLCBmaSA9IGdldF9w cmV2X2ZyYW1lIChmaSkpCisrICBpZiAoISBub19maWx0ZXJzKQorICAgICB7CistICAgICAgUVVJ VDsKKysgICAgICBpbnQgZmxhZ3MgPSBQUklOVF9MRVZFTCB8IFBSSU5UX0ZSQU1FX0lORk8gfCBQ UklOVF9BUkdTOworKyAgICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdfdHlwZTsKKyAKKy0gICAg ICAvKiBEb24ndCB1c2UgcHJpbnRfc3RhY2tfZnJhbWU7IGlmIGFuIGVycm9yKCkgb2NjdXJzIGl0 IHByb2JhYmx5CistICAgICAgICAgbWVhbnMgZnVydGhlciBhdHRlbXB0cyB0byBiYWNrdHJhY2Ug d291bGQgZmFpbCAob24gdGhlIG90aGVyCistICAgICAgICAgaGFuZCwgcGVyaGFwcyB0aGUgY29k ZSBkb2VzIG9yIGNvdWxkIGJlIGZpeGVkIHRvIG1ha2Ugc3VyZQorLSAgICAgICAgIHRoZSBmcmFt ZS0+cHJldiBmaWVsZCBnZXRzIHNldCB0byBOVUxMIGluIHRoYXQgY2FzZSkuICAqLworLSAgICAg IHByaW50X2ZyYW1lX2luZm8gKGZpLCAxLCBMT0NBVElPTiwgMSk7CisgICAgICAgaWYgKHNob3df bG9jYWxzKQorKwlmbGFncyB8PSBQUklOVF9MT0NBTFM7CisrCisrICAgICAgaWYgKCFzdHJjbXAg KHByaW50X2ZyYW1lX2FyZ3VtZW50cywgInNjYWxhcnMiKSkKKysJYXJnX3R5cGUgPSBDTElfU0NB TEFSX1ZBTFVFUzsKKysgICAgICBlbHNlIGlmICghc3RyY21wIChwcmludF9mcmFtZV9hcmd1bWVu dHMsICJhbGwiKSkKKysJYXJnX3R5cGUgPSBDTElfQUxMX1ZBTFVFUzsKKysgICAgICBlbHNlCisr CWFyZ190eXBlID0gTk9fVkFMVUVTOworKworKyAgICAgIHJlc3VsdCA9IGFwcGx5X2ZyYW1lX2Zp bHRlciAoZ2V0X2N1cnJlbnRfZnJhbWUgKCksIGZsYWdzLCBhcmdfdHlwZSwKKysJCQkJICAgY3Vy cmVudF91aW91dCwgcHlfc3RhcnQsIHB5X2VuZCk7CisrCisrICAgIH0KKysgIC8qIFJ1biB0aGUg aW5idWlsdCBiYWNrdHJhY2UgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgcmVnaXN0ZXJlZCwgb3IK KysgICAgICJuby1maWx0ZXJzIiBoYXMgYmVlbiBzcGVjaWZpZWQgZnJvbSB0aGUgY29tbWFuZC4g ICovCisrICBpZiAobm9fZmlsdGVycyB8fCAgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRFUlMpCisr ICAgIHsKKysgICAgICBmb3IgKGkgPSAwLCBmaSA9IHRyYWlsaW5nOyBmaSAmJiBjb3VudC0tOyBp KyssIGZpID0gZ2V0X3ByZXZfZnJhbWUgKGZpKSkKKysJeworKwkgIFFVSVQ7CisrCisrCSAgLyog RG9uJ3QgdXNlIHByaW50X3N0YWNrX2ZyYW1lOyBpZiBhbiBlcnJvcigpIG9jY3VycyBpdCBwcm9i YWJseQorKwkgICAgIG1lYW5zIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gYmFja3RyYWNlIHdvdWxkIGZh aWwgKG9uIHRoZSBvdGhlcgorKwkgICAgIGhhbmQsIHBlcmhhcHMgdGhlIGNvZGUgZG9lcyBvciBj b3VsZCBiZSBmaXhlZCB0byBtYWtlIHN1cmUKKysJICAgICB0aGUgZnJhbWUtPnByZXYgZmllbGQg Z2V0cyBzZXQgdG8gTlVMTCBpbiB0aGF0IGNhc2UpLiAgKi8KKysKKysJICBwcmludF9mcmFtZV9p bmZvIChmaSwgMSwgTE9DQVRJT04sIDEpOworKwkgIGlmIChzaG93X2xvY2FscykKKyAJeworIAkg IHN0cnVjdCBmcmFtZV9pZCBmcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZmkpOworIAorQEAgLTE3 NDgsMjQgKzE3ODQsMjUgQEAgYmFja3RyYWNlX2NvbW1hbmRfMSAoY2hhciAqY291bnRfZXhwLCBp bgorIAkgICAgfQorIAl9CisgCistICAgICAgLyogU2F2ZSB0aGUgbGFzdCBmcmFtZSB0byBjaGVj ayBmb3IgZXJyb3IgY29uZGl0aW9ucy4gICovCistICAgICAgdHJhaWxpbmcgPSBmaTsKKy0gICAg fQorKwkgIC8qIFNhdmUgdGhlIGxhc3QgZnJhbWUgdG8gY2hlY2sgZm9yIGVycm9yIGNvbmRpdGlv bnMuICAqLworKwkgIHRyYWlsaW5nID0gZmk7CisrCX0KKyAKKy0gIC8qIElmIHdlJ3ZlIHN0b3Bw ZWQgYmVmb3JlIHRoZSBlbmQsIG1lbnRpb24gdGhhdC4gICovCistICBpZiAoZmkgJiYgZnJvbV90 dHkpCistICAgIHByaW50Zl9maWx0ZXJlZCAoXygiKE1vcmUgc3RhY2sgZnJhbWVzIGZvbGxvdy4u LilcbiIpKTsKKysgICAgICAvKiBJZiB3ZSd2ZSBzdG9wcGVkIGJlZm9yZSB0aGUgZW5kLCBtZW50 aW9uIHRoYXQuICAqLworKyAgICAgIGlmIChmaSAmJiBmcm9tX3R0eSkKKysJcHJpbnRmX2ZpbHRl cmVkIChfKCIoTW9yZSBzdGFjayBmcmFtZXMgZm9sbG93Li4uKVxuIikpOworIAorLSAgLyogSWYg d2UndmUgcnVuIG91dCBvZiBmcmFtZXMsIGFuZCB0aGUgcmVhc29uIGFwcGVhcnMgdG8gYmUgYW4g ZXJyb3IKKy0gICAgIGNvbmRpdGlvbiwgcHJpbnQgaXQuICAqLworLSAgaWYgKGZpID09IE5VTEwg JiYgdHJhaWxpbmcgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIGVudW0gdW53aW5kX3N0b3BfcmVh c29uIHJlYXNvbjsKKysgICAgICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGZyYW1lcywgYW5kIHRo ZSByZWFzb24gYXBwZWFycyB0byBiZSBhbiBlcnJvcgorKwkgY29uZGl0aW9uLCBwcmludCBpdC4g ICovCisrICAgICAgaWYgKGZpID09IE5VTEwgJiYgdHJhaWxpbmcgIT0gTlVMTCkKKysJeworKwkg IGVudW0gdW53aW5kX3N0b3BfcmVhc29uIHJlYXNvbjsKKyAKKy0gICAgICByZWFzb24gPSBnZXRf ZnJhbWVfdW53aW5kX3N0b3BfcmVhc29uICh0cmFpbGluZyk7CistICAgICAgaWYgKHJlYXNvbiA+ PSBVTldJTkRfRklSU1RfRVJST1IpCistCXByaW50Zl9maWx0ZXJlZCAoXygiQmFja3RyYWNlIHN0 b3BwZWQ6ICVzXG4iKSwKKy0JCQkgZnJhbWVfc3RvcF9yZWFzb25fc3RyaW5nIChyZWFzb24pKTsK KysJICByZWFzb24gPSBnZXRfZnJhbWVfdW53aW5kX3N0b3BfcmVhc29uICh0cmFpbGluZyk7Cisr CSAgaWYgKHJlYXNvbiA+PSBVTldJTkRfRklSU1RfRVJST1IpCisrCSAgICBwcmludGZfZmlsdGVy ZWQgKF8oIkJhY2t0cmFjZSBzdG9wcGVkOiAlc1xuIiksCisrCQkJICAgICBmcmFtZV9zdG9wX3Jl YXNvbl9zdHJpbmcgKHJlYXNvbikpOworKwl9CisgICAgIH0KKyB9CisgCitAQCAtMTc3Myw3ICsx ODEwLDggQEAgc3RhdGljIHZvaWQKKyBiYWNrdHJhY2VfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQg ZnJvbV90dHkpCisgeworICAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbiA9IG1ha2VfY2xlYW51 cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKy0gIGludCBmdWxsdHJhY2VfYXJnID0gLTEsIGFyZ2xl biA9IDAsIGFyZ2MgPSAwOworKyAgaW50IGZ1bGx0cmFjZV9hcmcgPSAtMSwgYXJnbGVuID0gMCwg YXJnYyA9IDAsIG5vX2ZpbHRlcnMgID0gLTE7CisrICBpbnQgdXNlcl9hcmcgPSAwOworIAorICAg aWYgKGFyZykKKyAgICAgeworQEAgLTE3OTAsMjUgKzE4MjgsMzEgQEAgYmFja3RyYWNlX2NvbW1h bmQgKGNoYXIgKmFyZywgaW50IGZyb21fdAorIAkgIGZvciAoaiA9IDA7IGogPCBzdHJsZW4gKGFy Z3ZbaV0pOyBqKyspCisgCSAgICBhcmd2W2ldW2pdID0gdG9sb3dlciAoYXJndltpXVtqXSk7Cisg CistCSAgaWYgKGZ1bGx0cmFjZV9hcmcgPCAwICYmIHN1YnNldF9jb21wYXJlIChhcmd2W2ldLCAi ZnVsbCIpKQorLQkgICAgZnVsbHRyYWNlX2FyZyA9IGFyZ2M7CisrCSAgaWYgKG5vX2ZpbHRlcnMg PCAwICYmIHN1YnNldF9jb21wYXJlIChhcmd2W2ldLCAibm8tZmlsdGVycyIpKQorKwkgICAgbm9f ZmlsdGVycyA9IGFyZ2M7CisgCSAgZWxzZQorIAkgICAgeworLQkgICAgICBhcmdsZW4gKz0gc3Ry bGVuIChhcmd2W2ldKTsKKy0JICAgICAgYXJnYysrOworKwkgICAgICBpZiAoZnVsbHRyYWNlX2Fy ZyA8IDAgJiYgc3Vic2V0X2NvbXBhcmUgKGFyZ3ZbaV0sICJmdWxsIikpCisrCQlmdWxsdHJhY2Vf YXJnID0gYXJnYzsKKysJICAgICAgZWxzZQorKwkJeworKwkJICB1c2VyX2FyZysrOworKwkJICBh cmdsZW4gKz0gc3RybGVuIChhcmd2W2ldKTsKKysJCX0KKyAJICAgIH0KKysJICBhcmdjKys7Cisg CX0KKy0gICAgICBhcmdsZW4gKz0gYXJnYzsKKy0gICAgICBpZiAoZnVsbHRyYWNlX2FyZyA+PSAw KQorKyAgICAgIGFyZ2xlbiArPSB1c2VyX2FyZzsKKysgICAgICBpZiAoZnVsbHRyYWNlX2FyZyA+ PSAwIHx8IG5vX2ZpbHRlcnMgPj0gMCkKKyAJeworIAkgIGlmIChhcmdsZW4gPiAwKQorIAkgICAg eworIAkgICAgICBhcmcgPSB4bWFsbG9jIChhcmdsZW4gKyAxKTsKKyAJICAgICAgbWFrZV9jbGVh bnVwICh4ZnJlZSwgYXJnKTsKKyAJICAgICAgYXJnWzBdID0gMDsKKy0JICAgICAgZm9yIChpID0g MDsgaSA8IChhcmdjICsgMSk7IGkrKykKKysJICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkr KykKKyAJCXsKKy0JCSAgaWYgKGkgIT0gZnVsbHRyYWNlX2FyZykKKysJCSAgaWYgKGkgIT0gZnVs bHRyYWNlX2FyZyAmJiBpICE9IG5vX2ZpbHRlcnMpCisgCQkgICAgeworIAkJICAgICAgc3RyY2F0 IChhcmcsIGFyZ3ZbaV0pOworIAkJICAgICAgc3RyY2F0IChhcmcsICIgIik7CitAQCAtMTgyMCw3 ICsxODY0LDggQEAgYmFja3RyYWNlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdAorIAl9 CisgICAgIH0KKyAKKy0gIGJhY2t0cmFjZV9jb21tYW5kXzEgKGFyZywgZnVsbHRyYWNlX2FyZyA+ PSAwIC8qIHNob3dfbG9jYWxzICovLCBmcm9tX3R0eSk7CisrICBiYWNrdHJhY2VfY29tbWFuZF8x IChhcmcsIGZ1bGx0cmFjZV9hcmcgPj0gMCAvKiBzaG93X2xvY2FscyAqLywKKysJCSAgICAgICBu b19maWx0ZXJzID49IDAgLyogbm8gZnJhbWUtZmlsdGVycyAqLywgZnJvbV90dHkpOworIAorICAg ZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisgfQorQEAgLTE4MjgsNyArMTg3Myw3IEBAIGJhY2t0 cmFjZV9jb21tYW5kIChjaGFyICphcmcsIGludCBmcm9tX3QKKyBzdGF0aWMgdm9pZAorIGJhY2t0 cmFjZV9mdWxsX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQorIHsKKy0gIGJhY2t0 cmFjZV9jb21tYW5kXzEgKGFyZywgMSAvKiBzaG93X2xvY2FscyAqLywgZnJvbV90dHkpOworKyAg YmFja3RyYWNlX2NvbW1hbmRfMSAoYXJnLCAxIC8qIHNob3dfbG9jYWxzICovLCAwLCBmcm9tX3R0 eSk7CisgfQorIAwKKyAKK0BAIC0yNTYyLDcgKzI2MDcsOSBAQCBJdCBjYW4gYmUgYSBzdGFjayBm cmFtZSBudW1iZXIgb3IgdGhlIGFkCisgICBhZGRfY29tICgiYmFja3RyYWNlIiwgY2xhc3Nfc3Rh Y2ssIGJhY2t0cmFjZV9jb21tYW5kLCBfKCJcCisgUHJpbnQgYmFja3RyYWNlIG9mIGFsbCBzdGFj ayBmcmFtZXMsIG9yIGlubmVybW9zdCBDT1VOVCBmcmFtZXMuXG5cCisgV2l0aCBhIG5lZ2F0aXZl IGFyZ3VtZW50LCBwcmludCBvdXRlcm1vc3QgLUNPVU5UIGZyYW1lcy5cblVzZSBvZiB0aGUgXAor LSdmdWxsJyBxdWFsaWZpZXIgYWxzbyBwcmludHMgdGhlIHZhbHVlcyBvZiB0aGUgbG9jYWwgdmFy aWFibGVzLlxuIikpOworKydmdWxsJyBxdWFsaWZpZXIgYWxzbyBwcmludHMgdGhlIHZhbHVlcyBv ZiB0aGUgbG9jYWwgdmFyaWFibGVzLlxuXAorK1VzZSBvZiB0aGUgJ25vLWZpbHRlcnMnIHF1YWxp ZmllciBwcm9oaWJpdHMgZnJhbWUgZmlsdGVycyBmcm9tIGV4ZWN1dGluZ1xuXAorK29uIHRoaXMg YmFja3RyYWNlLlxuIikpOworICAgYWRkX2NvbV9hbGlhcyAoImJ0IiwgImJhY2t0cmFjZSIsIGNs YXNzX3N0YWNrLCAwKTsKKyAgIGlmICh4ZGJfY29tbWFuZHMpCisgICAgIHsKK0luZGV4OiBnZGIt Ny42L2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdkYi03 LjYub3JpZy9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4JMjAxMy0wNS0yMCAyMjoyMzoz Ni43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmls ZS5pbgkyMDEzLTA1LTIwIDIyOjI1OjUyLjA5ODE2NTc3MiArMDIwMAorQEAgLTUzLDcgKzUzLDEx IEBAIFBZVEhPTl9ESVIgPSBweXRob24KKyBQWVRIT05fSU5TVEFMTF9ESVIgPSAkKERFU1RESVIp JChHREJfREFUQURJUikvJChQWVRIT05fRElSKQorIFBZVEhPTl9GSUxFUyA9IFwKKyAJZ2RiL19f aW5pdF9fLnB5IFwKKysJZ2RiL2ZyYW1lcy5weSBcCisrCWdkYi9GcmFtZUl0ZXJhdG9yLnB5IFwK KysJZ2RiL0ZyYW1lRGVjb3JhdG9yLnB5IFwKKyAJZ2RiL2NvbW1hbmQvX19pbml0X18ucHkgXAor KwlnZGIvY29tbWFuZC9mcmFtZV9maWx0ZXJzLnB5IFwKKyAJZ2RiL2NvbW1hbmQvaWdub3JlX2Vy cm9ycy5weSBcCisgCWdkYi9jb21tYW5kL3BhaG9sZS5weSBcCisgCWdkYi9jb21tYW5kL3R5cGVf cHJpbnRlcnMucHkgXAorSW5kZXg6IGdkYi03LjYvZ2RiL2RvYy9nZGIudGV4aW5mbworPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0tIGdkYi03LjYub3JpZy9nZGIvZG9jL2dkYi50ZXhpbmZvCTIwMTMtMDUtMjAgMjI6 MjM6MzYuNzQ4MjE1MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvZG9jL2dkYi50ZXhpbmZvCTIw MTMtMDUtMjAgMjI6MjU6NTIuMTEwMTY1NzY3ICswMjAwCitAQCAtNjQ1Myw2ICs2NDUzLDcgQEAg Y3VycmVudGx5IGV4ZWN1dGluZyBmcmFtZSBhbmQgZGVzY3JpYmVzCisgQG1lbnUKKyAqIEZyYW1l czo6ICAgICAgICAgICAgICAgICAgICAgIFN0YWNrIGZyYW1lcworICogQmFja3RyYWNlOjogICAg ICAgICAgICAgICAgICAgQmFja3RyYWNlcworKyogRnJhbWUgRmlsdGVyIE1hbmFnZW1lbnQ6OiAg ICAgTWFuYWdpbmcgZnJhbWUgZmlsdGVycworICogU2VsZWN0aW9uOjogICAgICAgICAgICAgICAg ICAgU2VsZWN0aW5nIGEgZnJhbWUKKyAqIEZyYW1lIEluZm86OiAgICAgICAgICAgICAgICAgIElu Zm9ybWF0aW9uIG9uIGEgZnJhbWUKKyAKK0BAIC02NTQwLDYgKzY1NDEsNyBAQCBsaW5lIHBlciBm cmFtZSwgZm9yIG1hbnkgZnJhbWVzLCBzdGFydGluCisgZnJhbWUgKGZyYW1lIHplcm8pLCBmb2xs b3dlZCBieSBpdHMgY2FsbGVyIChmcmFtZSBvbmUpLCBhbmQgb24gdXAgdGhlCisgc3RhY2suCisg CisrQGFuY2hvcntiYWNrdHJhY2UtY29tbWFuZH0KKyBAdGFibGUgQGNvZGUKKyBAa2luZGV4IGJh Y2t0cmFjZQorIEBraW5kZXggYnQgQHJ7KEBjb2Rle2JhY2t0cmFjZX0pfQorQEAgLTY1NjUsNiAr NjU2NywxOSBAQCBTaW1pbGFyLCBidXQgcHJpbnQgb25seSB0aGUgb3V0ZXJtb3N0IEB2CisgQGl0 ZW14IGJ0IGZ1bGwgLUB2YXJ7bn0KKyBQcmludCB0aGUgdmFsdWVzIG9mIHRoZSBsb2NhbCB2YXJp YWJsZXMgYWxzby4gIEB2YXJ7bn0gc3BlY2lmaWVzIHRoZQorIG51bWJlciBvZiBmcmFtZXMgdG8g cHJpbnQsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKysKKytAaXRlbSBiYWNrdHJhY2Ugbm8tZmlsdGVy cworK0BpdGVteCBidCBuby1maWx0ZXJzCisrQGl0ZW14IGJ0IG5vLWZpbHRlcnMgQHZhcntufQor K0BpdGVteCBidCBuby1maWx0ZXJzIC1AdmFye259CisrQGl0ZW14IGJ0IG5vLWZpbHRlcnMgZnVs bAorK0BpdGVteCBidCBuby1maWx0ZXJzIGZ1bGwgQHZhcntufQorK0BpdGVteCBidCBuby1maWx0 ZXJzIGZ1bGwgLUB2YXJ7bn0KKytEbyBub3QgcnVuIFB5dGhvbiBmcmFtZSBmaWx0ZXJzIG9uIHRo aXMgYmFja3RyYWNlLiAgQHhyZWZ7RnJhbWUKKytGaWx0ZXIgQVBJfSwgZm9yIG1vcmUgaW5mb3Jt YXRpb24uICBBZGRpdGlvbmFsbHkgdXNlIEByZWZ7ZGlzYWJsZQorK2ZyYW1lLWZpbHRlciBhbGx9 IHRvIHR1cm4gb2ZmIGFsbCBmcmFtZSBmaWx0ZXJzLiAgVGhpcyBpcyBvbmx5CisrcmVsZXZhbnQg d2hlbiBAdmFsdWV7R0RCTn0gaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIEBjb2Rle1B5dGhvbn0K KytzdXBwb3J0LgorIEBlbmQgdGFibGUKKyAKKyBAa2luZGV4IHdoZXJlCitAQCAtNjcxNCw2ICs2 NzI5LDE0OSBAQCBEaXNwbGF5IGFuIGFic29sdXRlIGZpbGVuYW1lLgorIFNob3cgdGhlIGN1cnJl bnQgd2F5IHRvIGRpc3BsYXkgZmlsZW5hbWVzLgorIEBlbmQgdGFibGUKKyAKKytAbm9kZSBGcmFt ZSBGaWx0ZXIgTWFuYWdlbWVudAorK0BzZWN0aW9uIE1hbmFnZW1lbnQgb2YgRnJhbWUgRmlsdGVy cy4KKytAY2luZGV4IG1hbmFnaW5nIGZyYW1lIGZpbHRlcnMKKysKKytGcmFtZSBmaWx0ZXJzIGFy ZSBQeXRob24gYmFzZWQgdXRpbGl0aWVzIHRvIG1hbmFnZSBhbmQgZGVjb3JhdGUgdGhlCisrb3V0 cHV0IG9mIGZyYW1lcy4gIEB4cmVme0ZyYW1lIEZpbHRlciBBUEl9LCBmb3IgZnVydGhlciBpbmZv cm1hdGlvbi4KKysKKytNYW5hZ2luZyBmcmFtZSBmaWx0ZXJzIGlzIHBlcmZvcm1lZCBieSBzZXZl cmFsIGNvbW1hbmRzIGF2YWlsYWJsZQorK3dpdGhpbiBAdmFsdWV7R0RCTn0sIGRldGFpbGVkIGhl cmUuCisrCisrQHRhYmxlIEBjb2RlCisrQGtpbmRleCBpbmZvIGZyYW1lLWZpbHRlcgorK0BpdGVt IGluZm8gZnJhbWUtZmlsdGVyCisrUHJpbnQgYSBsaXN0IG9mIGluc3RhbGxlZCBmcmFtZSBmaWx0 ZXJzIGZyb20gYWxsIGRpY3Rpb25hcmllcywgc2hvd2luZworK3RoZWlyIG5hbWUsIHByaW9yaXR5 IGFuZCBlbmFibGVkIHN0YXR1cy4KKysKKytAa2luZGV4IGRpc2FibGUgZnJhbWUtZmlsdGVyCisr QGFuY2hvcntkaXNhYmxlIGZyYW1lLWZpbHRlciBhbGx9CisrQGl0ZW0gZGlzYWJsZSBmcmFtZS1m aWx0ZXIgQHZhcntmaWx0ZXItZGljdGlvbmFyeX0gQHZhcntmaWx0ZXItbmFtZX0KKytEaXNhYmxl IGEgZnJhbWUgZmlsdGVyIGluIHRoZSBkaWN0aW9uYXJ5IG1hdGNoaW5nCisrQHZhcntmaWx0ZXIt ZGljdGlvbmFyeX0sIG9yIEBjb2Rle2FsbH0sIGFuZCBAdmFye2ZpbHRlci1uYW1lfS4KKytAdmFy e2ZpbHRlci1kaWN0aW9uYXJ5fSBtYXkgYmUgQGNvZGV7YWxsfSwgQGNvZGV7Z2xvYmFsfSwKKytA Y29kZXtwcm9nc3BhY2V9IG9yIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgZmlsZSB3aGVyZSB0aGUg ZnJhbWUgZmlsdGVyCisrZGljdGlvbmFyeSByZXNpZGVzLiAgV2hlbiBAY29kZXthbGx9IGlzIHNw ZWNpZmllZCwgYWxsIGZyYW1lIGZpbHRlcnMKKythY3Jvc3MgYWxsIGRpY3Rpb25hcmllcyBhcmUg ZGlzYWJsZWQuICBAdmFye2ZpbHRlci1uYW1lfSBpcyB0aGUgbmFtZQorK29mIHRoZSBmcmFtZSBm aWx0ZXIgYW5kIGlzIHVzZWQgd2hlbiBAY29kZXthbGx9IGlzIG5vdCB0aGUgb3B0aW9uIGZvcgor K0B2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9LiAgQSBkaXNhYmxlZCBmcmFtZS1maWx0ZXIgaXMgbm90 IGRlbGV0ZWQsIGl0CisrbWF5IGJlIGVuYWJsZWQgYWdhaW4gbGF0ZXIuCisrCisrQGtpbmRleCBl bmFibGUgZnJhbWUtZmlsdGVyCisrQGl0ZW0gZW5hYmxlIGZyYW1lLWZpbHRlciBAdmFye2ZpbHRl ci1kaWN0aW9uYXJ5fSBAdmFye2ZpbHRlci1uYW1lfQorK0VuYWJsZSBhIGZyYW1lIGZpbHRlciBp biB0aGUgZGljdGlvbmFyeSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9LCBvciBA Y29kZXthbGx9LCBhbmQgQHZhcntmaWx0ZXItbmFtZX0uCisrQHZhcntmaWx0ZXItZGljdGlvbmFy eX0gbWF5IGJlIEBjb2Rle2FsbH0sIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJvZ3NwYWNlfSBv ciB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZpbHRlcgorK2Rp Y3Rpb25hcnkgcmVzaWRlcy4gIFdoZW4gQGNvZGV7YWxsfSBpcyBzcGVjaWZpZWQsIGFsbCBmcmFt ZSBmaWx0ZXJzIGFjcm9zcworK2FsbCBkaWN0aW9uYXJpZXMgYXJlIGVuYWJsZWQuICBAdmFye2Zp bHRlci1uYW1lfSBpcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUKKytmaWx0ZXIgYW5kIGlzIHVzZWQg d2hlbiBAY29kZXthbGx9IGlzIG5vdCB0aGUgb3B0aW9uIGZvcgorK0B2YXJ7ZmlsdGVyLWRpY3Rp b25hcnl9LgorKworK0V4YW1wbGU6CisrCisrQHNtYWxsZXhhbXBsZQorKyhnZGIpIGluZm8gZnJh bWUtZmlsdGVyCisrCisrZ2xvYmFsIGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxl ZCAgTmFtZQorKyAgMTAwMCAgICAgIE5vICAgICAgIFByaW1hcnlGdW5jdGlvbkZpbHRlcgorKyAg MTAwICAgICAgIFllcyAgICAgIFJldmVyc2UKKysKKytwcm9nc3BhY2UgL2J1aWxkL3Rlc3QgZnJh bWUtZmlsdGVyczoKKysgIFByaW9yaXR5ICBFbmFibGVkICBOYW1lCisrICAxMDAgICAgICAgWWVz ICAgICAgUHJvZ3NwYWNlRmlsdGVyCisrCisrb2JqZmlsZSAvYnVpbGQvdGVzdCBmcmFtZS1maWx0 ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5hbWUKKysgIDk5OSAgICAgICBZZXMgICAgICBC dWlsZFByb2dyYSBGaWx0ZXIKKysKKysoZ2RiKSBkaXNhYmxlIGZyYW1lLWZpbHRlciAvYnVpbGQv dGVzdCBCdWlsZFByb2dyYW1GaWx0ZXIKKysoZ2RiKSBpbmZvIGZyYW1lLWZpbHRlcgorKworK2ds b2JhbCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5hbWUKKysgIDEwMDAg ICAgICBObyAgICAgICBQcmltYXJ5RnVuY3Rpb25GaWx0ZXIKKysgIDEwMCAgICAgICBZZXMgICAg ICBSZXZlcnNlCisrCisrcHJvZ3NwYWNlIC9idWlsZC90ZXN0IGZyYW1lLWZpbHRlcnM6CisrICBQ cmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgMTAwICAgICAgIFllcyAgICAgIFByb2dzcGFjZUZp bHRlcgorKworK29iamZpbGUgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoKKysgIFByaW9yaXR5 ICBFbmFibGVkICBOYW1lCisrICA5OTkgICAgICAgTm8gICAgICAgQnVpbGRQcm9ncmFtRmlsdGVy CisrCisrKGdkYikgZW5hYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgUHJpbWFyeUZ1bmN0aW9uRmls dGVyCisrKGdkYikgaW5mbyBmcmFtZS1maWx0ZXIKKysKKytnbG9iYWwgZnJhbWUtZmlsdGVyczoK KysgIFByaW9yaXR5ICBFbmFibGVkICBOYW1lCisrICAxMDAwICAgICAgWWVzICAgICAgUHJpbWFy eUZ1bmN0aW9uRmlsdGVyCisrICAxMDAgICAgICAgWWVzICAgICAgUmV2ZXJzZQorKworK3Byb2dz cGFjZSAvYnVpbGQvdGVzdCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkgIEVuYWJsZWQgIE5h bWUKKysgIDEwMCAgICAgICBZZXMgICAgICBQcm9nc3BhY2VGaWx0ZXIKKysKKytvYmpmaWxlIC9i dWlsZC90ZXN0IGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAg OTk5ICAgICAgIE5vICAgICAgIEJ1aWxkUHJvZ3JhbUZpbHRlcgorK0BlbmQgc21hbGxleGFtcGxl CisrCisrQGtpbmRleCBzZXQgZnJhbWUtZmlsdGVyIHByaW9yaXR5CisrQGl0ZW0gc2V0IGZyYW1l LWZpbHRlciBwcmlvcml0eSBAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSBAdmFye2ZpbHRlci1uYW1l fSBAdmFye3ByaW9yaXR5fQorK1NldCB0aGUgQHZhcntwcmlvcml0eX0gb2YgYSBmcmFtZSBmaWx0 ZXIgaW4gdGhlIGRpY3Rpb25hcnkgbWF0Y2hpbmcKKytAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSwg YW5kIHRoZSBmcmFtZSBmaWx0ZXIgbmFtZSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLW5hbWV9LiAg QHZhcntmaWx0ZXItZGljdGlvbmFyeX0gbWF5IGJlIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJv Z3NwYWNlfSBvciB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZp bHRlcgorK2RpY3Rpb25hcnkgcmVzaWRlcy4gIEB2YXJ7cHJpb3JpdHl9IGlzIGFuIGludGVnZXIu CisrCisrQGtpbmRleCBzaG93IGZyYW1lLWZpbHRlciBwcmlvcml0eQorK0BpdGVtIHNob3cgZnJh bWUtZmlsdGVyIHByaW9yaXR5IEB2YXJ7ZmlsdGVyLWRpY3Rpb25hcnl9IEB2YXJ7ZmlsdGVyLW5h bWV9CisrU2hvdyB0aGUgQHZhcntwcmlvcml0eX0gb2YgYSBmcmFtZSBmaWx0ZXIgaW4gdGhlIGRp Y3Rpb25hcnkgbWF0Y2hpbmcKKytAdmFye2ZpbHRlci1kaWN0aW9uYXJ5fSwgYW5kIHRoZSBmcmFt ZSBmaWx0ZXIgbmFtZSBtYXRjaGluZworK0B2YXJ7ZmlsdGVyLW5hbWV9LiAgQHZhcntmaWx0ZXIt ZGljdGlvbmFyeX0gbWF5IGJlIEBjb2Rle2dsb2JhbH0sCisrQGNvZGV7cHJvZ3NwYWNlfSBvciB0 aGUgbmFtZSBvZiB0aGUgb2JqZWN0IGZpbGUgd2hlcmUgdGhlIGZyYW1lIGZpbHRlcgorK2RpY3Rp b25hcnkgcmVzaWRlcy4KKysKKytFeGFtcGxlOgorKworK0BzbWFsbGV4YW1wbGUKKysoZ2RiKSBp bmZvIGZyYW1lLWZpbHRlcgorKworK2dsb2JhbCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkg IEVuYWJsZWQgIE5hbWUKKysgIDEwMDAgICAgICBZZXMgICAgICBQcmltYXJ5RnVuY3Rpb25GaWx0 ZXIKKysgIDEwMCAgICAgICBZZXMgICAgICBSZXZlcnNlCisrCisrcHJvZ3NwYWNlIC9idWlsZC90 ZXN0IGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgMTAwICAg ICAgIFllcyAgICAgIFByb2dzcGFjZUZpbHRlcgorKworK29iamZpbGUgL2J1aWxkL3Rlc3QgZnJh bWUtZmlsdGVyczoKKysgIFByaW9yaXR5ICBFbmFibGVkICBOYW1lCisrICA5OTkgICAgICAgTm8g ICAgICAgQnVpbGRQcm9ncmFtRmlsdGVyCisrCisrKGdkYikgc2V0IGZyYW1lLWZpbHRlciBwcmlv cml0eSBnbG9iYWwgUmV2ZXJzZSA1MAorKyhnZGIpIGluZm8gZnJhbWUtZmlsdGVyCisrCisrZ2xv YmFsIGZyYW1lLWZpbHRlcnM6CisrICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZQorKyAgMTAwMCAg ICAgIFllcyAgICAgIFByaW1hcnlGdW5jdGlvbkZpbHRlcgorKyAgNTAgICAgICAgIFllcyAgICAg IFJldmVyc2UKKysKKytwcm9nc3BhY2UgL2J1aWxkL3Rlc3QgZnJhbWUtZmlsdGVyczoKKysgIFBy aW9yaXR5ICBFbmFibGVkICBOYW1lCisrICAxMDAgICAgICAgWWVzICAgICAgUHJvZ3NwYWNlRmls dGVyCisrCisrb2JqZmlsZSAvYnVpbGQvdGVzdCBmcmFtZS1maWx0ZXJzOgorKyAgUHJpb3JpdHkg IEVuYWJsZWQgIE5hbWUKKysgIDk5OSAgICAgICBObyAgICAgICBCdWlsZFByb2dyYW1GaWx0ZXIK KytAZW5kIHNtYWxsZXhhbXBsZQorK0BlbmQgdGFibGUKKysKKyBAbm9kZSBTZWxlY3Rpb24KKyBA c2VjdGlvbiBTZWxlY3RpbmcgYSBGcmFtZQorIAorQEAgLTIzMDY1LDYgKzIzMjIzLDkgQEAgc2l0 dWF0aW9uLCBhIFB5dGhvbiBAY29kZXtLZXlib2FyZEludGVycgorICogU2VsZWN0aW5nIFByZXR0 eS1QcmludGVyczo6ICAgSG93IEdEQiBjaG9vc2VzIGEgcHJldHR5LXByaW50ZXIuCisgKiBXcml0 aW5nIGEgUHJldHR5LVByaW50ZXI6OiAgICBXcml0aW5nIGEgUHJldHR5LVByaW50ZXIuCisgKiBU eXBlIFByaW50aW5nIEFQSTo6CQlQcmV0dHktcHJpbnRpbmcgdHlwZXMuCisrKiBGcmFtZSBGaWx0 ZXIgQVBJOjogICAgICAgICAgICBGaWx0ZXJpbmcgRnJhbWVzLgorKyogRnJhbWUgRGVjb3JhdG9y IEFQSTo6ICAgICAgICAgRGVjb3JhdGluZyBGcmFtZXMuCisrKiBXcml0aW5nIGEgRnJhbWUgRmls dGVyOjogICAgICBXcml0aW5nIGEgRnJhbWUgRmlsdGVyLgorICogSW5mZXJpb3JzIEluIFB5dGhv bjo6ICAgICAgICAgUHl0aG9uIHJlcHJlc2VudGF0aW9uIG9mIGluZmVyaW9ycyAocHJvY2Vzc2Vz KQorICogRXZlbnRzIEluIFB5dGhvbjo6ICAgICAgICAgICAgTGlzdGVuaW5nIGZvciBldmVudHMg ZnJvbSBAdmFsdWV7R0RCTn0uCisgKiBUaHJlYWRzIEluIFB5dGhvbjo6ICAgICAgICAgICBBY2Nl c3NpbmcgaW5mZXJpb3IgdGhyZWFkcyBmcm9tIFB5dGhvbi4KK0BAIC0yNDQxNSw2ICsyNDU3Niw2 MzYgQEAgZG9uZSB0aGVuIHR5cGUgcHJpbnRlcnMgd291bGQgaGF2ZSB0byBtYQorIG9yZGVyIHRv IGF2b2lkIGhvbGRpbmcgaW5mb3JtYXRpb24gdGhhdCBjb3VsZCBiZWNvbWUgc3RhbGUgYXMgdGhl CisgaW5mZXJpb3IgY2hhbmdlZC4KKyAKKytAbm9kZSBGcmFtZSBGaWx0ZXIgQVBJCisrQHN1YnN1 YnNlY3Rpb24gRmlsdGVyaW5nIEZyYW1lcy4KKytAY2luZGV4IGZyYW1lIGZpbHRlcnMgYXBpCisr CisrRnJhbWUgZmlsdGVycyBhcmUgUHl0aG9uIG9iamVjdHMgdGhhdCBtYW5pcHVsYXRlIHRoZSB2 aXNpYmlsaXR5IG9mIGEKKytmcmFtZSBvciBmcmFtZXMgd2hlbiBhIGJhY2t0cmFjZSAoQHB4cmVm e0JhY2t0cmFjZX0pIGlzIHByaW50ZWQgYnkKKytAdmFsdWV7R0RCTn0uCisrCisrT25seSBjb21t YW5kcyB0aGF0IHByaW50IGEgYmFja3RyYWNlLCBvciwgaW4gdGhlIGNhc2Ugb2YgQHNje2dkYi9t aX0KKytjb21tYW5kcyAoQHB4cmVme0dEQi9NSX0pLCB0aG9zZSB0aGF0IHJldHVybiBhIGNvbGxl Y3Rpb24gb2YgZnJhbWVzCisrYXJlIGFmZmVjdGVkLiAgVGhlIGNvbW1hbmRzIHRoYXQgd29yayB3 aXRoIGZyYW1lIGZpbHRlcnMgYXJlOgorKworK0Bjb2Rle2JhY2t0cmFjZX0gKEBweHJlZntiYWNr dHJhY2UtY29tbWFuZCwsIFRoZSBiYWNrdHJhY2UgY29tbWFuZH0pLAorK0Bjb2Rley1zdGFjay1s aXN0LWZyYW1lc30KKysoQHB4cmVmey1zdGFjay1saXN0LWZyYW1lcywsIFRoZSAtc3RhY2stbGlz dC1mcmFtZXMgY29tbWFuZH0pLAorK0Bjb2Rley1zdGFjay1saXN0LXZhcmlhYmxlc30gKEBweHJl Znstc3RhY2stbGlzdC12YXJpYWJsZXMsLCBUaGUKKystc3RhY2stbGlzdC12YXJpYWJsZXMgY29t bWFuZH0pLCBAY29kZXstc3RhY2stbGlzdC1hcmd1bWVudHN9CisrQHB4cmVmey1zdGFjay1saXN0 LWFyZ3VtZW50cywsIFRoZSAtc3RhY2stbGlzdC1hcmd1bWVudHMgY29tbWFuZH0pIGFuZAorK0Bj b2Rley1zdGFjay1saXN0LWxvY2Fsc30gKEBweHJlZnstc3RhY2stbGlzdC1sb2NhbHMsLCBUaGUK Kystc3RhY2stbGlzdC1sb2NhbHMgY29tbWFuZH0pLgorKworK0EgZnJhbWUgZmlsdGVyIHdvcmtz IGJ5IHRha2luZyBhbiBpdGVyYXRvciBhcyBhbiBhcmd1bWVudCwgYXBwbHlpbmcKKythY3Rpb25z IHRvIHRoZSBjb250ZW50cyBvZiB0aGF0IGl0ZXJhdG9yLCBhbmQgcmV0dXJuaW5nIGFub3RoZXIK KytpdGVyYXRvciAob3IsIHBvc3NpYmx5LCB0aGUgc2FtZSBpdGVyYXRvciBpdCB3YXMgcHJvdmlk ZWQgaW4gdGhlIGNhc2UKKyt3aGVyZSB0aGUgZmlsdGVyIGRvZXMgbm90IHBlcmZvcm0gYW55IG9w ZXJhdGlvbnMpLiAgVHlwaWNhbGx5LCBmcmFtZQorK2ZpbHRlcnMgdXRpbGl6ZSB0b29scyBzdWNo IGFzIHRoZSBQeXRob24ncyBAY29kZXtpdGVydG9vbHN9IG1vZHVsZSB0bworK3dvcmsgd2l0aCBh bmQgY3JlYXRlIG5ldyBpdGVyYXRvcnMgZnJvbSB0aGUgc291cmNlIGl0ZXJhdG9yLgorK1JlZ2Fy ZGxlc3Mgb2YgaG93IGEgZmlsdGVyIGNob29zZXMgdG8gYXBwbHkgYWN0aW9ucywgaXQgbXVzdCBu b3QgYWx0ZXIKKyt0aGUgdW5kZXJseWluZyBAdmFsdWV7R0RCTn0gZnJhbWUgb3IgZnJhbWVzLCBv ciBhdHRlbXB0IHRvIGFsdGVyIHRoZQorK2NhbGwtc3RhY2sgd2l0aGluIEB2YWx1ZXtHREJOfS4g IFRoaXMgcHJlc2VydmVzIGRhdGEgaW50ZWdyaXR5IHdpdGhpbgorK0B2YWx1ZXtHREJOfS4gIEZy YW1lIGZpbHRlcnMgYXJlIGV4ZWN1dGVkIG9uIGEgcHJpb3JpdHkgYmFzaXMgYW5kIGNhcmUKKytz aG91bGQgYmUgdGFrZW4gdGhhdCBzb21lIGZyYW1lIGZpbHRlcnMgbWF5IGhhdmUgYmVlbiBleGVj dXRlZCBiZWZvcmUsCisrYW5kIHRoYXQgc29tZSBmcmFtZSBmaWx0ZXJzIHdpbGwgYmUgZXhlY3V0 ZWQgYWZ0ZXIuCisrCisrQW4gaW1wb3J0YW50IGNvbnNpZGVyYXRpb24gd2hlbiBkZXNpZ25pbmcg ZnJhbWUgZmlsdGVycywgYW5kIHdlbGwKKyt3b3J0aCByZWZsZWN0aW5nIHVwb24sIGlzIHRoYXQg ZnJhbWUgZmlsdGVycyBzaG91bGQgYXZvaWQgdW53aW5kaW5nCisrdGhlIGNhbGwgc3RhY2sgaWYg cG9zc2libGUuICBTb21lIHN0YWNrcyBjYW4gcnVuIHZlcnkgZGVlcCwgaW50byB0aGUKKyt0ZW5z IG9mIHRob3VzYW5kcyBpbiBzb21lIGNhc2VzLiAgVG8gc2VhcmNoIGV2ZXJ5IGZyYW1lIHdoZW4g YSBmcmFtZQorK2ZpbHRlciBleGVjdXRlcyBtYXkgYmUgdG9vIGV4cGVuc2l2ZSBhdCB0aGF0IHN0 ZXAuICBUaGUgZnJhbWUgZmlsdGVyCisrY2Fubm90IGtub3cgaG93IG1hbnkgZnJhbWVzIGl0IGhh cyB0byBpdGVyYXRlIG92ZXIsIGFuZCBpdCBtYXkgaGF2ZSB0bworK2l0ZXJhdGUgdGhyb3VnaCB0 aGVtIGFsbC4gIFRoaXMgZW5kcyB1cCBkdXBsaWNhdGluZyBlZmZvcnQgYXMKKytAdmFsdWV7R0RC Tn0gcGVyZm9ybXMgdGhpcyBpdGVyYXRpb24gd2hlbiBpdCBwcmludHMgdGhlIGZyYW1lcy4gIElm CisrdGhlIGZpbHRlciBjYW4gZGVmZXIgdW53aW5kaW5nIGZyYW1lcyB1bnRpbCBmcmFtZSBkZWNv cmF0b3JzIGFyZQorK2V4ZWN1dGVkLCBhZnRlciB0aGUgbGFzdCBmaWx0ZXIgaGFzIGV4ZWN1dGVk LCBpdCBzaG91bGQuICBAeHJlZntGcmFtZQorK0RlY29yYXRvciBBUEl9LCBmb3IgbW9yZSBpbmZv cm1hdGlvbiBvbiBkZWNvcmF0b3JzLiAgQWxzbywgdGhlcmUgYXJlCisrZXhhbXBsZXMgZm9yIGJv dGggZnJhbWUgZGVjb3JhdG9ycyBhbmQgZmlsdGVycyBpbiBsYXRlciBjaGFwdGVycy4KKytAeHJl ZntXcml0aW5nIGEgRnJhbWUgRmlsdGVyfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCisrVGhl IFB5dGhvbiBkaWN0aW9uYXJ5IEBjb2Rle2dkYi5mcmFtZV9maWx0ZXJzfSBjb250YWlucyBrZXkv b2JqZWN0CisrcGFpcmluZ3MgdGhhdCBjb21wcmlzZSBhIGZyYW1lIGZpbHRlci4gIEZyYW1lIGZp bHRlcnMgaW4gdGhpcworK2RpY3Rpb25hcnkgYXJlIGNhbGxlZCBAY29kZXtnbG9iYWx9IGZyYW1l IGZpbHRlcnMsIGFuZCB0aGV5IGFyZQorK2F2YWlsYWJsZSB3aGVuIGRlYnVnZ2luZyBhbGwgaW5m ZXJpb3JzLiAgVGhlc2UgZnJhbWUgZmlsdGVycyBtdXN0CisrcmVnaXN0ZXIgd2l0aCB0aGUgZGlj dGlvbmFyeSBkaXJlY3RseS4gIEluIGFkZGl0aW9uIHRvIHRoZQorK0Bjb2Rle2dsb2JhbH0gZGlj dGlvbmFyeSwgdGhlcmUgYXJlIG90aGVyIGRpY3Rpb25hcmllcyB0aGF0IGFyZSBsb2FkZWQKKyt3 aXRoIGRpZmZlcmVudCBpbmZlcmlvcnMgdmlhIGF1dG8tbG9hZGluZyAoQHB4cmVme1B5dGhvbgor K0F1dG8tbG9hZGluZ30pLiAgVGhlIHR3byBvdGhlciBhcmVhcyB3aGVyZSBmcmFtZSBmaWx0ZXIg ZGljdGlvbmFyaWVzCisrY2FuIGJlIGZvdW5kIGFyZTogQGNvZGV7Z2RiLlByb2dzcGFjZX0gd2hp Y2ggY29udGFpbnMgYQorK0Bjb2Rle2ZyYW1lX2ZpbHRlcnN9IGRpY3Rpb25hcnkgYXR0cmlidXRl LCBhbmQgZWFjaCBAY29kZXtnZGIuT2JqZmlsZX0KKytvYmplY3Qgd2hpY2ggYWxzbyBjb250YWlu cyBhIEBjb2Rle2ZyYW1lX2ZpbHRlcnN9IGRpY3Rpb25hcnkKKythdHRyaWJ1dGUuCisrCisrV2hl biBhIGNvbW1hbmQgaXMgZXhlY3V0ZWQgZnJvbSBAdmFsdWV7R0RCTn0gdGhhdCBpcyBjb21wYXRp YmxlIHdpdGgKKytmcmFtZSBmaWx0ZXJzLCBAdmFsdWV7R0RCTn0gY29tYmluZXMgdGhlIEBjb2Rl e2dsb2JhbH0sCisrQGNvZGV7Z2RiLlByb2dzcGFjZX0gYW5kIGFsbCBAY29kZXtnZGIuT2JqZmls ZX0gZGljdGlvbmFyaWVzIGN1cnJlbnRseQorK2xvYWRlZC4gIEFsbCBvZiB0aGUgQGNvZGV7Z2Ri Lk9iamZpbGV9IGRpY3Rpb25hcmllcyBhcmUgY29tYmluZWQsIGFzCisrc2V2ZXJhbCBmcmFtZXMs IGFuZCB0aHVzIHNldmVyYWwgb2JqZWN0IGZpbGVzLCBtaWdodCBiZSBpbiB1c2UuCisrQHZhbHVl e0dEQk59IHRoZW4gcHJ1bmVzIGFueSBmcmFtZSBmaWx0ZXIgd2hvc2UgQGNvZGV7ZW5hYmxlZH0K KythdHRyaWJ1dGUgaXMgQGNvZGV7RmFsc2V9LiAgVGhpcyBwcnVuZWQgbGlzdCBpcyB0aGVuIHNv cnRlZCBhY2NvcmRpbmcKKyt0byB0aGUgQGNvZGV7cHJpb3JpdHl9IGF0dHJpYnV0ZSBpbiBlYWNo IGZpbHRlci4KKysKKytPbmNlIHRoZSBkaWN0aW9uYXJpZXMgYXJlIGNvbWJpbmVkLCBwcnVuZWQg YW5kIHNvcnRlZCwgQHZhbHVle0dEQk59CisrY3JlYXRlcyBhbiBpdGVyYXRvciB3aGljaCB3cmFw cyBlYWNoIGZyYW1lIGluIHRoZSBjYWxsIHN0YWNrIGluIGEKKytAY29kZXtGcmFtZURlY29yYXRv cn0gb2JqZWN0LCBhbmQgY2FsbHMgZWFjaCBmaWx0ZXIgaW4gb3JkZXIuICBUaGUKKytvdXRwdXQg ZnJvbSB0aGUgcHJldmlvdXMgZmlsdGVyIHdpbGwgYWx3YXlzIGJlIHRoZSBpbnB1dCB0byB0aGUg bmV4dAorK2ZpbHRlciwgYW5kIHNvIG9uLgorKworK0ZyYW1lIGZpbHRlcnMgaGF2ZSBhIG1hbmRh dG9yeSBpbnRlcmZhY2Ugd2hpY2ggZWFjaCBmcmFtZSBmaWx0ZXIgbXVzdAorK2ltcGxlbWVudCwg ZGVmaW5lZCBoZXJlOgorKworK0BkZWZ1biBGcmFtZUZpbHRlci5maWx0ZXIgKGl0ZXJhdG9yKQor K0B2YWx1ZXtHREJOfSB3aWxsIGNhbGwgdGhpcyBtZXRob2Qgb24gYSBmcmFtZSBmaWx0ZXIgd2hl biBpdCBoYXMKKytyZWFjaGVkIHRoZSBvcmRlciBpbiB0aGUgcHJpb3JpdHkgbGlzdCBmb3IgdGhh dCBmaWx0ZXIuCisrCisrRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZSBmb3VyIGZyYW1lIGZpbHRl cnM6CisrCisrQHNtYWxsZXhhbXBsZQorK05hbWUgICAgICAgICBQcmlvcml0eQorKworK0ZpbHRl cjEgICAgICA1CisrRmlsdGVyMiAgICAgIDEwCisrRmlsdGVyMyAgICAgIDEwMAorK0ZpbHRlcjQg ICAgICAxCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGUgb3JkZXIgdGhhdCB0aGUgZnJhbWUg ZmlsdGVycyB3aWxsIGJlIGNhbGxlZCBpczoKKysKKytAc21hbGxleGFtcGxlCisrRmlsdGVyMyAt PiBGaWx0ZXIyIC0+IEZpbHRlcjEgLT4gRmlsdGVyNAorK0BlbmQgc21hbGxleGFtcGxlCisrCisr Tm90ZSB0aGF0IHRoZSBvdXRwdXQgZnJvbSBAY29kZXtGaWx0ZXIzfSBpcyBwYXNzZWQgdG8gdGhl IGlucHV0IG9mCisrQGNvZGV7RmlsdGVyMn0sIGFuZCBzbyBvbi4KKysKKytUaGlzIEBjb2Rle2Zp bHRlcn0gbWV0aG9kIGlzIHBhc3NlZCBhIFB5dGhvbiBpdGVyYXRvci4gIFRoaXMgaXRlcmF0b3IK Kytjb250YWlucyBhIHNlcXVlbmNlIG9mIGZyYW1lIGRlY29yYXRvcnMgdGhhdCB3cmFwIGVhY2gK KytAY29kZXtnZGIuRnJhbWV9LCBvciBhIGZyYW1lIGRlY29yYXRvciB0aGF0IHdyYXBzIGFub3Ro ZXIgZnJhbWUKKytkZWNvcmF0b3IuICBUaGUgZmlyc3QgZmlsdGVyIHRoYXQgaXMgZXhlY3V0ZWQg aW4gdGhlIHNlcXVlbmNlIG9mIGZyYW1lCisrZmlsdGVycyB3aWxsIHJlY2VpdmUgYW4gaXRlcmF0 b3IgZW50aXJlbHkgY29tcHJpc2VkIG9mIGRlZmF1bHQKKytAY29kZXtGcmFtZURlY29yYXRvcn0g b2JqZWN0cy4gIEhvd2V2ZXIsIGFmdGVyIGVhY2ggZnJhbWUgZmlsdGVyIGlzCisrZXhlY3V0ZWQs IHRoZSBwcmV2aW91cyBmcmFtZSBmaWx0ZXIgbWF5IGhhdmUgd3JhcHBlZCBzb21lIG9yIGFsbCBv ZgorK3RoZSBmcmFtZSBkZWNvcmF0b3JzIHdpdGggdGhlaXIgb3duIGZyYW1lIGRlY29yYXRvci4g IEFzIGZyYW1lCisrZGVjb3JhdG9ycyBtdXN0IGFsc28gY29uZm9ybSB0byBhIG1hbmRhdG9yeSBp bnRlcmZhY2UsIHRoZXNlCisrZGVjb3JhdG9ycyBjYW4gYmUgYXNzdW1lZCB0byBhY3QgaW4gYSB1 bmlmb3JtIG1hbm5lciAoQHB4cmVme0ZyYW1lCisrRGVjb3JhdG9yIEFQSX0pLgorKworK1RoaXMg bWV0aG9kIG11c3QgcmV0dXJuIGFuIG9iamVjdCBjb25mb3JtaW5nIHRvIHRoZSBQeXRob24gaXRl cmF0b3IKKytwcm90b2NvbC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmF0b3IgbXVzdCBiZSBhbiBv YmplY3QgY29uZm9ybWluZyB0bworK3RoZSBmcmFtZSBkZWNvcmF0b3IgaW50ZXJmYWNlLiAgSWYg YSBmcmFtZSBmaWx0ZXIgZG9lcyBub3Qgd2lzaCB0bworK3BlcmZvcm0gYW55IG9wZXJhdGlvbnMg b24gdGhpcyBpdGVyYXRvciwgaXQgc2hvdWxkIHJldHVybiB0aGF0CisraXRlcmF0b3IgdW50b3Vj aGVkLgorKworK1RoaXMgbWV0aG9kIGlzIG5vdCBvcHRpb25hbC4gIElmIGl0IGRvZXMgbm90IGV4 aXN0LCBAdmFsdWV7R0RCTn0gd2lsbAorK3JhaXNlIGFuZCBwcmludCBhbiBlcnJvci4KKytAZW5k IGRlZnVuCisrCisrQGRlZnZhciBGcmFtZUZpbHRlci5uYW1lCisrVGhlIEBjb2Rle25hbWV9IGF0 dHJpYnV0ZSBtdXN0IGJlIFB5dGhvbiBzdHJpbmcgd2hpY2ggY29udGFpbnMgdGhlCisrbmFtZSBv ZiB0aGUgZmlsdGVyIGRpc3BsYXllZCBieSBAdmFsdWV7R0RCTn0gKEBweHJlZntGcmFtZSBGaWx0 ZXIKKytNYW5hZ2VtZW50fSkuICBUaGlzIGF0dHJpYnV0ZSBtYXkgY29udGFpbiBhbnkgY29tYmlu YXRpb24gb2YgbGV0dGVycworK29yIG51bWJlcnMuICBDYXJlIHNob3VsZCBiZSB0YWtlbiB0byBl bnN1cmUgdGhhdCBpdCBpcyB1bmlxdWUuICBUaGlzCisrYXR0cmlidXRlIGlzIG1hbmRhdG9yeS4K KytAZW5kIGRlZnZhcgorKworK0BkZWZ2YXIgRnJhbWVGaWx0ZXIuZW5hYmxlZAorK1RoZSBAY29k ZXtlbmFibGVkfSBhdHRyaWJ1dGUgbXVzdCBiZSBQeXRob24gYm9vbGVhbi4gIFRoaXMgYXR0cmli dXRlCisraW5kaWNhdGVzIHRvIEB2YWx1ZXtHREJOfSB3aGV0aGVyIHRoZSBmcmFtZSBmaWx0ZXIg aXMgZW5hYmxlZCwgYW5kCisrc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBmcmFtZSBmaWx0ZXJz IGFyZSBleGVjdXRlZC4gIElmCisrQGNvZGV7ZW5hYmxlZH0gaXMgQGNvZGV7VHJ1ZX0sIHRoZW4g dGhlIGZyYW1lIGZpbHRlciB3aWxsIGJlIGV4ZWN1dGVkCisrd2hlbiBhbnkgb2YgdGhlIGJhY2t0 cmFjZSBjb21tYW5kcyBkZXRhaWxlZCBlYXJsaWVyIGluIHRoaXMgY2hhcHRlcgorK2FyZSBleGVj dXRlZC4gIElmIEBjb2Rle2VuYWJsZWR9IGlzIEBjb2Rle0ZhbHNlfSwgdGhlbiB0aGUgZnJhbWUK KytmaWx0ZXIgd2lsbCBub3QgYmUgZXhlY3V0ZWQuICBUaGlzIGF0dHJpYnV0ZSBpcyBtYW5kYXRv cnkuCisrQGVuZCBkZWZ2YXIKKysKKytAZGVmdmFyIEZyYW1lRmlsdGVyLnByaW9yaXR5CisrVGhl IEBjb2Rle3ByaW9yaXR5fSBhdHRyaWJ1dGUgbXVzdCBiZSBQeXRob24gaW50ZWdlci4gIFRoaXMg YXR0cmlidXRlCisrY29udHJvbHMgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiBpbiByZWxhdGlvbiB0 byBvdGhlciBmcmFtZSBmaWx0ZXJzLgorK1RoZXJlIGFyZSBubyBpbXBvc2VkIGxpbWl0cyBvbiB0 aGUgcmFuZ2Ugb2YgQGNvZGV7cHJpb3JpdHl9IG90aGVyIHRoYW4KKytpdCBtdXN0IGJlIGEgdmFs aWQgaW50ZWdlci4gIFRoZSBoaWdoZXIgdGhlIEBjb2Rle3ByaW9yaXR5fSBhdHRyaWJ1dGUsCisr dGhlIHNvb25lciB0aGUgZnJhbWUgZmlsdGVyIHdpbGwgYmUgZXhlY3V0ZWQgaW4gcmVsYXRpb24g dG8gb3RoZXIKKytmcmFtZSBmaWx0ZXJzLiAgQWx0aG91Z2ggQGNvZGV7cHJpb3JpdHl9IGNhbiBi ZSBuZWdhdGl2ZSwgaXQgaXMKKytyZWNvbW1lbmRlZCBwcmFjdGljZSB0byBhc3N1bWUgemVybyBp cyB0aGUgbG93ZXN0IHByaW9yaXR5IHRoYXQgYQorK2ZyYW1lIGZpbHRlciBjYW4gYmUgYXNzaWdu ZWQuICBGcmFtZSBmaWx0ZXJzIHRoYXQgaGF2ZSB0aGUgc2FtZQorK3ByaW9yaXR5IGFyZSBleGVj dXRlZCBpbiB1bnNvcnRlZCBvcmRlciBpbiB0aGF0IHByaW9yaXR5IHNsb3QuICBUaGlzCisrYXR0 cmlidXRlIGlzIG1hbmRhdG9yeS4KKytAZW5kIGRlZnZhcgorKworK0Bub2RlIEZyYW1lIERlY29y YXRvciBBUEkKKytAc3Vic3Vic2VjdGlvbiBEZWNvcmF0aW5nIEZyYW1lcy4KKytAY2luZGV4IGZy YW1lIGRlY29yYXRvciBhcGkKKysKKytGcmFtZSBkZWNvcmF0b3JzIGFyZSBzaXN0ZXIgb2JqZWN0 cyB0byBmcmFtZSBmaWx0ZXJzIChAcHhyZWZ7RnJhbWUKKytGaWx0ZXIgQVBJfSkuICBGcmFtZSBk ZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGJ5IGEgZnJhbWUgZmlsdGVyIGFuZCBjYW4KKytvbmx5IGJl IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBmcmFtZSBmaWx0ZXJzLgorKworK1RoZSBwdXJwb3Nl IG9mIGEgZnJhbWUgZGVjb3JhdG9yIGlzIHRvIGN1c3RvbWl6ZSB0aGUgcHJpbnRlZCBjb250ZW50 Cisrb2YgZWFjaCBAY29kZXtnZGIuRnJhbWV9IGluIGNvbW1hbmRzIHdoZXJlIGZyYW1lIGZpbHRl cnMgYXJlIGV4ZWN1dGVkLgorK1RoaXMgY29uY2VwdCBpcyBjYWxsZWQgZGVjb3JhdGluZyBhIGZy YW1lLiAgRnJhbWUgZGVjb3JhdG9ycyBkZWNvcmF0ZQorK2EgQGNvZGV7Z2RiLkZyYW1lfSB3aXRo IFB5dGhvbiBjb2RlIGNvbnRhaW5lZCB3aXRoaW4gZWFjaCBBUEkgY2FsbC4KKytUaGlzIHNlcGFy YXRlcyB0aGUgYWN0dWFsIGRhdGEgY29udGFpbmVkIGluIGEgQGNvZGV7Z2RiLkZyYW1lfSBmcm9t CisrdGhlIGRlY29yYXRlZCBkYXRhIHByb2R1Y2VkIGJ5IGEgZnJhbWUgZGVjb3JhdG9yLiAgVGhp cyBhYnN0cmFjdGlvbiBpcworK25lY2Vzc2FyeSB0byBtYWludGFpbiBpbnRlZ3JpdHkgb2YgdGhl IGRhdGEgY29udGFpbmVkIGluIGVhY2gKKytAY29kZXtnZGIuRnJhbWV9LgorKworK0ZyYW1lIGRl Y29yYXRvcnMgaGF2ZSBhIG1hbmRhdG9yeSBpbnRlcmZhY2UsIGRlZmluZWQgYmVsb3cuCisrCisr QHZhbHVle0dEQk59IGFscmVhZHkgY29udGFpbnMgYSBmcmFtZSBkZWNvcmF0b3IgY2FsbGVkCisr QGNvZGV7RnJhbWVEZWNvcmF0b3J9LiAgVGhpcyBjb250YWlucyBzdWJzdGFudGlhbCBhbW91bnRz IG9mCisrYm9pbGVycGxhdGUgY29kZSB0byBkZWNvcmF0ZSB0aGUgY29udGVudCBvZiBhIEBjb2Rl e2dkYi5GcmFtZX0uICBJdCBpcworK3JlY29tbWVuZGVkIHRoYXQgb3RoZXIgZnJhbWUgZGVjb3Jh dG9ycyBpbmhlcml0IGFuZCBleHRlbmQgdGhpcworK29iamVjdCwgYW5kIG9ubHkgdG8gb3ZlcnJp ZGUgdGhlIG1ldGhvZHMgbmVlZGVkLgorKworK0BkZWZ1biBGcmFtZURlY29yYXRvci5lbGlkZWQg KHNlbGYpCisrCisrVGhlIEBjb2Rle2VsaWRlZH0gbWV0aG9kIGdyb3VwcyBmcmFtZXMgdG9nZXRo ZXIgaW4gYSBoaWVyYXJjaGljYWwKKytzeXN0ZW0uICBBbiBleGFtcGxlIHdvdWxkIGJlIGFuIGlu dGVycHJldGVyLCB3aGVyZSBtdWx0aXBsZSBsb3ctbGV2ZWwKKytmcmFtZXMgbWFrZSB1cCBhIHNp bmdsZSBjYWxsIGluIHRoZSBpbnRlcnByZXRlZCBsYW5ndWFnZS4gIEluIHRoaXMKKytleGFtcGxl LCB0aGUgZnJhbWUgZmlsdGVyIHdvdWxkIGVsaWRlIHRoZSBsb3ctbGV2ZWwgZnJhbWVzIGFuZCBw cmVzZW50CisrYSBzaW5nbGUgaGlnaC1sZXZlbCBmcmFtZSwgcmVwcmVzZW50aW5nIHRoZSBjYWxs IGluIHRoZSBpbnRlcnByZXRlZAorK2xhbmd1YWdlLCB0byB0aGUgdXNlci4KKysKKytUaGUgQGNv ZGV7ZWxpZGVkfSBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSBhbmQgdGhpcyBpdGVy YWJsZQorK211c3QgY29udGFpbiB0aGUgZnJhbWVzIHRoYXQgYXJlIGJlaW5nIGVsaWRlZCB3cmFw cGVkIGluIGEgc3VpdGFibGUKKytmcmFtZSBkZWNvcmF0b3IuICBJZiBubyBmcmFtZXMgYXJlIGJl aW5nIGVsaWRlZCB0aGlzIGZ1bmN0aW9uIG1heQorK3JldHVybiBhbiBlbXB0eSBpdGVyYWJsZSwg b3IgQGNvZGV7Tm9uZX0uICBFbGlkZWQgZnJhbWVzIGFyZSBpbmRlbnRlZAorK2Zyb20gbm9ybWFs IGZyYW1lcyBpbiBhIEBjb2Rle0NMSX0gYmFja3RyYWNlLCBvciBpbiB0aGUgY2FzZSBvZgorK0Bj b2Rle0dEQi9NSX0sIGFyZSBwbGFjZWQgaW4gdGhlIEBjb2Rle2NoaWxkcmVufSBmaWVsZCBvZiB0 aGUgZWxpZGluZworK2ZyYW1lLgorKworK0l0IGlzIHRoZSBmcmFtZSBmaWx0ZXIncyB0YXNrIHRv IGFsc28gZmlsdGVyIG91dCB0aGUgZWxpZGVkIGZyYW1lcyBmcm9tCisrdGhlIHNvdXJjZSBpdGVy YXRvci4gIFRoaXMgd2lsbCBhdm9pZCBwcmludGluZyB0aGUgZnJhbWUgdHdpY2UuCisrQGVuZCBk ZWZ1bgorKworK0BkZWZ1biBGcmFtZURlY29yYXRvci5mdW5jdGlvbiAoc2VsZikKKysKKytUaGlz IG1ldGhvZCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgZnJhbWUgdGhh dCBpcyB0bworK2JlIHByaW50ZWQuCisrCisrVGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYSBQeXRo b24gc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uLCBvcgorK0Bjb2Rle05vbmV9LgorKwor K0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBAY29kZXtOb25lfSwgQHZhbHVle0dEQk59IHdpbGwg bm90IHByaW50IGFueQorK2RhdGEgZm9yIHRoaXMgZmllbGQuCisrQGVuZCBkZWZ1bgorKworK0Bk ZWZ1biBGcmFtZURlY29yYXRvci5hZGRyZXNzIChzZWxmKQorKworK1RoaXMgbWV0aG9kIHJldHVy bnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIHRoYXQgaXMgdG8gYmUgcHJpbnRlZC4KKysKKytU aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhIFB5dGhvbiBudW1lcmljIGludGVnZXIgdHlwZSBvZiBz dWZmaWNpZW50Cisrc2l6ZSB0byBkZXNjcmliZSB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWUsIG9y IEBjb2Rle05vbmV9LgorKworK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIEBjb2Rle05vbmV9 LCBAdmFsdWV7R0RCTn0gd2lsbCBub3QgcHJpbnQKKythbnkgZGF0YSBmb3IgdGhpcyBmaWVsZC4K KytAZW5kIGRlZnVuCisrCisrQGRlZnVuIEZyYW1lRGVjb3JhdG9yLmZpbGVuYW1lIChzZWxmKQor KworK1RoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpbGVuYW1lIGFuZCBwYXRoIGFzc29jaWF0ZWQg d2l0aCB0aGlzIGZyYW1lLgorKworK1RoaXMgbWV0aG9kIG11c3QgcmV0dXJuIGEgUHl0aG9uIHN0 cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZSBhbmQKKyt0aGUgcGF0aCB0byB0aGUgb2JqZWN0 IGZpbGUgYmFja2luZyB0aGUgZnJhbWUsIG9yIEBjb2Rle05vbmV9LgorKworK0lmIHRoaXMgZnVu Y3Rpb24gcmV0dXJucyBhIEBjb2Rle05vbmV9LCBAdmFsdWV7R0RCTn0gd2lsbCBub3QgcHJpbnQK KythbnkgZGF0YSBmb3IgdGhpcyBmaWVsZC4KKytAZW5kIGRlZnVuCisrCisrQGRlZnVuIEZyYW1l RGVjb3JhdG9yLmxpbmUgKHNlbGYpOgorKworK1RoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxpbmUg bnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudAorK3Bvc2l0aW9uIHdpdGhpbiB0aGUg ZnVuY3Rpb24gYWRkcmVzc2VkIGJ5IHRoaXMgZnJhbWUuCisrCisrVGhpcyBtZXRob2QgbXVzdCBy ZXR1cm4gYSBQeXRob24gaW50ZWdlciB0eXBlLCBvciBAY29kZXtOb25lfS4KKysKKytJZiB0aGlz IGZ1bmN0aW9uIHJldHVybnMgYSBAY29kZXtOb25lfSwgQHZhbHVle0dEQk59IHdpbGwgbm90IHBy aW50CisrYW55IGRhdGEgZm9yIHRoaXMgZmllbGQuCisrQGVuZCBkZWZ1bgorKworK0BkZWZ1biBG cmFtZURlY29yYXRvci5mcmFtZV9hcmdzIChzZWxmKQorK0BhbmNob3J7ZnJhbWVfYXJnc30KKysK KytUaGlzIG1ldGhvZCBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSwgb3IgQGNvZGV7Tm9uZX0uICBS ZXR1cm5pbmcgYW4KKytlbXB0eSBpdGVyYWJsZSwgb3IgQGNvZGV7Tm9uZX0gbWVhbnMgZnJhbWUg YXJndW1lbnRzIHdpbGwgbm90IGJlCisrcHJpbnRlZCBmb3IgdGhpcyBmcmFtZS4gIFRoaXMgaXRl cmFibGUgbXVzdCBjb250YWluIG9iamVjdHMgdGhhdAorK2ltcGxlbWVudCB0d28gbWV0aG9kcywg ZGVzY3JpYmVkIGhlcmUuCisrCisrVGhpcyBvYmplY3QgbXVzdCBpbXBsZW1lbnQgYSBAY29kZXth cmd1bWVudH0gbWV0aG9kIHdoaWNoIHRha2VzIGEKKytzaW5nbGUgQGNvZGV7c2VsZn0gcGFyYW1l dGVyIGFuZCBtdXN0IHJldHVybiBhIEBjb2Rle2dkYi5TeW1ib2x9CisrKEBweHJlZntTeW1ib2xz IEluIFB5dGhvbn0pLCBvciBhIFB5dGhvbiBzdHJpbmcuICBUaGUgb2JqZWN0IG11c3QgYWxzbwor K2ltcGxlbWVudCBhIEBjb2Rle3ZhbHVlfSBtZXRob2Qgd2hpY2ggdGFrZXMgYSBzaW5nbGUgQGNv ZGV7c2VsZn0KKytwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgQGNvZGV7Z2RiLlZhbHVlfSAo QHB4cmVme1ZhbHVlcyBGcm9tCisrSW5mZXJpb3J9KSwgYSBQeXRob24gdmFsdWUsIG9yIEBjb2Rl e05vbmV9LiAgSWYgdGhlIEBjb2Rle3ZhbHVlfQorK21ldGhvZCByZXR1cm5zIEBjb2Rle05vbmV9 LCBhbmQgdGhlIEBjb2Rle2FyZ3VtZW50fSBtZXRob2QgcmV0dXJucyBhCisrQGNvZGV7Z2RiLlN5 bWJvbH0sIEB2YWx1ZXtHREJOfSB3aWxsIGxvb2stdXAgYW5kIHByaW50IHRoZSB2YWx1ZSBvZgor K3RoZSBAY29kZXtnZGIuU3ltYm9sfSBhdXRvbWF0aWNhbGx5LgorKworK0EgYnJpZWYgZXhhbXBs ZToKKysKKytAc21hbGxleGFtcGxlCisrY2xhc3MgU3ltVmFsdWVXcmFwcGVyKCk6CisrCisrICAg IGRlZiBfX2luaXRfXyhzZWxmLCBzeW1ib2wsIHZhbHVlKToKKysgICAgICAgIHNlbGYuc3ltID0g c3ltYm9sCisrICAgICAgICBzZWxmLnZhbCA9IHZhbHVlCisrCisrICAgIGRlZiB2YWx1ZShzZWxm KToKKysgICAgICAgIHJldHVybiBzZWxmLnZhbAorKworKyAgICBkZWYgc3ltYm9sKHNlbGYpOgor KyAgICAgICAgcmV0dXJuIHNlbGYuc3ltCisrCisrY2xhc3MgU29tZUZyYW1lRGVjb3JhdG9yKCkK KysuLi4KKysuLi4KKysgICAgZGVmIGZyYW1lX2FyZ3Moc2VsZik6CisrICAgICAgICBhcmdzID0g W10KKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBibG9jayA9IHNlbGYuaW5mZXJpb3JfZnJh bWUuYmxvY2soKQorKyAgICAgICAgZXhjZXB0OgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisr CisrICAgICAgICAjIEl0ZXJhdGUgb3ZlciBhbGwgc3ltYm9scyBpbiBhIGJsb2NrLiAgT25seSBh ZGQKKysgICAgICAgICMgc3ltYm9scyB0aGF0IGFyZSBhcmd1bWVudHMuCisrICAgICAgICBmb3Ig c3ltIGluIGJsb2NrOgorKyAgICAgICAgICAgIGlmIG5vdCBzeW0uaXNfYXJndW1lbnQ6CisrICAg ICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgYXJncy5hcHBlbmQoU3ltVmFsdWVX cmFwcGVyKHN5bSxOb25lKSkKKysKKysgICAgICAgICMgQWRkIGV4YW1wbGUgc3ludGhldGljIGFy Z3VtZW50LgorKyAgICAgICAgYXJncy5hcHBlbmQoU3ltVmFsdWVXcmFwcGVyKGBgZm9vJycsIDQy KSkKKysKKysgICAgICAgIHJldHVybiBhcmdzCisrQGVuZCBzbWFsbGV4YW1wbGUKKytAZW5kIGRl ZnVuCisrCisrQGRlZnVuIEZyYW1lRGVjb3JhdG9yLmZyYW1lX2xvY2FscyAoc2VsZikKKysKKytU aGlzIG1ldGhvZCBtdXN0IHJldHVybiBhbiBpdGVyYWJsZSBvciBAY29kZXtOb25lfS4gIFJldHVy bmluZyBhbgorK2VtcHR5IGl0ZXJhYmxlLCBvciBAY29kZXtOb25lfSBtZWFucyBmcmFtZSBsb2Nh bCBhcmd1bWVudHMgd2lsbCBub3QgYmUKKytwcmludGVkIGZvciB0aGlzIGZyYW1lLgorKworK1Ro ZSBvYmplY3QgaW50ZXJmYWNlLCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXMgc3RyYXRl Z2llcyBmb3IKKytyZWFkaW5nIGZyYW1lIGxvY2FscywgYW5kIHRoZSBleGFtcGxlIGFyZSBsYXJn ZWx5IHNpbWlsYXIgdG8gdGhvc2UKKytkZXNjcmliZWQgaW4gdGhlIEBjb2Rle2ZyYW1lX2FyZ3N9 IGZ1bmN0aW9uLCAoQHB4cmVme2ZyYW1lX2FyZ3MsLFRoZQorK2ZyYW1lIGZpbHRlciBmcmFtZV9h cmdzIGZ1bmN0aW9ufSkuICBCZWxvdyBpcyBhIG1vZGlmaWVkIGV4YW1wbGU6CisrCisrQHNtYWxs ZXhhbXBsZQorK2NsYXNzIFNvbWVGcmFtZURlY29yYXRvcigpCisrLi4uCisrLi4uCisrICAgIGRl ZiBmcmFtZV9sb2NhbHMoc2VsZik6CisrICAgICAgICB2YXJzID0gW10KKysgICAgICAgIHRyeToK KysgICAgICAgICAgICBibG9jayA9IHNlbGYuaW5mZXJpb3JfZnJhbWUuYmxvY2soKQorKyAgICAg ICAgZXhjZXB0OgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisrCisrICAgICAgICAjIEl0ZXJh dGUgb3ZlciBhbGwgc3ltYm9scyBpbiBhIGJsb2NrLiAgQWRkIGFsbAorKyAgICAgICAgIyBzeW1i b2xzLCBleGNlcHQgYXJndW1lbnRzLgorKyAgICAgICAgZm9yIHN5bSBpbiBibG9jazoKKysgICAg ICAgICAgICBpZiBzeW0uaXNfYXJndW1lbnQ6CisrICAgICAgICAgICAgICAgIGNvbnRpbnVlCisr ICAgICAgICAgICAgdmFycy5hcHBlbmQoU3ltVmFsdWVXcmFwcGVyKHN5bSxOb25lKSkKKysKKysg ICAgICAgICMgQWRkIGFuIGV4YW1wbGUgb2YgYSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUuCisr ICAgICAgICB2YXJzLmFwcGVuZChTeW1WYWx1ZVdyYXBwZXIoYGBiYXInJywgOTkpKQorKworKyAg ICAgICAgcmV0dXJuIHZhcnMKKytAZW5kIHNtYWxsZXhhbXBsZQorK0BlbmQgZGVmdW4KKysKKytA ZGVmdW4gRnJhbWVEZWNvcmF0b3IuaW5mZXJpb3JfZnJhbWUgKHNlbGYpOgorKworK1RoaXMgbWV0 aG9kIG11c3QgcmV0dXJuIHRoZSB1bmRlcmx5aW5nIEBjb2Rle2dkYi5GcmFtZX0gdGhhdCB0aGlz CisrZnJhbWUgZGVjb3JhdG9yIGlzIGRlY29yYXRpbmcuICBAdmFsdWV7R0RCTn0gcmVxdWlyZXMg dGhlIHVuZGVybHlpbmcKKytmcmFtZSBmb3IgaW50ZXJuYWwgZnJhbWUgaW5mb3JtYXRpb24gdG8g ZGV0ZXJtaW5lIGhvdyB0byBwcmludCBjZXJ0YWluCisrdmFsdWVzIHdoZW4gcHJpbnRpbmcgYSBm cmFtZS4KKytAZW5kIGRlZnVuCisrCisrQG5vZGUgV3JpdGluZyBhIEZyYW1lIEZpbHRlcgorK0Bz dWJzdWJzZWN0aW9uIFdyaXRpbmcgYSBGcmFtZSBGaWx0ZXIKKytAY2luZGV4IHdyaXRpbmcgYSBm cmFtZSBmaWx0ZXIKKysKKytUaGVyZSBhcmUgdGhyZWUgYmFzaWMgZWxlbWVudHMgdGhhdCBhIGZy YW1lIGZpbHRlciBtdXN0IGltcGxlbWVudDogaXQKKyttdXN0IGNvcnJlY3RseSBpbXBsZW1lbnQg dGhlIGRvY3VtZW50ZWQgaW50ZXJmYWNlIChAcHhyZWZ7RnJhbWUgRmlsdGVyCisrQVBJfSksIGl0 IG11c3QgcmVnaXN0ZXIgaXRzZWxmIHdpdGggQHZhbHVle0dEQk59LCBhbmQgZmluYWxseSwgaXQg bXVzdAorK2RlY2lkZSBpZiBpdCBpcyB0byB3b3JrIG9uIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IEB2 YWx1ZXtHREJOfS4gIEluIGFsbAorK2Nhc2VzLCB3aGV0aGVyIGl0IHdvcmtzIG9uIHRoZSBpdGVy YXRvciBvciBub3QsIGVhY2ggZnJhbWUgZmlsdGVyIG11c3QKKytyZXR1cm4gYW4gaXRlcmF0b3Iu ICBBIGJhcmUtYm9uZXMgZnJhbWUgZmlsdGVyIGZvbGxvd3MgdGhlIHBhdHRlcm4gaW4KKyt0aGUg Zm9sbG93aW5nIGV4YW1wbGUuCisrCisrQHNtYWxsZXhhbXBsZQorK2ltcG9ydCBnZGIKKysKKytj bGFzcyBGcmFtZUZpbHRlcigpOgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAg ICAjIEZyYW1lIGZpbHRlciBhdHRyaWJ1dGUgY3JlYXRpb24uCisrICAgICAgICAjCisrICAgICAg ICAjICduYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsdGVyIHRoYXQgR0RCIHdpbGwgZGlzcGxh eS4KKysgICAgICAgICMKKysgICAgICAgICMgJ3ByaW9yaXR5JyBpcyB0aGUgcHJpb3JpdHkgb2Yg dGhlIGZpbHRlciByZWxhdGl2ZSB0byBvdGhlcgorKyAgICAgICAgIyBmaWx0ZXJzLgorKyAgICAg ICAgIworKyAgICAgICAgIyAnZW5hYmxlZCcgaXMgYSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdo ZXRoZXIgdGhpcyBmaWx0ZXIgaXMKKysgICAgICAgICMgZW5hYmxlZCBhbmQgc2hvdWxkIGJlIGV4 ZWN1dGVkLgorKworKyAgICAgICAgc2VsZi5uYW1lID0gIkZvbyIKKysgICAgICAgIHNlbGYucHJp b3JpdHkgPSAxMDAKKysgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKKysKKysgICAgICAgICMg UmVnaXN0ZXIgdGhpcyBmcmFtZSBmaWx0ZXIgd2l0aCB0aGUgZ2xvYmFsIGZyYW1lX2ZpbHRlcnMK KysgICAgICAgICMgZGljdGlvbmFyeS4KKysgICAgICAgIGdkYi5mcmFtZV9maWx0ZXJzW3NlbGYu bmFtZV0gPSBzZWxmCisrCisrICAgIGRlZiBmaWx0ZXIoc2VsZiwgZnJhbWVfaXRlcik6CisrICAg ICAgICAjIEp1c3QgcmV0dXJuIHRoZSBpdGVyYXRvci4KKysgICAgICAgIHJldHVybiBmcmFtZV9p dGVyCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGUgZnJhbWUgZmlsdGVyIGluIHRoZSBleGFt cGxlIGFib3ZlIGltcGxlbWVudHMgdGhlIHRocmVlCisrcmVxdWlyZW1lbnRzIGZvciBhbGwgZnJh bWUgZmlsdGVycy4gIEl0IGltcGxlbWVudHMgdGhlIEFQSSwgc2VsZgorK3JlZ2lzdGVycywgYW5k IG1ha2VzIGEgZGVjaXNpb24gb24gdGhlIGl0ZXJhdG9yIChpbiB0aGlzIGNhc2UsIGl0IGp1c3QK KytyZXR1cm5zIHRoZSBpdGVyYXRvciB1bnRvdWNoZWQpLgorKworK1RoZSBmaXJzdCBzdGVwIGlz IGF0dHJpYnV0ZSBjcmVhdGlvbiBhbmQgYXNzaWdubWVudCwgYW5kIGFzIHNob3duIGluCisrdGhl IGNvbW1lbnRzIHRoZSBmaWx0ZXIgYXNzaWducyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6ICBA Y29kZXtuYW1lfSwKKytAY29kZXtwcmlvcml0eX0gYW5kIHdoZXRoZXIgdGhlIGZpbHRlciBzaG91 bGQgYmUgZW5hYmxlZCB3aXRoIHRoZQorK0Bjb2Rle2VuYWJsZWR9IGF0dHJpYnV0ZS4KKysKKytU aGUgc2Vjb25kIHN0ZXAgaXMgcmVnaXN0ZXJpbmcgdGhlIGZyYW1lIGZpbHRlciB3aXRoIHRoZSBk aWN0aW9uYXJ5IG9yCisrZGljdGlvbmFyaWVzIHRoYXQgdGhlIGZyYW1lIGZpbHRlciBoYXMgaW50 ZXJlc3QgaW4uICBBcyBzaG93biBpbiB0aGUKKytjb21tZW50cywgdGhpcyBmaWx0ZXIganVzdCBy ZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlIGdsb2JhbCBkaWN0aW9uYXJ5CisrQGNvZGV7Z2RiLmZy YW1lX2ZpbHRlcnN9LiAgQXMgbm90ZWQgZWFybGllciwgQGNvZGV7Z2RiLmZyYW1lX2ZpbHRlcnN9 CisraXMgYSBkaWN0aW9uYXJ5IHRoYXQgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIEBjb2Rle2dkYn0g bW9kdWxlIHdoZW4KKytAdmFsdWV7R0RCTn0gc3RhcnRzLiAgV2hhdCBkaWN0aW9uYXJ5IGEgZmls dGVyIHJlZ2lzdGVycyB3aXRoIGlzIGFuCisraW1wb3J0YW50IGNvbnNpZGVyYXRpb24uICBHZW5l cmFsbHksIGlmIGEgZmlsdGVyIGlzIHNwZWNpZmljIHRvIGEgc2V0Cisrb2YgY29kZSwgaXQgc2hv dWxkIGJlIHJlZ2lzdGVyZWQgZWl0aGVyIGluIHRoZSBAY29kZXtvYmpmaWxlfSBvcgorK0Bjb2Rl e3Byb2dzcGFjZX0gZGljdGlvbmFyaWVzIGFzIHRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBwcm9n cmFtCisrY3VycmVudGx5IGxvYWRlZCBpbiBAdmFsdWV7R0RCTn0uICBUaGUgZ2xvYmFsIGRpY3Rp b25hcnkgaXMgYWx3YXlzCisrcHJlc2VudCBpbiBAdmFsdWV7R0RCTn0gYW5kIGlzIG5ldmVyIHVu bG9hZGVkLiAgQW55IGZpbHRlcnMgcmVnaXN0ZXJlZAorK3dpdGggdGhlIGdsb2JhbCBkaWN0aW9u YXJ5IHdpbGwgZXhpc3QgdW50aWwgQHZhbHVle0dEQk59IGV4aXRzLiAgVG8KKythdm9pZCBmaWx0 ZXJzIHRoYXQgbWF5IGNvbmZsaWN0LCBpdCBpcyBnZW5lcmFsbHkgYmV0dGVyIHRvIHJlZ2lzdGVy CisrZnJhbWUgZmlsdGVycyBhZ2FpbnN0IHRoZSBkaWN0aW9uYXJpZXMgdGhhdCBtb3JlIGNsb3Nl bHkgYWxpZ24gd2l0aAorK3RoZSB1c2FnZSBvZiB0aGUgZmlsdGVyIGN1cnJlbnRseSBpbiBxdWVz dGlvbi4gIEB4cmVme1B5dGhvbgorK0F1dG8tbG9hZGluZ30sIGZvciBmdXJ0aGVyIGluZm9ybWF0 aW9uIG9uIGF1dG8tbG9hZGluZyBQeXRob24gc2NyaXB0cy4KKysKKytAdmFsdWV7R0RCTn0gdGFr ZXMgYSBoYW5kcy1vZmYgYXBwcm9hY2ggdG8gZnJhbWUgZmlsdGVyIHJlZ2lzdHJhdGlvbiwKKyt0 aGVyZWZvcmUgaXQgaXMgdGhlIGZyYW1lIGZpbHRlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3Vy ZQorK3JlZ2lzdHJhdGlvbiBoYXMgb2NjdXJyZWQsIGFuZCB0aGF0IGFueSBleGNlcHRpb25zIGFy ZSBoYW5kbGVkCisrYXBwcm9wcmlhdGVseS4gIEluIHBhcnRpY3VsYXIsIHlvdSBtYXkgd2lzaCB0 byBoYW5kbGUgZXhjZXB0aW9ucworK3JlbGF0aW5nIHRvIFB5dGhvbiBkaWN0aW9uYXJ5IGtleSB1 bmlxdWVuZXNzLiAgSXQgaXMgbWFuZGF0b3J5IHRoYXQKKyt0aGUgZGljdGlvbmFyeSBrZXkgaXMg dGhlIHNhbWUgYXMgZnJhbWUgZmlsdGVyJ3MgQGNvZGV7bmFtZX0KKythdHRyaWJ1dGUuICBXaGVu IGEgdXNlciBtYW5hZ2VzIGZyYW1lIGZpbHRlcnMgKEBweHJlZntGcmFtZSBGaWx0ZXIKKytNYW5h Z2VtZW50fSksIHRoZSBuYW1lcyBAdmFsdWV7R0RCTn0gd2lsbCBkaXNwbGF5IGFyZSB0aG9zZSBj b250YWluZWQKKytpbiB0aGUgQGNvZGV7bmFtZX0gYXR0cmlidXRlLgorKworK1RoZSBmaW5hbCBz dGVwIG9mIHRoaXMgZXhhbXBsZSBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisrQGNvZGV7 ZmlsdGVyfSBtZXRob2QuICBBcyBzaG93biBpbiB0aGUgZXhhbXBsZSBjb21tZW50cywgd2UgZGVm aW5lIHRoZQorK0Bjb2Rle2ZpbHRlcn0gbWV0aG9kIGFuZCBub3RlIHRoYXQgdGhlIG1ldGhvZCBt dXN0IHRha2UgYW4gaXRlcmF0b3IsCisrYW5kIGFsc28gbXVzdCByZXR1cm4gYW4gaXRlcmF0b3Iu ICBJbiB0aGlzIGJhcmUtYm9uZXMgZXhhbXBsZSwgdGhlCisrZnJhbWUgZmlsdGVyIGlzIG5vdCB2 ZXJ5IHVzZWZ1bCBhcyBpdCBqdXN0IHJldHVybnMgdGhlIGl0ZXJhdG9yCisrdW50b3VjaGVkLiAg SG93ZXZlciB0aGlzIGlzIGEgdmFsaWQgb3BlcmF0aW9uIGZvciBmcmFtZSBmaWx0ZXJzIHRoYXQK KytoYXZlIHRoZSBAY29kZXtlbmFibGVkfSBhdHRyaWJ1dGUgc2V0LCBidXQgZGVjaWRlIG5vdCB0 byBvcGVyYXRlIG9uCisrYW55IGZyYW1lcy4KKysKKytJbiB0aGUgbmV4dCBleGFtcGxlLCB0aGUg ZnJhbWUgZmlsdGVyIG9wZXJhdGVzIG9uIGFsbCBmcmFtZXMgYW5kCisrdXRpbGl6ZXMgYSBmcmFt ZSBkZWNvcmF0b3IgdG8gcGVyZm9ybSBzb21lIHdvcmsgb24gdGhlIGZyYW1lcy4KKytAeHJlZntG cmFtZSBEZWNvcmF0b3IgQVBJfSwgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIGZyYW1l CisrZGVjb3JhdG9yIGludGVyZmFjZS4KKysKKytUaGlzIGV4YW1wbGUgd29ya3Mgb24gaW5saW5l ZCBmcmFtZXMuICBJdCBoaWdobGlnaHRzIGZyYW1lcyB3aGljaCBhcmUKKytpbmxpbmVkIGJ5IHRh Z2dpbmcgdGhlbSB3aXRoIGFuIGBgW2lubGluZWRdJycgdGFnLiAgQnkgYXBwbHlpbmcgYQorK2Zy YW1lIGRlY29yYXRvciB0byBhbGwgZnJhbWVzIHdpdGggdGhlIFB5dGhvbiBAY29kZXtpdGVydG9v bHMgaW1hcH0KKyttZXRob2QsIHRoZSBleGFtcGxlIGRlZmVycyBhY3Rpb25zIHRvIHRoZSBmcmFt ZSBkZWNvcmF0b3IuICBGcmFtZQorK2RlY29yYXRvcnMgYXJlIG9ubHkgcHJvY2Vzc2VkIHdoZW4g QHZhbHVle0dEQk59IHByaW50cyB0aGUgYmFja3RyYWNlLgorKworK1RoaXMgaW50cm9kdWNlcyBh IG5ldyBkZWNpc2lvbiBtYWtpbmcgdG9waWM6IHdoZXRoZXIgdG8gcGVyZm9ybQorK2RlY2lzaW9u IG1ha2luZyBvcGVyYXRpb25zIGF0IHRoZSBmaWx0ZXJpbmcgc3RlcCwgb3IgYXQgdGhlIHByaW50 aW5nCisrc3RlcC4gIEluIHRoaXMgZXhhbXBsZSdzIGFwcHJvYWNoLCBpdCBkb2VzIG5vdCBwZXJm b3JtIGFueSBmaWx0ZXJpbmcKKytkZWNpc2lvbnMgYXQgdGhlIGZpbHRlcmluZyBzdGVwIGJleW9u ZCBtYXBwaW5nIGEgZnJhbWUgZGVjb3JhdG9yIHRvCisrZWFjaCBmcmFtZS4gIFRoaXMgYWxsb3dz IHRoZSBhY3R1YWwgZGVjaXNpb24gbWFraW5nIHRvIGJlIHBlcmZvcm1lZAorK3doZW4gZWFjaCBm cmFtZSBpcyBwcmludGVkLiAgVGhpcyBpcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiwgYW5k Cisrd2VsbCB3b3J0aCByZWZsZWN0aW5nIHVwb24gd2hlbiBkZXNpZ25pbmcgYSBmcmFtZSBmaWx0 ZXIuICBBbiBpc3N1ZQorK3RoYXQgZnJhbWUgZmlsdGVycyBzaG91bGQgYXZvaWQgaXMgdW53aW5k aW5nIHRoZSBzdGFjayBpZiBwb3NzaWJsZS4KKytTb21lIHN0YWNrcyBjYW4gcnVuIHZlcnkgZGVl cCwgaW50byB0aGUgdGVucyBvZiB0aG91c2FuZHMgaW4gc29tZQorK2Nhc2VzLiAgVG8gc2VhcmNo IGV2ZXJ5IGZyYW1lIHRvIGRldGVybWluZSBpZiBpdCBpcyBpbmxpbmVkIGFoZWFkIG9mCisrdGlt ZSBtYXkgYmUgdG9vIGV4cGVuc2l2ZSBhdCB0aGUgZmlsdGVyaW5nIHN0ZXAuICBUaGUgZnJhbWUg ZmlsdGVyCisrY2Fubm90IGtub3cgaG93IG1hbnkgZnJhbWVzIGl0IGhhcyB0byBpdGVyYXRlIG92 ZXIsIGFuZCBpdCB3b3VsZCBoYXZlCisrdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYWxsLiAgVGhp cyBlbmRzIHVwIGR1cGxpY2F0aW5nIGVmZm9ydCBhcworK0B2YWx1ZXtHREJOfSBwZXJmb3JtcyB0 aGlzIGl0ZXJhdGlvbiB3aGVuIGl0IHByaW50cyB0aGUgZnJhbWVzLgorKworK0luIHRoaXMgZXhh bXBsZSBkZWNpc2lvbiBtYWtpbmcgY2FuIGJlIGRlZmVycmVkIHRvIHRoZSBwcmludGluZyBzdGVw LgorK0FzIGVhY2ggZnJhbWUgaXMgcHJpbnRlZCwgdGhlIGZyYW1lIGRlY29yYXRvciBjYW4gZXhh bWluZSBlYWNoIGZyYW1lCisraW4gdHVybiB3aGVuIEB2YWx1ZXtHREJOfSBpdGVyYXRlcy4gIEZy b20gYSBwZXJmb3JtYW5jZSB2aWV3cG9pbnQsCisrdGhpcyBpcyB0aGUgbW9zdCBhcHByb3ByaWF0 ZSBkZWNpc2lvbiB0byBtYWtlIGFzIGl0IGF2b2lkcyBkdXBsaWNhdGluZworK3RoZSBlZmZvcnQg dGhhdCB0aGUgcHJpbnRpbmcgc3RlcCB3b3VsZCB1bmRlcnRha2UgYW55d2F5LiAgQWxzbywgaWYK Kyt0aGVyZSBhcmUgbWFueSBmcmFtZSBmaWx0ZXJzIHVud2luZGluZyB0aGUgc3RhY2sgZHVyaW5n IGZpbHRlcmluZywgaXQKKytjYW4gc3Vic3RhbnRpYWxseSBkZWxheSB0aGUgcHJpbnRpbmcgb2Yg dGhlIGJhY2t0cmFjZSB3aGljaCB3aWxsCisrcmVzdWx0IGluIGxhcmdlIG1lbW9yeSB1c2FnZSwg YW5kIGEgcG9vciB1c2VyIGV4cGVyaWVuY2UuCisrCisrQHNtYWxsZXhhbXBsZQorK2NsYXNzIElu bGluZUZpbHRlcigpOgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzZWxm Lm5hbWUgPSAiSW5saW5lZEZyYW1lRmlsdGVyIgorKyAgICAgICAgc2VsZi5wcmlvcml0eSA9IDEw MAorKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQorKyAgICAgICAgZ2RiLmZyYW1lX2ZpbHRl cnNbc2VsZi5uYW1lXSA9IHNlbGYKKysKKysgICAgZGVmIGZpbHRlcihzZWxmLCBmcmFtZV9pdGVy KToKKysgICAgICAgIGZyYW1lX2l0ZXIgPSBpdGVydG9vbHMuaW1hcChJbmxpbmVkRnJhbWVEZWNv cmF0b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfaXRlcikK KysgICAgICAgIHJldHVybiBmcmFtZV9pdGVyCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGlz IGZyYW1lIGZpbHRlciBpcyBzb21ld2hhdCBzaW1pbGFyIHRvIHRoZSBlYXJsaWVyIGV4YW1wbGUs IGV4Y2VwdAorK3RoYXQgdGhlIEBjb2Rle2ZpbHRlcn0gbWV0aG9kIGFwcGxpZXMgYSBmcmFtZSBk ZWNvcmF0b3Igb2JqZWN0IGNhbGxlZAorK0Bjb2Rle0lubGluZWRGcmFtZURlY29yYXRvcn0gdG8g ZWFjaCBlbGVtZW50IGluIHRoZSBpdGVyYXRvci4gIFRoZQorK0Bjb2Rle2ltYXB9IFB5dGhvbiBt ZXRob2QgaXMgbGlnaHQtd2VpZ2h0LiAgSXQgZG9lcyBub3QgcHJvYWN0aXZlbHkKKytpdGVyYXRl IG92ZXIgdGhlIGl0ZXJhdG9yLCBidXQgcmF0aGVyIGNyZWF0ZXMgYSBuZXcgaXRlcmF0b3Igd2hp Y2gKKyt3cmFwcyB0aGUgZXhpc3Rpbmcgb25lLgorKworK0JlbG93IGlzIHRoZSBmcmFtZSBkZWNv cmF0b3IgZm9yIHRoaXMgZXhhbXBsZS4KKysKKytAc21hbGxleGFtcGxlCisrY2xhc3MgSW5saW5l ZEZyYW1lRGVjb3JhdG9yKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5pdF9fKHNl bGYsIGZvYmopOgorKyAgICAgICAgc3VwZXIoSW5saW5lZEZyYW1lRGVjb3JhdG9yLCBzZWxmKS5f X2luaXRfXyhmb2JqKQorKworKyAgICBkZWYgZnVuY3Rpb24oc2VsZik6CisrICAgICAgICBmcmFt ZSA9IGZvYmouaW5mZXJpb3JfZnJhbWUoKQorKyAgICAgICAgbmFtZSA9IHN0cihmcmFtZS5uYW1l KCkpCisrCisrICAgICAgICBpZiBmcmFtZS50eXBlKCkgPT0gZ2RiLklOTElORV9GUkFNRToKKysg ICAgICAgICAgICBuYW1lID0gbmFtZSArICIgW2lubGluZWRdIgorKworKyAgICAgICAgcmV0dXJu IG5hbWUKKytAZW5kIHNtYWxsZXhhbXBsZQorKworK1RoaXMgZnJhbWUgZGVjb3JhdG9yIG9ubHkg ZGVmaW5lcyBhbmQgb3ZlcnJpZGVzIHRoZSBAY29kZXtmdW5jdGlvbn0KKyttZXRob2QuICBJdCBs ZXRzIHRoZSBzdXBwbGllZCBAY29kZXtGcmFtZURlY29yYXRvcn0sIHdoaWNoIGlzIHNoaXBwZWQK Kyt3aXRoIEB2YWx1ZXtHREJOfSwgcGVyZm9ybSB0aGUgb3RoZXIgd29yayBhc3NvY2lhdGVkIHdp dGggcHJpbnRpbmcKKyt0aGlzIGZyYW1lLgorKworK1RoZSBjb21iaW5hdGlvbiBvZiB0aGVzZSB0 d28gb2JqZWN0cyBjcmVhdGUgdGhpcyBvdXRwdXQgZnJvbSBhCisrYmFja3RyYWNlOgorKworK0Bz bWFsbGV4YW1wbGUKKysjMCAgMHgwMDQwMDRlMCBpbiBiYXIgKCkgYXQgaW5saW5lLmM6MTEKKysj MSAgMHgwMDQwMDU2NiBpbiBtYXggW2lubGluZWRdIChiPTYsIGE9MTIpIGF0IGlubGluZS5jOjIx CisrIzIgIDB4MDA0MDA1NjYgaW4gbWFpbiAoKSBhdCBpbmxpbmUuYzozMQorK0BlbmQgc21hbGxl eGFtcGxlCisrCisrU28gaW4gdGhlIGNhc2Ugb2YgdGhpcyBleGFtcGxlLCBhIGZyYW1lIGRlY29y YXRvciBpcyBhcHBsaWVkIHRvIGFsbAorK2ZyYW1lcywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRo ZXkgbWF5IGJlIGlubGluZWQgb3Igbm90LiAgQXMKKytAdmFsdWV7R0RCTn0gaXRlcmF0ZXMgb3Zl ciB0aGUgaXRlcmF0b3IgcHJvZHVjZWQgYnkgdGhlIGZyYW1lIGZpbHRlcnMsCisrQHZhbHVle0dE Qk59IGV4ZWN1dGVzIGVhY2ggZnJhbWUgZGVjb3JhdG9yIHdoaWNoIHRoZW4gbWFrZXMgYSBkZWNp c2lvbgorK29uIHdoYXQgdG8gcHJpbnQgaW4gdGhlIEBjb2Rle2Z1bmN0aW9ufSBjYWxsYmFjay4g IFVzaW5nIGEgc3RyYXRlZ3kKKytsaWtlIHRoaXMgaXMgYSB3YXkgdG8gZGVmZXIgZGVjaXNpb25z IG9uIHRoZSBmcmFtZSBjb250ZW50IHRvIHByaW50aW5nCisrdGltZS4KKysKKytAc3ViaGVhZGlu ZyBFbGlkaW5nIEZyYW1lcworKworK0l0IG1pZ2h0IGJlIHRoYXQgdGhlIGFib3ZlIGV4YW1wbGUg aXMgbm90IGRlc2lyYWJsZSBmb3IgcmVwcmVzZW50aW5nCisraW5saW5lZCBmcmFtZXMsIGFuZCBh IGhpZXJhcmNoaWNhbCBhcHByb2FjaCBtYXkgYmUgcHJlZmVycmVkLiAgSWYgd2UKKyt3YW50IHRv IGhpZXJhcmNoaWNhbGx5IHJlcHJlc2VudCBmcmFtZXMsIHRoZSBAY29kZXtlbGlkZWR9IGZyYW1l CisrZGVjb3JhdG9yIGludGVyZmFjZSBtaWdodCBiZSBwcmVmZXJhYmxlLgorKworK1RoaXMgZXhh bXBsZSBhcHByb2FjaGVzIHRoZSBpc3N1ZSB3aXRoIHRoZSBAY29kZXtlbGlkZWR9IG1ldGhvZC4g IFRoaXMKKytleGFtcGxlIGlzIHF1aXRlIGxvbmcsIGJ1dCB2ZXJ5IHNpbXBsaXN0aWMuICBJdCBp cyBvdXQtb2Ytc2NvcGUgZm9yCisrdGhpcyBzZWN0aW9uIHRvIHdyaXRlIGEgY29tcGxldGUgZXhh bXBsZSB0aGF0IGNvbXByZWhlbnNpdmVseSBjb3ZlcnMKKythbGwgYXBwcm9hY2hlcyBvZiBmaW5k aW5nIGFuZCBwcmludGluZyBpbmxpbmVkIGZyYW1lcy4gIEhvd2V2ZXIsIHRoaXMKKytleGFtcGxl IGlsbHVzdHJhdGVzIHRoZSBhcHByb2FjaCBhbiBhdXRob3IgbWlnaHQgdXNlLgorKworK1RoaXMg ZXhhbXBsZSBjb21wcmlzZXMgb2YgdGhyZWUgc2VjdGlvbnMuCisrCisrQHNtYWxsZXhhbXBsZQor K2NsYXNzIElubGluZUZyYW1lRmlsdGVyKCk6CisrCisrICAgIGRlZiBfX2luaXRfXyhzZWxmKToK KysgICAgICAgIHNlbGYubmFtZSA9ICJJbmxpbmVkRnJhbWVGaWx0ZXIiCisrICAgICAgICBzZWxm LnByaW9yaXR5ID0gMTAwCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAgICAgICBn ZGIuZnJhbWVfZmlsdGVyc1tzZWxmLm5hbWVdID0gc2VsZgorKworKyAgICBkZWYgZmlsdGVyKHNl bGYsIGZyYW1lX2l0ZXIpOgorKyAgICAgICAgcmV0dXJuIEVsaWRpbmdJbmxpbmVJdGVyYXRvcihm cmFtZV9pdGVyKQorK0BlbmQgc21hbGxleGFtcGxlCisrCisrVGhpcyBmcmFtZSBmaWx0ZXIgaXMg dmVyeSBzaW1pbGFyIHRvIHRoZSBvdGhlciBleGFtcGxlcy4gIFRoZSBvbmx5CisrZGlmZmVyZW5j ZSBpcyB0aGlzIGZyYW1lIGZpbHRlciBpcyB3cmFwcGluZyB0aGUgaXRlcmF0b3IgcHJvdmlkZWQg dG8KKytpdCAoQGNvZGV7ZnJhbWVfaXRlcn0pIHdpdGggYSBjdXN0b20gaXRlcmF0b3IgY2FsbGVk CisrQGNvZGV7RWxpZGluZ0lubGluZUl0ZXJhdG9yfS4gIFRoaXMgYWdhaW4gZGVmZXJzIGFjdGlv bnMgdG8gd2hlbgorK0B2YWx1ZXtHREJOfSBwcmludHMgdGhlIGJhY2t0cmFjZSwgYXMgdGhlIGl0 ZXJhdG9yIGlzIG5vdCB0cmF2ZXJzZWQKKyt1bnRpbCBwcmludGluZy4KKysKKytUaGUgaXRlcmF0 b3IgZm9yIHRoaXMgZXhhbXBsZSBpcyBhcyBmb2xsb3dzLiAgSXQgaXMgaW4gdGhpcyBzZWN0aW9u IG9mCisrdGhlIGV4YW1wbGUgd2hlcmUgZGVjaXNpb25zIGFyZSBtYWRlIG9uIHRoZSBjb250ZW50 IG9mIHRoZSBiYWNrdHJhY2UuCisrCisrQHNtYWxsZXhhbXBsZQorK2NsYXNzIEVsaWRpbmdJbmxp bmVJdGVyYXRvcjoKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlpKToKKysgICAgICAgIHNlbGYu aW5wdXRfaXRlcmF0b3IgPSBpaQorKworKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisrICAgICAg ICByZXR1cm4gc2VsZgorKworKyAgICBkZWYgbmV4dChzZWxmKToKKysgICAgICAgIGZyYW1lID0g bmV4dChzZWxmLmlucHV0X2l0ZXJhdG9yKQorKworKyAgICAgICAgaWYgZnJhbWUuaW5mZXJpb3Jf ZnJhbWUoKS50eXBlKCkgIT0gZ2RiLklOTElORV9GUkFNRToKKysgICAgICAgICAgICByZXR1cm4g ZnJhbWUKKysKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBlbGlkaW5nX2ZyYW1lID0gbmV4 dChzZWxmLmlucHV0X2l0ZXJhdG9yKQorKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Cisr ICAgICAgICAgICAgcmV0dXJuIGZyYW1lCisrICAgICAgICByZXR1cm4gRWxpZGluZ0ZyYW1lRGVj b3JhdG9yKGVsaWRpbmdfZnJhbWUsIFtmcmFtZV0pCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytU aGlzIGl0ZXJhdG9yIGltcGxlbWVudHMgdGhlIFB5dGhvbiBpdGVyYXRvciBwcm90b2NvbC4gIFdo ZW4gdGhlCisrQGNvZGV7bmV4dH0gZnVuY3Rpb24gaXMgY2FsbGVkICh3aGVuIEB2YWx1ZXtHREJO fSBwcmludHMgZWFjaCBmcmFtZSksCisrdGhlIGl0ZXJhdG9yIGNoZWNrcyBpZiB0aGlzIGZyYW1l IGRlY29yYXRvciwgQGNvZGV7ZnJhbWV9LCBpcyB3cmFwcGluZworK2FuIGlubGluZWQgZnJhbWUu ICBJZiBpdCBpcyBub3QsIGl0IHJldHVybnMgdGhlIGV4aXN0aW5nIGZyYW1lIGRlY29yYXRvcgor K3VudG91Y2hlZC4gIElmIGl0IGlzIHdyYXBwaW5nIGFuIGlubGluZWQgZnJhbWUsIGl0IGFzc3Vt ZXMgdGhhdCB0aGUKKytpbmxpbmVkIGZyYW1lIHdhcyBjb250YWluZWQgd2l0aGluIHRoZSBuZXh0 IG9sZGVzdCBmcmFtZSwKKytAY29kZXtlbGlkaW5nX2ZyYW1lfSwgd2hpY2ggaXQgZmV0Y2hlcy4g IEl0IHRoZW4gY3JlYXRlcyBhbmQgcmV0dXJucyBhCisrZnJhbWUgZGVjb3JhdG9yLCBAY29kZXtF bGlkaW5nRnJhbWVEZWNvcmF0b3J9LCB3aGljaCBjb250YWlucyBib3RoIHRoZQorK2VsaWRlZCBm cmFtZSwgYW5kIHRoZSBlbGlkaW5nIGZyYW1lLgorKworK0BzbWFsbGV4YW1wbGUKKytjbGFzcyBF bGlkaW5nSW5saW5lRGVjb3JhdG9yKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5p dF9fKHNlbGYsIGZyYW1lLCBlbGlkZWRfZnJhbWVzKToKKysgICAgICAgIHN1cGVyKEVsaWRpbmdJ bmxpbmVEZWNvcmF0b3IsIHNlbGYpLl9faW5pdF9fKGZyYW1lKQorKyAgICAgICAgc2VsZi5mcmFt ZSA9IGZyYW1lCisrICAgICAgICBzZWxmLmVsaWRlZF9mcmFtZXMgPSBlbGlkZWRfZnJhbWVzCisr CisrICAgIGRlZiBlbGlkZWQoc2VsZik6CisrICAgICAgICByZXR1cm4gaXRlcihzZWxmLmVsaWRl ZF9mcmFtZXMpCisrQGVuZCBzbWFsbGV4YW1wbGUKKysKKytUaGlzIGZyYW1lIGRlY29yYXRvciBv dmVycmlkZXMgb25lIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBpbmxpbmVkCisrZnJhbWUgaW4g dGhlIEBjb2Rle2VsaWRlZH0gbWV0aG9kLiAgQXMgYmVmb3JlIGl0IGxldHMKKytAY29kZXtGcmFt ZURlY29yYXRvcn0gZG8gdGhlIHJlc3Qgb2YgdGhlIHdvcmsgaW52b2x2ZWQgaW4gcHJpbnRpbmcK Kyt0aGlzIGZyYW1lLiAgVGhpcyBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dC4KKysKKytA c21hbGxleGFtcGxlCisrIzAgIDB4MDA0MDA0ZTAgaW4gYmFyICgpIGF0IGlubGluZS5jOjExCisr IzIgIDB4MDA0MDA1MjkgaW4gbWFpbiAoKSBhdCBpbmxpbmUuYzoyNQorKyAgICAjMSAgMHgwMDQw MDUyOSBpbiBtYXggKGI9NiwgYT0xMikgYXQgaW5saW5lLmM6MTUKKytAZW5kIHNtYWxsZXhhbXBs ZQorKworK0luIHRoYXQgb3V0cHV0LCBAY29kZXttYXh9IHdoaWNoIGhhcyBiZWVuIGlubGluZWQg aW50byBAY29kZXttYWlufSBpcworK3ByaW50ZWQgaGllcmFyY2hpY2FsbHkuICBBbm90aGVyIGFw cHJvYWNoIHdvdWxkIGJlIHRvIGNvbWJpbmUgdGhlCisrQGNvZGV7ZnVuY3Rpb259IG1ldGhvZCwg YW5kIHRoZSBAY29kZXtlbGlkZWR9IG1ldGhvZCB0byBib3RoIHByaW50IGEKKyttYXJrZXIgaW4g dGhlIGlubGluZWQgZnJhbWUsIGFuZCBhbHNvIHNob3cgdGhlIGhpZXJhcmNoaWNhbAorK3JlbGF0 aW9uc2hpcC4KKysKKyBAbm9kZSBJbmZlcmlvcnMgSW4gUHl0aG9uCisgQHN1YnN1YnNlY3Rpb24g SW5mZXJpb3JzIEluIFB5dGhvbgorIEBjaW5kZXggaW5mZXJpb3JzIGluIFB5dGhvbgorQEAgLTI1 MjQ1LDYgKzI2MDM2LDExIEBAIFRoZSBAY29kZXt0eXBlX3ByaW50ZXJzfSBhdHRyaWJ1dGUgaXMg YQorIEB4cmVme1R5cGUgUHJpbnRpbmcgQVBJfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgQGVu ZCBkZWZ2YXIKKyAKKytAZGVmdmFyIFByb2dzcGFjZS5mcmFtZV9maWx0ZXJzCisrVGhlIEBjb2Rl e2ZyYW1lX2ZpbHRlcnN9IGF0dHJpYnV0ZSBpcyBhIGRpY3Rpb25hcnkgb2YgZnJhbWUgZmlsdGVy Cisrb2JqZWN0cy4gIEB4cmVme0ZyYW1lIEZpbHRlciBBUEl9LCBmb3IgbW9yZSBpbmZvcm1hdGlv bi4KKytAZW5kIGRlZnZhcgorKworIEBub2RlIE9iamZpbGVzIEluIFB5dGhvbgorIEBzdWJzdWJz ZWN0aW9uIE9iamZpbGVzIEluIFB5dGhvbgorIAorQEAgLTI1Mjk1LDYgKzI2MDkxLDExIEBAIFRo ZSBAY29kZXt0eXBlX3ByaW50ZXJzfSBhdHRyaWJ1dGUgaXMgYQorIEB4cmVme1R5cGUgUHJpbnRp bmcgQVBJfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgQGVuZCBkZWZ2YXIKKyAKKytAZGVmdmFy IE9iamZpbGUuZnJhbWVfZmlsdGVycworK1RoZSBAY29kZXtmcmFtZV9maWx0ZXJzfSBhdHRyaWJ1 dGUgaXMgYSBkaWN0aW9uYXJ5IG9mIGZyYW1lIGZpbHRlcgorK29iamVjdHMuICBAeHJlZntGcmFt ZSBGaWx0ZXIgQVBJfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrQGVuZCBkZWZ2YXIKKysKKyBB IEBjb2Rle2dkYi5PYmpmaWxlfSBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKyAK KyBAZGVmdW4gT2JqZmlsZS5pc192YWxpZCAoKQorQEAgLTI2MzEzLDcgKzI3MTE0LDcgQEAgTm8g ICAgIG15LWZvby1wcmV0dHktcHJpbnRlcnMucHkKKyBXaGVuIHJlYWRpbmcgYW4gYXV0by1sb2Fk ZWQgZmlsZSwgQHZhbHVle0dEQk59IHNldHMgdGhlCisgQGRmbntjdXJyZW50IG9iamZpbGV9LiAg VGhpcyBpcyBhdmFpbGFibGUgdmlhIHRoZSBAY29kZXtnZGIuY3VycmVudF9vYmpmaWxlfQorIGZ1 bmN0aW9uIChAcHhyZWZ7T2JqZmlsZXMgSW4gUHl0aG9ufSkuICBUaGlzIGNhbiBiZSB1c2VmdWwg Zm9yCistcmVnaXN0ZXJpbmcgb2JqZmlsZS1zcGVjaWZpYyBwcmV0dHktcHJpbnRlcnMuCisrcmVn aXN0ZXJpbmcgb2JqZmlsZS1zcGVjaWZpYyBwcmV0dHktcHJpbnRlcnMgYW5kIGZyYW1lLWZpbHRl cnMuCisgCisgQG1lbnUKKyAqIG9iamZpbGUtZ2RiLnB5IGZpbGU6OiAgICAgICAgICBUaGUgQGZp bGV7QHZhcntvYmpmaWxlfS1nZGIucHl9IGZpbGUKK0BAIC0zMDE4NCw2ICszMDk4NSwyMiBAQCBJ cyB0aGlzIGdvaW5nIGF3YXk/Pz8/CisgQG5vZGUgR0RCL01JIFN0YWNrIE1hbmlwdWxhdGlvbgor IEBzZWN0aW9uIEBzY3tnZGIvbWl9IFN0YWNrIE1hbmlwdWxhdGlvbiBDb21tYW5kcworIAorK0Bz dWJoZWFkaW5nIFRoZSBAY29kZXstZW5hYmxlLWZyYW1lLWZpbHRlcnN9IENvbW1hbmQKKytAZmlu ZGV4IC1lbmFibGUtZnJhbWUtZmlsdGVycworKworK0BzbWFsbGV4YW1wbGUKKystZW5hYmxlLWZy YW1lLWZpbHRlcnMKKytAZW5kIHNtYWxsZXhhbXBsZQorKworK0B2YWx1ZXtHREJOfSBhbGxvd3Mg UHl0aG9uLWJhc2VkIGZyYW1lIGZpbHRlcnMgdG8gYWZmZWN0IHRoZSBvdXRwdXQgb2YKKyt0aGUg TUkgY29tbWFuZHMgcmVsYXRpbmcgdG8gc3RhY2sgdHJhY2VzLiAgQXMgdGhlcmUgaXMgbm8gd2F5 IHRvCisraW1wbGVtZW50IHRoaXMgaW4gYSBmdWxseSBiYWNrd2FyZC1jb21wYXRpYmxlIHdheSwg YSBmcm9udCBlbmQgbXVzdAorK3JlcXVlc3QgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmUgZW5h YmxlZC4KKysKKytPbmNlIGVuYWJsZWQsIHRoaXMgZmVhdHVyZSBjYW5ub3QgYmUgZGlzYWJsZWQu CisrCisrTm90ZSB0aGF0IGlmIFB5dGhvbiBzdXBwb3J0IGhhcyBub3QgYmVlbiBjb21waWxlZCBp bnRvIEB2YWx1ZXtHREJOfSwKKyt0aGlzIGNvbW1hbmQgd2lsbCBzdGlsbCBzdWNjZWVkIChhbmQg ZG8gbm90aGluZykuCisgCisgQHN1YmhlYWRpbmcgVGhlIEBjb2Rley1zdGFjay1pbmZvLWZyYW1l fSBDb21tYW5kCisgQGZpbmRleCAtc3RhY2staW5mby1mcmFtZQorQEAgLTMwMjUxLDEzICszMTA2 OCwxNCBAQCBGb3IgYSBzdGFjayB3aXRoIGZyYW1lIGxldmVscyAwIHRocm91Z2gKKyAoZ2RiKQor IEBlbmQgc21hbGxleGFtcGxlCisgCisrQGFuY2hvcnstc3RhY2stbGlzdC1hcmd1bWVudHN9Cisg QHN1YmhlYWRpbmcgVGhlIEBjb2Rley1zdGFjay1saXN0LWFyZ3VtZW50c30gQ29tbWFuZAorIEBm aW5kZXggLXN0YWNrLWxpc3QtYXJndW1lbnRzCisgCisgQHN1YnN1YmhlYWRpbmcgU3lub3BzaXMK KyAKKyBAc21hbGxleGFtcGxlCistIC1zdGFjay1saXN0LWFyZ3VtZW50cyBAdmFye3ByaW50LXZh bHVlc30KKysgLXN0YWNrLWxpc3QtYXJndW1lbnRzIFsgLS1uby1mcmFtZS1maWx0ZXJzIF0gQHZh cntwcmludC12YWx1ZXN9CisgICAgIFsgQHZhcntsb3ctZnJhbWV9IEB2YXJ7aGlnaC1mcmFtZX0g XQorIEBlbmQgc21hbGxleGFtcGxlCisgCitAQCAtMzAyNzQsNyArMzEwOTIsOSBAQCBJZiBAdmFy e3ByaW50LXZhbHVlc30gaXMgMCBvciBAY29kZXstLW5vCisgdGhlIHZhcmlhYmxlczsgaWYgaXQg aXMgMSBvciBAY29kZXstLWFsbC12YWx1ZXN9LCBwcmludCBhbHNvIHRoZWlyCisgdmFsdWVzOyBh bmQgaWYgaXQgaXMgMiBvciBAY29kZXstLXNpbXBsZS12YWx1ZXN9LCBwcmludCB0aGUgbmFtZSwK KyB0eXBlIGFuZCB2YWx1ZSBmb3Igc2ltcGxlIGRhdGEgdHlwZXMsIGFuZCB0aGUgbmFtZSBhbmQg dHlwZSBmb3IgYXJyYXlzLAorLXN0cnVjdHVyZXMgYW5kIHVuaW9ucy4KKytzdHJ1Y3R1cmVzIGFu ZCB1bmlvbnMuICBJZiB0aGUgb3B0aW9uIEBjb2Rley0tbm8tZnJhbWUtZmlsdGVyc30gaXMKKytz dXBwbGllZCwgdGhlbiBQeXRob24gZnJhbWUgZmlsdGVycyB3aWxsIG5vdCBiZSBleGVjdXRlZC4K KysKKyAKKyBVc2Ugb2YgdGhpcyBjb21tYW5kIHRvIG9idGFpbiBhcmd1bWVudHMgaW4gYSBzaW5n bGUgZnJhbWUgaXMKKyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBAc2FtcHstc3RhY2stbGlz dC12YXJpYWJsZXN9IGNvbW1hbmQuCitAQCAtMzAzNDUsMTMgKzMxMTY1LDE0IEBAIGFyZ3M9W0B7 bmFtZT0iaW50YXJnIix2YWx1ZT0iMiJAfSwKKyBAYyBAc3ViaGVhZGluZyAtc3RhY2stbGlzdC1l eGNlcHRpb24taGFuZGxlcnMKKyAKKyAKKytAYW5jaG9yey1zdGFjay1saXN0LWZyYW1lc30KKyBA c3ViaGVhZGluZyBUaGUgQGNvZGV7LXN0YWNrLWxpc3QtZnJhbWVzfSBDb21tYW5kCisgQGZpbmRl eCAtc3RhY2stbGlzdC1mcmFtZXMKKyAKKyBAc3Vic3ViaGVhZGluZyBTeW5vcHNpcworIAorIEBz bWFsbGV4YW1wbGUKKy0gLXN0YWNrLWxpc3QtZnJhbWVzIFsgQHZhcntsb3ctZnJhbWV9IEB2YXJ7 aGlnaC1mcmFtZX0gXQorKyAtc3RhY2stbGlzdC1mcmFtZXMgWyAtLW5vLWZyYW1lLWZpbHRlcnMg QHZhcntsb3ctZnJhbWV9IEB2YXJ7aGlnaC1mcmFtZX0gXQorIEBlbmQgc21hbGxleGFtcGxlCisg CisgTGlzdCB0aGUgZnJhbWVzIGN1cnJlbnRseSBvbiB0aGUgc3RhY2suICBGb3IgZWFjaCBmcmFt ZSBpdCBkaXNwbGF5cyB0aGUKK0BAIC0zMDM4MSw3ICszMTIwMiw5IEBAIGxldmVscyBhcmUgYmV0 d2VlbiB0aGUgdHdvIGFyZ3VtZW50cyAoaW4KKyBhcmUgZXF1YWwsIGl0IHNob3dzIHRoZSBzaW5n bGUgZnJhbWUgYXQgdGhlIGNvcnJlc3BvbmRpbmcgbGV2ZWwuICBJdCBpcworIGFuIGVycm9yIGlm IEB2YXJ7bG93LWZyYW1lfSBpcyBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIG51bWJlciBvZgorIGZy YW1lcy4gIE9uIHRoZSBvdGhlciBoYW5kLCBAdmFye2hpZ2gtZnJhbWV9IG1heSBiZSBsYXJnZXIg dGhhbiB0aGUKKy1hY3R1YWwgbnVtYmVyIG9mIGZyYW1lcywgaW4gd2hpY2ggY2FzZSBvbmx5IGV4 aXN0aW5nIGZyYW1lcyB3aWxsIGJlIHJldHVybmVkLgorK2FjdHVhbCBudW1iZXIgb2YgZnJhbWVz LCBpbiB3aGljaCBjYXNlIG9ubHkgZXhpc3RpbmcgZnJhbWVzIHdpbGwgYmUKKytyZXR1cm5lZC4g IElmIHRoZSBvcHRpb24gQGNvZGV7LS1uby1mcmFtZS1maWx0ZXJzfSBpcyBzdXBwbGllZCwgdGhl bgorK1B5dGhvbiBmcmFtZSBmaWx0ZXJzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgorIAorIEBzdWJz dWJoZWFkaW5nIEB2YWx1ZXtHREJOfSBDb21tYW5kCisgCitAQCAtMzA0NTEsMTEgKzMxMjc0LDEy IEBAIFNob3cgYSBzaW5nbGUgZnJhbWU6CisgCisgQHN1YmhlYWRpbmcgVGhlIEBjb2Rley1zdGFj ay1saXN0LWxvY2Fsc30gQ29tbWFuZAorIEBmaW5kZXggLXN0YWNrLWxpc3QtbG9jYWxzCisrQGFu Y2hvcnstc3RhY2stbGlzdC1sb2NhbHN9CisgCisgQHN1YnN1YmhlYWRpbmcgU3lub3BzaXMKKyAK KyBAc21hbGxleGFtcGxlCistIC1zdGFjay1saXN0LWxvY2FscyBAdmFye3ByaW50LXZhbHVlc30K KysgLXN0YWNrLWxpc3QtbG9jYWxzIFsgLS1uby1mcmFtZS1maWx0ZXJzIF0gQHZhcntwcmludC12 YWx1ZXN9CisgQGVuZCBzbWFsbGV4YW1wbGUKKyAKKyBEaXNwbGF5IHRoZSBsb2NhbCB2YXJpYWJs ZSBuYW1lcyBmb3IgdGhlIHNlbGVjdGVkIGZyYW1lLiAgSWYKK0BAIC0zMDQ2Niw3ICszMTI5MCw4 IEBAIHR5cGUgYW5kIHZhbHVlIGZvciBzaW1wbGUgZGF0YSB0eXBlcywgYW4KKyBzdHJ1Y3R1cmVz IGFuZCB1bmlvbnMuICBJbiB0aGlzIGxhc3QgY2FzZSwgYSBmcm9udGVuZCBjYW4gaW1tZWRpYXRl bHkKKyBkaXNwbGF5IHRoZSB2YWx1ZSBvZiBzaW1wbGUgZGF0YSB0eXBlcyBhbmQgY3JlYXRlIHZh cmlhYmxlIG9iamVjdHMgZm9yCisgb3RoZXIgZGF0YSB0eXBlcyB3aGVuIHRoZSB1c2VyIHdpc2hl cyB0byBleHBsb3JlIHRoZWlyIHZhbHVlcyBpbgorLW1vcmUgZGV0YWlsLgorK21vcmUgZGV0YWls LiAgSWYgdGhlIG9wdGlvbiBAY29kZXstLW5vLWZyYW1lLWZpbHRlcnN9IGlzIHN1cHBsaWVkLCB0 aGVuCisrUHl0aG9uIGZyYW1lIGZpbHRlcnMgd2lsbCBub3QgYmUgZXhlY3V0ZWQuCisgCisgVGhp cyBjb21tYW5kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgQHNhbXB7LXN0YWNrLWxp c3QtdmFyaWFibGVzfSBjb21tYW5kLgorQEAgLTMwNDkxLDEzICszMTMxNiwxNCBAQCBUaGlzIGNv bW1hbmQgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0CisgKGdkYikKKyBAZW5kIHNtYWxsZXhh bXBsZQorIAorK0BhbmNob3J7LXN0YWNrLWxpc3QtdmFyaWFibGVzfQorIEBzdWJoZWFkaW5nIFRo ZSBAY29kZXstc3RhY2stbGlzdC12YXJpYWJsZXN9IENvbW1hbmQKKyBAZmluZGV4IC1zdGFjay1s aXN0LXZhcmlhYmxlcworIAorIEBzdWJzdWJoZWFkaW5nIFN5bm9wc2lzCisgCisgQHNtYWxsZXhh bXBsZQorLSAtc3RhY2stbGlzdC12YXJpYWJsZXMgQHZhcntwcmludC12YWx1ZXN9CisrIC1zdGFj ay1saXN0LXZhcmlhYmxlcyBbIC0tbm8tZnJhbWUtZmlsdGVycyBdIEB2YXJ7cHJpbnQtdmFsdWVz fQorIEBlbmQgc21hbGxleGFtcGxlCisgCisgRGlzcGxheSB0aGUgbmFtZXMgb2YgbG9jYWwgdmFy aWFibGVzIGFuZCBmdW5jdGlvbiBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RlZCBmcmFtZS4gIElm CitAQCAtMzA1MDUsNyArMzEzMzEsOCBAQCBEaXNwbGF5IHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJp YWJsZXMgYW5kCisgdGhlIHZhcmlhYmxlczsgaWYgaXQgaXMgMSBvciBAY29kZXstLWFsbC12YWx1 ZXN9LCBwcmludCBhbHNvIHRoZWlyCisgdmFsdWVzOyBhbmQgaWYgaXQgaXMgMiBvciBAY29kZXst LXNpbXBsZS12YWx1ZXN9LCBwcmludCB0aGUgbmFtZSwKKyB0eXBlIGFuZCB2YWx1ZSBmb3Igc2lt cGxlIGRhdGEgdHlwZXMsIGFuZCB0aGUgbmFtZSBhbmQgdHlwZSBmb3IgYXJyYXlzLAorLXN0cnVj dHVyZXMgYW5kIHVuaW9ucy4gIAorK3N0cnVjdHVyZXMgYW5kIHVuaW9ucy4gIElmIHRoZSBvcHRp b24gQGNvZGV7LS1uby1mcmFtZS1maWx0ZXJzfSBpcworK3N1cHBsaWVkLCB0aGVuIFB5dGhvbiBm cmFtZSBmaWx0ZXJzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgorIAorIEBzdWJzdWJoZWFkaW5nIEV4 YW1wbGUKKyAKK0luZGV4OiBnZGItNy42L2dkYi9taS9taS1jbWQtc3RhY2suYworPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0tIGdkYi03LjYub3JpZy9nZGIvbWkvbWktY21kLXN0YWNrLmMJMjAxMy0wNS0yMCAyMjoy MzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9taS9taS1jbWQtc3RhY2suYwky MDEzLTA1LTIwIDIyOjI1OjUyLjExMTE2NTc2NyArMDIwMAorQEAgLTMxLDYgKzMxLDEwIEBACisg I2luY2x1ZGUgImxhbmd1YWdlLmgiCisgI2luY2x1ZGUgInZhbHByaW50LmgiCisgI2luY2x1ZGUg ImV4Y2VwdGlvbnMuaCIKKysjaW5jbHVkZSAidXRpbHMuaCIKKysjaW5jbHVkZSAibWktZ2V0b3B0 LmgiCisrI2luY2x1ZGUgInB5dGhvbi9weXRob24uaCIKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKyAK KyBlbnVtIHdoYXRfdG9fbGlzdCB7IGxvY2FscywgYXJndW1lbnRzLCBhbGwgfTsKKyAKK0BAIC0z OCw2ICs0MiwyOCBAQCBzdGF0aWMgdm9pZCBsaXN0X2FyZ3Nfb3JfbG9jYWxzIChlbnVtIHdoCisg CQkJCSBlbnVtIHByaW50X3ZhbHVlcyB2YWx1ZXMsCisgCQkJCSBzdHJ1Y3QgZnJhbWVfaW5mbyAq ZmkpOworIAorKy8qIFRydWUgaWYgd2Ugd2FudCB0byBhbGxvdyBQeXRob24tYmFzZWQgZnJhbWUg ZmlsdGVycy4gICovCisrc3RhdGljIGludCBmcmFtZV9maWx0ZXJzID0gMDsKKysKKyt2b2lkCisr bWlfY21kX2VuYWJsZV9mcmFtZV9maWx0ZXJzIChjaGFyICpjb21tYW5kLCBjaGFyICoqYXJndiwg aW50IGFyZ2MpCisreworKyAgaWYgKGFyZ2MgIT0gMCkKKysgICAgZXJyb3IgKF8oIi1lbmFibGUt ZnJhbWUtZmlsdGVyczogbm8gYXJndW1lbnRzIGFsbG93ZWQiKSk7CisrICBmcmFtZV9maWx0ZXJz ID0gMTsKKyt9CisrCisrLyogUGFyc2UgdGhlIC0tbm8tZnJhbWUtZmlsdGVycyBvcHRpb24gaW4g Y29tbWFuZHMgd2hlcmUgd2UgY2Fubm90IHVzZQorKyAgIG1pX2dldG9wdC4gKi8KKytzdGF0aWMg aW50CisrcGFyc2Vfbm9fZnJhbWVzX29wdGlvbiAoY29uc3QgY2hhciAqYXJnKQorK3sKKysgIGlm IChhcmcgJiYgKHN0cmNtcCAoYXJnLCAiLS1uby1mcmFtZS1maWx0ZXJzIikgPT0gMCkpCisrICAg IHJldHVybiAxOworKworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIFByaW50IGEgbGlzdCBvZiB0 aGUgc3RhY2sgZnJhbWVzLiAgQXJncyBjYW4gYmUgbm9uZSwgaW4gd2hpY2ggY2FzZQorICAgIHdl IHdhbnQgdG8gcHJpbnQgdGhlIHdob2xlIGJhY2t0cmFjZSwgb3IgYSBwYWlyIG9mIG51bWJlcnMK KyAgICBzcGVjaWZ5aW5nIHRoZSBmcmFtZSBudW1iZXJzIGF0IHdoaWNoIHRvIHN0YXJ0IGFuZCBz dG9wIHRoZQorQEAgLTUyLDE0ICs3OCw0NiBAQCBtaV9jbWRfc3RhY2tfbGlzdF9mcmFtZXMgKGNo YXIgKmNvbW1hbmQsCisgICBpbnQgaTsKKyAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwX3N0YWNr OworICAgc3RydWN0IGZyYW1lX2luZm8gKmZpOworKyAgZW51bSBweV9idF9zdGF0dXMgcmVzdWx0 ID0gUFlfQlRfRVJST1I7CisrICBpbnQgcmF3X2FyZyA9IDA7CisrICBpbnQgb2luZCA9IDA7Cisr ICBlbnVtIG9wdAorKyAgICB7CisrICAgICAgTk9fRlJBTUVfRklMVEVSUworKyAgICB9OworKyAg c3RhdGljIGNvbnN0IHN0cnVjdCBtaV9vcHQgb3B0c1tdID0KKysgICAgeworKyAgICAgIHsiLW5v LWZyYW1lLWZpbHRlcnMiLCBOT19GUkFNRV9GSUxURVJTLCAwfSwKKysgICAgICB7IDAsIDAsIDAg fQorKyAgICB9OworKworKyAgLyogUGFyc2UgYXJndW1lbnRzLiAgSW4gdGhpcyBpbnN0YW5jZSB3 ZSBhcmUganVzdCBsb29raW5nIGZvcgorKyAgICAgLS1uby1mcmFtZS1maWx0ZXJzLiAgKi8KKysg IHdoaWxlICgxKQorKyAgICB7CisrICAgICAgY2hhciAqb2FyZzsKKysgICAgICBpbnQgb3B0ID0g bWlfZ2V0b3B0ICgiLXN0YWNrLWxpc3QtZnJhbWVzIiwgYXJnYywgYXJndiwKKysJCQkgICBvcHRz LCAmb2luZCwgJm9hcmcpOworKyAgICAgIGlmIChvcHQgPCAwKQorKwlicmVhazsKKysgICAgICBz d2l0Y2ggKChlbnVtIG9wdCkgb3B0KQorKwl7CisrCWNhc2UgTk9fRlJBTUVfRklMVEVSUzoKKysJ ICByYXdfYXJnID0gb2luZDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisgCistICBpZiAoYXJn YyA+IDIgfHwgYXJnYyA9PSAxKQorLSAgICBlcnJvciAoXygiLXN0YWNrLWxpc3QtZnJhbWVzOiBV c2FnZTogW0ZSQU1FX0xPVyBGUkFNRV9ISUdIXSIpKTsKKysgIC8qIEFmdGVyIHRoZSBsYXN0IG9w dGlvbiBpcyBwYXJzZWQsIHRoZXJlIHNob3VsZCBlaXRoZXIgYmUgbG93IC0KKysgICAgIGhpZ2gg cmFuZ2UsIG9yIG5vIGZ1cnRoZXIgYXJndW1lbnRzLiAgKi8KKysgIGlmICgoYXJnYyAtIG9pbmQg IT0gMCkgJiYgKGFyZ2MgLSBvaW5kICE9IDIpKQorKyAgICBlcnJvciAoXygiLXN0YWNrLWxpc3Qt ZnJhbWVzOiBVc2FnZTogWy0tbm8tZnJhbWUtZmlsdGVyc10gW0ZSQU1FX0xPVyBGUkFNRV9ISUdI XSIpKTsKKyAKKy0gIGlmIChhcmdjID09IDIpCisrICAvKiBJZiB0aGVyZSBpcyBhIHJhbmdlLCBz ZXQgaXQuICAqLworKyAgaWYgKGFyZ2MgLSBvaW5kID09IDIpCisgICAgIHsKKy0gICAgICBmcmFt ZV9sb3cgPSBhdG9pIChhcmd2WzBdKTsKKy0gICAgICBmcmFtZV9oaWdoID0gYXRvaSAoYXJndlsx XSk7CisrICAgICAgZnJhbWVfbG93ID0gYXRvaSAoYXJndlswICsgb2luZF0pOworKyAgICAgIGZy YW1lX2hpZ2ggPSBhdG9pIChhcmd2WzEgKyBvaW5kXSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAg eworQEAgLTgxLDE2ICsxMzksMzcgQEAgbWlfY21kX3N0YWNrX2xpc3RfZnJhbWVzIChjaGFyICpj b21tYW5kLAorIAorICAgY2xlYW51cF9zdGFjayA9IG1ha2VfY2xlYW51cF91aV9vdXRfbGlzdF9i ZWdpbl9lbmQgKGN1cnJlbnRfdWlvdXQsICJzdGFjayIpOworIAorLSAgLyogTm93IGxldCdzIHBy aW50IHRoZSBmcmFtZXMgdXAgdG8gZnJhbWVfaGlnaCwgb3IgdW50aWwgdGhlcmUgYXJlCistICAg ICBmcmFtZXMgaW4gdGhlIHN0YWNrLiAgKi8KKy0gIGZvciAoOworLSAgICAgICBmaSAmJiAoaSA8 PSBmcmFtZV9oaWdoIHx8IGZyYW1lX2hpZ2ggPT0gLTEpOworLSAgICAgICBpKyssIGZpID0gZ2V0 X3ByZXZfZnJhbWUgKGZpKSkKKysgIGlmICghIHJhd19hcmcgJiYgZnJhbWVfZmlsdGVycykKKyAg ICAgeworLSAgICAgIFFVSVQ7CistICAgICAgLyogUHJpbnQgdGhlIGxvY2F0aW9uIGFuZCB0aGUg YWRkcmVzcyBhbHdheXMsIGV2ZW4gZm9yIGxldmVsIDAuCistICAgICAgICAgSWYgYXJncyBpcyAw LCBkb24ndCBwcmludCB0aGUgYXJndW1lbnRzLiAgKi8KKy0gICAgICBwcmludF9mcmFtZV9pbmZv IChmaSwgMSwgTE9DX0FORF9BRERSRVNTLCAwIC8qIGFyZ3MgKi8gKTsKKysgICAgICBpbnQgZmxh Z3MgPSBQUklOVF9MRVZFTCB8IFBSSU5UX0ZSQU1FX0lORk87CisrICAgICAgaW50IHB5X2ZyYW1l X2xvdyA9IGZyYW1lX2xvdzsKKysKKysgICAgICAvKiBXZSBjYW5ub3QgcGFzcyAtMSB0byBmcmFt ZV9sb3csIGFzIHRoYXQgd291bGQgc2lnbmlmeSBhCisrICAgICAgcmVsYXRpdmUgYmFja3RyYWNl IGZyb20gdGhlIHRhaWwgb2YgdGhlIHN0YWNrLiAgU28sIGluIHRoZSBjYXNlCisrICAgICAgb2Yg ZnJhbWVfbG93ID09IC0xLCBhc3NpZ24gYW5kIGluY3JlbWVudCBpdC4gICovCisrICAgICAgaWYg KHB5X2ZyYW1lX2xvdyA9PSAtMSkKKysJcHlfZnJhbWVfbG93Kys7CisrCisrICAgICAgcmVzdWx0 ID0gYXBwbHlfZnJhbWVfZmlsdGVyIChnZXRfY3VycmVudF9mcmFtZSAoKSwgZmxhZ3MsCisrCQkJ CSAgIE5PX1ZBTFVFUywgIGN1cnJlbnRfdWlvdXQsCisrCQkJCSAgIHB5X2ZyYW1lX2xvdywgZnJh bWVfaGlnaCk7CisrICAgIH0KKysKKysgIC8qIFJ1biB0aGUgaW5idWlsdCBiYWNrdHJhY2UgaWYg dGhlcmUgYXJlIG5vIGZpbHRlcnMgcmVnaXN0ZXJlZCwgb3IKKysgICAgIGlmICItLW5vLWZyYW1l LWZpbHRlcnMiIGhhcyBiZWVuIHNwZWNpZmllZCBmcm9tIHRoZSBjb21tYW5kLiAgKi8KKysgIGlm ICghIGZyYW1lX2ZpbHRlcnMgfHwgcmF3X2FyZyAgfHwgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRF UlMpCisrICAgIHsKKysgICAgICAvKiBOb3cgbGV0J3MgcHJpbnQgdGhlIGZyYW1lcyB1cCB0byBm cmFtZV9oaWdoLCBvciB1bnRpbCB0aGVyZSBhcmUKKysJIGZyYW1lcyBpbiB0aGUgc3RhY2suICAq LworKyAgICAgIGZvciAoOworKwkgICBmaSAmJiAoaSA8PSBmcmFtZV9oaWdoIHx8IGZyYW1lX2hp Z2ggPT0gLTEpOworKwkgICBpKyssIGZpID0gZ2V0X3ByZXZfZnJhbWUgKGZpKSkKKysJeworKwkg IFFVSVQ7CisrCSAgLyogUHJpbnQgdGhlIGxvY2F0aW9uIGFuZCB0aGUgYWRkcmVzcyBhbHdheXMs IGV2ZW4gZm9yIGxldmVsIDAuCisrCSAgICAgSWYgYXJncyBpcyAwLCBkb24ndCBwcmludCB0aGUg YXJndW1lbnRzLiAgKi8KKysJICBwcmludF9mcmFtZV9pbmZvIChmaSwgMSwgTE9DX0FORF9BRERS RVNTLCAwIC8qIGFyZ3MgKi8gKTsKKysJfQorICAgICB9CisgCisgICBkb19jbGVhbnVwcyAoY2xl YW51cF9zdGFjayk7CitAQCAtMTQ3LDEzICsyMjYsMzQgQEAgdm9pZAorIG1pX2NtZF9zdGFja19s aXN0X2xvY2FscyAoY2hhciAqY29tbWFuZCwgY2hhciAqKmFyZ3YsIGludCBhcmdjKQorIHsKKyAg IHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKysgIGludCByYXdfYXJnID0gMDsKKysgIGVudW0g cHlfYnRfc3RhdHVzIHJlc3VsdCA9IFBZX0JUX0VSUk9SOworKyAgaW50IHByaW50X3ZhbHVlOwor KworKyAgaWYgKGFyZ2MgPiAwKQorKyAgICByYXdfYXJnID0gcGFyc2Vfbm9fZnJhbWVzX29wdGlv biAoYXJndlswXSk7CisrCisrICBpZiAoYXJnYyA8IDEgfHwgYXJnYyA+IDIgfHwgKGFyZ2MgPT0g MiAmJiAhIHJhd19hcmcpCisrICAgICAgfHwgKGFyZ2MgPT0gMSAmJiByYXdfYXJnKSkKKysgICAg ZXJyb3IgKF8oIi1zdGFjay1saXN0LWxvY2FsczogVXNhZ2U6IFstLW5vLWZyYW1lLWZpbHRlcnNd IFBSSU5UX1ZBTFVFUyIpKTsKKyAKKy0gIGlmIChhcmdjICE9IDEpCistICAgIGVycm9yIChfKCIt c3RhY2stbGlzdC1sb2NhbHM6IFVzYWdlOiBQUklOVF9WQUxVRVMiKSk7CistCistICAgZnJhbWUg PSBnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpOworKyAgZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJh bWUgKE5VTEwpOworKyAgcHJpbnRfdmFsdWUgPSBwYXJzZV9wcmludF92YWx1ZXMgKGFyZ3ZbcmF3 X2FyZ10pOworIAorLSAgIGxpc3RfYXJnc19vcl9sb2NhbHMgKGxvY2FscywgcGFyc2VfcHJpbnRf dmFsdWVzIChhcmd2WzBdKSwgZnJhbWUpOworKyAgIGlmICghIHJhd19hcmcgJiYgZnJhbWVfZmls dGVycykKKysgICAgIHsKKysgICAgICAgaW50IGZsYWdzID0gUFJJTlRfTEVWRUwgfCBQUklOVF9M T0NBTFM7CisrCisrICAgICAgIHJlc3VsdCA9IGFwcGx5X2ZyYW1lX2ZpbHRlciAoZnJhbWUsIGZs YWdzLCBwcmludF92YWx1ZSwKKysJCQkJICAgIGN1cnJlbnRfdWlvdXQsIDAsIDApOworKyAgICAg fQorKworKyAgIC8qIFJ1biB0aGUgaW5idWlsdCBiYWNrdHJhY2UgaWYgdGhlcmUgYXJlIG5vIGZp bHRlcnMgcmVnaXN0ZXJlZCwgb3IKKysgICAgICBpZiAiLS1uby1mcmFtZS1maWx0ZXJzIiBoYXMg YmVlbiBzcGVjaWZpZWQgZnJvbSB0aGUgY29tbWFuZC4gICovCisrICAgaWYgKCEgZnJhbWVfZmls dGVycyB8fCByYXdfYXJnICB8fCByZXN1bHQgPT0gUFlfQlRfTk9fRklMVEVSUykKKysgICAgIHsK KysgICAgICAgbGlzdF9hcmdzX29yX2xvY2FscyAobG9jYWxzLCBwcmludF92YWx1ZSwgZnJhbWUp OworKyAgICAgfQorIH0KKyAKKyAvKiBQcmludCBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50cyBmb3Ig dGhlIGN1cnJlbnQgZnJhbWUuICBXaXRoIGFyZ3VtZW50CitAQCAtMTcwLDE1ICsyNzAsMjAgQEAg bWlfY21kX3N0YWNrX2xpc3RfYXJncyAoY2hhciAqY29tbWFuZCwgYworICAgc3RydWN0IGNsZWFu dXAgKmNsZWFudXBfc3RhY2tfYXJnczsKKyAgIGVudW0gcHJpbnRfdmFsdWVzIHByaW50X3ZhbHVl czsKKyAgIHN0cnVjdCB1aV9vdXQgKnVpb3V0ID0gY3VycmVudF91aW91dDsKKysgIGludCByYXdf YXJnID0gMDsKKysgIGVudW0gcHlfYnRfc3RhdHVzIHJlc3VsdCA9IFBZX0JUX0VSUk9SOworIAor LSAgaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAzIHx8IGFyZ2MgPT0gMikKKy0gICAgZXJyb3IgKF8o Ii1zdGFjay1saXN0LWFyZ3VtZW50czogVXNhZ2U6ICIKKy0JICAgICAiUFJJTlRfVkFMVUVTIFtG UkFNRV9MT1cgRlJBTUVfSElHSF0iKSk7CisrICBpZiAoYXJnYyA+IDApCisrICAgIHJhd19hcmcg PSBwYXJzZV9ub19mcmFtZXNfb3B0aW9uIChhcmd2WzBdKTsKKyAKKy0gIGlmIChhcmdjID09IDMp CisrICBpZiAoYXJnYyA8IDEgfHwgKGFyZ2MgPiAzICYmICEgcmF3X2FyZykgfHwgKGFyZ2MgPT0g MiAmJiAhIHJhd19hcmcpKQorKyAgICBlcnJvciAoXygiLXN0YWNrLWxpc3QtYXJndW1lbnRzOiBV c2FnZTogIiBcCisrCSAgICAgIlstLW5vLWZyYW1lLWZpbHRlcnNdIFBSSU5UX1ZBTFVFUyBbRlJB TUVfTE9XIEZSQU1FX0hJR0hdIikpOworKworKyAgaWYgKGFyZ2MgPj0gMykKKyAgICAgeworLSAg ICAgIGZyYW1lX2xvdyA9IGF0b2kgKGFyZ3ZbMV0pOworLSAgICAgIGZyYW1lX2hpZ2ggPSBhdG9p IChhcmd2WzJdKTsKKysgICAgICBmcmFtZV9sb3cgPSBhdG9pIChhcmd2WzEgKyByYXdfYXJnXSk7 CisrICAgICAgZnJhbWVfaGlnaCA9IGF0b2kgKGFyZ3ZbMiArIHJhd19hcmddKTsKKyAgICAgfQor ICAgZWxzZQorICAgICB7CitAQCAtMTg4LDcgKzI5Myw3IEBAIG1pX2NtZF9zdGFja19saXN0X2Fy Z3MgKGNoYXIgKmNvbW1hbmQsIGMKKyAgICAgICBmcmFtZV9oaWdoID0gLTE7CisgICAgIH0KKyAK Ky0gIHByaW50X3ZhbHVlcyA9IHBhcnNlX3ByaW50X3ZhbHVlcyAoYXJndlswXSk7CisrICBwcmlu dF92YWx1ZXMgPSBwYXJzZV9wcmludF92YWx1ZXMgKGFyZ3ZbcmF3X2FyZ10pOworIAorICAgLyog TGV0J3MgcG9zaXRpb24gZmkgb24gdGhlIGZyYW1lIGF0IHdoaWNoIHRvIHN0YXJ0IHRoZQorICAg ICAgZGlzcGxheS4gQ291bGQgYmUgdGhlIGlubmVybW9zdCBmcmFtZSBpZiB0aGUgd2hvbGUgc3Rh Y2sgbmVlZHMKK0BAIC0yMDMsMjEgKzMwOCw0MSBAQCBtaV9jbWRfc3RhY2tfbGlzdF9hcmdzIChj aGFyICpjb21tYW5kLCBjCisgICBjbGVhbnVwX3N0YWNrX2FyZ3MKKyAgICAgPSBtYWtlX2NsZWFu dXBfdWlfb3V0X2xpc3RfYmVnaW5fZW5kICh1aW91dCwgInN0YWNrLWFyZ3MiKTsKKyAKKy0gIC8q IE5vdyBsZXQncyBwcmludCB0aGUgZnJhbWVzIHVwIHRvIGZyYW1lX2hpZ2gsIG9yIHVudGlsIHRo ZXJlIGFyZQorLSAgICAgZnJhbWVzIGluIHRoZSBzdGFjay4gICovCistICBmb3IgKDsKKy0gICAg ICAgZmkgJiYgKGkgPD0gZnJhbWVfaGlnaCB8fCBmcmFtZV9oaWdoID09IC0xKTsKKy0gICAgICAg aSsrLCBmaSA9IGdldF9wcmV2X2ZyYW1lIChmaSkpCisrICBpZiAoISByYXdfYXJnICYmIGZyYW1l X2ZpbHRlcnMpCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cF9mcmFtZTsK KysgICAgICBpbnQgZmxhZ3MgPSBQUklOVF9MRVZFTCB8IFBSSU5UX0FSR1M7CisrICAgICAgaW50 IHB5X2ZyYW1lX2xvdyA9IGZyYW1lX2xvdzsKKyAKKy0gICAgICBRVUlUOworLSAgICAgIGNsZWFu dXBfZnJhbWUgPSBtYWtlX2NsZWFudXBfdWlfb3V0X3R1cGxlX2JlZ2luX2VuZCAodWlvdXQsICJm cmFtZSIpOworLSAgICAgIHVpX291dF9maWVsZF9pbnQgKHVpb3V0LCAibGV2ZWwiLCBpKTsKKy0g ICAgICBsaXN0X2FyZ3Nfb3JfbG9jYWxzIChhcmd1bWVudHMsIHByaW50X3ZhbHVlcywgZmkpOwor LSAgICAgIGRvX2NsZWFudXBzIChjbGVhbnVwX2ZyYW1lKTsKKysgICAgICAvKiBXZSBjYW5ub3Qg cGFzcyAtMSB0byBmcmFtZV9sb3csIGFzIHRoYXQgd291bGQgc2lnbmlmeSBhCisrICAgICAgcmVs YXRpdmUgYmFja3RyYWNlIGZyb20gdGhlIHRhaWwgb2YgdGhlIHN0YWNrLiAgU28sIGluIHRoZSBj YXNlCisrICAgICAgb2YgZnJhbWVfbG93ID09IC0xLCBhc3NpZ24gYW5kIGluY3JlbWVudCBpdC4g ICovCisrICAgICAgaWYgKHB5X2ZyYW1lX2xvdyA9PSAtMSkKKysJcHlfZnJhbWVfbG93Kys7Cisr CisrICAgICAgcmVzdWx0ID0gYXBwbHlfZnJhbWVfZmlsdGVyIChnZXRfY3VycmVudF9mcmFtZSAo KSwgZmxhZ3MsCisrCQkJCSAgIHByaW50X3ZhbHVlcywgY3VycmVudF91aW91dCwKKysJCQkJICAg cHlfZnJhbWVfbG93LCBmcmFtZV9oaWdoKTsKKyAgICAgfQorIAorKyAgICAgLyogUnVuIHRoZSBp bmJ1aWx0IGJhY2t0cmFjZSBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyByZWdpc3RlcmVkLCBvcgor KyAgICAgIGlmICItLW5vLWZyYW1lLWZpbHRlcnMiIGhhcyBiZWVuIHNwZWNpZmllZCBmcm9tIHRo ZSBjb21tYW5kLiAgKi8KKysgICBpZiAoISBmcmFtZV9maWx0ZXJzIHx8IHJhd19hcmcgIHx8IHJl c3VsdCA9PSBQWV9CVF9OT19GSUxURVJTKQorKyAgICAgeworKyAgICAgIC8qIE5vdyBsZXQncyBw cmludCB0aGUgZnJhbWVzIHVwIHRvIGZyYW1lX2hpZ2gsIG9yIHVudGlsIHRoZXJlIGFyZQorKwkg ZnJhbWVzIGluIHRoZSBzdGFjay4gICovCisrICAgICAgZm9yICg7CisrCSAgIGZpICYmIChpIDw9 IGZyYW1lX2hpZ2ggfHwgZnJhbWVfaGlnaCA9PSAtMSk7CisrCSAgIGkrKywgZmkgPSBnZXRfcHJl dl9mcmFtZSAoZmkpKQorKwl7CisrCSAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBfZnJhbWU7Cisr CisrCSAgUVVJVDsKKysJICBjbGVhbnVwX2ZyYW1lID0gbWFrZV9jbGVhbnVwX3VpX291dF90dXBs ZV9iZWdpbl9lbmQgKHVpb3V0LCAiZnJhbWUiKTsKKysJICB1aV9vdXRfZmllbGRfaW50ICh1aW91 dCwgImxldmVsIiwgaSk7CisrCSAgbGlzdF9hcmdzX29yX2xvY2FscyAoYXJndW1lbnRzLCBwcmlu dF92YWx1ZXMsIGZpKTsKKysJICBkb19jbGVhbnVwcyAoY2xlYW51cF9mcmFtZSk7CisrCX0KKysg ICAgfQorICAgZG9fY2xlYW51cHMgKGNsZWFudXBfc3RhY2tfYXJncyk7CisgfQorIAorQEAgLTIz MCwxMyArMzU1LDM1IEBAIHZvaWQKKyBtaV9jbWRfc3RhY2tfbGlzdF92YXJpYWJsZXMgKGNoYXIg KmNvbW1hbmQsIGNoYXIgKiphcmd2LCBpbnQgYXJnYykKKyB7CisgICBzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWU7CisrICBpbnQgcmF3X2FyZyA9IDA7CisrICBlbnVtIHB5X2J0X3N0YXR1cyByZXN1 bHQgPSBQWV9CVF9FUlJPUjsKKysgIGludCBwcmludF92YWx1ZTsKKysKKysgIGlmIChhcmdjID4g MCkKKysgICAgcmF3X2FyZyA9IHBhcnNlX25vX2ZyYW1lc19vcHRpb24gKGFyZ3ZbMF0pOworKwor KyAgaWYgKGFyZ2MgPCAxIHx8IGFyZ2MgPiAyIHx8IChhcmdjID09IDIgJiYgISByYXdfYXJnKQor KyAgICAgIHx8IChhcmdjID09IDEgJiYgcmF3X2FyZykpCisrICAgIGVycm9yIChfKCItc3RhY2st bGlzdC12YXJpYWJsZXM6IFVzYWdlOiAiIFwKKysJICAgICAiWy0tbm8tZnJhbWUtZmlsdGVyc10g UFJJTlRfVkFMVUVTIikpOworIAorLSAgaWYgKGFyZ2MgIT0gMSkKKy0gICAgZXJyb3IgKF8oIlVz YWdlOiBQUklOVF9WQUxVRVMiKSk7CistCistICBmcmFtZSA9IGdldF9zZWxlY3RlZF9mcmFtZSAo TlVMTCk7CisrICAgZnJhbWUgPSBnZXRfc2VsZWN0ZWRfZnJhbWUgKE5VTEwpOworKyAgIHByaW50 X3ZhbHVlID0gcGFyc2VfcHJpbnRfdmFsdWVzIChhcmd2W3Jhd19hcmddKTsKKyAKKy0gIGxpc3Rf YXJnc19vcl9sb2NhbHMgKGFsbCwgcGFyc2VfcHJpbnRfdmFsdWVzIChhcmd2WzBdKSwgZnJhbWUp OworKyAgIGlmICghIHJhd19hcmcgJiYgZnJhbWVfZmlsdGVycykKKysgICAgIHsKKysgICAgICAg aW50IGZsYWdzID0gUFJJTlRfTEVWRUwgfCBQUklOVF9BUkdTIHwgUFJJTlRfTE9DQUxTOworKwor KyAgICAgICByZXN1bHQgPSBhcHBseV9mcmFtZV9maWx0ZXIgKGZyYW1lLCBmbGFncywgcHJpbnRf dmFsdWUsCisrCQkJCSAgICBjdXJyZW50X3Vpb3V0LCAwLCAwKTsKKysgICAgIH0KKysKKysgICAv KiBSdW4gdGhlIGluYnVpbHQgYmFja3RyYWNlIGlmIHRoZXJlIGFyZSBubyBmaWx0ZXJzIHJlZ2lz dGVyZWQsIG9yCisrICAgICAgaWYgIi0tbm8tZnJhbWUtZmlsdGVycyIgaGFzIGJlZW4gc3BlY2lm aWVkIGZyb20gdGhlIGNvbW1hbmQuICAqLworKyAgIGlmICghIGZyYW1lX2ZpbHRlcnMgfHwgcmF3 X2FyZyAgfHwgcmVzdWx0ID09IFBZX0JUX05PX0ZJTFRFUlMpCisrICAgICB7CisrICAgICAgIGxp c3RfYXJnc19vcl9sb2NhbHMgKGFsbCwgcHJpbnRfdmFsdWUsIGZyYW1lKTsKKysgICAgIH0KKyB9 CisgCisgLyogUHJpbnQgc2luZ2xlIGxvY2FsIG9yIGFyZ3VtZW50LiAgQVJHIG11c3QgYmUgYWxy ZWFkeSByZWFkIGluLiAgRm9yCitJbmRleDogZ2RiLTcuNi9nZGIvbWkvbWktY21kcy5jCis9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9taS9taS1jbWRzLmMJMjAxMy0wNS0yMCAyMjoy MzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9taS9taS1jbWRzLmMJMjAxMy0w NS0yMCAyMjoyNTo1Mi4xMTExNjU3NjcgKzAyMDAKK0BAIC04Niw2ICs4Niw3IEBAIHN0YXRpYyBz dHJ1Y3QgbWlfY21kIG1pX2NtZHNbXSA9CisgCQkgbWlfY21kX2RhdGFfd3JpdGVfcmVnaXN0ZXJf dmFsdWVzKSwKKyAgIERFRl9NSV9DTURfTUkgKCJlbmFibGUtdGltaW5ncyIsIG1pX2NtZF9lbmFi bGVfdGltaW5ncyksCisgICBERUZfTUlfQ01EX01JICgiZW5hYmxlLXByZXR0eS1wcmludGluZyIs IG1pX2NtZF9lbmFibGVfcHJldHR5X3ByaW50aW5nKSwKKysgIERFRl9NSV9DTURfTUkgKCJlbmFi bGUtZnJhbWUtZmlsdGVycyIsIG1pX2NtZF9lbmFibGVfZnJhbWVfZmlsdGVycyksCisgICBERUZf TUlfQ01EX01JICgiZW52aXJvbm1lbnQtY2QiLCBtaV9jbWRfZW52X2NkKSwKKyAgIERFRl9NSV9D TURfTUkgKCJlbnZpcm9ubWVudC1kaXJlY3RvcnkiLCBtaV9jbWRfZW52X2RpciksCisgICBERUZf TUlfQ01EX01JICgiZW52aXJvbm1lbnQtcGF0aCIsIG1pX2NtZF9lbnZfcGF0aCksCitJbmRleDog Z2RiLTcuNi9nZGIvbWkvbWktY21kcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dk Yi9taS9taS1jbWRzLmgJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBn ZGItNy42L2dkYi9taS9taS1jbWRzLmgJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTExNjU3NjcgKzAy MDAKK0BAIC0xMTgsNiArMTE4LDcgQEAgZXh0ZXJuIG1pX2NtZF9hcmd2X2Z0eXBlIG1pX2NtZF92 YXJfc2hvdworIGV4dGVybiBtaV9jbWRfYXJndl9mdHlwZSBtaV9jbWRfdmFyX3Nob3dfZm9ybWF0 OworIGV4dGVybiBtaV9jbWRfYXJndl9mdHlwZSBtaV9jbWRfdmFyX3VwZGF0ZTsKKyBleHRlcm4g bWlfY21kX2FyZ3ZfZnR5cGUgbWlfY21kX2VuYWJsZV9wcmV0dHlfcHJpbnRpbmc7CisrZXh0ZXJu IG1pX2NtZF9hcmd2X2Z0eXBlIG1pX2NtZF9lbmFibGVfZnJhbWVfZmlsdGVyczsKKyBleHRlcm4g bWlfY21kX2FyZ3ZfZnR5cGUgbWlfY21kX3Zhcl9zZXRfdXBkYXRlX3JhbmdlOworIAorIC8qIERl c2NyaXB0aW9uIG9mIGEgc2luZ2xlIGNvbW1hbmQuICAqLworSW5kZXg6IGdkYi03LjYvZ2RiL3B5 dGhvbi9weS1mcmFtZWZpbHRlci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEt MDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL3B5LWZy YW1lZmlsdGVyLmMJMjAxMy0wNS0yMCAyMjoyNjo1My4wMjkxNDMwNjggKzAyMDAKK0BAIC0wLDAg KzEsMTUyOCBAQAorKy8qIFB5dGhvbiBmcmFtZSBmaWx0ZXJzCisrCisrICAgQ29weXJpZ2h0IChD KSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEdEQi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICovCisrCisrI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAib2JqZmlsZXMuaCIKKysjaW5j bHVkZSAic3ltdGFiLmgiCisrI2luY2x1ZGUgImxhbmd1YWdlLmgiCisrI2luY2x1ZGUgImV4Y2Vw dGlvbnMuaCIKKysjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorKyNpbmNsdWRlICJweXRob24uaCIK KysjaW5jbHVkZSAidWktb3V0LmgiCisrI2luY2x1ZGUgInZhbHByaW50LmgiCisrI2luY2x1ZGUg ImFubm90YXRlLmgiCisrI2luY2x1ZGUgImhhc2h0YWIuaCIKKysjaW5jbHVkZSAiZGVtYW5nbGUu aCIKKysjaW5jbHVkZSAibWkvbWktY21kcy5oIgorKyNpbmNsdWRlICJweXRob24taW50ZXJuYWwu aCIKKysKKytlbnVtIG1pX3ByaW50X3R5cGVzCisreworKyAgTUlfUFJJTlRfQVJHUywKKysgIE1J X1BSSU5UX0xPQ0FMUworK307CisrCisrLyogSGVscGVyICBmdW5jdGlvbiAgdG8gIGV4dHJhY3Qg IGEgIHN5bWJvbCwgYSAgbmFtZSAgYW5kICBhICBsYW5ndWFnZQorKyAgIGRlZmluaXRpb24gZnJv bSBhIFB5dGhvbiBvYmplY3QgdGhhdCBjb25mb3JtcyB0byB0aGUgIlN5bWJvbCBWYWx1ZSIKKysg ICBpbnRlcmZhY2UuICBPQkogIGlzIHRoZSBQeXRob24gIG9iamVjdCB0byBleHRyYWN0IHRoZSAg dmFsdWVzIGZyb20uCisrICAgTkFNRSBpcyBhICBwYXNzLXRocm91Z2ggYXJndW1lbnQgd2hlcmUg dGhlIG5hbWUgb2YgIHRoZSBzeW1ib2wgd2lsbAorKyAgIGJlIHdyaXR0ZW4uICBOQU1FIGlzIGFs bG9jYXRlZCBpbiAgdGhpcyBmdW5jdGlvbiwgYnV0IHRoZSBjYWxsZXIgaXMKKysgICByZXNwb25z aWJsZSBmb3IgY2xlYW4gdXAuICBTWU0gaXMgYSBwYXNzLXRocm91Z2ggYXJndW1lbnQgd2hlcmUg dGhlCisrICAgc3ltYm9sIHdpbGwgYmUgd3JpdHRlbi4gIEluIHRoZSBjYXNlIG9mIHRoZSBBUEkg cmV0dXJuaW5nIGEgc3RyaW5nLAorKyAgIHRoaXMgd2lsbCBiZSBzZXQgdG8gTlVMTC4gIExBTkdV QUdFIGlzIGFsc28gYSBwYXNzLXRocm91Z2ggYXJndW1lbnQKKysgICBkZW5vdGluZyB0aGUgbGFu Z3VhZ2UgYXR0cmlidXRlZCB0byB0aGUgU3ltYm9sLiAgSW4gdGhlIGNhc2Ugb2YgU1lNCisrICAg YmVpbmcgIE5VTEwsIHRoaXMgIHdpbGwgYmUgIHNldCB0byAgdGhlIGN1cnJlbnQgIGxhbmd1YWdl LiAgUmV0dXJucworKyAgIFBZX0JUX0VSUk9SIG9uIGVycm9yIHdpdGggdGhlIGFwcHJvcHJpYXRl IFB5dGhvbiBleGNlcHRpb24gc2V0LCBhbmQKKysgICBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8K KysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytleHRyYWN0X3N5bSAoUHlPYmplY3QgKm9i aiwgY2hhciAqKm5hbWUsIHN0cnVjdCBzeW1ib2wgKipzeW0sCisrCSAgICAgY29uc3Qgc3RydWN0 IGxhbmd1YWdlX2RlZm4gKipsYW5ndWFnZSkKKyt7CisrICBQeU9iamVjdCAqcmVzdWx0ID0gUHlP YmplY3RfQ2FsbE1ldGhvZCAob2JqLCAic3ltYm9sIiwgTlVMTCk7CisrCisrICBpZiAocmVzdWx0 ID09IE5VTEwpCisrICAgIHJldHVybiBQWV9CVF9FUlJPUjsKKysKKysgIC8qIEZvciAnc3ltYm9s JyBjYWxsYmFjaywgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBzeW1ib2wgb3IgYQorKyAgICAg c3RyaW5nLiAgKi8KKysgIGlmIChnZGJweV9pc19zdHJpbmcgKHJlc3VsdCkpCisrICAgIHsKKysg ICAgICAqbmFtZSA9IHB5dGhvbl9zdHJpbmdfdG9faG9zdF9zdHJpbmcgKHJlc3VsdCk7CisrICAg ICAgUHlfREVDUkVGIChyZXN1bHQpOworKworKyAgICAgIGlmICgqbmFtZSA9PSBOVUxMKQorKwly ZXR1cm4gUFlfQlRfRVJST1I7CisrICAgICAgLyogSWYgdGhlIEFQSSByZXR1cm5zIGEgc3RyaW5n IChhbmQgbm90IGEgc3ltYm9sKSwgdGhlbiB0aGVyZSBpcworKwlubyBzeW1ib2wgZGVyaXZlZCBs YW5ndWFnZSBhdmFpbGFibGUgYW5kIHRoZSBmcmFtZSBmaWx0ZXIgaGFzCisrCWVpdGhlciBvdmVy cmlkZGVuIHRoZSBzeW1ib2wgd2l0aCBhIHN0cmluZywgb3Igc3VwcGxpZWQgYQorKwllbnRpcmVs eSBzeW50aGV0aWMgc3ltYm9sL3ZhbHVlIHBhaXJpbmcuICBJbiB0aGF0IGNhc2UsIHVzZQorKwlw eXRob25fbGFuZ3VhZ2UuICAqLworKyAgICAgICpsYW5ndWFnZSA9IHB5dGhvbl9sYW5ndWFnZTsK KysgICAgICAqc3ltID0gTlVMTDsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyog VGhpcyB0eXBlIGNoZWNrcyAncmVzdWx0JyBkdXJpbmcgdGhlIGNvbnZlcnNpb24gc28gd2UKKysJ IGp1c3QgY2FsbCBpdCB1bmNvbmRpdGlvbmFsbHkgYW5kIGNoZWNrIHRoZSByZXR1cm4uICAqLwor KyAgICAgICpzeW0gPSBzeW1ib2xfb2JqZWN0X3RvX3N5bWJvbCAocmVzdWx0KTsKKysKKysgICAg ICBQeV9ERUNSRUYgKHJlc3VsdCk7CisrCisrICAgICAgaWYgKCpzeW0gPT0gTlVMTCkKKysJewor KwkgIFB5RXJyX1NldFN0cmluZyAoUHlFeGNfUnVudGltZUVycm9yLAorKwkJCSAgIF8oIlVuZXhw ZWN0ZWQgdmFsdWUuICBFeHBlY3RpbmcgYSAiCisrCQkJICAgICAiZ2RiLlN5bWJvbCBvciBhIFB5 dGhvbiBzdHJpbmcuIikpOworKwkgIHJldHVybiBQWV9CVF9FUlJPUjsKKysJfQorKworKyAgICAg IC8qIER1cGxpY2F0ZSB0aGUgc3ltYm9sIG5hbWUsIHNvIHRoZSBjYWxsZXIgaGFzIGNvbnNpc3Rl bmN5CisrCSBpbiBnYXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyAgICAgICpuYW1lID0geHN0cmR1 cCAoU1lNQk9MX1BSSU5UX05BTUUgKCpzeW0pKTsKKysKKysgICAgICAvKiBJZiBhIHN5bWJvbCBp cyBzcGVjaWZpZWQgYXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGxhbmd1YWdlCisrCSBmcm9tIHRo ZSBzeW1ib2wuICBJZiBtb2RlIGlzIG5vdCAiYXV0byIsIHRoZW4gdGhlIGxhbmd1YWdlCisrCSBo YXMgYmVlbiBleHBsaWNpdGx5IHNldCwgdXNlIHRoYXQuICAqLworKyAgICAgIGlmIChsYW5ndWFn ZV9tb2RlID09IGxhbmd1YWdlX21vZGVfYXV0bykKKysJKmxhbmd1YWdlID0gbGFuZ3VhZ2VfZGVm IChTWU1CT0xfTEFOR1VBR0UgKCpzeW0pKTsKKysgICAgICBlbHNlCisrCSpsYW5ndWFnZSA9IGN1 cnJlbnRfbGFuZ3VhZ2U7CisrICAgIH0KKysKKysgIHJldHVybiBQWV9CVF9PSzsKKyt9CisrCisr LyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYSB2YWx1ZSBmcm9tIGFuIG9iamVjdCB0aGF0 IGNvbmZvcm1zIHRvCisrICAgdGhlICJTeW1ib2wgVmFsdWUiIGludGVyZmFjZS4gIE9CSiBpcyB0 aGUgUHl0aG9uIG9iamVjdCB0byBleHRyYWN0CisrICAgdGhlIHZhbHVlIGZyb20uICBWQUxVRSBp cyBhIHBhc3MtdGhyb3VnaCBhcmd1bWVudCB3aGVyZSB0aGUgdmFsdWUKKysgICB3aWxsIGJlIHdy aXR0ZW4uICBJZiB0aGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIHZhbHVlIGF0dHJpYnV0ZSwK KysgICBvciBwcm92aWRlcyB0aGUgUHl0aG9uIE5vbmUgZm9yIGEgdmFsdWUsIFZBTFVFIHdpbGwg YmUgc2V0IHRvIE5VTEwKKysgICBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhcyBzdWNj ZXNzZnVsLiAgUmV0dXJucyBQWV9CVF9FUlJPUgorKyAgIG9uIGVycm9yIHdpdGggdGhlIGFwcHJv cHJpYXRlIFB5dGhvbiBleGNlcHRpb24gc2V0LCBhbmQgUFlfQlRfT0sgb24KKysgICBzdWNjZXNz LiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytleHRyYWN0X3ZhbHVlIChQeU9i amVjdCAqb2JqLCBzdHJ1Y3QgdmFsdWUgKip2YWx1ZSkKKyt7CisrICBpZiAoUHlPYmplY3RfSGFz QXR0clN0cmluZyAob2JqLCAidmFsdWUiKSkKKysgICAgeworKyAgICAgIFB5T2JqZWN0ICp2cmVz dWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCAob2JqLCAidmFsdWUiLCBOVUxMKTsKKysKKysgICAg ICBpZiAodnJlc3VsdCA9PSBOVUxMKQorKwlyZXR1cm4gUFlfQlRfRVJST1I7CisrCisrICAgICAg LyogVGhlIFB5dGhvbiBjb2RlIGhhcyByZXR1cm5lZCAnTm9uZScgZm9yIGEgdmFsdWUsIHNvIHdl IHNldAorKwkgdmFsdWUgdG8gTlVMTC4gIFRoaXMgZmxhZ3MgdGhhdCBHREIgc2hvdWxkIHJlYWQg dGhlCisrCSB2YWx1ZS4gICovCisrICAgICAgaWYgKHZyZXN1bHQgPT0gUHlfTm9uZSkKKysJewor KwkgIFB5X0RFQ1JFRiAodnJlc3VsdCk7CisrCSAgKnZhbHVlID0gTlVMTDsKKysJICByZXR1cm4g UFlfQlRfT0s7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAqdmFsdWUgPSBjb252ZXJ0X3Zh bHVlX2Zyb21fcHl0aG9uICh2cmVzdWx0KTsKKysJICBQeV9ERUNSRUYgKHZyZXN1bHQpOworKwor KwkgIGlmICgqdmFsdWUgPT0gTlVMTCkKKysJICAgIHJldHVybiBQWV9CVF9FUlJPUjsKKysKKysJ ICByZXR1cm4gUFlfQlRfT0s7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICAqdmFsdWUgPSBO VUxMOworKworKyAgcmV0dXJuIFBZX0JUX09LOworK30KKysKKysvKiBNSSBwcmludHMgb25seSBj ZXJ0YWluIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgb2Ygc3ltYm9sIGFuZAorKyAgIGFs c28gd2hhdCB0aGUgdXNlciBoYXMgc3BlY2lmaWVkLiAgU1lNIGlzIHRoZSBzeW1ib2wgdG8gY2hl Y2ssIGFuZAorKyAgIE1JX1BSSU5UX1RZUEVTIGlzIGFuIGVudW0gc3BlY2lmeWluZyB3aGF0IHRo ZSB1c2VyIHdhbnRzIGVtaXR0ZWQKKysgICBmb3IgdGhlIE1JIGNvbW1hbmQgaW4gcXVlc3Rpb24u ICAqLworK3N0YXRpYyBpbnQKKyttaV9zaG91bGRfcHJpbnQgKHN0cnVjdCBzeW1ib2wgKnN5bSwg ZW51bSBtaV9wcmludF90eXBlcyB0eXBlKQorK3sKKysgIGludCBwcmludF9tZSA9IDA7CisrCisr ICBzd2l0Y2ggKFNZTUJPTF9DTEFTUyAoc3ltKSkKKysgICAgeworKyAgICBkZWZhdWx0OgorKyAg ICBjYXNlIExPQ19VTkRFRjoJLyogY2F0Y2hlcyBlcnJvcnMgICAgICAgICovCisrICAgIGNhc2Ug TE9DX0NPTlNUOgkvKiBjb25zdGFudCAgICAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfVFlQ RURFRjoJLyogbG9jYWwgdHlwZWRlZiAgICAgICAgICovCisrICAgIGNhc2UgTE9DX0xBQkVMOgkv KiBsb2NhbCBsYWJlbCAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfQkxPQ0s6CS8qIGxvY2Fs IGZ1bmN0aW9uICAgICAgICAqLworKyAgICBjYXNlIExPQ19DT05TVF9CWVRFUzoJLyogbG9jLiBi eXRlIHNlcS4gICAgICAgICovCisrICAgIGNhc2UgTE9DX1VOUkVTT0xWRUQ6CS8qIHVucmVzb2x2 ZWQgc3RhdGljICAgICAqLworKyAgICBjYXNlIExPQ19PUFRJTUlaRURfT1VUOgkvKiBvcHRpbWl6 ZWQgb3V0ICAgICAgICAgKi8KKysgICAgICBwcmludF9tZSA9IDA7CisrICAgICAgYnJlYWs7Cisr CisrICAgIGNhc2UgTE9DX0FSRzoJLyogYXJndW1lbnQgICAgICAgICAgICAgICovCisrICAgIGNh c2UgTE9DX1JFRl9BUkc6CS8qIHJlZmVyZW5jZSBhcmcgICAgICAgICAqLworKyAgICBjYXNlIExP Q19SRUdQQVJNX0FERFI6CS8qIGluZGlyZWN0IHJlZ2lzdGVyIGFyZyAqLworKyAgICBjYXNlIExP Q19MT0NBTDoJLyogc3RhY2sgbG9jYWwgICAgICAgICAgICovCisrICAgIGNhc2UgTE9DX1NUQVRJ QzoJLyogc3RhdGljICAgICAgICAgICAgICAgICovCisrICAgIGNhc2UgTE9DX1JFR0lTVEVSOgkv KiByZWdpc3RlciAgICAgICAgICAgICAgKi8KKysgICAgY2FzZSBMT0NfQ09NUFVURUQ6CS8qIGNv bXB1dGVkIGxvY2F0aW9uICAgICAqLworKyAgICAgIGlmICh0eXBlID09IE1JX1BSSU5UX0xPQ0FM UykKKysJcHJpbnRfbWUgPSAhIFNZTUJPTF9JU19BUkdVTUVOVCAoc3ltKTsKKysgICAgICBlbHNl CisrCXByaW50X21lID0gU1lNQk9MX0lTX0FSR1VNRU5UIChzeW0pOworKyAgICB9CisrICByZXR1 cm4gcHJpbnRfbWU7CisrfQorKworKy8qIEhlbHBlciBmdW5jdGlvbiB3aGljaCBvdXRwdXRzIGEg dHlwZSBuYW1lIGV4dHJhY3RlZCBmcm9tIFZBTCB0byBhCisrICAgInR5cGUiIGZpZWxkIGluIHRo ZSBvdXRwdXQgc3RyZWFtIE9VVC4gIE9VVCBpcyB0aGUgdWktb3V0IHN0cnVjdHVyZQorKyAgIHRo ZSB0eXBlIG5hbWUgd2lsbCBiZSBvdXRwdXQgdG9vLCBhbmQgVkFMIGlzIHRoZSB2YWx1ZSB0aGF0 IHRoZQorKyAgIHR5cGUgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbS4gIFJldHVybnMgUFlfQlRfRVJS T1Igb24gZXJyb3IsIHdpdGgKKysgICBhbnkgR0RCIGV4Y2VwdGlvbnMgY29udmVydGVkIHRvIGEg UHl0aG9uIGV4Y2VwdGlvbiwgb3IgUFlfQlRfT0sgb24KKysgICBzdWNjZXNzLiAgKi8KKysKKytz dGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF90eXBlIChzdHJ1Y3QgdWlfb3V0ICpv dXQsIHN0cnVjdCB2YWx1ZSAqdmFsKQorK3sKKysgIHZvbGF0aWxlIHN0cnVjdCBnZGJfZXhjZXB0 aW9uIGV4Y2VwdDsKKysKKysgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisr ICAgIHsKKysgICAgICBzdHJ1Y3QgdHlwZSAqdHlwZTsKKysgICAgICBzdHJ1Y3QgdWlfZmlsZSAq c3RiOworKyAgICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwOworKworKyAgICAgIHN0YiA9IG1l bV9maWxlb3BlbiAoKTsKKysgICAgICBjbGVhbnVwID0gbWFrZV9jbGVhbnVwX3VpX2ZpbGVfZGVs ZXRlIChzdGIpOworKyAgICAgIHR5cGUgPSBjaGVja190eXBlZGVmICh2YWx1ZV90eXBlICh2YWwp KTsKKysgICAgICB0eXBlX3ByaW50ICh2YWx1ZV90eXBlICh2YWwpLCAiIiwgc3RiLCAtMSk7Cisr ICAgICAgdWlfb3V0X2ZpZWxkX3N0cmVhbSAob3V0LCAidHlwZSIsIHN0Yik7CisrICAgICAgZG9f Y2xlYW51cHMgKGNsZWFudXApOworKyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisr ICAgIHsKKysgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICBy ZXR1cm4gUFlfQlRfRVJST1I7CisrICAgIH0KKysKKysgIHJldHVybiBQWV9CVF9PSzsKKyt9Cisr CisrLyogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIG91dHB1dHMgYSB2YWx1ZSB0byBhbiBvdXRwdXQg ZmllbGQgaW4gYQorKyAgIHN0cmVhbS4gIE9VVCBpcyB0aGUgdWktb3V0IHN0cnVjdHVyZSB0aGUg dmFsdWUgd2lsbCBiZSBvdXRwdXQgdG8sCisrICAgVkFMIGlzIHRoZSB2YWx1ZSB0aGF0IHdpbGwg YmUgcHJpbnRlZCwgT1BUUyBjb250YWlucyB0aGUgdmFsdWUKKysgICBwcmludGluZyBvcHRpb25z LCBBUkdTX1RZUEUgaXMgYW4gZW51bWVyYXRvciBkZXNjcmliaW5nIHRoZQorKyAgIGFyZ3VtZW50 IGZvcm1hdCwgYW5kIExBTkdVQUdFIGlzIHRoZSBsYW5ndWFnZV9kZWZuIHRoYXQgdGhlIHZhbHVl CisrICAgd2lsbCBiZSBwcmludGVkIHdpdGguICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uIGVycm9y LCB3aXRoIGFueSBHREIKKysgICBleGNlcHRpb25zIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBleGNl cHRpb24sIG9yIFBZX0JUX09LIG9uCisrICAgc3VjY2Vzcy4gKi8KKysKKytzdGF0aWMgZW51bSBw eV9idF9zdGF0dXMKKytweV9wcmludF92YWx1ZSAoc3RydWN0IHVpX291dCAqb3V0LCBzdHJ1Y3Qg dmFsdWUgKnZhbCwKKysJCWNvbnN0IHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25zICpvcHRzLAor KwkJaW50IGluZGVudCwKKysJCWVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQljb25z dCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2UpCisreworKyAgaW50IHNob3VsZF9wcmlu dCA9IDA7CisrICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrICBpbnQg bG9jYWxfaW5kZW50ID0gKDQgKiBpbmRlbnQpOworKworKyAgLyogTmV2ZXIgc2V0IGFuIGluZGVu dCBsZXZlbCBmb3IgY29tbW9uX3ZhbF9wcmludCBpZiBNSS4gICovCisrICBpZiAodWlfb3V0X2lz X21pX2xpa2VfcCAob3V0KSkKKysgICAgbG9jYWxfaW5kZW50ID0gMDsKKysKKysgIC8qIE1JIGRv ZXMgbm90IHByaW50IGNlcnRhaW4gdmFsdWVzLCBkaWZmZXJlbnRpYXRlZCBieSB0eXBlLAorKyAg ICAgZGVwZW5kaW5nIG9uIHdoYXQgQVJHU19UWVBFIGluZGljYXRlcy4gIFRlc3QgdHlwZSBhZ2Fp bnN0IG9wdGlvbi4KKysgICAgIEZvciBDTEkgcHJpbnQgYWxsIHZhbHVlcy4gICovCisrICBpZiAo YXJnc190eXBlID09IE1JX1BSSU5UX1NJTVBMRV9WQUxVRVMKKysgICAgICB8fCBhcmdzX3R5cGUg PT0gTUlfUFJJTlRfQUxMX1ZBTFVFUykKKysgICAgeworKyAgICAgIHN0cnVjdCB0eXBlICp0eXBl ID0gTlVMTDsKKysKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor Kwl7CisrCSAgdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKHZhbCkpOworKwl9Cisr ICAgICAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorKwl7CisrCSAgZ2RicHlfY29udmVydF9leGNl cHRpb24gKGV4Y2VwdCk7CisrCSAgcmV0dXJuIFBZX0JUX0VSUk9SOworKwl9CisrCisrICAgICAg aWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9BTExfVkFMVUVTKQorKwlzaG91bGRfcHJpbnQgPSAx OworKyAgICAgIGVsc2UgaWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9TSU1QTEVfVkFMVUVTCisr CSAgICAgICAmJiBUWVBFX0NPREUgKHR5cGUpICE9IFRZUEVfQ09ERV9BUlJBWQorKwkgICAgICAg JiYgVFlQRV9DT0RFICh0eXBlKSAhPSBUWVBFX0NPREVfU1RSVUNUCisrCSAgICAgICAmJiBUWVBF X0NPREUgKHR5cGUpICE9IFRZUEVfQ09ERV9VTklPTikKKysJc2hvdWxkX3ByaW50ID0gMTsKKysg ICAgfQorKyAgZWxzZSBpZiAoYXJnc190eXBlICE9IE5PX1ZBTFVFUykKKysgICAgc2hvdWxkX3By aW50ID0gMTsKKysKKysgIGlmIChzaG91bGRfcHJpbnQpCisrICAgIHsKKysgICAgICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgc3RydWN0IHVpX2ZpbGUgKnN0 YjsKKysJICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cDsKKysKKysJICBzdGIgPSBtZW1fZmlsZW9w ZW4gKCk7CisrCSAgY2xlYW51cCA9IG1ha2VfY2xlYW51cF91aV9maWxlX2RlbGV0ZSAoc3RiKTsK KysJICBjb21tb25fdmFsX3ByaW50ICh2YWwsIHN0YiwgaW5kZW50LCBvcHRzLCBsYW5ndWFnZSk7 CisrCSAgdWlfb3V0X2ZpZWxkX3N0cmVhbSAob3V0LCAidmFsdWUiLCBzdGIpOworKwkgIGRvX2Ns ZWFudXBzIChjbGVhbnVwKTsKKysJfQorKyAgICAgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysJ eworKwkgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkgIHJldHVybiBQWV9C VF9FUlJPUjsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gUFlfQlRfT0s7CisrfQorKworKy8q IEhlbHBlciBmdW5jdGlvbiB0byBjYWxsIGEgUHl0aG9uIG1ldGhvZCBhbmQgZXh0cmFjdCBhbiBp dGVyYXRvcgorKyAgIGZyb20gdGhlIHJlc3VsdC4gIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFu eXRoaW5nIGJ1dCBhbiBpdGVyYXRvcgorKyAgIHRoZSBleGNlcHRpb24gaXMgcHJlc2VydmVkIGFu ZCBOVUxMIGlzIHJldHVybmVkLiAgRklMVEVSIGlzIHRoZQorKyAgIFB5dGhvbiBvYmplY3QgdG8g Y2FsbCwgYW5kIEZVTkMgaXMgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZC4gIFJldHVybnMKKysgICBh IFB5T2JqZWN0LCBvciBOVUxMIG9uIGVycm9yIHdpdGggdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlv biBzZXQuCisrICAgVGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIGFuIGl0ZXJhdG9yLCBvciBOVUxM LiAgKi8KKysKKytzdGF0aWMgUHlPYmplY3QgKgorK2dldF9weV9pdGVyX2Zyb21fZnVuYyAoUHlP YmplY3QgKmZpbHRlciwgY2hhciAqZnVuYykKKyt7CisrICBpZiAoUHlPYmplY3RfSGFzQXR0clN0 cmluZyAoZmlsdGVyLCBmdW5jKSkKKysgICAgeworKyAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQ eU9iamVjdF9DYWxsTWV0aG9kIChmaWx0ZXIsIGZ1bmMsIE5VTEwpOworKworKyAgICAgIGlmIChy ZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIGlmIChyZXN1bHQgPT0gUHlfTm9uZSkKKysJICAgIHsK KysJICAgICAgcmV0dXJuIHJlc3VsdDsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAg ICAgIFB5T2JqZWN0ICppdGVyYXRvciA9IFB5T2JqZWN0X0dldEl0ZXIgKHJlc3VsdCk7CisrCisr CSAgICAgIFB5X0RFQ1JFRiAocmVzdWx0KTsKKysJICAgICAgcmV0dXJuIGl0ZXJhdG9yOworKwkg ICAgfQorKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgUHlfUkVUVVJOX05PTkU7CisrCisrICBy ZXR1cm4gTlVMTDsKKyt9CisrCisrLyogIEhlbHBlciBmdW5jdGlvbiB0byBvdXRwdXQgYSBzaW5n bGUgZnJhbWUgYXJndW1lbnQgYW5kIHZhbHVlIHRvIGFuCisrICAgIG91dHB1dCBzdHJlYW0uICBU aGlzIGZ1bmN0aW9uIHdpbGwgYWNjb3VudCBmb3IgZW50cnkgdmFsdWVzIGlmIHRoZQorKyAgICBG ViBwYXJhbWV0ZXIgaXMgcG9wdWxhdGVkLCB0aGUgZnJhbWUgYXJndW1lbnQgaGFzIGVudHJ5IHZh bHVlcworKyAgICBhc3NvY2lhdGVkIHdpdGggdGhlbSwgYW5kIHRoZSBhcHByb3ByaWF0ZSAic2V0 IGVudHJ5LXZhbHVlIgorKyAgICBvcHRpb25zIGFyZSBzZXQuICBXaWxsIG91dHB1dCBpbiBDTEkg b3IgTUkgbGlrZSBmb3JtYXQgZGVwZW5kaW5nCisrICAgIG9uIHRoZSB0eXBlIG9mIG91dHB1dCBz dHJlYW0gZGV0ZWN0ZWQuICBPVVQgaXMgdGhlIG91dHB1dCBzdHJlYW0sCisrICAgIFNZTV9OQU1F IGlzIHRoZSBuYW1lIG9mIHRoZSBzeW1ib2wuICBJZiBTWU1fTkFNRSBpcyBwb3B1bGF0ZWQgdGhl bgorKyAgICBpdCBtdXN0IGhhdmUgYW4gYWNjb21wYW55aW5nIHZhbHVlIGluIHRoZSBwYXJhbWV0 ZXIgRlYuICBGQSBpcyBhCisrICAgIGZyYW1lIGFyZ3VtZW50IHN0cnVjdHVyZS4gIElmIEZBIGlz IHBvcHVsYXRlZCwgYm90aCBTWU1fTkFNRSBhbmQKKysgICAgRlYgYXJlIGlnbm9yZWQuICBPUFRT IGNvbnRhaW5zIHRoZSB2YWx1ZSBwcmludGluZyBvcHRpb25zLAorKyAgICBBUkdTX1RZUEUgaXMg YW4gZW51bWVyYXRvciBkZXNjcmliaW5nIHRoZSBhcmd1bWVudCBmb3JtYXQsCisrICAgIFBSSU5U X0FSR1NfRklFTEQgaXMgYSBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB3ZSBvdXRwdXQgIkFSR1M9 MSIKKysgICAgaW4gTUkgb3V0cHV0IGluIGNvbW1hbmRzIHdoZXJlIGJvdGggYXJndW1lbnRzIGFu ZCBsb2NhbHMgYXJlCisrICAgIHByaW50ZWQuICBSZXR1cm5zIFBZX0JUX0VSUk9SIG9uIGVycm9y LCB3aXRoIGFueSBHREIgZXhjZXB0aW9ucworKyAgICBjb252ZXJ0ZWQgdG8gYSBQeXRob24gZXhj ZXB0aW9uLCBvciBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9i dF9zdGF0dXMKKytweV9wcmludF9zaW5nbGVfYXJnIChzdHJ1Y3QgdWlfb3V0ICpvdXQsCisrCQkg ICAgIGNvbnN0IGNoYXIgKnN5bV9uYW1lLAorKwkJICAgICBzdHJ1Y3QgZnJhbWVfYXJnICpmYSwK KysJCSAgICAgc3RydWN0IHZhbHVlICpmdiwKKysJCSAgICAgY29uc3Qgc3RydWN0IHZhbHVlX3By aW50X29wdGlvbnMgKm9wdHMsCisrCQkgICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUs CisrCQkgICAgIGludCBwcmludF9hcmdzX2ZpZWxkLAorKwkJICAgICBjb25zdCBzdHJ1Y3QgbGFu Z3VhZ2VfZGVmbiAqbGFuZ3VhZ2UpCisreworKyAgc3RydWN0IHZhbHVlICp2YWw7CisrICB2b2xh dGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrCisrICBpZiAoZmEgIT0gTlVMTCkK KysgICAgeworKyAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2VfZGVmIChTWU1CT0xfTEFOR1VBR0Ug KGZhLT5zeW0pKTsKKysgICAgICB2YWwgPSBmYS0+dmFsOworKyAgICB9CisrICBlbHNlCisrICAg IHZhbCA9IGZ2OworKworKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysg ICAgeworKyAgICAgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAobnVs bF9jbGVhbnVwLCBOVUxMKTsKKysKKysgICAgICAvKiAgTUkgaGFzIHZhcnlpbmcgcnVsZXMgZm9y IHR1cGxlcywgYnV0IGdlbmVyYWxseSBpZiB0aGVyZSBpcyBvbmx5CisrICAgICAgb25lIGVsZW1l bnQgaW4gZWFjaCBpdGVtIGluIHRoZSBsaXN0LCBkbyBub3Qgc3RhcnQgYSB0dXBsZS4gIFRoZQor KyAgICAgIGV4Y2VwdGlvbiBpcyAtc3RhY2stbGlzdC12YXJpYWJsZXMgd2hpY2ggZW1pdHMgYW4g QVJHUz0iMSIgZmllbGQKKysgICAgICBpZiB0aGUgdmFsdWUgaXMgYSBmcmFtZSBhcmd1bWVudC4g IFRoaXMgaXMgZGVub3RlZCBpbiB0aGlzCisrICAgICAgZnVuY3Rpb24gd2l0aCBQUklOVF9BUkdT X0ZJRUxEIHdoaWNoIGlzIGZsYWcgZnJvbSB0aGUgY2FsbGVyIHRvCisrICAgICAgZW1pdCB0aGUg QVJHUyBmaWVsZC4gICovCisrICAgICAgaWYgKHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisr CXsKKysJICBpZiAocHJpbnRfYXJnc19maWVsZCB8fCBhcmdzX3R5cGUgIT0gTk9fVkFMVUVTKQor KwkgICAgbWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQgKG91dCwgTlVMTCk7Cisr CX0KKysKKysgICAgICBhbm5vdGF0ZV9hcmdfYmVnaW4gKCk7CisrCisrICAgICAgLyogSWYgZnJh bWUgYXJndW1lbnQgaXMgcG9wdWxhdGVkLCBjaGVjayBmb3IgZW50cnktdmFsdWVzIGFuZCB0aGUK KysJIGVudHJ5IHZhbHVlIG9wdGlvbnMuICAqLworKyAgICAgIGlmIChmYSAhPSBOVUxMKQorKwl7 CisrCSAgc3RydWN0IHVpX2ZpbGUgKnN0YjsKKysKKysJICBzdGIgPSBtZW1fZmlsZW9wZW4gKCk7 CisrCSAgbWFrZV9jbGVhbnVwX3VpX2ZpbGVfZGVsZXRlIChzdGIpOworKwkgIGZwcmludGZfc3lt Ym9sX2ZpbHRlcmVkIChzdGIsIFNZTUJPTF9QUklOVF9OQU1FIChmYS0+c3ltKSwKKysJCQkJICAg U1lNQk9MX0xBTkdVQUdFIChmYS0+c3ltKSwKKysJCQkJICAgRE1HTF9QQVJBTVMgfCBETUdMX0FO U0kpOworKwkgIGlmIChmYS0+ZW50cnlfa2luZCA9PSBwcmludF9lbnRyeV92YWx1ZXNfY29tcGFj dCkKKysJICAgIHsKKysJICAgICAgZnB1dHNfZmlsdGVyZWQgKCI9Iiwgc3RiKTsKKysKKysJICAg ICAgZnByaW50Zl9zeW1ib2xfZmlsdGVyZWQgKHN0YiwgU1lNQk9MX1BSSU5UX05BTUUgKGZhLT5z eW0pLAorKwkJCQkgICAgICAgU1lNQk9MX0xBTkdVQUdFIChmYS0+c3ltKSwKKysJCQkJICAgICAg IERNR0xfUEFSQU1TIHwgRE1HTF9BTlNJKTsKKysJICAgIH0KKysJICBpZiAoZmEtPmVudHJ5X2tp bmQgPT0gcHJpbnRfZW50cnlfdmFsdWVzX29ubHkKKysJICAgICAgfHwgZmEtPmVudHJ5X2tpbmQg PT0gcHJpbnRfZW50cnlfdmFsdWVzX2NvbXBhY3QpCisrCSAgICB7CisrCSAgICAgIGZwdXRzX2Zp bHRlcmVkICgiQGVudHJ5Iiwgc3RiKTsKKysJICAgIH0KKysJICB1aV9vdXRfZmllbGRfc3RyZWFt IChvdXQsICJuYW1lIiwgc3RiKTsKKysJfQorKyAgICAgIGVsc2UKKysJLyogT3RoZXJ3aXNlLCBq dXN0IG91dHB1dCB0aGUgbmFtZS4gICovCisrCXVpX291dF9maWVsZF9zdHJpbmcgKG91dCwgIm5h bWUiLCBzeW1fbmFtZSk7CisrCisrICAgICAgYW5ub3RhdGVfYXJnX25hbWVfZW5kICgpOworKwor KyAgICAgIGlmICghIHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisrCXVpX291dF90ZXh0IChv dXQsICI9Iik7CisrCisrICAgICAgaWYgKHByaW50X2FyZ3NfZmllbGQpCisrCXVpX291dF9maWVs ZF9pbnQgKG91dCwgImFyZyIsIDEpOworKworKyAgICAgIC8qIEZvciBNSSBwcmludCB0aGUgdHlw ZSwgYnV0IG9ubHkgZm9yIHNpbXBsZSB2YWx1ZXMuICBUaGlzIHNlZW1zCisrCSB3ZWlyZCwgYnV0 IHRoaXMgaXMgaG93IE1JIGNob29zZSB0byBmb3JtYXQgdGhlIHZhcmlvdXMgb3V0cHV0CisrCSB0 eXBlcy4gICovCisrICAgICAgaWYgKGFyZ3NfdHlwZSA9PSBNSV9QUklOVF9TSU1QTEVfVkFMVUVT KQorKwl7CisrCSAgaWYgKHB5X3ByaW50X3R5cGUgKG91dCwgdmFsKSA9PSBQWV9CVF9FUlJPUikK KysJICAgIHsKKysJICAgICAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsKKysJICAgICAgZ290byBl cnJvcjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGFubm90YXRlX2FyZ192YWx1ZSAodmFsdWVf dHlwZSAodmFsKSk7CisrCisrICAgICAgLyogSWYgdGhlIG91dHB1dCBpcyB0byB0aGUgQ0xJLCBh bmQgdGhlIHVzZXIgb3B0aW9uICJzZXQgcHJpbnQKKysJIGZyYW1lLWFyZ3VtZW50cyIgaXMgc2V0 IHRvIG5vbmUsIGp1c3Qgb3V0cHV0ICIuLi4iLiAgKi8KKysgICAgICBpZiAoISB1aV9vdXRfaXNf bWlfbGlrZV9wIChvdXQpICYmIGFyZ3NfdHlwZSA9PSBOT19WQUxVRVMpCisrCXVpX291dF9maWVs ZF9zdHJpbmcgKG91dCwgInZhbHVlIiwgIi4uLiIpOworKyAgICAgIGVsc2UKKysJeworKwkgIC8q IE90aGVyd2lzZSwgcHJpbnQgdGhlIHZhbHVlIGZvciBib3RoIE1JIGFuZCB0aGUgQ0xJLCBleGNl cHQKKysJICAgICBmb3IgdGhlIGNhc2Ugb2YgTUlfUFJJTlRfTk9fVkFMVUVTLiAgKi8KKysJICBp ZiAoYXJnc190eXBlICE9IE5PX1ZBTFVFUykKKysJICAgIHsKKysJICAgICAgaWYgKHB5X3ByaW50 X3ZhbHVlIChvdXQsIHZhbCwgb3B0cywgMCwgYXJnc190eXBlLCBsYW5ndWFnZSkKKysJCSAgPT0g UFlfQlRfRVJST1IpCisrCQl7CisrCQkgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisrCQkgIGdv dG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCX0KKysKKysgICAgICBkb19jbGVhbnVwcyAoY2xl YW51cHMpOworKyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsKKysgICAg ICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICBnb3RvIGVycm9yOwor KyAgICB9CisrCisrICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVycm9yOgorKyAgcmV0dXJuIFBZ X0JUX0VSUk9SOworK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gbG9vcCBvdmVyIGZyYW1l IGFyZ3VtZW50cyBwcm92aWRlZCBieSB0aGUKKysgICAiZnJhbWVfYXJndW1lbnRzIiBQeXRob24g QVBJLiAgRWxlbWVudHMgaW4gdGhlIGl0ZXJhdG9yIG11c3QKKysgICBjb25mb3JtIHRvIHRoZSAi U3ltYm9sIFZhbHVlIiBpbnRlcmZhY2UuICBJVEVSIGlzIHRoZSBQeXRob24KKysgICBpdGVyYWJs ZSBvYmplY3QsIE9VVCBpcyB0aGUgb3V0cHV0IHN0cmVhbSwgQVJHU19UWVBFIGlzIGFuCisrICAg ZW51bWVyYXRvciBkZXNjcmliaW5nIHRoZSBhcmd1bWVudCBmb3JtYXQsIFBSSU5UX0FSR1NfRklF TEQgaXMgYQorKyAgIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHdlIG91dHB1dCAiQVJHUz0xIiBp biBNSSBvdXRwdXQgaW4gY29tbWFuZHMKKysgICB3aGVyZSBib3RoIGFyZ3VtZW50cyBhbmQgbG9j YWxzIGFyZSBwcmludGVkLCBhbmQgRlJBTUUgaXMgdGhlCisrICAgYmFja2luZyBmcmFtZS4gIFJl dHVybnMgUFlfQlRfRVJST1Igb24gZXJyb3IsIHdpdGggYW55IEdEQgorKyAgIGV4Y2VwdGlvbnMg Y29udmVydGVkIHRvIGEgUHl0aG9uIGV4Y2VwdGlvbiwgb3IgUFlfQlRfT0sgb24KKysgICBzdWNj ZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytlbnVtZXJhdGVfYXJncyAo UHlPYmplY3QgKml0ZXIsCisrCQlzdHJ1Y3QgdWlfb3V0ICpvdXQsCisrCQllbnVtIHB5X2ZyYW1l X2FyZ3MgYXJnc190eXBlLAorKwkJaW50IHByaW50X2FyZ3NfZmllbGQsCisrCQlzdHJ1Y3QgZnJh bWVfaW5mbyAqZnJhbWUpCisreworKyAgUHlPYmplY3QgKml0ZW07CisrICBzdHJ1Y3QgdmFsdWVf cHJpbnRfb3B0aW9ucyBvcHRzOworKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhj ZXB0OworKworKyAgZ2V0X3VzZXJfcHJpbnRfb3B0aW9ucyAoJm9wdHMpOworKworKyAgaWYgKGFy Z3NfdHlwZSA9PSBDTElfU0NBTEFSX1ZBTFVFUykKKysgICAgeworKyAgICAgIC8qIFRydWUgaW4g InN1bW1hcnkiIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4gICovCisrICAgICAgb3B0cy5zdW1tYXJ5 ID0gMTsKKysgICAgfQorKworKyAgb3B0cy5kZXJlZl9yZWYgPSAxOworKworKyAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysgICAgeworKyAgICAgIGFubm90YXRlX2ZyYW1l X2FyZ3MgKCk7CisrICAgIH0KKysgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysgICAgeworKyAg ICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKyAgICAgIGdvdG8gZXJyb3I7 CisrICAgIH0KKysKKysgIC8qICBDb2xsZWN0IHRoZSBmaXJzdCBhcmd1bWVudCBvdXRzaWRlIG9m IHRoZSBsb29wLCBzbyBvdXRwdXQgb2YKKysgICAgICBjb21tYXMgaW4gdGhlIGFyZ3VtZW50IG91 dHB1dCBpcyBjb3JyZWN0LiAgQXQgdGhlIGVuZCBvZiB0aGUKKysgICAgICBsb29wIGJsb2NrIGNv bGxlY3QgYW5vdGhlciBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLCBhbmQsIGlmIGl0IGlzCisrICAg ICAgbm90IG51bGwgZW1pdCBhIGNvbW1hLiAgKi8KKysgIGl0ZW0gPSBQeUl0ZXJfTmV4dCAoaXRl cik7CisrICBpZiAoaXRlbSA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkICgpKQorKyAgICBnb3Rv IGVycm9yOworKworKyAgd2hpbGUgKGl0ZW0pCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3Qg bGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2U7CisrICAgICAgY2hhciAqc3ltX25hbWU7CisrICAgICAg c3RydWN0IHN5bWJvbCAqc3ltOworKyAgICAgIHN0cnVjdCB2YWx1ZSAqdmFsOworKyAgICAgIGVu dW0gcHlfYnRfc3RhdHVzIHN1Y2Nlc3MgPSBQWV9CVF9FUlJPUjsKKysKKysgICAgICBzdWNjZXNz ID0gZXh0cmFjdF9zeW0gKGl0ZW0sICZzeW1fbmFtZSwgJnN5bSwgJmxhbmd1YWdlKTsKKysgICAg ICBpZiAoc3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJeworKwkgIFB5X0RFQ1JFRiAoaXRlbSk7 CisrCSAgZ290byBlcnJvcjsKKysJfQorKworKyAgICAgIHN1Y2Nlc3MgPSBleHRyYWN0X3ZhbHVl IChpdGVtLCAmdmFsKTsKKysgICAgICBpZiAoc3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJewor KwkgIHhmcmVlIChzeW1fbmFtZSk7CisrCSAgUHlfREVDUkVGIChpdGVtKTsKKysJICBnb3RvIGVy cm9yOworKwl9CisrCisrICAgICAgUHlfREVDUkVGIChpdGVtKTsKKysgICAgICBpdGVtID0gTlVM TDsKKysKKysgICAgICBpZiAoc3ltICYmIHVpX291dF9pc19taV9saWtlX3AgKG91dCkKKysJICAm JiAhIG1pX3Nob3VsZF9wcmludCAoc3ltLCBNSV9QUklOVF9BUkdTKSkKKysJeworKwkgIHhmcmVl IChzeW1fbmFtZSk7CisrCSAgY29udGludWU7CisrCX0KKysKKysgICAgICAvKiBJZiB0aGUgb2Jq ZWN0IGRpZCBub3QgcHJvdmlkZSBhIHZhbHVlLCByZWFkIGl0IHVzaW5nCisrCSByZWFkX2ZyYW1l X2FyZ3MgYW5kIGFjY291bnQgZm9yIGVudHJ5IHZhbHVlcywgaWYgYW55LiAgKi8KKysgICAgICBp ZiAodmFsID09IE5VTEwpCisrCXsKKysJICBzdHJ1Y3QgZnJhbWVfYXJnIGFyZywgZW50cnlhcmc7 CisrCisrCSAgLyogSWYgdGhlcmUgaXMgbm8gdmFsdWUsIGFuZCBhbHNvIG5vIHN5bWJvbCwgc2V0 IGVycm9yIGFuZAorKwkgICAgIGV4aXQuICAqLworKwkgIGlmIChzeW0gPT0gTlVMTCkKKysJICAg IHsKKysJICAgICAgUHlFcnJfU2V0U3RyaW5nIChQeUV4Y19SdW50aW1lRXJyb3IsCisrCQkJICAg ICAgIF8oIk5vIHN5bWJvbCBvciB2YWx1ZSBwcm92aWRlZC4iKSk7CisrCSAgICAgIHhmcmVlIChz eW1fbmFtZSk7CisrCSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9CisrCisrCSAgVFJZX0NBVENI IChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysJICAgIHsKKysJICAgICAgcmVhZF9mcmFtZV9h cmcgKHN5bSwgZnJhbWUsICZhcmcsICZlbnRyeWFyZyk7CisrCSAgICB9CisrCSAgaWYgKGV4Y2Vw dC5yZWFzb24gPCAwKQorKwkgICAgeworKwkgICAgICB4ZnJlZSAoc3ltX25hbWUpOworKwkgICAg ICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICAgICAgZ290byBlcnJvcjsK KysJICAgIH0KKysKKysJICAvKiBUaGUgb2JqZWN0IGhhcyBub3QgcHJvdmlkZWQgYSB2YWx1ZSwg c28gdGhpcyBpcyBhIGZyYW1lCisrCSAgICAgYXJndW1lbnQgdG8gYmUgcmVhZCBieSBHREIuICBJ biB0aGlzIGNhc2Ugd2UgaGF2ZSB0bworKwkgICAgIGFjY291bnQgZm9yIGVudHJ5LXZhbHVlcy4g ICovCisrCisrCSAgaWYgKGFyZy5lbnRyeV9raW5kICE9IHByaW50X2VudHJ5X3ZhbHVlc19vbmx5 KQorKwkgICAgeworKwkgICAgICBpZiAocHlfcHJpbnRfc2luZ2xlX2FyZyAob3V0LCBOVUxMLCAm YXJnLAorKwkJCQkgICAgICAgTlVMTCwgJm9wdHMsCisrCQkJCSAgICAgICBhcmdzX3R5cGUsCisr CQkJCSAgICAgICBwcmludF9hcmdzX2ZpZWxkLAorKwkJCQkgICAgICAgTlVMTCkgPT0gUFlfQlRf RVJST1IpCisrCQl7CisrCQkgIHhmcmVlIChhcmcuZXJyb3IpOworKwkJICB4ZnJlZSAoZW50cnlh cmcuZXJyb3IpOworKwkJICB4ZnJlZSAoc3ltX25hbWUpOworKwkJICBnb3RvIGVycm9yOworKwkJ fQorKwkgICAgfQorKworKwkgIGlmIChlbnRyeWFyZy5lbnRyeV9raW5kICE9IHByaW50X2VudHJ5 X3ZhbHVlc19ubykKKysJICAgIHsKKysJICAgICAgaWYgKGFyZy5lbnRyeV9raW5kICE9IHByaW50 X2VudHJ5X3ZhbHVlc19vbmx5KQorKwkJeworKwkJICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJO X01BU0tfQUxMKQorKwkJICAgIHsKKysJCSAgICAgIHVpX291dF90ZXh0IChvdXQsICIsICIpOwor KwkJICAgICAgdWlfb3V0X3dyYXBfaGludCAob3V0LCAiICAgICIpOworKwkJICAgIH0KKysJCSAg aWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorKwkJICAgIHsKKysJCSAgICAgIHhmcmVlIChhcmcuZXJy b3IpOworKwkJICAgICAgeGZyZWUgKGVudHJ5YXJnLmVycm9yKTsKKysJCSAgICAgIHhmcmVlIChz eW1fbmFtZSk7CisrCQkgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJ CSAgICAgIGdvdG8gZXJyb3I7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAocHlfcHJp bnRfc2luZ2xlX2FyZyAob3V0LCBOVUxMLCAmZW50cnlhcmcsIE5VTEwsCisrCQkJCSAgICAgICZv cHRzLCBhcmdzX3R5cGUsCisrCQkJCSAgICAgIHByaW50X2FyZ3NfZmllbGQsIE5VTEwpID09IFBZ X0JUX0VSUk9SKQorKwkJeworKwkJICAgICAgeGZyZWUgKGFyZy5lcnJvcik7CisrCQkgICAgICB4 ZnJlZSAoZW50cnlhcmcuZXJyb3IpOworKwkJICAgICAgeGZyZWUgKHN5bV9uYW1lKTsKKysJCSAg ICAgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgeGZyZWUgKGFyZy5lcnJvcik7 CisrCSAgeGZyZWUgKGVudHJ5YXJnLmVycm9yKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkg IC8qIElmIHRoZSBvYmplY3QgaGFzIHByb3ZpZGVkIGEgdmFsdWUsIHdlIGp1c3QgcHJpbnQgdGhh dC4gICovCisrCSAgaWYgKHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBpZiAocHlfcHJp bnRfc2luZ2xlX2FyZyAob3V0LCBzeW1fbmFtZSwgTlVMTCwgdmFsLCAmb3B0cywKKysJCQkJICAg ICAgIGFyZ3NfdHlwZSwgcHJpbnRfYXJnc19maWVsZCwKKysJCQkJICAgICAgIGxhbmd1YWdlKSA9 PSBQWV9CVF9FUlJPUikKKysJCXsKKysJCSAgeGZyZWUgKHN5bV9uYW1lKTsKKysJCSAgZ290byBl cnJvcjsKKysJCX0KKysJICAgIH0KKysJfQorKworKyAgICAgIHhmcmVlIChzeW1fbmFtZSk7Cisr CisrICAgICAgLyogQ29sbGVjdCB0aGUgbmV4dCBpdGVtIGZyb20gdGhlIGl0ZXJhdG9yLiAgSWYK KysJIHRoaXMgaXMgdGhlIGxhc3QgaXRlbSwgZG8gbm90IHByaW50IHRoZQorKwkgY29tbWEuICAq LworKyAgICAgIGl0ZW0gPSBQeUl0ZXJfTmV4dCAoaXRlcik7CisrICAgICAgaWYgKGl0ZW0gIT0g TlVMTCkKKysJeworKwkgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrCSAg ICB7CisrCSAgICAgIHVpX291dF90ZXh0IChvdXQsICIsICIpOworKwkgICAgfQorKwkgIGlmIChl eGNlcHQucmVhc29uIDwgMCkKKysJICAgIHsKKysJICAgICAgUHlfREVDUkVGIChpdGVtKTsKKysJ ICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7CisrCSAgICAgIGdvdG8gZXJy b3I7CisrCSAgICB9CisrCX0KKysgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCAoKSkKKysJ Z290byBlcnJvcjsKKysKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxM KQorKwl7CisrCSAgYW5ub3RhdGVfYXJnX2VuZCAoKTsKKysJfQorKyAgICAgIGlmIChleGNlcHQu cmVhc29uIDwgMCkKKysJeworKwkgIFB5X0RFQ1JFRiAoaXRlbSk7CisrCSAgZ2RicHlfY29udmVy dF9leGNlcHRpb24gKGV4Y2VwdCk7CisrCSAgZ290byBlcnJvcjsKKysJfQorKyAgICB9CisrCisr ICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVycm9yOgorKyAgcmV0dXJuIFBZX0JUX0VSUk9SOwor K30KKysKKysKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gbG9vcCBvdmVyIHZhcmlhYmxlcyBwcm92 aWRlZCBieSB0aGUKKysgICAiZnJhbWVfbG9jYWxzIiBQeXRob24gQVBJLiAgRWxlbWVudHMgaW4g dGhlIGl0ZXJhYmxlIG11c3QgY29uZm9ybQorKyAgIHRvIHRoZSAiU3ltYm9sIFZhbHVlIiBpbnRl cmZhY2UuICBJVEVSIGlzIHRoZSBQeXRob24gaXRlcmFibGUKKysgICBvYmplY3QsIE9VVCBpcyB0 aGUgb3V0cHV0IHN0cmVhbSwgSU5ERU5UIGlzIHdoZXRoZXIgd2Ugc2hvdWxkCisrICAgaW5kZW50 IHRoZSBvdXRwdXQgKGZvciBDTEkpLCBBUkdTX1RZUEUgaXMgYW4gZW51bWVyYXRvciBkZXNjcmli aW5nCisrICAgdGhlIGFyZ3VtZW50IGZvcm1hdCwgUFJJTlRfQVJHU19GSUVMRCBpcyBmbGFnIHdo aWNoIGluZGljYXRlcworKyAgIHdoZXRoZXIgdG8gb3V0cHV0IHRoZSBBUkdTIGZpZWxkIGluIHRo ZSBjYXNlIG9mCisrICAgLXN0YWNrLWxpc3QtdmFyaWFibGVzIGFuZCBGUkFNRSBpcyB0aGUgYmFj a2luZyBmcmFtZS4gIFJldHVybnMKKysgICBQWV9CVF9FUlJPUiBvbiBlcnJvciwgd2l0aCBhbnkg R0RCIGV4Y2VwdGlvbnMgY29udmVydGVkIHRvIGEgUHl0aG9uCisrICAgZXhjZXB0aW9uLCBvciBQ WV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytl bnVtZXJhdGVfbG9jYWxzIChQeU9iamVjdCAqaXRlciwKKysJCSAgc3RydWN0IHVpX291dCAqb3V0 LAorKwkJICBpbnQgaW5kZW50LAorKwkJICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAor KwkJICBpbnQgcHJpbnRfYXJnc19maWVsZCwKKysJCSAgc3RydWN0IGZyYW1lX2luZm8gKmZyYW1l KQorK3sKKysgIFB5T2JqZWN0ICppdGVtOworKyAgc3RydWN0IHZhbHVlX3ByaW50X29wdGlvbnMg b3B0czsKKysKKysgIGdldF91c2VyX3ByaW50X29wdGlvbnMgKCZvcHRzKTsKKysgIG9wdHMuZGVy ZWZfcmVmID0gMTsKKysKKysgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0IChpdGVyKSkpCisr ICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2U7CisrICAg ICAgY2hhciAqc3ltX25hbWU7CisrICAgICAgc3RydWN0IHZhbHVlICp2YWw7CisrICAgICAgZW51 bSBweV9idF9zdGF0dXMgIHN1Y2Nlc3MgPSBQWV9CVF9FUlJPUjsKKysgICAgICBzdHJ1Y3Qgc3lt Ym9sICpzeW07CisrICAgICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0Owor KyAgICAgIGludCBsb2NhbF9pbmRlbnQgPSA4ICsgKDggKiBpbmRlbnQpOworKyAgICAgIHN0cnVj dCBjbGVhbnVwICpsb2NhbHNfY2xlYW51cHM7CisrCisrICAgICAgbG9jYWxzX2NsZWFudXBzID0g bWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoaXRlbSk7CisrCisrICAgICAgc3VjY2VzcyA9IGV4dHJh Y3Rfc3ltIChpdGVtLCAmc3ltX25hbWUsICZzeW0sICZsYW5ndWFnZSk7CisrICAgICAgaWYgKHN1 Y2Nlc3MgPT0gUFlfQlRfRVJST1IpCisrCXsKKysJICBkb19jbGVhbnVwcyAobG9jYWxzX2NsZWFu dXBzKTsKKysJICBnb3RvIGVycm9yOworKwl9CisrCisrICAgICAgbWFrZV9jbGVhbnVwICh4ZnJl ZSwgc3ltX25hbWUpOworKworKyAgICAgIHN1Y2Nlc3MgPSBleHRyYWN0X3ZhbHVlIChpdGVtLCAm dmFsKTsKKysgICAgICBpZiAoc3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJeworKwkgIGRvX2Ns ZWFudXBzIChsb2NhbHNfY2xlYW51cHMpOworKwkgIGdvdG8gZXJyb3I7CisrCX0KKysKKysgICAg ICBpZiAoc3ltICE9IE5VTEwgJiYgdWlfb3V0X2lzX21pX2xpa2VfcCAob3V0KQorKwkgICYmICEg bWlfc2hvdWxkX3ByaW50IChzeW0sIE1JX1BSSU5UX0xPQ0FMUykpCisrCXsKKysJICBkb19jbGVh bnVwcyAobG9jYWxzX2NsZWFudXBzKTsKKysJICBjb250aW51ZTsKKysJfQorKworKyAgICAgIC8q IElmIHRoZSBvYmplY3QgZGlkIG5vdCBwcm92aWRlIGEgdmFsdWUsIHJlYWQgaXQuICAqLworKyAg ICAgIGlmICh2YWwgPT0gTlVMTCkKKysJeworKwkgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5f TUFTS19BTEwpCisrCSAgICB7CisrCSAgICAgIHZhbCA9IHJlYWRfdmFyX3ZhbHVlIChzeW0sIGZy YW1lKTsKKysJICAgIH0KKysJICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCSAgICB7CisrCSAg ICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkgICAgICBkb19jbGVhbnVw cyAobG9jYWxzX2NsZWFudXBzKTsKKysJICAgICAgZ290byBlcnJvcjsKKysJICAgIH0KKysJfQor KworKyAgICAgIC8qIFdpdGggUFJJTlRfTk9fVkFMVUVTLCBNSSBkb2VzIG5vdCBlbWl0IGEgdHVw bGUgbm9ybWFsbHkgYXMKKysJIGVhY2ggb3V0cHV0IGNvbnRhaW5zIG9ubHkgb25lIGZpZWxkLiAg VGhlIGV4Y2VwdGlvbiBpcworKwkgLXN0YWNrLWxpc3QtdmFyaWFibGVzLCB3aGljaCBhbHdheXMg cHJvdmlkZXMgYSB0dXBsZS4gICovCisrICAgICAgaWYgKHVpX291dF9pc19taV9saWtlX3AgKG91 dCkpCisrCXsKKysJICBpZiAocHJpbnRfYXJnc19maWVsZCB8fCBhcmdzX3R5cGUgIT0gTk9fVkFM VUVTKQorKwkgICAgbWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdpbl9lbmQgKG91dCwgTlVM TCk7CisrCX0KKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7 CisrCSAgaWYgKCEgdWlfb3V0X2lzX21pX2xpa2VfcCAob3V0KSkKKysJICAgIHsKKysJICAgICAg LyogSWYgdGhlIG91dHB1dCBpcyBub3QgTUkgd2UgaW5kZW50IGxvY2Fscy4gICovCisrCSAgICAg IHVpX291dF9zcGFjZXMgKG91dCwgbG9jYWxfaW5kZW50KTsKKysJICAgIH0KKysKKysJICB1aV9v dXRfZmllbGRfc3RyaW5nIChvdXQsICJuYW1lIiwgc3ltX25hbWUpOworKworKwkgIGlmICghIHVp X291dF9pc19taV9saWtlX3AgKG91dCkpCisrCSAgICB1aV9vdXRfdGV4dCAob3V0LCAiID0gIik7 CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrCXsKKysJICBnZGJweV9jb252 ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBkb19jbGVhbnVwcyAobG9jYWxzX2NsZWFudXBz KTsKKysJICBnb3RvIGVycm9yOworKwl9CisrCisrICAgICAgaWYgKGFyZ3NfdHlwZSA9PSBNSV9Q UklOVF9TSU1QTEVfVkFMVUVTKQorKwl7CisrCSAgaWYgKHB5X3ByaW50X3R5cGUgKG91dCwgdmFs KSA9PSBQWV9CVF9FUlJPUikKKysJICAgIHsKKysJICAgICAgZG9fY2xlYW51cHMgKGxvY2Fsc19j bGVhbnVwcyk7CisrCSAgICAgIGdvdG8gZXJyb3I7CisrCSAgICB9CisrCX0KKysKKysgICAgICAv KiBDTEkgYWx3YXlzIHByaW50cyB2YWx1ZXMgZm9yIGxvY2Fscy4gIE1JIHVzZXMgdGhlCisrCSBz aW1wbGUvbm8vYWxsIHN5c3RlbS4gICovCisrICAgICAgaWYgKCEgdWlfb3V0X2lzX21pX2xpa2Vf cCAob3V0KSkKKysJeworKwkgIGludCB2YWxfaW5kZW50ID0gKGluZGVudCArIDEpICogNDsKKysK KysJICBpZiAocHlfcHJpbnRfdmFsdWUgKG91dCwgdmFsLCAmb3B0cywgdmFsX2luZGVudCwgYXJn c190eXBlLAorKwkJCSAgICAgIGxhbmd1YWdlKSA9PSAgUFlfQlRfRVJST1IpCisrCSAgICB7Cisr CSAgICAgIGRvX2NsZWFudXBzIChsb2NhbHNfY2xlYW51cHMpOworKwkgICAgICBnb3RvIGVycm9y OworKwkgICAgfQorKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWYgKGFyZ3NfdHlwZSAhPSBO T19WQUxVRVMpCisrCSAgICB7CisrCSAgICAgIGlmIChweV9wcmludF92YWx1ZSAob3V0LCB2YWws ICZvcHRzLCAwLCBhcmdzX3R5cGUsCisrCQkJCSAgbGFuZ3VhZ2UpID09ICBQWV9CVF9FUlJPUikK KysJCXsKKysJCSAgZG9fY2xlYW51cHMgKGxvY2Fsc19jbGVhbnVwcyk7CisrCQkgIGdvdG8gZXJy b3I7CisrCQl9CisrCSAgICB9CisrCX0KKysKKysgICAgICBkb19jbGVhbnVwcyAobG9jYWxzX2Ns ZWFudXBzKTsKKysKKysgICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor Kwl7CisrCSAgdWlfb3V0X3RleHQgKG91dCwgIlxuIik7CisrCX0KKysgICAgICBpZiAoZXhjZXB0 LnJlYXNvbiA8IDApCisrCXsKKysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsK KysJICBnb3RvIGVycm9yOworKwl9CisrICAgIH0KKysKKysgIGlmIChpdGVtID09IE5VTEwgJiYg UHlFcnJfT2NjdXJyZWQgKCkpCisrICAgIGdvdG8gZXJyb3I7CisrCisrICByZXR1cm4gUFlfQlRf T0s7CisrCisrIGVycm9yOgorKyAgcmV0dXJuIFBZX0JUX0VSUk9SOworK30KKysKKysvKiAgSGVs cGVyIGZ1bmN0aW9uIGZvciAtc3RhY2stbGlzdC12YXJpYWJsZXMuICBSZXR1cm5zIFBZX0JUX0VS Uk9SIG9uCisrICAgIGVycm9yLCBvciBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8KKysKKytzdGF0 aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9taV9wcmludF92YXJpYWJsZXMgKFB5T2JqZWN0ICpm aWx0ZXIsIHN0cnVjdCB1aV9vdXQgKm91dCwKKysJCSAgICAgICBzdHJ1Y3QgdmFsdWVfcHJpbnRf b3B0aW9ucyAqb3B0cywKKysJCSAgICAgICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAor KwkJICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkKKyt7CisrICBzdHJ1Y3QgY2xlYW51 cCAqb2xkX2NoYWluOworKyAgUHlPYmplY3QgKmFyZ3NfaXRlcjsKKysgIFB5T2JqZWN0ICpsb2Nh bHNfaXRlcjsKKysKKysgIGFyZ3NfaXRlciA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVy LCAiZnJhbWVfYXJncyIpOworKyAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVwX3B5X3hkZWNyZWYg KGFyZ3NfaXRlcik7CisrICBpZiAoYXJnc19pdGVyID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7 CisrCisrICBsb2NhbHNfaXRlciA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVyLCAiZnJh bWVfbG9jYWxzIik7CisrICBpZiAobG9jYWxzX2l0ZXIgPT0gTlVMTCkKKysgICAgZ290byBlcnJv cjsKKysKKysgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKGxvY2Fsc19pdGVyKTsKKysgIG1ha2Vf Y2xlYW51cF91aV9vdXRfbGlzdF9iZWdpbl9lbmQgKG91dCwgInZhcmlhYmxlcyIpOworKworKyAg aWYgKGFyZ3NfaXRlciAhPSBQeV9Ob25lKQorKyAgICBpZiAoZW51bWVyYXRlX2FyZ3MgKGFyZ3Nf aXRlciwgb3V0LCBhcmdzX3R5cGUsIDEsIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikKKysgICAgICBn b3RvIGVycm9yOworKworKyAgaWYgKGxvY2Fsc19pdGVyICE9IFB5X05vbmUpCisrICAgIGlmIChl bnVtZXJhdGVfbG9jYWxzIChsb2NhbHNfaXRlciwgb3V0LCAxLCBhcmdzX3R5cGUsIDEsIGZyYW1l KQorKwk9PSBQWV9CVF9FUlJPUikKKysgICAgICBnb3RvIGVycm9yOworKworKyAgZG9fY2xlYW51 cHMgKG9sZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfT0s7CisrCisrIGVycm9yOgorKyAgZG9f Y2xlYW51cHMgKG9sZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfRVJST1I7CisrfQorKworKy8q IEhlbHBlciBmdW5jdGlvbiBmb3IgcHJpbnRpbmcgbG9jYWxzLiAgVGhpcyBmdW5jdGlvbiBsYXJn ZWx5IGp1c3QKKysgICBjcmVhdGVzIHRoZSB3cmFwcGluZyB0dXBsZSwgYW5kIGNhbGxzIGVudW1l cmF0ZV9sb2NhbHMuICBSZXR1cm5zCisrICAgUFlfQlRfRVJST1Igb24gZXJyb3IsIG9yIFBZX0JU X09LIG9uIHN1Y2Nlc3MuKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmlu dF9sb2NhbHMgKFB5T2JqZWN0ICpmaWx0ZXIsCisrCQkgc3RydWN0IHVpX291dCAqb3V0LAorKwkJ IGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQkgaW50IGluZGVudCwKKysJCSBzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWUpCisreworKyAgUHlPYmplY3QgKmxvY2Fsc19pdGVyID0gZ2V0 X3B5X2l0ZXJfZnJvbV9mdW5jIChmaWx0ZXIsCisrCQkJCQkJICJmcmFtZV9sb2NhbHMiKTsKKysg IHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW4gPSBtYWtlX2NsZWFudXBfcHlfeGRlY3JlZiAobG9j YWxzX2l0ZXIpOworKworKyAgaWYgKGxvY2Fsc19pdGVyID09IE5VTEwpCisrICAgIGdvdG8gbG9j YWxzX2Vycm9yOworKworKyAgbWFrZV9jbGVhbnVwX3VpX291dF9saXN0X2JlZ2luX2VuZCAob3V0 LCAibG9jYWxzIik7CisrCisrICBpZiAobG9jYWxzX2l0ZXIgIT0gUHlfTm9uZSkKKysgICAgaWYg KGVudW1lcmF0ZV9sb2NhbHMgKGxvY2Fsc19pdGVyLCBvdXQsIGluZGVudCwgYXJnc190eXBlLAor KwkJCSAgMCwgZnJhbWUpID09IFBZX0JUX0VSUk9SKQorKyAgICAgIGdvdG8gbG9jYWxzX2Vycm9y OworKworKyAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfT0s7Owor KworKyBsb2NhbHNfZXJyb3I6CisrICBkb19jbGVhbnVwcyAob2xkX2NoYWluKTsKKysgIHJldHVy biBQWV9CVF9FUlJPUjsKKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwcmludGluZyBm cmFtZSBhcmd1bWVudHMuICBUaGlzIGZ1bmN0aW9uCisrICAgbGFyZ2VseSBqdXN0IGNyZWF0ZXMg dGhlIHdyYXBwaW5nIHR1cGxlLCBhbmQgY2FsbHMgZW51bWVyYXRlX2FyZ3MuCisrICAgUmV0dXJu cyBQWV9CVF9FUlJPUiBvbiBlcnJvciwgd2l0aCBhbnkgR0RCIGV4Y2VwdGlvbnMgY29udmVydGVk IHRvCisrICAgYSBQeXRob24gZXhjZXB0aW9uLCBvciBQWV9CVF9PSyBvbiBzdWNjZXNzLiAgKi8K KysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF9hcmdzIChQeU9iamVjdCAq ZmlsdGVyLAorKwkgICAgICAgc3RydWN0IHVpX291dCAqb3V0LAorKwkgICAgICAgZW51bSBweV9m cmFtZV9hcmdzIGFyZ3NfdHlwZSwKKysJICAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSkK Kyt7CisrICBQeU9iamVjdCAqYXJnc19pdGVyICA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmls dGVyLCAiZnJhbWVfYXJncyIpOworKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jaGFpbiA9IG1ha2Vf Y2xlYW51cF9weV94ZGVjcmVmIChhcmdzX2l0ZXIpOworKyAgdm9sYXRpbGUgc3RydWN0IGdkYl9l eGNlcHRpb24gZXhjZXB0OworKworKyAgaWYgKGFyZ3NfaXRlciA9PSBOVUxMKQorKyAgICBnb3Rv IGFyZ3NfZXJyb3I7CisrCisrICBtYWtlX2NsZWFudXBfdWlfb3V0X2xpc3RfYmVnaW5fZW5kIChv dXQsICJhcmdzIik7CisrCisrICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQor KyAgICB7CisrICAgICAgYW5ub3RhdGVfZnJhbWVfYXJncyAoKTsKKysgICAgICBpZiAoISB1aV9v dXRfaXNfbWlfbGlrZV9wIChvdXQpKQorKwl1aV9vdXRfdGV4dCAob3V0LCAiICgiKTsKKysgICAg fQorKyAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorKyAgICB7CisrICAgICAgZ2RicHlfY29udmVy dF9leGNlcHRpb24gKGV4Y2VwdCk7CisrICAgICAgZ290byBhcmdzX2Vycm9yOworKyAgICB9Cisr CisrICBpZiAoYXJnc19pdGVyICE9IFB5X05vbmUpCisrICAgIGlmIChlbnVtZXJhdGVfYXJncyAo YXJnc19pdGVyLCBvdXQsIGFyZ3NfdHlwZSwgMCwgZnJhbWUpID09IFBZX0JUX0VSUk9SKQorKyAg ICAgIGdvdG8gYXJnc19lcnJvcjsKKysKKysgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFT S19BTEwpCisrICAgIHsKKysgICAgICBpZiAoISB1aV9vdXRfaXNfbWlfbGlrZV9wIChvdXQpKQor Kwl1aV9vdXRfdGV4dCAob3V0LCAiKSIpOworKyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8 IDApCisrICAgIHsKKysgICAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysg ICAgICBnb3RvIGFyZ3NfZXJyb3I7CisrICAgIH0KKysKKysgIGRvX2NsZWFudXBzIChvbGRfY2hh aW4pOworKyAgcmV0dXJuIFBZX0JUX09LOworKworKyBhcmdzX2Vycm9yOgorKyAgZG9fY2xlYW51 cHMgKG9sZF9jaGFpbik7CisrICByZXR1cm4gUFlfQlRfRVJST1I7CisrfQorKworKy8qICBQcmlu dCBhIHNpbmdsZSBmcmFtZSB0byB0aGUgZGVzaWduYXRlZCBvdXRwdXQgc3RyZWFtLCBkZXRlY3Rp bmcKKysgICAgd2hldGhlciB0aGUgb3V0cHV0IGlzIE1JIG9yIGNvbnNvbGUsIGFuZCBmb3JtYXR0 aW5nIHRoZSBvdXRwdXQKKysgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiB0aGF0 IHByb3RvY29sLiAgRklMVEVSIGlzIHRoZQorKyAgICBmcmFtZS1maWx0ZXIgYXNzb2NpYXRlZCB3 aXRoIHRoaXMgZnJhbWUuICBGTEFHUyBpcyBhbiBpbnRlZ2VyCisrICAgIGRlc2NyaWJpbmcgdGhl IHZhcmlvdXMgcHJpbnQgb3B0aW9ucy4gIFRoZSBGTEFHUyB2YXJpYWJsZXMgaXMKKysgICAgZGVz Y3JpYmVkIGluICJhcHBseV9mcmFtZV9maWx0ZXIiIGZ1bmN0aW9uLiAgQVJHU19UWVBFIGlzIGFu CisrICAgIGVudW1lcmF0b3IgZGVzY3JpYmluZyB0aGUgYXJndW1lbnQgZm9ybWF0LiAgT1VUIGlz IHRoZSBvdXRwdXQKKysgICAgc3RyZWFtIHRvIHByaW50LCBJTkRFTlQgaXMgdGhlIGxldmVsIG9m IGluZGVudGlvbiBmb3IgdGhpcyBmcmFtZQorKyAgICAoaW4gdGhlIGNhc2Ugb2YgZWxpZGVkIGZy YW1lcyksIGFuZCBMRVZFTFNfUFJJTlRFRCBpcyBhIGhhc2gtdGFibGUKKysgICAgY29udGFpbmlu ZyBhbGwgdGhlIGZyYW1lcyBsZXZlbCB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByaW50ZWQuCisr ICAgIElmIGEgZnJhbWUgbGV2ZWwgaGFzIGJlZW4gcHJpbnRlZCwgZG8gbm90IHByaW50IGl0IGFn YWluIChpbiB0aGUKKysgICAgY2FzZSBvZiBlbGlkZWQgZnJhbWVzKS4gIFJldHVybnMgUFlfQlRf RVJST1Igb24gZXJyb3IsIHdpdGggYW55CisrICAgIEdEQiBleGNlcHRpb25zIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBleGNlcHRpb24sIG9yIFBZX0JUX0NPTVBMRVRFRAorKyAgICBvbiBzdWNjZXNz LiAgKi8KKysKKytzdGF0aWMgZW51bSBweV9idF9zdGF0dXMKKytweV9wcmludF9mcmFtZSAoUHlP YmplY3QgKmZpbHRlciwgaW50IGZsYWdzLCBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAor KwkJc3RydWN0IHVpX291dCAqb3V0LCBpbnQgaW5kZW50LCBodGFiX3QgbGV2ZWxzX3ByaW50ZWQp CisreworKyAgaW50IGhhc19hZGRyID0gMDsKKysgIENPUkVfQUREUiBhZGRyZXNzID0gMDsKKysg IHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gTlVMTDsKKysgIHN0cnVjdCBmcmFtZV9pbmZvICpm cmFtZSA9IE5VTEw7CisrICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cF9zdGFjayA9IG1ha2VfY2xl YW51cCAobnVsbF9jbGVhbnVwLCBOVUxMKTsKKysgIHN0cnVjdCB2YWx1ZV9wcmludF9vcHRpb25z IG9wdHM7CisrICBQeU9iamVjdCAqcHlfaW5mX2ZyYW1lLCAqZWxpZGVkOworKyAgaW50IHByaW50 X2xldmVsLCBwcmludF9mcmFtZV9pbmZvLCBwcmludF9hcmdzLCBwcmludF9sb2NhbHM7CisrICB2 b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrCisrICAvKiBFeHRyYWN0IHBy aW50IHNldHRpbmdzIGZyb20gRkxBR1MuICAqLworKyAgcHJpbnRfbGV2ZWwgPSAoZmxhZ3MgJiBQ UklOVF9MRVZFTCkgPyAxIDogMDsKKysgIHByaW50X2ZyYW1lX2luZm8gPSAoZmxhZ3MgJiBQUklO VF9GUkFNRV9JTkZPKSA/IDEgOiAwOworKyAgcHJpbnRfYXJncyA9IChmbGFncyAmIFBSSU5UX0FS R1MpID8gMSA6IDA7CisrICBwcmludF9sb2NhbHMgPSAoZmxhZ3MgJiBQUklOVF9MT0NBTFMpID8g MSA6IDA7CisrCisrICBnZXRfdXNlcl9wcmludF9vcHRpb25zICgmb3B0cyk7CisrCisrICAvKiBH ZXQgdGhlIHVuZGVybHlpbmcgZnJhbWUuICBUaGlzIGlzIG5lZWRlZCB0byBkZXRlcm1pbmUgR0RC CisrICBhcmNoaXRlY3R1cmUsIGFuZCBhbHNvLCBpbiB0aGUgY2FzZXMgb2YgZnJhbWUgdmFyaWFi bGVzL2FyZ3VtZW50cyB0bworKyAgcmVhZCB0aGVtIGlmIHRoZXkgcmV0dXJuZWQgZmlsdGVyIG9i amVjdCByZXF1aXJlcyB1cyB0byBkbyBzby4gICovCisrICBweV9pbmZfZnJhbWUgPSBQeU9iamVj dF9DYWxsTWV0aG9kIChmaWx0ZXIsICJpbmZlcmlvcl9mcmFtZSIsIE5VTEwpOworKyAgaWYgKHB5 X2luZl9mcmFtZSA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKworKyAgZnJhbWUgPSBmcmFt ZV9vYmplY3RfdG9fZnJhbWVfaW5mbyAocHlfaW5mX2ZyYW1lKTs7CisrCisrICBQeV9ERUNSRUYg KHB5X2luZl9mcmFtZSk7CisrCisrICBpZiAoZnJhbWUgPT0gTlVMTCkKKysgICAgZ290byBlcnJv cjsKKysKKysgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrICAgIHsKKysg ICAgICBnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsKKysgICAgfQorKyAgaWYgKGV4 Y2VwdC5yZWFzb24gPCAwKQorKyAgICB7CisrICAgICAgZ2RicHlfY29udmVydF9leGNlcHRpb24g KGV4Y2VwdCk7CisrICAgICAgZ290byBlcnJvcjsKKysgICAgfQorKworKworKyAgLyogc3RhY2st bGlzdC12YXJpYWJsZXMuICAqLworKyAgaWYgKHByaW50X2xvY2FscyAmJiBwcmludF9hcmdzICYm ICEgcHJpbnRfZnJhbWVfaW5mbykKKysgICAgeworKyAgICAgIGlmIChweV9taV9wcmludF92YXJp YWJsZXMgKGZpbHRlciwgb3V0LCAmb3B0cywKKysJCQkJIGFyZ3NfdHlwZSwgZnJhbWUpID09IFBZ X0JUX0VSUk9SKQorKwlnb3RvIGVycm9yOworKyAgICAgIGVsc2UKKysJeworKwkgIGRvX2NsZWFu dXBzIChjbGVhbnVwX3N0YWNrKTsKKysJICByZXR1cm4gUFlfQlRfQ09NUExFVEVEOworKwl9Cisr ICAgIH0KKysKKysgIC8qIC1zdGFjay1saXN0LWxvY2FscyBkb2VzIG5vdCByZXF1aXJlIGEKKysg ICAgIHdyYXBwaW5nIGZyYW1lIGF0dHJpYnV0ZS4gICovCisrICBpZiAocHJpbnRfZnJhbWVfaW5m byB8fCAocHJpbnRfYXJncyAmJiAhIHByaW50X2xvY2FscykpCisrICAgIG1ha2VfY2xlYW51cF91 aV9vdXRfdHVwbGVfYmVnaW5fZW5kIChvdXQsICJmcmFtZSIpOworKworKyAgaWYgKHByaW50X2Zy YW1lX2luZm8pCisrICAgIHsKKysgICAgICAvKiBFbGlkZWQgZnJhbWVzIGFyZSBhbHNvIHByaW50 ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIChyZWN1cnNpdmVseSkKKysJIGFuZCBhcmUgcHJpbnRlZCB3 aXRoIGluZGVudGlvbi4gICovCisrICAgICAgaWYgKGluZGVudCA+IDApCisrCXsKKysJVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysJICB7CisrCSAgICB1aV9vdXRfc3BhY2Vz IChvdXQsIGluZGVudCo0KTsKKysJICB9CisrCWlmIChleGNlcHQucmVhc29uIDwgMCkKKysJICB7 CisrCSAgICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICAgIGdvdG8gZXJy b3I7CisrCSAgfQorKwl9CisrCisrICAgICAgLyogVGhlIGFkZHJlc3MgaXMgcmVxdWlyZWQgZm9y IGZyYW1lIGFubm90YXRpb25zLCBhbmQgYWxzbyBmb3IKKysJIGFkZHJlc3MgcHJpbnRpbmcuICAq LworKyAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nIChmaWx0ZXIsICJhZGRyZXNzIikp CisrCXsKKysJICBQeU9iamVjdCAqcGFkZHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kIChmaWx0ZXIs ICJhZGRyZXNzIiwgTlVMTCk7CisrCSAgaWYgKHBhZGRyICE9IE5VTEwpCisrCSAgICB7CisrCSAg ICAgIGlmIChwYWRkciAhPSBQeV9Ob25lKQorKwkJeworKwkJICBhZGRyZXNzID0gUHlMb25nX0Fz TG9uZyAocGFkZHIpOworKwkJICBoYXNfYWRkciA9IDE7CisrCQl9CisrCSAgICAgIFB5X0RFQ1JF RiAocGFkZHIpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIGdvdG8gZXJyb3I7CisrCX0KKysg ICAgfQorKworKyAgLyogUHJpbnQgZnJhbWUgbGV2ZWwuICBNSSBkb2VzIG5vdCByZXF1aXJlIHRo ZSBsZXZlbCBpZgorKyAgICAgbG9jYWxzL3ZhcmlhYmxlcyBvbmx5IGFyZSBiZWluZyBwcmludGVk LiAgKi8KKysgIGlmICgocHJpbnRfZnJhbWVfaW5mbyB8fCBwcmludF9hcmdzKSAmJiBwcmludF9s ZXZlbCkKKysgICAgeworKyAgICAgIHN0cnVjdCBmcmFtZV9pbmZvICoqc2xvdDsKKysgICAgICBp bnQgbGV2ZWw7CisrICAgICAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZXhjZXB0Owor KworKyAgICAgIHNsb3QgPSAoc3RydWN0IGZyYW1lX2luZm8gKiopIGh0YWJfZmluZF9zbG90IChs ZXZlbHNfcHJpbnRlZCwKKysJCQkJCQkgICAgZnJhbWUsIElOU0VSVCk7CisrICAgICAgVFJZX0NB VENIIChleGNlcHQsIFJFVFVSTl9NQVNLX0FMTCkKKysJeworKwkgIGxldmVsID0gZnJhbWVfcmVs YXRpdmVfbGV2ZWwgKGZyYW1lKTsKKysKKysJICAvKiBDaGVjayBpZiB0aGlzIGZyYW1lIGhhcyBh bHJlYWR5IGJlZW4gcHJpbnRlZCAodGhlcmUgYXJlIGNhc2VzCisrCSAgICAgd2hlcmUgZWxpZGVk IHN5bnRoZXRpYyBkdW1teS1mcmFtZXMgaGF2ZSB0byAnYm9ycm93JyB0aGUgZnJhbWUKKysJICAg ICBhcmNoaXRlY3R1cmUgZnJvbSB0aGUgZWxpZGluZyBmcmFtZS4gIElmIHRoYXQgaXMgdGhlIGNh c2UsIGRvCisrCSAgICAgbm90IHByaW50ICdsZXZlbCcsIGJ1dCBwcmludCBzcGFjZXMuICAqLwor KwkgIGlmICgqc2xvdCA9PSBmcmFtZSkKKysJICAgIHVpX291dF9maWVsZF9za2lwIChvdXQsICJs ZXZlbCIpOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgKnNsb3QgPSBmcmFtZTsKKysJICAg ICAgYW5ub3RhdGVfZnJhbWVfYmVnaW4gKHByaW50X2xldmVsID8gbGV2ZWwgOiAwLAorKwkJCQkg ICAgZ2RiYXJjaCwgYWRkcmVzcyk7CisrCSAgICAgIHVpX291dF90ZXh0IChvdXQsICIjIik7Cisr CSAgICAgIHVpX291dF9maWVsZF9mbXRfaW50IChvdXQsIDIsIHVpX2xlZnQsICJsZXZlbCIsCisr CQkJCSAgICBsZXZlbCk7CisrCSAgICB9CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNvbiA8 IDApCisrCXsKKysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBnb3Rv IGVycm9yOworKwl9CisrICAgIH0KKysKKysgIGlmIChwcmludF9mcmFtZV9pbmZvKQorKyAgICB7 CisrICAgICAgLyogUHJpbnQgYWRkcmVzcyB0byB0aGUgYWRkcmVzcyBmaWVsZC4gIElmIGFuIGFk ZHJlc3MgaXMgbm90IHByb3ZpZGVkLAorKwkgcHJpbnQgbm90aGluZy4gICovCisrICAgICAgaWYg KG9wdHMuYWRkcmVzc3ByaW50ICYmIGhhc19hZGRyKQorKwl7CisrCSAgVFJZX0NBVENIIChleGNl cHQsIFJFVFVSTl9NQVNLX0FMTCkKKysJICAgIHsKKysJICAgICAgYW5ub3RhdGVfZnJhbWVfYWRk cmVzcyAoKTsKKysJICAgICAgdWlfb3V0X2ZpZWxkX2NvcmVfYWRkciAob3V0LCAiYWRkciIsIGdk YmFyY2gsIGFkZHJlc3MpOworKwkgICAgICBhbm5vdGF0ZV9mcmFtZV9hZGRyZXNzX2VuZCAoKTsK KysJICAgICAgdWlfb3V0X3RleHQgKG91dCwgIiBpbiAiKTsKKysJICAgIH0KKysJICBpZiAoZXhj ZXB0LnJlYXNvbiA8IDApCisrCSAgICB7CisrCSAgICAgIGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9u IChleGNlcHQpOworKwkgICAgICBnb3RvIGVycm9yOworKwkgICAgfQorKwl9CisrCisrICAgICAg LyogUHJpbnQgZnJhbWUgZnVuY3Rpb24gbmFtZS4gICovCisrICAgICAgaWYgKFB5T2JqZWN0X0hh c0F0dHJTdHJpbmcgKGZpbHRlciwgImZ1bmN0aW9uIikpCisrCXsKKysJICBQeU9iamVjdCAqcHlf ZnVuYyA9IFB5T2JqZWN0X0NhbGxNZXRob2QgKGZpbHRlciwgImZ1bmN0aW9uIiwgTlVMTCk7Cisr CisrCSAgaWYgKHB5X2Z1bmMgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgY29uc3QgY2hhciAq ZnVuY3Rpb24gPSBOVUxMOworKworKwkgICAgICBpZiAoZ2RicHlfaXNfc3RyaW5nIChweV9mdW5j KSkKKysJCXsKKysJCSAgZnVuY3Rpb24gPSBQeVN0cmluZ19Bc1N0cmluZyAocHlfZnVuYyk7Cisr CisrCQkgIGlmIChmdW5jdGlvbiA9PSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIFB5X0RFQ1JF RiAocHlfZnVuYyk7CisrCQkgICAgICBnb3RvIGVycm9yOworKwkJICAgIH0KKysJCX0KKysJICAg ICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrIChweV9mdW5jKSkKKysJCXsKKysJCSAgQ09SRV9BRERS IGFkZHIgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nIChweV9mdW5jKTsKKysJCSAgc3RydWN0 IG1pbmltYWxfc3ltYm9sICptc3ltYm9sOworKworKwkJICBpZiAoUHlFcnJfT2NjdXJyZWQgKCkp CisrCQkgICAgZ290byBlcnJvcjsKKysKKysJCSAgbXN5bWJvbCA9IGxvb2t1cF9taW5pbWFsX3N5 bWJvbF9ieV9wYyAoYWRkcik7CisrCQkgIGlmIChtc3ltYm9sICE9IE5VTEwpCisrCQkgICAgZnVu Y3Rpb24gPSBTWU1CT0xfUFJJTlRfTkFNRSAobXN5bWJvbCk7CisrCQl9CisrCSAgICAgIGVsc2Ug aWYgKHB5X2Z1bmMgIT0gUHlfTm9uZSkKKysJCXsKKysJCSAgUHlFcnJfU2V0U3RyaW5nIChQeUV4 Y19SdW50aW1lRXJyb3IsCisrCQkJCSAgIF8oIkZyYW1lRGVjb3JhdG9yLmZ1bmN0aW9uOiBleHBl Y3RpbmcgYSAiIFwKKysJCQkJICAgICAiU3RyaW5nLCBpbnRlZ2VyIG9yIE5vbmUuIikpOworKwkJ ICBQeV9ERUNSRUYgKHB5X2Z1bmMpOworKwkJICBnb3RvIGVycm9yOworKwkJfQorKworKworKwkg ICAgICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwkJeworKwkJICBhbm5v dGF0ZV9mcmFtZV9mdW5jdGlvbl9uYW1lICgpOworKwkJICBpZiAoZnVuY3Rpb24gPT0gTlVMTCkK KysJCSAgICB1aV9vdXRfZmllbGRfc2tpcCAob3V0LCAiZnVuYyIpOworKwkJICBlbHNlCisrCQkg ICAgdWlfb3V0X2ZpZWxkX3N0cmluZyAob3V0LCAiZnVuYyIsIGZ1bmN0aW9uKTsKKysJCX0KKysJ ICAgICAgaWYgKGV4Y2VwdC5yZWFzb24gPCAwKQorKwkJeworKwkJICBQeV9ERUNSRUYgKHB5X2Z1 bmMpOworKwkJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJCSAgZ290byBl cnJvcjsKKysJCX0KKysJICAgIH0KKysJICBQeV9ERUNSRUYgKHB5X2Z1bmMpOworKwl9CisrICAg ICAgZWxzZQorKwlnb3RvIGVycm9yOworKyAgICB9CisrCisrCisrICAvKiBGcmFtZSBhcmd1bWVu dHMuICBDaGVjayB0aGUgcmVzdWx0LCBhbmQgZXJyb3IgaWYgc29tZXRoaW5nIHdlbnQKKysgICAg IHdyb25nLiAgKi8KKysgIGlmIChwcmludF9hcmdzKQorKyAgICB7CisrICAgICAgaWYgKHB5X3By aW50X2FyZ3MgKGZpbHRlciwgb3V0LCBhcmdzX3R5cGUsIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikK KysJZ290byBlcnJvcjsKKysgICAgfQorKworKyAgLyogRmlsZSBuYW1lL3NvdXJjZS9saW5lIG51 bWJlciBpbmZvcm1hdGlvbi4gICovCisrICBpZiAocHJpbnRfZnJhbWVfaW5mbykKKysgICAgewor KyAgICAgIFRSWV9DQVRDSCAoZXhjZXB0LCBSRVRVUk5fTUFTS19BTEwpCisrCXsKKysJICBhbm5v dGF0ZV9mcmFtZV9zb3VyY2VfYmVnaW4gKCk7CisrCX0KKysgICAgICBpZiAoZXhjZXB0LnJlYXNv biA8IDApCisrCXsKKysJICBnZGJweV9jb252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysJICBn b3RvIGVycm9yOworKwl9CisrCisrICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcgKGZp bHRlciwgImZpbGVuYW1lIikpCisrCXsKKysJICBQeU9iamVjdCAqcHlfZm4gPSBQeU9iamVjdF9D YWxsTWV0aG9kIChmaWx0ZXIsICJmaWxlbmFtZSIsCisrCQkJCQkJIE5VTEwpOworKwkgIGlmIChw eV9mbiAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBpZiAocHlfZm4gIT0gUHlfTm9uZSkKKysJ CXsKKysJCSAgY2hhciAqZmlsZW5hbWUgPSBQeVN0cmluZ19Bc1N0cmluZyAocHlfZm4pOworKwor KwkJICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKysJCSAgICB7CisrCQkgICAgICBQeV9ERUNSRUYg KHB5X2ZuKTsKKysJCSAgICAgIGdvdG8gZXJyb3I7CisrCQkgICAgfQorKwkJICBUUllfQ0FUQ0gg KGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwkJICAgIHsKKysJCSAgICAgIHVpX291dF93cmFw X2hpbnQgKG91dCwgIiAgICIpOworKwkJICAgICAgdWlfb3V0X3RleHQgKG91dCwgIiBhdCAiKTsK KysJCSAgICAgIGFubm90YXRlX2ZyYW1lX3NvdXJjZV9maWxlICgpOworKwkJICAgICAgdWlfb3V0 X2ZpZWxkX3N0cmluZyAob3V0LCAiZmlsZSIsIGZpbGVuYW1lKTsKKysJCSAgICAgIGFubm90YXRl X2ZyYW1lX3NvdXJjZV9maWxlX2VuZCAoKTsKKysJCSAgICB9CisrCQkgIGlmIChleGNlcHQucmVh c29uIDwgMCkKKysJCSAgICB7CisrCQkgICAgICBQeV9ERUNSRUYgKHB5X2ZuKTsKKysJCSAgICAg IGdkYnB5X2NvbnZlcnRfZXhjZXB0aW9uIChleGNlcHQpOworKwkJICAgICAgZ290byBlcnJvcjsK KysJCSAgICB9CisrCQl9CisrCSAgICAgIFB5X0RFQ1JFRiAocHlfZm4pOworKwkgICAgfQorKwkg IGVsc2UKKysJICAgIGdvdG8gZXJyb3I7CisrCX0KKysKKysgICAgICBpZiAoUHlPYmplY3RfSGFz QXR0clN0cmluZyAoZmlsdGVyLCAibGluZSIpKQorKwl7CisrCSAgUHlPYmplY3QgKnB5X2xpbmUg PSBQeU9iamVjdF9DYWxsTWV0aG9kIChmaWx0ZXIsICJsaW5lIiwgTlVMTCk7CisrCSAgaW50IGxp bmU7CisrCisrCSAgaWYgKHB5X2xpbmUgIT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaWYgKHB5 X2xpbmUgIT0gUHlfTm9uZSkKKysJCXsKKysJCSAgbGluZSA9IFB5TG9uZ19Bc0xvbmcgKHB5X2xp bmUpOworKwkJICBUUllfQ0FUQ0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwkJICAgIHsK KysJCSAgICAgIHVpX291dF90ZXh0IChvdXQsICI6Iik7CisrCQkgICAgICBhbm5vdGF0ZV9mcmFt ZV9zb3VyY2VfbGluZSAoKTsKKysJCSAgICAgIHVpX291dF9maWVsZF9pbnQgKG91dCwgImxpbmUi LCBsaW5lKTsKKysJCSAgICB9CisrCQkgIGlmIChleGNlcHQucmVhc29uIDwgMCkKKysJCSAgICB7 CisrCQkgICAgICBQeV9ERUNSRUYgKHB5X2xpbmUpOworKwkJICAgICAgZ2RicHlfY29udmVydF9l eGNlcHRpb24gKGV4Y2VwdCk7CisrCQkgICAgICBnb3RvIGVycm9yOworKwkJICAgIH0KKysJCX0K KysJICAgICAgUHlfREVDUkVGIChweV9saW5lKTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICBn b3RvIGVycm9yOworKwl9CisrICAgIH0KKysKKysgIC8qIEZvciBNSSB3ZSBuZWVkIHRvIGRlYWwg d2l0aCB0aGUgImNoaWxkcmVuIiBsaXN0IHBvcHVsYXRpb24gb2YKKysgICAgIGVsaWRlZCBmcmFt ZXMsIHNvIGlmIE1JIG91dHB1dCBkZXRlY3RlZCBkbyBub3Qgc2VuZCBuZXdsaW5lLiAgKi8KKysg IGlmICghIHVpX291dF9pc19taV9saWtlX3AgKG91dCkpCisrICAgIHsKKysgICAgICBUUllfQ0FU Q0ggKGV4Y2VwdCwgUkVUVVJOX01BU0tfQUxMKQorKwl7CisrCSAgYW5ub3RhdGVfZnJhbWVfZW5k ICgpOworKwkgIHVpX291dF90ZXh0IChvdXQsICJcbiIpOworKwl9CisrICAgICAgaWYgKGV4Y2Vw dC5yZWFzb24gPCAwKQorKwl7CisrCSAgZ2RicHlfY29udmVydF9leGNlcHRpb24gKGV4Y2VwdCk7 CisrCSAgZ290byBlcnJvcjsKKysJfQorKyAgICB9CisrCisrICBpZiAocHJpbnRfbG9jYWxzKQor KyAgICB7CisrICAgICAgaWYgKHB5X3ByaW50X2xvY2FscyAoZmlsdGVyLCBvdXQsIGFyZ3NfdHlw ZSwgaW5kZW50LAorKwkJCSAgIGZyYW1lKSA9PSBQWV9CVF9FUlJPUikKKysJZ290byBlcnJvcjsK KysgICAgfQorKworKyAgLyogRmluYWxseSByZWN1cnNpdmVseSBwcmludCBlbGlkZWQgZnJhbWVz LCBpZiBhbnkuICAqLworKyAgZWxpZGVkICA9IGdldF9weV9pdGVyX2Zyb21fZnVuYyAoZmlsdGVy LCAiZWxpZGVkIik7CisrICBpZiAoZWxpZGVkID09IE5VTEwpCisrICAgIGdvdG8gZXJyb3I7Cisr CisrICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChlbGlkZWQpOworKyAgaWYgKGVsaWRlZCAhPSBQ eV9Ob25lKQorKyAgICB7CisrICAgICAgUHlPYmplY3QgKml0ZW07CisrCisrICAgICAgbWFrZV9j bGVhbnVwX3VpX291dF9saXN0X2JlZ2luX2VuZCAob3V0LCAiY2hpbGRyZW4iKTsKKysKKysgICAg ICBpZiAoISB1aV9vdXRfaXNfbWlfbGlrZV9wIChvdXQpKQorKwlpbmRlbnQrKzsKKysKKysgICAg ICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dCAoZWxpZGVkKSkpCisrCXsKKysJICBlbnVtIHB5 X2J0X3N0YXR1cyBzdWNjZXNzID0gcHlfcHJpbnRfZnJhbWUgKGl0ZW0sIGZsYWdzLAorKwkJCQkJ CSAgICAgIGFyZ3NfdHlwZSwgb3V0LAorKwkJCQkJCSAgICAgIGluZGVudCwKKysJCQkJCQkgICAg ICBsZXZlbHNfcHJpbnRlZCk7CisrCisrCSAgaWYgKHN1Y2Nlc3MgPT0gUFlfQlRfRVJST1IpCisr CSAgICB7CisrCSAgICAgIFB5X0RFQ1JFRiAoaXRlbSk7CisrCSAgICAgIGdvdG8gZXJyb3I7Cisr CSAgICB9CisrCisrCSAgUHlfREVDUkVGIChpdGVtKTsKKysJfQorKyAgICAgIGlmIChpdGVtID09 IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQgKCkpCisrCWdvdG8gZXJyb3I7CisrICAgIH0KKysKKysK KysgIGRvX2NsZWFudXBzIChjbGVhbnVwX3N0YWNrKTsKKysgIHJldHVybiBQWV9CVF9DT01QTEVU RUQ7CisrCisrIGVycm9yOgorKyAgZG9fY2xlYW51cHMgKGNsZWFudXBfc3RhY2spOworKyAgcmV0 dXJuIFBZX0JUX0VSUk9SOworK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhdGUg ZnJhbWUgZmlsdGVyIGludm9jYXRpb24gYXQgc3RhcnRpbmcKKysgICBmcmFtZSBGUkFNRS4gICov CisrCisrc3RhdGljIFB5T2JqZWN0ICoKKytib290c3RyYXBfcHl0aG9uX2ZyYW1lX2ZpbHRlcnMg KHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwKKysJCQkJaW50IGZyYW1lX2xvdywgaW50IGZyYW1l X2hpZ2gpCisreworKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzID0KKysgICAgbWFrZV9jbGVh bnVwIChudWxsX2NsZWFudXAsIE5VTEwpOworKyAgUHlPYmplY3QgKm1vZHVsZSwgKnNvcnRfZnVu YywgKml0ZXJhYmxlLCAqZnJhbWVfb2JqLCAqaXRlcmF0b3I7CisrICBQeU9iamVjdCAqcHlfZnJh bWVfbG93LCAqcHlfZnJhbWVfaGlnaDsKKysKKysgIGZyYW1lX29iaiA9IGZyYW1lX2luZm9fdG9f ZnJhbWVfb2JqZWN0IChmcmFtZSk7CisrICBpZiAoZnJhbWVfb2JqID09IE5VTEwpCisrICAgIGdv dG8gZXJyb3I7CisrICBtYWtlX2NsZWFudXBfcHlfZGVjcmVmIChmcmFtZV9vYmopOworKworKyAg bW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlICgiZ2RiLmZyYW1lcyIpOworKyAgaWYgKG1v ZHVsZSA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3Jl ZiAobW9kdWxlKTsKKysKKysgIHNvcnRfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcgKG1v ZHVsZSwgImV4ZWN1dGVfZnJhbWVfZmlsdGVycyIpOworKyAgaWYgKHNvcnRfZnVuYyA9PSBOVUxM KQorKyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoc29ydF9mdW5j KTsKKysKKysgIHB5X2ZyYW1lX2xvdyA9IFB5SW50X0Zyb21Mb25nIChmcmFtZV9sb3cpOworKyAg aWYgKHB5X2ZyYW1lX2xvdyA9PSBOVUxMKQorKyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVh bnVwX3B5X2RlY3JlZiAocHlfZnJhbWVfbG93KTsKKysKKysgIHB5X2ZyYW1lX2hpZ2ggPSBQeUlu dF9Gcm9tTG9uZyAoZnJhbWVfaGlnaCk7CisrICBpZiAocHlfZnJhbWVfaGlnaCA9PSBOVUxMKQor KyAgICBnb3RvIGVycm9yOworKyAgbWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAocHlfZnJhbWVfaGln aCk7CisrCisrICBpdGVyYWJsZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MgKHNvcnRf ZnVuYywgZnJhbWVfb2JqLAorKwkJCQkJICAgcHlfZnJhbWVfbG93LAorKwkJCQkJICAgcHlfZnJh bWVfaGlnaCwKKysJCQkJCSAgIE5VTEwpOworKyAgaWYgKGl0ZXJhYmxlID09IE5VTEwpCisrICAg IGdvdG8gZXJyb3I7CisrCisrICBkb19jbGVhbnVwcyAoY2xlYW51cHMpOworKworKyAgaWYgKGl0 ZXJhYmxlICE9IFB5X05vbmUpCisrICAgIHsKKysgICAgICBpdGVyYXRvciA9IFB5T2JqZWN0X0dl dEl0ZXIgKGl0ZXJhYmxlKTsKKysgICAgICBQeV9ERUNSRUYgKGl0ZXJhYmxlKTsKKysgICAgfQor KyAgZWxzZQorKyAgICB7CisrICAgICAgcmV0dXJuIGl0ZXJhYmxlOworKyAgICB9CisrCisrICBy ZXR1cm4gaXRlcmF0b3I7CisrCisrIGVycm9yOgorKyAgZG9fY2xlYW51cHMgKGNsZWFudXBzKTsK KysgIHJldHVybiBOVUxMOworK30KKysKKysvKiAgVGhpcyBpcyB0aGUgb25seSBwdWJsaWNseSBl eHBvcnRlZCBmdW5jdGlvbiBpbiB0aGlzIGZpbGUuICBGUkFNRQorKyAgICBpcyB0aGUgc291cmNl IGZyYW1lIHRvIHN0YXJ0IGZyYW1lLWZpbHRlciBpbnZvY2F0aW9uLiAgRkxBR1MgaXMgYW4KKysg ICAgaW50ZWdlciBob2xkaW5nIHRoZSBmbGFncyBmb3IgcHJpbnRpbmcuICBUaGUgZm9sbG93aW5n IGVsZW1lbnRzIG9mCisrICAgIHRoZSBGUkFNRV9GSUxURVJfRkxBR1MgZW51bSBkZW5vdGVzIHRo ZSBtYWtlLXVwIG9mIEZMQUdTOgorKyAgICBQUklOVF9MRVZFTCBpcyBhIGZsYWcgaW5kaWNhdGlu ZyB3aGV0aGVyIHRvIHByaW50IHRoZSBmcmFtZSdzCisrICAgIHJlbGF0aXZlIGxldmVsIGluIHRo ZSBvdXRwdXQuICBQUklOVF9GUkFNRV9JTkZPIGlzIGEgZmxhZyB0aGF0CisrICAgIGluZGljYXRl cyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByaW50IHRoZSBmcmFtZQorKyAgICBpbmZv cm1hdGlvbiwgUFJJTlRfQVJHUyBpcyBhIGZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0byBw cmludAorKyAgICBmcmFtZSBhcmd1bWVudHMsIGFuZCBQUklOVF9MT0NBTFMsIGxpa2V3aXNlLCB3 aXRoIGZyYW1lIGxvY2FsCisrICAgIHZhcmlhYmxlcy4gIEFSR1NfVFlQRSBpcyBhbiBlbnVtZXJh dG9yIGRlc2NyaWJpbmcgdGhlIGFyZ3VtZW50CisrICAgIGZvcm1hdCwgT1VUIGlzIHRoZSBvdXRw dXQgc3RyZWFtIHRvIHByaW50LiAgRlJBTUVfTE9XIGlzIHRoZQorKyAgICBiZWdpbm5pbmcgb2Yg dGhlIHNsaWNlIG9mIGZyYW1lcyB0byBwcmludCwgYW5kIEZSQU1FX0hJR0ggaXMgdGhlCisrICAg IHVwcGVyIGxpbWl0IG9mIHRoZSBmcmFtZXMgdG8gY291bnQuICBSZXR1cm5zIFBZX0JUX0VSUk9S IG9uIGVycm9yLAorKyAgICBvciBQWV9CVF9DT01QTEVURUQgb24gc3VjY2Vzcy4qLworKworK2Vu dW0gcHlfYnRfc3RhdHVzCisrYXBwbHlfZnJhbWVfZmlsdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAq ZnJhbWUsIGludCBmbGFncywKKysJCSAgICBlbnVtIHB5X2ZyYW1lX2FyZ3MgYXJnc190eXBlLAor KwkJICAgIHN0cnVjdCB1aV9vdXQgKm91dCwgaW50IGZyYW1lX2xvdywKKysJCSAgICBpbnQgZnJh bWVfaGlnaCkKKysKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IE5VTEw7CisrICBz dHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisrICBlbnVtIHB5X2J0X3N0YXR1cyBzdWNjZXNzID0g UFlfQlRfRVJST1I7CisrICBQeU9iamVjdCAqaXRlcmFibGU7CisrICB2b2xhdGlsZSBzdHJ1Y3Qg Z2RiX2V4Y2VwdGlvbiBleGNlcHQ7CisrICBQeU9iamVjdCAqaXRlbTsKKysgIGh0YWJfdCBsZXZl bHNfcHJpbnRlZDsKKysKKysgIGNsZWFudXBzID0gZW5zdXJlX3B5dGhvbl9lbnYgKGdkYmFyY2gs IGN1cnJlbnRfbGFuZ3VhZ2UpOworKworKyAgVFJZX0NBVENIIChleGNlcHQsIFJFVFVSTl9NQVNL X0FMTCkKKysgICAgeworKyAgICAgIGdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAoZnJhbWUpOwor KyAgICB9CisrICBpZiAoZXhjZXB0LnJlYXNvbiA8IDApCisrICAgIHsKKysgICAgICBnZGJweV9j b252ZXJ0X2V4Y2VwdGlvbiAoZXhjZXB0KTsKKysgICAgICBnb3RvIGVycm9yOworKyAgICB9Cisr CisrICBpdGVyYWJsZSA9IGJvb3RzdHJhcF9weXRob25fZnJhbWVfZmlsdGVycyAoZnJhbWUsIGZy YW1lX2xvdywgZnJhbWVfaGlnaCk7CisrCisrICBpZiAoaXRlcmFibGUgPT0gTlVMTCkKKysgICAg Z290byBlcnJvcjsKKysKKysgIC8qIElmIGl0ZXJhYmxlIGlzIE5vbmUsIHRoZW4gdGhlcmUgYXJl IG5vIGZyYW1lIGZpbHRlcnMgcmVnaXN0ZXJlZC4KKysgICAgIElmIHRoaXMgaXMgdGhlIGNhc2Us IGRlZmVyIHRvIGRlZmF1bHQgR0RCIHByaW50aW5nIHJvdXRpbmVzIGluIE1JCisrICAgICBhbmQg Q0xJLiAgKi8KKysgIG1ha2VfY2xlYW51cF9weV9kZWNyZWYgKGl0ZXJhYmxlKTsKKysgIGlmIChp dGVyYWJsZSA9PSBQeV9Ob25lKQorKyAgICB7CisrICAgICAgc3VjY2VzcyA9IFBZX0JUX05PX0ZJ TFRFUlM7CisrICAgICAgZ290byBkb25lOworKyAgICB9CisrCisrICBsZXZlbHNfcHJpbnRlZCA9 IGh0YWJfY3JlYXRlICgyMCwKKysJCQkJaHRhYl9oYXNoX3BvaW50ZXIsCisrCQkJCWh0YWJfZXFf cG9pbnRlciwKKysJCQkJTlVMTCk7CisrICBtYWtlX2NsZWFudXBfaHRhYl9kZWxldGUgKGxldmVs c19wcmludGVkKTsKKysKKysgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0IChpdGVyYWJsZSkp KQorKyAgICB7CisrICAgICAgc3VjY2VzcyA9IHB5X3ByaW50X2ZyYW1lIChpdGVtLCBmbGFncywg YXJnc190eXBlLCBvdXQsIDAsCisrCQkJCWxldmVsc19wcmludGVkKTsKKysKKysgICAgICAvKiBE byBub3QgZXhpdCBvbiBlcnJvciBwcmludGluZyBhIHNpbmdsZSBmcmFtZS4gIFByaW50IHRoZQor KwkgZXJyb3IgYW5kIGNvbnRpbnVlIHdpdGggb3RoZXIgZnJhbWVzLiAgKi8KKysgICAgICBpZiAo c3VjY2VzcyA9PSBQWV9CVF9FUlJPUikKKysJZ2RicHlfcHJpbnRfc3RhY2sgKCk7CisrCisrICAg ICAgUHlfREVDUkVGIChpdGVtKTsKKysgICAgfQorKworKyAgaWYgKGl0ZW0gPT0gTlVMTCAmJiBQ eUVycl9PY2N1cnJlZCAoKSkKKysgICAgZ290byBlcnJvcjsKKysKKysgZG9uZToKKysgIGRvX2Ns ZWFudXBzIChjbGVhbnVwcyk7CisrICByZXR1cm4gc3VjY2VzczsKKysKKysgZXJyb3I6CisrICBn ZGJweV9wcmludF9zdGFjayAoKTsKKysgIGRvX2NsZWFudXBzIChjbGVhbnVwcyk7CisrICByZXR1 cm4gUFlfQlRfRVJST1I7CisrfQorSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9weS1vYmpmaWxl LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL3B5dGhvbi9weS1vYmpmaWxlLmMJ MjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9weXRo b24vcHktb2JqZmlsZS5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMTEyMTY1NzY3ICswMjAwCitAQCAt MzMsNiArMzMsOCBAQCB0eXBlZGVmIHN0cnVjdAorICAgLyogVGhlIHByZXR0eS1wcmludGVyIGxp c3Qgb2YgZnVuY3Rpb25zLiAgKi8KKyAgIFB5T2JqZWN0ICpwcmludGVyczsKKyAKKysgIC8qIFRo ZSBmcmFtZSBmaWx0ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLworKyAgUHlPYmplY3QgKmZyYW1l X2ZpbHRlcnM7CisgICAvKiBUaGUgdHlwZS1wcmludGVyIGxpc3QuICAqLworICAgUHlPYmplY3Qg KnR5cGVfcHJpbnRlcnM7CisgfSBvYmpmaWxlX29iamVjdDsKK0BAIC02MSw2ICs2Myw3IEBAIG9i amZweV9kZWFsbG9jIChQeU9iamVjdCAqbykKKyAgIG9iamZpbGVfb2JqZWN0ICpzZWxmID0gKG9i amZpbGVfb2JqZWN0ICopIG87CisgCisgICBQeV9YREVDUkVGIChzZWxmLT5wcmludGVycyk7Cisr ICBQeV9YREVDUkVGIChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAgIFB5X1hERUNSRUYgKHNlbGYt PnR5cGVfcHJpbnRlcnMpOworICAgUHlfVFlQRSAoc2VsZiktPnRwX2ZyZWUgKHNlbGYpOworIH0K K0BAIC04MSw2ICs4NCwxMyBAQCBvYmpmcHlfbmV3IChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2Jq ZWN0CisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKyAKKysgICAgICBzZWxmLT5mcmFtZV9maWx0ZXJz ID0gUHlEaWN0X05ldyAoKTsKKysgICAgICBpZiAoIXNlbGYtPmZyYW1lX2ZpbHRlcnMpCisrCXsK KysJICBQeV9ERUNSRUYgKHNlbGYpOworKwkgIHJldHVybiBOVUxMOworKwl9CisrCisgICAgICAg c2VsZi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOworICAgICAgIGlmICghc2VsZi0+ dHlwZV9wcmludGVycykKKyAJeworQEAgLTEyOSw2ICsxMzksNDcgQEAgb2JqZnB5X3NldF9wcmlu dGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZQorICAgcmV0dXJuIDA7CisgfQorIAorKy8qIFJldHVy biB0aGUgUHl0aG9uIGRpY3Rpb25hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgZnJhbWUgZmlsdGVy cyBmb3IKKysgICB0aGlzIG9iamVjdCBmaWxlLiAgKi8KKytQeU9iamVjdCAqCisrb2JqZnB5X2dl dF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQorK3sKKysgIG9iamZp bGVfb2JqZWN0ICpzZWxmID0gKG9iamZpbGVfb2JqZWN0ICopIG87CisrCisrICBQeV9JTkNSRUYg KHNlbGYtPmZyYW1lX2ZpbHRlcnMpOworKyAgcmV0dXJuIHNlbGYtPmZyYW1lX2ZpbHRlcnM7Cisr fQorKworKy8qIFNldCB0aGlzIG9iamVjdCBmaWxlJ3MgZnJhbWUgZmlsdGVycyBkaWN0aW9uYXJ5 IHRvIEZJTFRFUlMuICAqLworK3N0YXRpYyBpbnQKKytvYmpmcHlfc2V0X2ZyYW1lX2ZpbHRlcnMg KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqZmlsdGVycywgdm9pZCAqaWdub3JlKQorK3sKKysgIFB5 T2JqZWN0ICp0bXA7CisrICBvYmpmaWxlX29iamVjdCAqc2VsZiA9IChvYmpmaWxlX29iamVjdCAq KSBvOworKworKyAgaWYgKCEgZmlsdGVycykKKysgICAgeworKyAgICAgIFB5RXJyX1NldFN0cmlu ZyAoUHlFeGNfVHlwZUVycm9yLAorKwkJICAgICAgIF8oIkNhbm5vdCBkZWxldGUgdGhlIGZyYW1l IGZpbHRlcnMgYXR0cmlidXRlLiIpKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysg IGlmICghIFB5RGljdF9DaGVjayAoZmlsdGVycykpCisrICAgIHsKKysgICAgICBQeUVycl9TZXRT dHJpbmcgKFB5RXhjX1R5cGVFcnJvciwKKysJCSAgICAgICBfKCJUaGUgZnJhbWVfZmlsdGVycyBh dHRyaWJ1dGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIikpOworKyAgICAgIHJldHVybiAtMTsKKysg ICAgfQorKworKyAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQgUkhTIGFyZSByZWxh dGVkIHNvbWVob3cuICAqLworKyAgdG1wID0gc2VsZi0+ZnJhbWVfZmlsdGVyczsKKysgIFB5X0lO Q1JFRiAoZmlsdGVycyk7CisrICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gZmlsdGVyczsKKysgIFB5 X1hERUNSRUYgKHRtcCk7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisgLyogR2V0IHRoZSAndHlw ZV9wcmludGVycycgYXR0cmlidXRlLiAgKi8KKyAKKyBzdGF0aWMgUHlPYmplY3QgKgorQEAgLTIy NSw2ICsyNzYsMTMgQEAgb2JqZmlsZV90b19vYmpmaWxlX29iamVjdCAoc3RydWN0IG9iamZpbAor IAkgICAgICByZXR1cm4gTlVMTDsKKyAJICAgIH0KKyAKKysJICBvYmplY3QtPmZyYW1lX2ZpbHRl cnMgPSBQeURpY3RfTmV3ICgpOworKwkgIGlmICghb2JqZWN0LT5mcmFtZV9maWx0ZXJzKQorKwkg ICAgeworKwkgICAgICBQeV9ERUNSRUYgKG9iamVjdCk7CisrCSAgICAgIHJldHVybiBOVUxMOwor KwkgICAgfQorKworIAkgIG9iamVjdC0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDApOwor IAkgIGlmICghb2JqZWN0LT50eXBlX3ByaW50ZXJzKQorIAkgICAgeworQEAgLTI3MCw2ICszMjgs OCBAQCBzdGF0aWMgUHlHZXRTZXREZWYgb2JqZmlsZV9nZXRzZXRbXSA9CisgICAgICJUaGUgb2Jq ZmlsZSdzIGZpbGVuYW1lLCBvciBOb25lLiIsIE5VTEwgfSwKKyAgIHsgInByZXR0eV9wcmludGVy cyIsIG9iamZweV9nZXRfcHJpbnRlcnMsIG9iamZweV9zZXRfcHJpbnRlcnMsCisgICAgICJQcmV0 dHkgcHJpbnRlcnMuIiwgTlVMTCB9LAorKyAgeyAiZnJhbWVfZmlsdGVycyIsIG9iamZweV9nZXRf ZnJhbWVfZmlsdGVycywKKysgICAgb2JqZnB5X3NldF9mcmFtZV9maWx0ZXJzLCAiRnJhbWUgRmls dGVycy4iLCBOVUxMIH0sCisgICB7ICJ0eXBlX3ByaW50ZXJzIiwgb2JqZnB5X2dldF90eXBlX3By aW50ZXJzLCBvYmpmcHlfc2V0X3R5cGVfcHJpbnRlcnMsCisgICAgICJUeXBlIHByaW50ZXJzLiIs IE5VTEwgfSwKKyAgIHsgTlVMTCB9CitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5LXByb2dz cGFjZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHktcHJvZ3Nw YWNlLmMJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dk Yi9weXRob24vcHktcHJvZ3NwYWNlLmMJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTIxNjU3NjcgKzAy MDAKK0BAIC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0CisgICAvKiBUaGUgcHJldHR5LXBy aW50ZXIgbGlzdCBvZiBmdW5jdGlvbnMuICAqLworICAgUHlPYmplY3QgKnByaW50ZXJzOworIAor KyAgLyogVGhlIGZyYW1lIGZpbHRlciBsaXN0IG9mIGZ1bmN0aW9ucy4gICovCisrICBQeU9iamVj dCAqZnJhbWVfZmlsdGVyczsKKyAgIC8qIFRoZSB0eXBlLXByaW50ZXIgbGlzdC4gICovCisgICBQ eU9iamVjdCAqdHlwZV9wcmludGVyczsKKyB9IHBzcGFjZV9vYmplY3Q7CitAQCAtNjksNiArNzEs NyBAQCBwc3B5X2RlYWxsb2MgKFB5T2JqZWN0ICpzZWxmKQorICAgcHNwYWNlX29iamVjdCAqcHNf c2VsZiA9IChwc3BhY2Vfb2JqZWN0ICopIHNlbGY7CisgCisgICBQeV9YREVDUkVGIChwc19zZWxm LT5wcmludGVycyk7CisrICBQeV9YREVDUkVGIChwc19zZWxmLT5mcmFtZV9maWx0ZXJzKTsKKyAg IFB5X1hERUNSRUYgKHBzX3NlbGYtPnR5cGVfcHJpbnRlcnMpOworICAgUHlfVFlQRSAoc2VsZikt PnRwX2ZyZWUgKHNlbGYpOworIH0KK0BAIC04OSw2ICs5MiwxMyBAQCBwc3B5X25ldyAoUHlUeXBl T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqCisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKyAKKysgICAg ICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gUHlEaWN0X05ldyAoKTsKKysgICAgICBpZiAoIXNlbGYt PmZyYW1lX2ZpbHRlcnMpCisrCXsKKysJICBQeV9ERUNSRUYgKHNlbGYpOworKwkgIHJldHVybiBO VUxMOworKwl9CisrCisgICAgICAgc2VsZi0+dHlwZV9wcmludGVycyA9IFB5TGlzdF9OZXcgKDAp OworICAgICAgIGlmICghc2VsZi0+dHlwZV9wcmludGVycykKKyAJeworQEAgLTEzNyw2ICsxNDcs NDcgQEAgcHNweV9zZXRfcHJpbnRlcnMgKFB5T2JqZWN0ICpvLCBQeU9iamVjdAorICAgcmV0dXJu IDA7CisgfQorIAorKy8qIFJldHVybiB0aGUgUHl0aG9uIGRpY3Rpb25hcnkgYXR0cmlidXRlIGNv bnRhaW5pbmcgZnJhbWUgZmlsdGVycyBmb3IKKysgICB0aGlzIHByb2dyYW0gc3BhY2UuICAqLwor K1B5T2JqZWN0ICoKKytwc3B5X2dldF9mcmFtZV9maWx0ZXJzIChQeU9iamVjdCAqbywgdm9pZCAq aWdub3JlKQorK3sKKysgIHBzcGFjZV9vYmplY3QgKnNlbGYgPSAocHNwYWNlX29iamVjdCAqKSBv OworKworKyAgUHlfSU5DUkVGIChzZWxmLT5mcmFtZV9maWx0ZXJzKTsKKysgIHJldHVybiBzZWxm LT5mcmFtZV9maWx0ZXJzOworK30KKysKKysvKiBTZXQgdGhpcyBvYmplY3QgZmlsZSdzIGZyYW1l IGZpbHRlcnMgZGljdGlvbmFyeSB0byBGSUxURVJTLiAgKi8KKytzdGF0aWMgaW50CisrcHNweV9z ZXRfZnJhbWVfZmlsdGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpmcmFtZSwgdm9pZCAqaWdu b3JlKQorK3sKKysgIFB5T2JqZWN0ICp0bXA7CisrICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBz cGFjZV9vYmplY3QgKikgbzsKKysKKysgIGlmICghIGZyYW1lKQorKyAgICB7CisrICAgICAgUHlF cnJfU2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisrCQkgICAgICAgImNhbm5vdCBkZWxldGUg dGhlIGZyYW1lIGZpbHRlciBhdHRyaWJ1dGUiKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0K KysKKysgIGlmICghIFB5RGljdF9DaGVjayAoZnJhbWUpKQorKyAgICB7CisrICAgICAgUHlFcnJf U2V0U3RyaW5nIChQeUV4Y19UeXBlRXJyb3IsCisrCQkgICAgICAgInRoZSBmcmFtZSBmaWx0ZXIg YXR0cmlidXRlIG11c3QgYmUgYSBkaWN0aW9uYXJ5Iik7CisrICAgICAgcmV0dXJuIC0xOworKyAg ICB9CisrCisrICAvKiBUYWtlIGNhcmUgaW4gY2FzZSB0aGUgTEhTIGFuZCBSSFMgYXJlIHJlbGF0 ZWQgc29tZWhvdy4gICovCisrICB0bXAgPSBzZWxmLT5mcmFtZV9maWx0ZXJzOworKyAgUHlfSU5D UkVGIChmcmFtZSk7CisrICBzZWxmLT5mcmFtZV9maWx0ZXJzID0gZnJhbWU7CisrICBQeV9YREVD UkVGICh0bXApOworKworKyAgcmV0dXJuIDA7CisrfQorKworIC8qIEdldCB0aGUgJ3R5cGVfcHJp bnRlcnMnIGF0dHJpYnV0ZS4gICovCisgCisgc3RhdGljIFB5T2JqZWN0ICoKK0BAIC0yMjEsNiAr MjcyLDEzIEBAIHBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChzdHJ1Y3QgcHJvZ3JhbV8KKyAJICAg ICAgcmV0dXJuIE5VTEw7CisgCSAgICB9CisgCisrCSAgb2JqZWN0LT5mcmFtZV9maWx0ZXJzID0g UHlEaWN0X05ldyAoKTsKKysJICBpZiAoIW9iamVjdC0+ZnJhbWVfZmlsdGVycykKKysJICAgIHsK KysJICAgICAgUHlfREVDUkVGIChvYmplY3QpOworKwkgICAgICByZXR1cm4gTlVMTDsKKysJICAg IH0KKysKKyAJICBvYmplY3QtPnR5cGVfcHJpbnRlcnMgPSBQeUxpc3RfTmV3ICgwKTsKKyAJICBp ZiAoIW9iamVjdC0+dHlwZV9wcmludGVycykKKyAJICAgIHsKK0BAIC0yNTcsNiArMzE1LDggQEAg c3RhdGljIFB5R2V0U2V0RGVmIHBzcGFjZV9nZXRzZXRbXSA9CisgICAgICJUaGUgcHJvZ3NwYWNl J3MgbWFpbiBmaWxlbmFtZSwgb3IgTm9uZS4iLCBOVUxMIH0sCisgICB7ICJwcmV0dHlfcHJpbnRl cnMiLCBwc3B5X2dldF9wcmludGVycywgcHNweV9zZXRfcHJpbnRlcnMsCisgICAgICJQcmV0dHkg cHJpbnRlcnMuIiwgTlVMTCB9LAorKyAgeyAiZnJhbWVfZmlsdGVycyIsIHBzcHlfZ2V0X2ZyYW1l X2ZpbHRlcnMsIHBzcHlfc2V0X2ZyYW1lX2ZpbHRlcnMsCisrICAgICJGcmFtZSBmaWx0ZXJzLiIs IE5VTEwgfSwKKyAgIHsgInR5cGVfcHJpbnRlcnMiLCBwc3B5X2dldF90eXBlX3ByaW50ZXJzLCBw c3B5X3NldF90eXBlX3ByaW50ZXJzLAorICAgICAiVHlwZSBwcmludGVycy4iLCBOVUxMIH0sCisg ICB7IE5VTEwgfQorSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9weS11dGlscy5jCis9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHktdXRpbHMuYwkyMDEzLTA1LTIwIDIy OjIzOjM2Ljc0ODIxNTE0NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9weS11dGlscy5j CTIwMTMtMDUtMjAgMjI6MjU6NTIuMTEzMTY1NzY2ICswMjAwCitAQCAtNDgsNiArNDgsMjggQEAg bWFrZV9jbGVhbnVwX3B5X2RlY3JlZiAoUHlPYmplY3QgKnB5KQorICAgcmV0dXJuIG1ha2VfY2xl YW51cCAocHlfZGVjcmVmLCAodm9pZCAqKSBweSk7CisgfQorIAorKy8qIFRoaXMgaXMgYSBjbGVh bnVwIGZ1bmN0aW9uIHdoaWNoIGRlY3JlbWVudHMgdGhlIHJlZmNvdW50IG9uIGEKKysgICBQeXRo b24gb2JqZWN0LiAgVGhpcyBmdW5jdGlvbiBhY2NvdW50cyBhcHByb3ByaWF0ZWx5IGZvciBOVUxM CisrICAgcmVmZXJlbmNlcy4gICovCisrCisrc3RhdGljIHZvaWQKKytweV94ZGVjcmVmICh2b2lk ICpwKQorK3sKKysgIFB5T2JqZWN0ICpweSA9IHA7CisrCisrICBQeV9YREVDUkVGIChweSk7Cisr fQorKworKy8qIFJldHVybiBhIG5ldyBjbGVhbnVwIHdoaWNoIHdpbGwgZGVjcmVtZW50IHRoZSBQ eXRob24gb2JqZWN0J3MKKysgICByZWZjb3VudCB3aGVuIHJ1bi4gIEFjY291bnQgZm9yIGFuZCBv cGVyYXRlIG9uIE5VTEwgcmVmZXJlbmNlcworKyAgIGNvcnJlY3RseS4gICovCisrCisrc3RydWN0 IGNsZWFudXAgKgorK21ha2VfY2xlYW51cF9weV94ZGVjcmVmIChQeU9iamVjdCAqcHkpCisrewor KyAgcmV0dXJuIG1ha2VfY2xlYW51cCAocHlfeGRlY3JlZiwgcHkpOworK30KKysKKyAvKiBDb252 ZXJ0cyBhIFB5dGhvbiA4LWJpdCBzdHJpbmcgdG8gYSB1bmljb2RlIHN0cmluZyBvYmplY3QuICBB c3N1bWVzIHRoZQorICAgIDgtYml0IHN0cmluZyBpcyBpbiB0aGUgaG9zdCBjaGFyc2V0LiAgSWYg YW4gZXJyb3Igb2NjdXJzIGR1cmluZyBjb252ZXJzaW9uLAorICAgIHJldHVybnMgTlVMTCB3aXRo IGEgcHl0aG9uIGV4Y2VwdGlvbiBzZXQuCitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5dGhv bi1pbnRlcm5hbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHl0 aG9uLWludGVybmFsLmgJMjAxMy0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBn ZGItNy42L2dkYi9weXRob24vcHl0aG9uLWludGVybmFsLmgJMjAxMy0wNS0yMCAyMjoyNTo1Mi4x MTMxNjU3NjYgKzAyMDAKK0BAIC0yNTEsOSArMjUxLDExIEBAIFB5T2JqZWN0ICpmcmFtZV9pbmZv X3RvX2ZyYW1lX29iamVjdCAoc3QKKyAKKyBQeU9iamVjdCAqcHNwYWNlX3RvX3BzcGFjZV9vYmpl Y3QgKHN0cnVjdCBwcm9ncmFtX3NwYWNlICopOworIFB5T2JqZWN0ICpwc3B5X2dldF9wcmludGVy cyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKKytQeU9iamVjdCAqcHNweV9nZXRfZnJhbWVfZmlsdGVy cyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKKyAKKyBQeU9iamVjdCAqb2JqZmlsZV90b19vYmpmaWxl X29iamVjdCAoc3RydWN0IG9iamZpbGUgKik7CisgUHlPYmplY3QgKm9iamZweV9nZXRfcHJpbnRl cnMgKFB5T2JqZWN0ICosIHZvaWQgKik7CisrUHlPYmplY3QgKm9iamZweV9nZXRfZnJhbWVfZmls dGVycyAoUHlPYmplY3QgKiwgdm9pZCAqKTsKKyAKKyBQeU9iamVjdCAqZ2RiYXJjaF90b19hcmNo X29iamVjdCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpOworIAorQEAgLTMwNCw2ICszMDYsNyBA QCB2b2lkIGdkYnB5X2luaXRpYWxpemVfbmV3X29iamZpbGVfZXZlbnQKKyB2b2lkIGdkYnB5X2lu aXRpYWxpemVfYXJjaCAodm9pZCk7CisgCisgc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9w eV9kZWNyZWYgKFB5T2JqZWN0ICpweSk7Cisrc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9w eV94ZGVjcmVmIChQeU9iamVjdCAqcHkpOworIAorIHN0cnVjdCBjbGVhbnVwICplbnN1cmVfcHl0 aG9uX2VudiAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgCQkJCSAgIGNvbnN0IHN0cnVjdCBs YW5ndWFnZV9kZWZuICpsYW5ndWFnZSk7CitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL3B5dGhv bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLS0gZ2RiLTcuNi5vcmlnL2dkYi9weXRob24vcHl0aG9uLmMJMjAx My0wNS0yMCAyMjoyMzozNi43NDgyMTUxNDYgKzAyMDAKKysrKyBnZGItNy42L2dkYi9weXRob24v cHl0aG9uLmMJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTMxNjU3NjYgKzAyMDAKK0BAIC0xNDQyLDYg KzE0NDIsMTUgQEAgZnJlZV90eXBlX3ByaW50ZXJzICh2b2lkICphcmcpCisgeworIH0KKyAKKytl bnVtIHB5X2J0X3N0YXR1cworK2FwcGx5X2ZyYW1lX2ZpbHRlciAoc3RydWN0IGZyYW1lX2luZm8g KmZyYW1lLCBpbnQgZmxhZ3MsCisrCQkgICAgZW51bSBweV9mcmFtZV9hcmdzIGFyZ3NfdHlwZSwK KysJCSAgICBzdHJ1Y3QgdWlfb3V0ICpvdXQsIGludCBmcmFtZV9sb3csCisrCQkgICAgaW50IGZy YW1lX2hpZ2gpCisreworKyAgcmV0dXJuIFBZX0JUX05PX0ZJTFRFUlM7CisrfQorKworICNlbmRp ZiAvKiBIQVZFX1BZVEhPTiAqLworIAorIAwKK0luZGV4OiBnZGItNy42L2dkYi9weXRob24vcHl0 aG9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKy0tLSBnZGItNy42Lm9yaWcvZ2RiL3B5dGhvbi9weXRob24uaAky MDEzLTA1LTIwIDIyOjIzOjM2Ljc0ODIxNTE0NiArMDIwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhv bi9weXRob24uaAkyMDEzLTA1LTIwIDIyOjI1OjUyLjExMzE2NTc2NiArMDIwMAorQEAgLTIxLDYg KzIxLDcgQEAKKyAjZGVmaW5lIEdEQl9QWVRIT05fSAorIAorICNpbmNsdWRlICJ2YWx1ZS5oIgor KyNpbmNsdWRlICJtaS9taS1jbWRzLmgiCisgCisgc3RydWN0IGJyZWFrcG9pbnRfb2JqZWN0Owor IAorQEAgLTI4LDYgKzI5LDY2IEBAIHN0cnVjdCBicmVha3BvaW50X29iamVjdDsKKyAgICBFLmcu IFdoZW4gdGhlIHByb2dyYW0gbG9hZHMgbGliZm9vLnNvLCBsb29rIGZvciBsaWJmb28tZ2RiLnB5 LiAgKi8KKyAjZGVmaW5lIEdEQlBZX0FVVE9fRklMRV9OQU1FICItZ2RiLnB5IgorIAorKy8qIFB5 dGhvbiBmcmFtZS1maWx0ZXIgc3RhdHVzIHJldHVybiB2YWx1ZXMuICAqLworK2VudW0gcHlfYnRf c3RhdHVzCisrICB7CisrICAgIC8qIFJldHVybiB3aGVuIGFuIGVycm9yIGhhcyBvY2N1cnJlZCBp biBwcm9jZXNzaW5nIGZyYW1lIGZpbHRlcnMsCisrICAgICAgIG9yIHdoZW4gcHJpbnRpbmcgdGhl IHN0YWNrLiAgKi8KKysgICAgUFlfQlRfRVJST1IgPSAtMSwKKysKKysgICAgLyogUmV0dXJuIGZy b20gaW50ZXJuYWwgcm91dGluZXMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZnVuY3Rpb24KKysgICAg ICAgc3VjY2VlZGVkLiAgKi8KKysgICAgUFlfQlRfT0sgPSAxLAorKworKyAgICAvKiBSZXR1cm4g d2hlbiB0aGUgZnJhbWUgZmlsdGVyIHByb2Nlc3MgaXMgY29tcGxldGUsIGFuZCBhbGwKKysgICAg ICAgb3BlcmF0aW9ucyBoYXZlIHN1Y2NlZWRlZC4gICovCisrICAgIFBZX0JUX0NPTVBMRVRFRCA9 IDIsCisrCisrICAgIC8qIFJldHVybiB3aGVuIHRoZSBmcmFtZSBmaWx0ZXIgcHJvY2VzcyBpcyBj b21wbGV0ZSwgYnV0IHRoZXJlCisrICAgICAgIHdlcmUgbm8gZmlsdGVyIHJlZ2lzdGVyZWQgYW5k IGVuYWJsZWQgdG8gcHJvY2Vzcy4gKi8KKysgICAgUFlfQlRfTk9fRklMVEVSUyA9IDMKKysgIH07 CisrCisrLyogRmxhZ3MgdG8gcGFzcyB0byBhcHBseV9mcmFtZV9maWx0ZXIuICAqLworKworK2Vu dW0gZnJhbWVfZmlsdGVyX2ZsYWdzCisrICB7CisrICAgIC8qIFNldCB0aGlzIGZsYWcgaWYgZnJh bWUgbGV2ZWwgaXMgdG8gYmUgcHJpbnRlZC4gICovCisrICAgIFBSSU5UX0xFVkVMID0gMSwKKysK KysgICAgLyogU2V0IHRoaXMgZmxhZyBpZiBmcmFtZSBpbmZvcm1hdGlvbiBpcyB0byBiZSBwcmlu dGVkLiAgKi8KKysgICAgUFJJTlRfRlJBTUVfSU5GTyA9IDIsCisrCisrICAgIC8qIFNldCB0aGlz IGZsYWcgaWYgZnJhbWUgYXJndW1lbnRzIGFyZSB0byBiZSBwcmludGVkLiAgKi8KKysgICAgUFJJ TlRfQVJHUyA9IDQsCisrCisrICAgIC8qIFNldCB0aGlzIGZsYWcgaWYgZnJhbWUgbG9jYWxzIGFy ZSB0byBiZSBwcmludGVkLiAgKi8KKysgICAgUFJJTlRfTE9DQUxTID0gOCwKKysgIH07CisrCisr LyogQSBjaG9pY2Ugb2YgdGhlIGRpZmZlcmVudCBmcmFtZSBhcmd1bWVudCBwcmludGluZyBzdHJh dGVnaWVzIHRoYXQKKysgICBjYW4gb2NjdXIgaW4gZGlmZmVyZW50IGNhc2VzIG9mIGZyYW1lIGZp bHRlciBpbnN0YW50aWF0aW9uLiAgKi8KKyt0eXBlZGVmIGVudW0gcHlfZnJhbWVfYXJncworK3sK KysgIC8qIFByaW50IG5vIHZhbHVlcyBmb3IgYXJndW1lbnRzIHdoZW4gaW52b2tlZCBmcm9tIHRo ZSBNSS4gKi8KKysgIE5PX1ZBTFVFUyA9IFBSSU5UX05PX1ZBTFVFUywKKysKKysgIE1JX1BSSU5U X0FMTF9WQUxVRVMgPSBQUklOVF9BTExfVkFMVUVTLAorKworKyAgLyogUHJpbnQgb25seSBzaW1w bGUgdmFsdWVzICh3aGF0IE1JIGRlZmluZXMgYXMgInNpbXBsZSIpIGZvcgorKyAgICAgYXJndW1l bnRzIHdoZW4gaW52b2tlZCBmcm9tIHRoZSBNSS4gKi8KKysgIE1JX1BSSU5UX1NJTVBMRV9WQUxV RVMgPSBQUklOVF9TSU1QTEVfVkFMVUVTLAorKworKworKyAgLyogUHJpbnQgb25seSBzY2FsYXIg dmFsdWVzIGZvciBhcmd1bWVudHMgd2hlbiBpbnZva2VkIGZyb20gdGhlCisrICAgICBDTEkuICov CisrICBDTElfU0NBTEFSX1ZBTFVFUywKKysKKysgIC8qIFByaW50IGFsbCB2YWx1ZXMgZm9yIGFy Z3VtZW50cyB3aGVuIGludm9rZWQgZnJvbSB0aGUKKysgICAgIENMSS4gKi8KKysgIENMSV9BTExf VkFMVUVTCisrfSBweV9mcmFtZV9hcmdzOworKworIGV4dGVybiB2b2lkIGZpbmlzaF9weXRob25f aW5pdGlhbGl6YXRpb24gKHZvaWQpOworIAorIHZvaWQgZXZhbF9weXRob25fZnJvbV9jb250cm9s X2NvbW1hbmQgKHN0cnVjdCBjb21tYW5kX2xpbmUgKik7CitAQCAtNDMsNiArMTA0LDExIEBAIGlu dCBhcHBseV92YWxfcHJldHR5X3ByaW50ZXIgKHN0cnVjdCB0eXAKKyAJCQkgICAgICBjb25zdCBz dHJ1Y3QgdmFsdWVfcHJpbnRfb3B0aW9ucyAqb3B0aW9ucywKKyAJCQkgICAgICBjb25zdCBzdHJ1 Y3QgbGFuZ3VhZ2VfZGVmbiAqbGFuZ3VhZ2UpOworIAorK2VudW0gcHlfYnRfc3RhdHVzIGFwcGx5 X2ZyYW1lX2ZpbHRlciAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBpbnQgZmxhZ3MsCisrCQkJ CSAgICAgIGVudW0gcHlfZnJhbWVfYXJncyBhcmdzX3R5cGUsCisrCQkJCSAgICAgIHN0cnVjdCB1 aV9vdXQgKm91dCwgaW50IGZyYW1lX2xvdywKKysJCQkJICAgICAgaW50IGZyYW1lX2hpZ2gpOwor KworIHZvaWQgcHJlc2VydmVfcHl0aG9uX3ZhbHVlcyAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUs IGh0YWJfdCBjb3BpZWRfdHlwZXMpOworIAorIHZvaWQgZ2RicHlfbG9hZF9hdXRvX3NjcmlwdHNf Zm9yX29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKK0luZGV4OiBnZGItNy42L2dk Yi9weXRob24vbGliL2dkYi9GcmFtZURlY29yYXRvci5weQorPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYv bnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYvZ2Ri L3B5dGhvbi9saWIvZ2RiL0ZyYW1lRGVjb3JhdG9yLnB5CTIwMTMtMDUtMjAgMjI6MjU6NTIuMTEz MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDI4NSBAQAorKyMgQ29weXJpZ2h0IChDKSAyMDEzIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrIyBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKysKKytpbXBvcnQgZ2RiCisrCisrY2xhc3MgRnJhbWVEZWNvcmF0b3Iob2JqZWN0KToK KysgICAgIiIiQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBGcmFtZSBEZWNvcmF0b3IiIiIKKysK KysgICAgIiIiIFRoaXMgYmFzZSBmcmFtZSBkZWNvcmF0b3IgZGVjb3JhdGVzIGEgZnJhbWUgb3Ig YW5vdGhlciBmcmFtZQorKyAgICBkZWNvcmF0b3IsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZSBt ZXRob2RzLiAgSWYgdGhpcyBvYmplY3QgaXMKKysgICAgd3JhcHBpbmcgYSBmcmFtZSBkZWNvcmF0 b3IsIGRlZmVyIHRvIHRoYXQgd3JhcHBlZCBvYmplY3QncyBtZXRob2QKKysgICAgaWYgaXQgaGFz IG9uZS4gIFRoaXMgYWxsb3dzIGZvciBmcmFtZSBkZWNvcmF0b3JzIHRoYXQgaGF2ZQorKyAgICBz dWItY2xhc3NlZCBGcmFtZURlY29yYXRvciBvYmplY3QsIGJ1dCBhbHNvIHdyYXAgb3RoZXIgZnJh bWUKKysgICAgZGVjb3JhdG9ycyBvbiB0aGUgc2FtZSBmcmFtZSB0byBjb3JyZWN0bHkgZXhlY3V0 ZS4KKysKKysgICAgRS5nCisrCisrICAgIElmIHRoZSByZXN1bHQgb2YgZnJhbWUgZmlsdGVycyBy dW5uaW5nIG1lYW5zIHdlIGhhdmUgb25lIGdkYi5GcmFtZQorKyAgICB3cmFwcGVkIGJ5IG11bHRp cGxlIGZyYW1lIGRlY29yYXRvcnMsIGFsbCBzdWItY2xhc3NlZCBmcm9tCisrICAgIEZyYW1lRGVj b3JhdG9yLCB0aGUgcmVzdWx0aW5nIGhpZXJhcmNoeSB3aWxsIGJlOgorKworKyAgICBEZWNvcmF0 b3IxCisrICAgICAgLS0gKHdyYXBzKSBEZWNvcmF0b3IyCisrICAgICAgICAtLSAod3JhcHMpIEZy YW1lRGVjb3JhdG9yCisrICAgICAgICAgIC0tICh3cmFwcykgZ2RiLkZyYW1lCisrCisrICAgIElu IHRoaXMgY2FzZSB3ZSBoYXZlIHR3byBmcmFtZSBkZWNvcmF0b3JzLCBib3RoIG9mIHdoaWNoIGFy ZQorKyAgICBzdWItY2xhc3NlZCBmcm9tIEZyYW1lRGVjb3JhdG9yLiAgSWYgRGVjb3JhdG9yMSBq dXN0IG92ZXJyaWRlcyB0aGUKKysgICAgJ2Z1bmN0aW9uJyBtZXRob2QsIHRoZW4gYWxsIG9mIHRo ZSBvdGhlciBtZXRob2RzIGFyZSBjYXJyaWVkIG91dAorKyAgICBieSB0aGUgc3VwZXItY2xhc3Mg RnJhbWVEZWNvcmF0b3IuICBCdXQgRGVjb3JhdG9yMiBtYXkgaGF2ZQorKyAgICBvdmVycmlkZW4g b3RoZXIgbWV0aG9kcywgc28gRnJhbWVEZWNvcmF0b3Igd2lsbCBsb29rIGF0IHRoZQorKyAgICAn YmFzZScgcGFyYW1ldGVyIGFuZCBkZWZlciB0byB0aGF0IGNsYXNzJ3MgbWV0aG9kcy4gIEFuZCBz byBvbiwKKysgICAgZG93biB0aGUgY2hhaW4uIiIiCisrCisrICAgICMgJ2Jhc2UnIGNhbiByZWZl ciB0byBhIGdkYi5GcmFtZSBvciBhbm90aGVyIGZyYW1lIGRlY29yYXRvci4gIEluCisrICAgICMg dGhlIGxhdHRlciBjYXNlLCB0aGUgY2hpbGQgY2xhc3Mgd2lsbCBoYXZlIGNhbGxlZCB0aGUgc3Vw ZXIKKysgICAgIyBtZXRob2QgYW5kIF9iYXNlIHdpbGwgYmUgYW4gb2JqZWN0IGNvbmZvcm1pbmcg dG8gdGhlIEZyYW1lIEZpbHRlcgorKyAgICAjIGNsYXNzLgorKyAgICBkZWYgX19pbml0X18oc2Vs ZiwgYmFzZSk6CisrICAgICAgICBzZWxmLl9iYXNlID0gYmFzZQorKworKyAgICBAc3RhdGljbWV0 aG9kCisrICAgIGRlZiBfaXNfbGltaXRlZF9mcmFtZShmcmFtZSk6CisrICAgICAgICAiIiJJbnRl cm5hbCB1dGlsaXR5IHRvIGRldGVybWluZSBpZiB0aGUgZnJhbWUgaXMgc3BlY2lhbCBvcgorKyAg ICAgICAgbGltaXRlZC4iIiIKKysgICAgICAgIHNhbCA9IGZyYW1lLmZpbmRfc2FsKCkKKysKKysg ICAgICAgIGlmIChub3Qgc2FsLnN5bXRhYiBvciBub3Qgc2FsLnN5bXRhYi5maWxlbmFtZQorKyAg ICAgICAgICAgIG9yIGZyYW1lLnR5cGUoKSA9PSBnZGIuRFVNTVlfRlJBTUUKKysgICAgICAgICAg ICBvciBmcmFtZS50eXBlKCkgPT0gZ2RiLlNJR1RSQU1QX0ZSQU1FKToKKysKKysgICAgICAgICAg ICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgcmV0dXJuIEZhbHNlCisrCisrICAgIGRlZiBlbGlk ZWQoc2VsZik6CisrICAgICAgICAiIiJSZXR1cm4gYW55IGVsaWRlZCBmcmFtZXMgdGhhdCB0aGlz IGNsYXNzIG1pZ2h0IGJlCisrICAgICAgICB3cmFwcGluZywgb3IgTm9uZS4iIiIKKysgICAgICAg IGlmIGhhc2F0dHIoc2VsZi5fYmFzZSwgImVsaWRlZCIpOgorKyAgICAgICAgICAgIHJldHVybiBz ZWxmLl9iYXNlLmVsaWRlZCgpCisrCisrICAgICAgICByZXR1cm4gTm9uZQorKworKyAgICBkZWYg ZnVuY3Rpb24oc2VsZik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmcmFt ZSdzIGZ1bmN0aW9uIG9yIGFuIGFkZHJlc3Mgb2YKKysgICAgICAgIHRoZSBmdW5jdGlvbiBvZiB0 aGUgZnJhbWUuICBGaXJzdCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhCisrICAgICAgICBzcGVjaWFs IGZyYW1lLiAgSWYgbm90LCB0cnkgdG8gZGV0ZXJtaW5lIGZpbGVuYW1lIGZyb20gR0RCJ3MKKysg ICAgICAgIGZyYW1lIGludGVybmFsIGZ1bmN0aW9uIEFQSS4gIEZpbmFsbHksIGlmIGEgbmFtZSBj YW5ub3QgYmUKKysgICAgICAgIGRldGVybWluZWQgcmV0dXJuIHRoZSBhZGRyZXNzLiAgSWYgdGhp cyBmdW5jdGlvbiByZXR1cm5zIGFuCisrICAgICAgICBhZGRyZXNzLCBHREIgd2lsbCBhdHRlbXB0 IHRvIGRldGVybWluZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tCisrICAgICAgICBpdHMgaW50ZXJu YWwgbWluaW1hbCBzeW1ib2xzIHN0b3JlIChmb3IgZXhhbXBsZSwgZm9yIGluZmVyaW9ycworKyAg ICAgICAgd2l0aG91dCBkZWJ1Zy1pbmZvKS4iIiIKKysKKysgICAgICAgICMgQm90aCBnZGIuRnJh bWUsIGFuZCBGcmFtZURlY29yYXRvciBoYXZlIGEgbWV0aG9kIGNhbGxlZAorKyAgICAgICAgIyAi ZnVuY3Rpb24iLCBzbyBkZXRlcm1pbmUgd2hpY2ggb2JqZWN0IHRoaXMgaXMuCisrICAgICAgICBp ZiBub3QgaXNpbnN0YW5jZShzZWxmLl9iYXNlLCBnZGIuRnJhbWUpOgorKyAgICAgICAgICAgIGlm IGhhc2F0dHIoc2VsZi5fYmFzZSwgImZ1bmN0aW9uIik6CisrICAgICAgICAgICAgICAgICMgSWYg aXQgaXMgbm90IGEgZ2RiLkZyYW1lLCBhbmQgdGhlcmUgaXMgYWxyZWFkeSBhCisrICAgICAgICAg ICAgICAgICMgImZ1bmN0aW9uIiBtZXRob2QsIHVzZSB0aGF0LgorKyAgICAgICAgICAgICAgICBy ZXR1cm4gc2VsZi5fYmFzZS5mdW5jdGlvbigpCisrCisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5m ZXJpb3JfZnJhbWUoKQorKworKyAgICAgICAgaWYgZnJhbWUudHlwZSgpID09IGdkYi5EVU1NWV9G UkFNRToKKysgICAgICAgICAgICByZXR1cm4gIjxmdW5jdGlvbiBjYWxsZWQgZnJvbSBnZGI+Igor KyAgICAgICAgZWxpZiBmcmFtZS50eXBlKCkgPT0gZ2RiLlNJR1RSQU1QX0ZSQU1FOgorKyAgICAg ICAgICAgIHJldHVybiAiPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4iCisrCisrICAgICAgICBmdW5j ID0gZnJhbWUuZnVuY3Rpb24oKQorKworKyAgICAgICAgIyBJZiB3ZSBjYW5ub3QgZGV0ZXJtaW5l IHRoZSBmdW5jdGlvbiBuYW1lLCByZXR1cm4gdGhlCisrICAgICAgICAjIGFkZHJlc3MuICBJZiBH REIgZGV0ZWN0cyBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbgorKyAgICAgICAg IyBpdCB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIG1pbmltYWwK KysgICAgICAgICMgc3ltYm9scyB2aWEgaXRzIG93biBpbnRlcm5hbCBmdW5jdGlvbnMuCisrICAg ICAgICBpZiBmdW5jID09IE5vbmU6CisrICAgICAgICAgICAgcGMgPSBmcmFtZS5wYygpCisrICAg ICAgICAgICAgcmV0dXJuIHBjCisrCisrICAgICAgICByZXR1cm4gc3RyKGZ1bmMpCisrCisrICAg IGRlZiBhZGRyZXNzKHNlbGYpOgorKyAgICAgICAgIiIiIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0 aGUgZnJhbWUncyBwYyIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9iYXNlLCAiYWRk cmVzcyIpOgorKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNlLmFkZHJlc3MoKQorKworKyAg ICAgICAgZnJhbWUgPSBzZWxmLmluZmVyaW9yX2ZyYW1lKCkKKysgICAgICAgIHJldHVybiBmcmFt ZS5wYygpCisrCisrICAgIGRlZiBmaWxlbmFtZShzZWxmKToKKysgICAgICAgICIiIiBSZXR1cm4g dGhlIGZpbGVuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZyYW1lLCBkZXRlY3RpbmcKKysgICAg ICAgIGFuZCByZXR1cm5pbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcnkgbmFtZSBpcyB0aGlzIGlz IGEgc2hhcmVkCisrICAgICAgICBsaWJyYXJ5LiIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihz ZWxmLl9iYXNlLCAiZmlsZW5hbWUiKToKKysgICAgICAgICAgICByZXR1cm4gc2VsZi5fYmFzZS5m aWxlbmFtZSgpCisrCisrICAgICAgICBmcmFtZSA9IHNlbGYuaW5mZXJpb3JfZnJhbWUoKQorKyAg ICAgICAgc2FsID0gZnJhbWUuZmluZF9zYWwoKQorKyAgICAgICAgaWYgbm90IHNhbC5zeW10YWIg b3Igbm90IHNhbC5zeW10YWIuZmlsZW5hbWU6CisrICAgICAgICAgICAgcGMgPSBmcmFtZS5wYygp CisrICAgICAgICAgICAgcmV0dXJuIGdkYi5zb2xpYl9uYW1lKHBjKQorKyAgICAgICAgZWxzZToK KysgICAgICAgICAgICByZXR1cm4gc2FsLnN5bXRhYi5maWxlbmFtZQorKworKyAgICBkZWYgZnJh bWVfYXJncyhzZWxmKToKKysgICAgICAgICIiIiBSZXR1cm4gYW4gaXRlcmFibGUgb2YgZnJhbWUg YXJndW1lbnRzIGZvciB0aGlzIGZyYW1lLCBpZgorKyAgICAgICAgYW55LiAgVGhlIGl0ZXJhYmxl IG9iamVjdCBjb250YWlucyBvYmplY3RzIGNvbmZvcm1pbmcgd2l0aCB0aGUKKysgICAgICAgIFN5 bWJvbC9WYWx1ZSBpbnRlcmZhY2UuICBJZiB0aGVyZSBhcmUgbm8gZnJhbWUgYXJndW1lbnRzLCBv cgorKyAgICAgICAgaWYgdGhpcyBmcmFtZSBpcyBkZWVtZWQgdG8gYmUgYSBzcGVjaWFsIGNhc2Us IHJldHVybiBOb25lLiIiIgorKworKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9iYXNlLCAiZnJh bWVfYXJncyIpOgorKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9iYXNlLmZyYW1lX2FyZ3MoKQor KworKyAgICAgICAgZnJhbWUgPSBzZWxmLmluZmVyaW9yX2ZyYW1lKCkKKysgICAgICAgIGlmIHNl bGYuX2lzX2xpbWl0ZWRfZnJhbWUoZnJhbWUpOgorKyAgICAgICAgICAgIHJldHVybiBOb25lCisr CisrICAgICAgICBhcmdzID0gRnJhbWVWYXJzKGZyYW1lKQorKyAgICAgICAgcmV0dXJuIGFyZ3Mu ZmV0Y2hfZnJhbWVfYXJncygpCisrCisrICAgIGRlZiBmcmFtZV9sb2NhbHMoc2VsZik6CisrICAg ICAgICAiIiIgUmV0dXJuIGFuIGl0ZXJhYmxlIG9mIGxvY2FsIHZhcmlhYmxlcyBmb3IgdGhpcyBm cmFtZSwgaWYKKysgICAgICAgIGFueS4gIFRoZSBpdGVyYWJsZSBvYmplY3QgY29udGFpbnMgb2Jq ZWN0cyBjb25mb3JtaW5nIHdpdGggdGhlCisrICAgICAgICBTeW1ib2wvVmFsdWUgaW50ZXJmYWNl LiAgSWYgdGhlcmUgYXJlIG5vIGZyYW1lIGxvY2Fscywgb3IgaWYKKysgICAgICAgIHRoaXMgZnJh bWUgaXMgZGVlbWVkIHRvIGJlIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gTm9uZS4iIiIKKysKKysg ICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fYmFzZSwgImZyYW1lX2xvY2FscyIpOgorKyAgICAgICAg ICAgIHJldHVybiBzZWxmLl9iYXNlLmZyYW1lX2xvY2FscygpCisrCisrICAgICAgICBmcmFtZSA9 IHNlbGYuaW5mZXJpb3JfZnJhbWUoKQorKyAgICAgICAgaWYgc2VsZi5faXNfbGltaXRlZF9mcmFt ZShmcmFtZSk6CisrICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysKKysgICAgICAgIGFyZ3MgPSBG cmFtZVZhcnMoZnJhbWUpCisrICAgICAgICByZXR1cm4gYXJncy5mZXRjaF9mcmFtZV9sb2NhbHMo KQorKworKyAgICBkZWYgbGluZShzZWxmKToKKysgICAgICAgICIiIiBSZXR1cm4gbGluZSBudW1i ZXIgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSdzCisrICAgICAgICBwYy4g IElmIHN5bWJvbCB0YWJsZS9saW5lIGluZm9ybWF0aW9uIGRvZXMgbm90IGV4aXN0LCBvciBpZgor KyAgICAgICAgdGhpcyBmcmFtZSBpcyBkZWVtZWQgdG8gYmUgYSBzcGVjaWFsIGNhc2UsIHJldHVy biBOb25lIiIiCisrCisrICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX2Jhc2UsICJsaW5lIik6Cisr ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2UubGluZSgpCisrCisrICAgICAgICBmcmFtZSA9 IHNlbGYuaW5mZXJpb3JfZnJhbWUoKQorKyAgICAgICAgaWYgc2VsZi5faXNfbGltaXRlZF9mcmFt ZShmcmFtZSk6CisrICAgICAgICAgICAgcmV0dXJuIE5vbmUKKysKKysgICAgICAgIHNhbCA9IGZy YW1lLmZpbmRfc2FsKCkKKysgICAgICAgIGlmIChzYWwpOgorKyAgICAgICAgICAgIHJldHVybiBz YWwubGluZQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICByZXR1cm4gTm9uZQorKworKyAg ICBkZWYgaW5mZXJpb3JfZnJhbWUoc2VsZik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSBnZGIu RnJhbWUgdW5kZXJwaW5uaW5nIHRoaXMgZnJhbWUgZGVjb3JhdG9yLiIiIgorKworKyAgICAgICAg IyBJZiAnYmFzZScgaXMgYSBmcmFtZSBkZWNvcmF0b3IsIHdlIHdhbnQgdG8gY2FsbCBpdHMgaW5m ZXJpb3IKKysgICAgICAgICMgZnJhbWUgbWV0aG9kLiAgSWYgJ19iYXNlJyBpcyBhIGdkYi5GcmFt ZSwganVzdCByZXR1cm4gdGhhdC4KKysgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fYmFzZSwgImlu ZmVyaW9yX2ZyYW1lIik6CisrICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2UuaW5mZXJpb3Jf ZnJhbWUoKQorKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2UKKysKKytjbGFzcyBTeW1WYWx1ZVdy YXBwZXIob2JqZWN0KToKKysgICAgIiIiQSBjb250YWluZXIgY2xhc3MgY29uZm9ybWluZyB0byB0 aGUgU3ltYm9sL1ZhbHVlIGludGVyZmFjZQorKyAgICB3aGljaCBob2xkcyBmcmFtZSBsb2NhbHMg b3IgZnJhbWUgYXJndW1lbnRzLiIiIgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3ltYm9sLCB2 YWx1ZSk6CisrICAgICAgICBzZWxmLnN5bSA9IHN5bWJvbAorKyAgICAgICAgc2VsZi52YWwgPSB2 YWx1ZQorKworKyAgICBkZWYgdmFsdWUoc2VsZik6CisrICAgICAgICAiIiIgUmV0dXJuIHRoZSB2 YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzeW1ib2wsIG9yIE5vbmUiIiIKKysgICAgICAgIHJl dHVybiBzZWxmLnZhbAorKworKyAgICBkZWYgc3ltYm9sKHNlbGYpOgorKyAgICAgICAgIiIiIFJl dHVybiB0aGUgc3ltYm9sLCBvciBQeXRob24gdGV4dCwgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKysg ICAgICAgIHN5bWJvbCwgb3IgTm9uZSIiIgorKyAgICAgICAgcmV0dXJuIHNlbGYuc3ltCisrCisr Y2xhc3MgRnJhbWVWYXJzKG9iamVjdCk6CisrCisrICAgICIiIlV0aWxpdHkgY2xhc3MgdG8gZmV0 Y2ggYW5kIHN0b3JlIGZyYW1lIGxvY2FsIHZhcmlhYmxlcywgb3IKKysgICAgZnJhbWUgYXJndW1l bnRzLiIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorKyAgICAgICAgc2Vs Zi5mcmFtZSA9IGZyYW1lCisrICAgICAgICBzZWxmLnN5bWJvbF9jbGFzcyA9IHsKKysgICAgICAg ICAgICBnZGIuU1lNQk9MX0xPQ19TVEFUSUM6IFRydWUsCisrICAgICAgICAgICAgZ2RiLlNZTUJP TF9MT0NfUkVHSVNURVI6IFRydWUsCisrICAgICAgICAgICAgZ2RiLlNZTUJPTF9MT0NfQVJHOiBU cnVlLAorKyAgICAgICAgICAgIGdkYi5TWU1CT0xfTE9DX1JFRl9BUkc6IFRydWUsCisrICAgICAg ICAgICAgZ2RiLlNZTUJPTF9MT0NfTE9DQUw6IFRydWUsCisrCSAgICBnZGIuU1lNQk9MX0xPQ19S RUdQQVJNX0FERFI6IFRydWUsCisrCSAgICBnZGIuU1lNQk9MX0xPQ19DT01QVVRFRDogVHJ1ZQor KyAgICAgICAgICAgIH0KKysKKysgICAgZGVmIGZldGNoX2Ioc2VsZiwgc3ltKToKKysgICAgICAg ICIiIiBMb2NhbCB1dGlsaXR5IG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYWNjb3JkaW5nIHRvIFN5 bWJvbAorKyAgICAgICAgdHlwZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUg aXRlcmF0b3IuICBOb3QgYWxsCisrICAgICAgICBzeW1ib2xzIGFyZSBmZXRjaGVkLCBhbmQgb25s eSBzeW1ib2xzIHRoYXQgcmV0dXJuCisrICAgICAgICBUcnVlIGZyb20gdGhpcyBtZXRob2Qgc2hv dWxkIGJlIGZldGNoZWQuIiIiCisrCisrICAgICAgICAjIFNZTSBtYXkgYmUgYSBzdHJpbmcgaW5z dGVhZCBvZiBhIHN5bWJvbCBpbiB0aGUgY2FzZSBvZgorKyAgICAgICAgIyBzeW50aGV0aWMgbG9j YWwgYXJndW1lbnRzIG9yIGxvY2Fscy4gIElmIHRoYXQgaXMgdGhlIGNhc2UsCisrICAgICAgICAj IGFsd2F5cyBmZXRjaC4KKysgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3ltLCBiYXNlc3RyaW5nKToK KysgICAgICAgICAgICByZXR1cm4gVHJ1ZQorKworKyAgICAgICAgc3ltX3R5cGUgPSBzeW0uYWRk cl9jbGFzcworKworKyAgICAgICAgcmV0dXJuIHNlbGYuc3ltYm9sX2NsYXNzLmdldChzeW1fdHlw ZSwgRmFsc2UpCisrCisrICAgIGRlZiBmZXRjaF9mcmFtZV9sb2NhbHMoc2VsZik6CisrICAgICAg ICAiIiJQdWJsaWMgdXRpbGl0eSBtZXRob2QgdG8gZmV0Y2ggZnJhbWUgbG9jYWwgdmFyaWFibGVz IGZvcgorKyAgICAgICAgdGhlIHN0b3JlZCBmcmFtZS4gIEZyYW1lIGFyZ3VtZW50cyBhcmUgbm90 IGZldGNoZWQuICBJZiB0aGVyZQorKyAgICAgICAgYXJlIG5vIGZyYW1lIGxvY2FsIHZhcmlhYmxl cywgcmV0dXJuIGFuIGVtcHR5IGxpc3QuIiIiCisrICAgICAgICBsdmFycyA9IFtdCisrCisrICAg ICAgICBibG9jayA9IHNlbGYuZnJhbWUuYmxvY2soKQorKworKyAgICAgICAgd2hpbGUgYmxvY2sg IT0gTm9uZToKKysgICAgICAgICAgICBpZiBibG9jay5pc19nbG9iYWwgb3IgYmxvY2suaXNfc3Rh dGljOgorKyAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgIGZvciBzeW0gaW4gYmxv Y2s6CisrICAgICAgICAgICAgICAgIGlmIHN5bS5pc19hcmd1bWVudDoKKysgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZldGNoX2Ioc3ltKToK KysgICAgICAgICAgICAgICAgICAgIGx2YXJzLmFwcGVuZChTeW1WYWx1ZVdyYXBwZXIoc3ltLCBO b25lKSkKKysKKysgICAgICAgICAgICBibG9jayA9IGJsb2NrLnN1cGVyYmxvY2sKKysKKysgICAg ICAgIHJldHVybiBsdmFycworKworKyAgICBkZWYgZmV0Y2hfZnJhbWVfYXJncyhzZWxmKToKKysg ICAgICAgICIiIlB1YmxpYyB1dGlsaXR5IG1ldGhvZCB0byBmZXRjaCBmcmFtZSBhcmd1bWVudHMg Zm9yIHRoZQorKyAgICAgICAgc3RvcmVkIGZyYW1lLiAgRnJhbWUgYXJndW1lbnRzIGFyZSB0aGUg b25seSB0eXBlIGZldGNoZWQuICBJZgorKyAgICAgICAgdGhlcmUgYXJlIG5vIGZyYW1lIGFyZ3Vt ZW50IHZhcmlhYmxlcywgcmV0dXJuIGFuIGVtcHR5IGxpc3QuIiIiCisrCisrICAgICAgICBhcmdz ID0gW10KKysgICAgICAgIGJsb2NrID0gc2VsZi5mcmFtZS5ibG9jaygpCisrICAgICAgICB3aGls ZSBibG9jayAhPSBOb25lOgorKyAgICAgICAgICAgIGlmIGJsb2NrLmZ1bmN0aW9uICE9IE5vbmU6 CisrICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgYmxvY2sgPSBibG9jay5zdXBl cmJsb2NrCisrCisrICAgICAgICBpZiBibG9jayAhPSBOb25lOgorKyAgICAgICAgICAgIGZvciBz eW0gaW4gYmxvY2s6CisrICAgICAgICAgICAgICAgIGlmIG5vdCBzeW0uaXNfYXJndW1lbnQ6Cisr ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgYXJncy5hcHBl bmQoU3ltVmFsdWVXcmFwcGVyKHN5bSwgTm9uZSkpCisrCisrICAgICAgICByZXR1cm4gYXJncwor SW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9saWIvZ2RiL0ZyYW1lSXRlcmF0b3IucHkKKz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAK KysrKyBnZGItNy42L2dkYi9weXRob24vbGliL2dkYi9GcmFtZUl0ZXJhdG9yLnB5CTIwMTMtMDUt MjAgMjI6MjU6NTIuMTE0MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDQ1IEBACisrIyBDb3B5cmln aHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorKworK2ltcG9ydCBnZGIKKytpbXBvcnQgaXRlcnRvb2xzCisr CisrY2xhc3MgRnJhbWVJdGVyYXRvcihvYmplY3QpOgorKyAgICAiIiJBIGdkYi5GcmFtZSBpdGVy YXRvci4gIEl0ZXJhdGVzIG92ZXIgZ2RiLkZyYW1lcyBvciBvYmplY3RzIHRoYXQKKysgICAgY29u Zm9ybSB0byB0aGF0IGludGVyZmFjZS4iIiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZy YW1lX29iaik6CisrICAgICAgICAiIiJJbml0aWFsaXplIGEgRnJhbWVJdGVyYXRvci4KKysKKysg ICAgICAgIEFyZ3VtZW50czoKKysgICAgICAgICAgICBmcmFtZV9vYmogdGhlIHN0YXJ0aW5nIGZy YW1lLiIiIgorKworKyAgICAgICAgc3VwZXIoRnJhbWVJdGVyYXRvciwgc2VsZikuX19pbml0X18o KQorKyAgICAgICAgc2VsZi5mcmFtZSA9IGZyYW1lX29iagorKworKyAgICBkZWYgX19pdGVyX18o c2VsZik6CisrICAgICAgICByZXR1cm4gc2VsZgorKworKyAgICBkZWYgbmV4dChzZWxmKToKKysg ICAgICAgICIiIm5leHQgaW1wbGVtZW50YXRpb24uCisrCisrICAgICAgICBSZXR1cm5zOgorKyAg ICAgICAgICAgIFRoZSBuZXh0IG9sZGVzdCBmcmFtZS4iIiIKKysKKysgICAgICAgIHJlc3VsdCA9 IHNlbGYuZnJhbWUKKysgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorKyAgICAgICAgICAgIHJh aXNlIFN0b3BJdGVyYXRpb24KKysgICAgICAgIHNlbGYuZnJhbWUgPSByZXN1bHQub2xkZXIoKQor KyAgICAgICAgcmV0dXJuIHJlc3VsdAorSW5kZXg6IGdkYi03LjYvZ2RiL3B5dGhvbi9saWIvZ2Ri L2ZyYW1lcy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAw LjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYvZ2RiL3B5dGhvbi9saWIvZ2RiL2ZyYW1lcy5w eQkyMDEzLTA1LTIwIDIyOjI1OjUyLjExNDE2NTc2NiArMDIwMAorQEAgLTAsMCArMSwyMjkgQEAK KysjIEZyYW1lLWZpbHRlciBjb21tYW5kcy4KKysjIENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisr IworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisrCisrIiIiSW50ZXJuYWwgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggZnJhbWUtZmlsdGVy cy4iIiIKKysKKytpbXBvcnQgZ2RiCisrZnJvbSBnZGIuRnJhbWVJdGVyYXRvciBpbXBvcnQgRnJh bWVJdGVyYXRvcgorK2Zyb20gZ2RiLkZyYW1lRGVjb3JhdG9yIGltcG9ydCBGcmFtZURlY29yYXRv cgorK2ltcG9ydCBpdGVydG9vbHMKKytpbXBvcnQgY29sbGVjdGlvbnMKKysKKytkZWYgZ2V0X3By aW9yaXR5KGZpbHRlcl9pdGVtKToKKysgICAgIiIiIEludGVybmFsIHdvcmtlciBmdW5jdGlvbiB0 byByZXR1cm4gdGhlIGZyYW1lLWZpbHRlcidzIHByaW9yaXR5CisrICAgIGZyb20gYSBmcmFtZSBm aWx0ZXIgb2JqZWN0LiAgVGhpcyBpcyBhIGZhaWwgZnJlZSBmdW5jdGlvbiBhcyBpdCBpcworKyAg ICB1c2VkIGluIHNvcnRpbmcgYW5kIGZpbHRlcmluZy4gIElmIGEgYmFkbHkgaW1wbGVtZW50ZWQg ZnJhbWUKKysgICAgZmlsdGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgcHJpb3JpdHkgYXR0cmli dXRlLCByZXR1cm4gemVybworKyAgICAob3RoZXJ3aXNlIHNvcnRpbmcvZmlsdGVyaW5nIHdpbGwg ZmFpbCBhbmQgcHJldmVudCBvdGhlciBmcmFtZQorKyAgICBmaWx0ZXJzIGZyb20gZXhlY3V0aW5n KS4KKysKKysgICAgQXJndW1lbnRzOgorKyAgICAgICAgZmlsdGVyX2l0ZW06IEFuIG9iamVjdCBj b25mb3JtaW5nIHRvIHRoZSBmcmFtZSBmaWx0ZXIKKysgICAgICAgICAgICAgICAgICAgICBpbnRl cmZhY2UuCisrCisrICAgIFJldHVybnM6CisrICAgICAgICBUaGUgcHJpb3JpdHkgb2YgdGhlIGZy YW1lIGZpbHRlciBmcm9tIHRoZSAicHJpb3JpdHkiCisrICAgICAgICBhdHRyaWJ1dGUsIG9yIHpl cm8uCisrICAgICIiIgorKyAgICAjIERvIG5vdCBmYWlsIGhlcmUsIGFzIHRoZSBzb3J0IHdpbGwg ZmFpbC4gIElmIGEgZmlsdGVyIGhhcyBub3QKKysgICAgIyAoaW5jb3JyZWN0bHkpIHNldCBhIHBy aW9yaXR5LCBzZXQgaXQgdG8gemVyby4KKysgICAgcmV0dXJuIGdldGF0dHIoZmlsdGVyX2l0ZW0s ICJwcmlvcml0eSIsIDApCisrCisrZGVmIHNldF9wcmlvcml0eShmaWx0ZXJfaXRlbSwgcHJpb3Jp dHkpOgorKyAgICAiIiIgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIHNldCB0aGUgZnJhbWUt ZmlsdGVyJ3MgcHJpb3JpdHkuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIGZpbHRlcl9p dGVtOiBBbiBvYmplY3QgY29uZm9ybWluZyB0byB0aGUgZnJhbWUgZmlsdGVyCisrICAgICAgICAg ICAgICAgICAgICAgaW50ZXJmYWNlLgorKyAgICAgICAgcHJpb3JpdHk6IFRoZSBwcmlvcml0eSB0 byBhc3NpZ24gYXMgYW4gaW50ZWdlci4KKysgICAgIiIiCisrCisrICAgIGZpbHRlcl9pdGVtLnBy aW9yaXR5ID0gcHJpb3JpdHkKKysKKytkZWYgZ2V0X2VuYWJsZWQoZmlsdGVyX2l0ZW0pOgorKyAg ICAiIiIgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIHJldHVybiBhIGZpbHRlcidzIGVuYWJs ZWQgc3RhdGUKKysgICAgZnJvbSBhIGZyYW1lIGZpbHRlciBvYmplY3QuICBUaGlzIGlzIGEgZmFp bCBmcmVlIGZ1bmN0aW9uIGFzIGl0IGlzCisrICAgIHVzZWQgaW4gc29ydGluZyBhbmQgZmlsdGVy aW5nLiAgSWYgYSBiYWRseSBpbXBsZW1lbnRlZCBmcmFtZQorKyAgICBmaWx0ZXIgZG9lcyBub3Qg aW1wbGVtZW50IHRoZSBlbmFibGVkIGF0dHJpYnV0ZSwgcmV0dXJuIEZhbHNlCisrICAgIChvdGhl cndpc2Ugc29ydGluZy9maWx0ZXJpbmcgd2lsbCBmYWlsIGFuZCBwcmV2ZW50IG90aGVyIGZyYW1l CisrICAgIGZpbHRlcnMgZnJvbSBleGVjdXRpbmcpLgorKworKyAgICBBcmd1bWVudHM6CisrICAg ICAgICBmaWx0ZXJfaXRlbTogQW4gb2JqZWN0IGNvbmZvcm1pbmcgdG8gdGhlIGZyYW1lIGZpbHRl cgorKyAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4KKysKKysgICAgUmV0dXJuczoKKysg ICAgICAgIFRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBmcmFtZSBmaWx0ZXIgZnJvbSB0aGUgImVu YWJsZWQiCisrICAgICAgICBhdHRyaWJ1dGUsIG9yIEZhbHNlLgorKyAgICAiIiIKKysKKysgICAg IyBJZiB0aGUgZmlsdGVyIGNsYXNzIGlzIGJhZGx5IGltcGxlbWVudGVkIHdoZW4gY2FsbGVkIGZy b20gdGhlCisrICAgICMgUHl0aG9uIGZpbHRlciBjb21tYW5kLCBkbyBub3QgY2Vhc2UgZmlsdGVy IG9wZXJhdGlvbnMsIGp1c3Qgc2V0CisrICAgICMgZW5hYmxlZCB0byBGYWxzZS4KKysgICAgcmV0 dXJuIGdldGF0dHIoZmlsdGVyX2l0ZW0sICJlbmFibGVkIiwgRmFsc2UpCisrCisrZGVmIHNldF9l bmFibGVkKGZpbHRlcl9pdGVtLCBzdGF0ZSk6CisrICAgICIiIiBJbnRlcm5hbCBXb3JrZXIgZnVu Y3Rpb24gdG8gc2V0IHRoZSBmcmFtZS1maWx0ZXIncyBlbmFibGVkCisrICAgIHN0YXRlLgorKwor KyAgICBBcmd1bWVudHM6CisrICAgICAgICBmaWx0ZXJfaXRlbTogQW4gb2JqZWN0IGNvbmZvcm1p bmcgdG8gdGhlIGZyYW1lIGZpbHRlcgorKyAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZS4K KysgICAgICAgIHN0YXRlOiBUcnVlIG9yIEZhbHNlLCBkZXBlbmRpbmcgb24gZGVzaXJlZCBzdGF0 ZS4KKysgICAgIiIiCisrCisrICAgIGZpbHRlcl9pdGVtLmVuYWJsZWQgPSBzdGF0ZQorKworK2Rl ZiByZXR1cm5fbGlzdChuYW1lKToKKysgICAgIiIiIEludGVybmFsIFdvcmtlciBmdW5jdGlvbiB0 byByZXR1cm4gdGhlIGZyYW1lIGZpbHRlcgorKyAgICBkaWN0aW9uYXJ5LCBkZXBlbmRpbmcgb24g dGhlIG5hbWUgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQuICBJZiB0aGUKKysgICAgbmFtZSBpcyBu b3QgImFsbCIsICJnbG9iYWwiIG9yICJwcm9nc3BhY2UiLCBpdCBpcyBhc3N1bWVkIHRvIG5hbWUK KysgICAgYW4gb2JqZWN0LWZpbGUuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIG5hbWU6 IFRoZSBuYW1lIG9mIHRoZSBsaXN0LCBhcyBzcGVjaWZpZWQgYnkgR0RCIHVzZXIgY29tbWFuZHMu CisrCisrICAgIFJldHVybnM6CisrICAgICAgICBBIGRpY3Rpb25hcnkgb2JqZWN0IGZvciBhIHNp bmdsZSBzcGVjaWZpZWQgZGljdGlvbmFyeSwgb3IgYQorKyAgICAgICAgbGlzdCBjb250YWluaW5n IGFsbCB0aGUgaXRlbXMgZm9yICJhbGwiCisrCisrICAgIFJhaXNlczoKKysgICAgICAgIGdkYi5H ZGJFcnJvcjogIEEgZGljdGlvbmFyeSBvZiB0aGF0IG5hbWUgY2Fubm90IGJlIGZvdW5kLgorKyAg ICAiIiIKKysKKysgICAgIyBJZiBhbGwgZGljdGlvbmFyaWVzIGFyZSB3YW50ZWQgaW4gdGhlIGNh c2Ugb2YgImFsbCIgd2UKKysgICAgIyBjYW5ub3QgcmV0dXJuIGEgY29tYmluZWQgZGljdGlvbmFy eSBhcyBrZXlzKCkgbWF5IGNsYXNoIGluCisrICAgICMgYmV0d2VlbiBkaWZmZXJlbnQgZGljdGlv bmFyaWVzLiAgQXMgd2UganVzdCB3YW50IGFsbCB0aGUgZnJhbWUKKysgICAgIyBmaWx0ZXJzIHRv IGVuYWJsZS9kaXNhYmxlIHRoZW0gYWxsLCBqdXN0IHJldHVybiB0aGUgY29tYmluZWQKKysgICAg IyBpdGVtcygpIGFzIGEgbGlzdC4KKysgICAgaWYgbmFtZSA9PSAiYWxsIjoKKysgICAgICAgIGFs bF9kaWN0cyA9IGdkYi5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrICAgICAgICBhbGxfZGljdHMg PSBhbGxfZGljdHMgKyBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5mcmFtZV9maWx0ZXJzLnZhbHVl cygpCisrICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmlsZXMoKToKKysgICAgICAgICAg ICBhbGxfZGljdHMgPSBhbGxfZGljdHMgKyBvYmpmaWxlLmZyYW1lX2ZpbHRlcnMudmFsdWVzKCkK KysgICAgICAgICAgICByZXR1cm4gYWxsX2RpY3RzCisrCisrICAgIGlmIG5hbWUgPT0gImdsb2Jh bCI6CisrICAgICAgICByZXR1cm4gZ2RiLmZyYW1lX2ZpbHRlcnMKKysgICAgZWxzZToKKysgICAg ICAgIGlmIG5hbWUgPT0gInByb2dzcGFjZSI6CisrICAgICAgICAgICAgY3AgPSBnZGIuY3VycmVu dF9wcm9nc3BhY2UoKQorKyAgICAgICAgICAgIHJldHVybiBjcC5mcmFtZV9maWx0ZXJzCisrICAg ICAgICBlbHNlOgorKyAgICAgICAgICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpmaWxlcygpOgor KyAgICAgICAgICAgICAgICBpZiBuYW1lID09IG9iamZpbGUuZmlsZW5hbWU6CisrICAgICAgICAg ICAgICAgICAgICByZXR1cm4gb2JqZmlsZS5mcmFtZV9maWx0ZXJzCisrCisrICAgIG1zZyA9ICJD YW5ub3QgZmluZCBmcmFtZS1maWx0ZXIgZGljdGlvbmFyeSBmb3IgJyIgKyBuYW1lICsgIiciCisr ICAgIHJhaXNlIGdkYi5HZGJFcnJvcihtc2cpCisrCisrZGVmIF9zb3J0X2xpc3QoKToKKysgICAg IiIiIEludGVybmFsIFdvcmtlciBmdW5jdGlvbiB0byBtZXJnZSBhbGwga25vd24gZnJhbWUtZmls dGVyCisrICAgIGxpc3RzLCBwcnVuZSBhbnkgZmlsdGVycyB3aXRoIHRoZSBzdGF0ZSBzZXQgdG8g ImRpc2FibGVkIiwgYW5kCisrICAgIHNvcnQgdGhlIGxpc3Qgb24gdGhlIGZyYW1lLWZpbHRlcidz ICJwcmlvcml0eSIgYXR0cmlidXRlLgorKworKyAgICBSZXR1cm5zOgorKyAgICAgICAgc29ydGVk X2xpc3Q6IEEgc29ydGVkLCBwcnVuZWQgbGlzdCBvZiBmcmFtZSBmaWx0ZXJzIHRvCisrICAgICAg ICAgICAgICAgICAgICAgZXhlY3V0ZS4KKysgICAgIiIiCisrCisrICAgIGFsbF9maWx0ZXJzID0g W10KKysgICAgZm9yIG9iamZpbGUgaW4gZ2RiLm9iamZpbGVzKCk6CisrICAgICAgICBhbGxfZmls dGVycyA9IGFsbF9maWx0ZXJzICsgb2JqZmlsZS5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrICAg IGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkKKysKKysgICAgYWxsX2ZpbHRlcnMgPSBhbGxf ZmlsdGVycyArIGNwLmZyYW1lX2ZpbHRlcnMudmFsdWVzKCkKKysgICAgYWxsX2ZpbHRlcnMgPSBh bGxfZmlsdGVycyArIGdkYi5mcmFtZV9maWx0ZXJzLnZhbHVlcygpCisrCisrICAgIHNvcnRlZF9m cmFtZV9maWx0ZXJzID0gc29ydGVkKGFsbF9maWx0ZXJzLCBrZXkgPSBnZXRfcHJpb3JpdHksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPSBUcnVlKQorKworKyAg ICBzb3J0ZWRfZnJhbWVfZmlsdGVycyA9IGZpbHRlcihnZXRfZW5hYmxlZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkX2ZyYW1lX2ZpbHRlcnMpCisrCisrICAgIHJl dHVybiBzb3J0ZWRfZnJhbWVfZmlsdGVycworKworK2RlZiBleGVjdXRlX2ZyYW1lX2ZpbHRlcnMo ZnJhbWUsIGZyYW1lX2xvdywgZnJhbWVfaGlnaCk6CisrICAgICIiIiBJbnRlcm5hbCBmdW5jdGlv biBjYWxsZWQgZnJvbSBHREIgdGhhdCB3aWxsIGV4ZWN1dGUgdGhlIGNoYWluCisrICAgIG9mIGZy YW1lIGZpbHRlcnMuICBFYWNoIGZpbHRlciBpcyBleGVjdXRlZCBpbiBwcmlvcml0eSBvcmRlci4K KysgICAgQWZ0ZXIgdGhlIGV4ZWN1dGlvbiBjb21wbGV0ZXMsIHNsaWNlIHRoZSBpdGVyYXRvciB0 byBmcmFtZV9sb3cgLQorKyAgICBmcmFtZV9oaWdoIHJhbmdlLgorKworKyAgICBBcmd1bWVudHM6 CisrICAgICAgICBmcmFtZTogVGhlIGluaXRpYWwgZnJhbWUuCisrCisrICAgICAgICBmcmFtZV9s b3c6IFRoZSBsb3cgcmFuZ2Ugb2YgdGhlIHNsaWNlLiAgSWYgdGhpcyBpcyBhIG5lZ2F0aXZlCisr ICAgICAgICBpbnRlZ2VyIHRoZW4gaXQgaW5kaWNhdGVzIGEgYmFja3dhcmQgc2xpY2UgKGllIGJ0 IC00KSB3aGljaAorKyAgICAgICAgY291bnRzIGJhY2t3YXJkIGZyb20gdGhlIGxhc3QgZnJhbWUg aW4gdGhlIGJhY2t0cmFjZS4KKysKKysgICAgICAgIGZyYW1lX2hpZ2g6IFRoZSBoaWdoIHJhbmdl IG9mIHRoZSBzbGljZS4gIElmIHRoaXMgaXMgLTEgdGhlbgorKyAgICAgICAgaXQgaW5kaWNhdGVz IGFsbCBmcmFtZXMgdW50aWwgdGhlIGVuZCBvZiB0aGUgc3RhY2sgZnJvbQorKyAgICAgICAgZnJh bWVfbG93LgorKworKyAgICBSZXR1cm5zOgorKyAgICAgICAgZnJhbWVfaXRlcmF0b3I6IFRoZSBz bGljZWQgaXRlcmF0b3IgYWZ0ZXIgYWxsIGZyYW1lCisrICAgICAgICBmaWx0ZXJzIGhhdmUgaGFk IGEgY2hhbmdlIHRvIGV4ZWN1dGUsIG9yIE5vbmUgaWYgbm8gZnJhbWUKKysgICAgICAgIGZpbHRl cnMgYXJlIHJlZ2lzdGVyZWQuCisrICAgICIiIgorKworKyAgICAjIEdldCBhIHNvcnRlZCBsaXN0 IG9mIGZyYW1lIGZpbHRlcnMuCisrICAgIHNvcnRlZF9saXN0ID0gX3NvcnRfbGlzdCgpCisrCisr ICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZnJhbWUtZmlsdGVycy4gIElmIG5v dCwganVzdAorKyAgICAjIHJldHVybiBOb25lIGFuZCBsZXQgZGVmYXVsdCBiYWNrdHJhY2UgcHJp bnRpbmcgb2NjdXIuCisrICAgIGlmIGxlbihzb3J0ZWRfbGlzdCkgPT0gMDoKKysgICAgICAgIHJl dHVybiBOb25lCisrCisrICAgIGZyYW1lX2l0ZXJhdG9yID0gRnJhbWVJdGVyYXRvcihmcmFtZSkK KysKKysgICAgIyBBcHBseSBhIGJhc2ljIGZyYW1lIGRlY29yYXRvciB0byBhbGwgZ2RiLkZyYW1l cy4gIFRoaXMgdW5pZmllcyB0aGUKKysgICAgIyBpbnRlcmZhY2UuCisrICAgIGZyYW1lX2l0ZXJh dG9yID0gaXRlcnRvb2xzLmltYXAoRnJhbWVEZWNvcmF0b3IsIGZyYW1lX2l0ZXJhdG9yKQorKwor KyAgICBmb3IgZmYgaW4gc29ydGVkX2xpc3Q6CisrICAgICAgICBmcmFtZV9pdGVyYXRvciA9IGZm LmZpbHRlcihmcmFtZV9pdGVyYXRvcikKKysKKysgICAgIyBTbGljaW5nCisrCisrICAgICMgSXMg dGhpcyBhIHNsaWNlIGZyb20gdGhlIGVuZCBvZiB0aGUgYmFja3RyYWNlLCBpZSBidCAtMj8KKysg ICAgaWYgZnJhbWVfbG93IDwgMDoKKysgICAgICAgIGNvdW50ID0gMAorKyAgICAgICAgc2xpY2Vf bGVuZ3RoID0gYWJzKGZyYW1lX2xvdykKKysgICAgICAgICMgV2UgY2Fubm90IHVzZSBNQVhMRU4g YXJndW1lbnQgZm9yIGRlcXVlIGFzIGl0IGlzIDIuNiBvbndhcmRzCisrICAgICAgICAjIGFuZCBz b21lIEdEQiB2ZXJzaW9ucyBtaWdodCBiZSA8IDIuNi4KKysgICAgICAgIHNsaWNlZCA9IGNvbGxl Y3Rpb25zLmRlcXVlKCkKKysKKysgICAgICAgIGZvciBmcmFtZV9pdGVtIGluIGZyYW1lX2l0ZXJh dG9yOgorKyAgICAgICAgICAgIGlmIGNvdW50ID49IHNsaWNlX2xlbmd0aDoKKysgICAgICAgICAg ICAgICAgc2xpY2VkLnBvcGxlZnQoKTsKKysgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQor KyAgICAgICAgICAgIHNsaWNlZC5hcHBlbmQoZnJhbWVfaXRlbSkKKysKKysgICAgICAgIHJldHVy biBpdGVyKHNsaWNlZCkKKysKKysgICAgIyAtMSBmb3IgZnJhbWVfaGlnaCBtZWFucyB1bnRpbCB0 aGUgZW5kIG9mIHRoZSBiYWNrdHJhY2UuICBTZXQgdG8KKysgICAgIyBOb25lIGlmIHRoYXQgaXMg dGhlIGNhc2UsIHRvIGluZGljYXRlIHRvIGl0ZXJ0b29scy5pc2xpY2UgdG8KKysgICAgIyBzbGlj ZSB0byB0aGUgZW5kIG9mIHRoZSBpdGVyYXRvci4KKysgICAgaWYgZnJhbWVfaGlnaCA9PSAtMToK KysgICAgICAgIGZyYW1lX2hpZ2ggPSBOb25lCisrICAgIGVsc2U6CisrICAgICAgICAjIEFzIGZy YW1lcyBzdGFydCBmcm9tIDAsIGFkZCBvbmUgdG8gZnJhbWVfaGlnaCBzbyBpc2xpY2UKKysgICAg ICAgICMgY29ycmVjdGx5IGZpbmRzIHRoZSBlbmQKKysgICAgICAgIGZyYW1lX2hpZ2ggPSBmcmFt ZV9oaWdoICsgMTsKKysKKysgICAgc2xpY2VkID0gaXRlcnRvb2xzLmlzbGljZShmcmFtZV9pdGVy YXRvciwgZnJhbWVfbG93LCBmcmFtZV9oaWdoKQorKworKyAgICByZXR1cm4gc2xpY2VkCitJbmRl eDogZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKKz09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0t LSBnZGItNy42Lm9yaWcvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5CTIwMTMtMDUtMjAg MjI6MjM6MzYuNzQ4MjE1MTQ2ICswMjAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIv X19pbml0X18ucHkJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTQxNjU3NjYgKzAyMDAKK0BAIC02Nyw2 ICs2Nyw4IEBAIHByZXR0eV9wcmludGVycyA9IFtdCisgCisgIyBJbml0aWFsIHR5cGUgcHJpbnRl cnMuCisgdHlwZV9wcmludGVycyA9IFtdCisrIyBJbml0aWFsIGZyYW1lIGZpbHRlcnMuCisrZnJh bWVfZmlsdGVycyA9IHt9CisgCisgIyBDb252ZW5pZW5jZSB2YXJpYWJsZSB0byBHREIncyBweXRo b24gZGlyZWN0b3J5CisgUFlUSE9ORElSID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFt ZShfX2ZpbGVfXykpCitJbmRleDogZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9m cmFtZV9maWx0ZXJzLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6 MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvcHl0aG9uL2xpYi9nZGIvY29t bWFuZC9mcmFtZV9maWx0ZXJzLnB5CTIwMTMtMDUtMjAgMjI6MjU6NTIuMTE0MTY1NzY2ICswMjAw CitAQCAtMCwwICsxLDQ2MSBAQAorKyMgRnJhbWUtZmlsdGVyIGNvbW1hbmRzLgorKyMgQ29weXJp Z2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisrIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KKysKKysiIiJHREIgY29tbWFuZHMgZm9yIHdvcmtpbmcgd2l0 aCBmcmFtZS1maWx0ZXJzLiIiIgorKworK2ltcG9ydCBnZGIKKytpbXBvcnQgY29weQorK2Zyb20g Z2RiLkZyYW1lSXRlcmF0b3IgaW1wb3J0IEZyYW1lSXRlcmF0b3IKKytmcm9tIGdkYi5GcmFtZURl Y29yYXRvciBpbXBvcnQgRnJhbWVEZWNvcmF0b3IKKytpbXBvcnQgZ2RiLmZyYW1lcworK2ltcG9y dCBpdGVydG9vbHMKKysKKysjIEdEQiBDb21tYW5kcy4KKytjbGFzcyBTZXRGaWx0ZXJQcmVmaXhD bWQoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJQcmVmaXggY29tbWFuZCBmb3IgJ3NldCcgZnJhbWUt ZmlsdGVyIHJlbGF0ZWQgb3BlcmF0aW9ucy4iIiIKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYp OgorKyAgICAgICAgc3VwZXIoU2V0RmlsdGVyUHJlZml4Q21kLCBzZWxmKS5fX2luaXRfXygic2V0 IGZyYW1lLWZpbHRlciIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdkYi5DT01NQU5EX09CU0NVUkUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01QTEVURV9OT05FLCBUcnVlKQorKworK2Ns YXNzIFNob3dGaWx0ZXJQcmVmaXhDbWQoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJQcmVmaXggY29t bWFuZCBmb3IgJ3Nob3cnIGZyYW1lLWZpbHRlciByZWxhdGVkIG9wZXJhdGlvbnMuIiIiCisrICAg IGRlZiBfX2luaXRfXyhzZWxmKToKKysgICAgICAgIHN1cGVyKFNob3dGaWx0ZXJQcmVmaXhDbWQs IHNlbGYpLl9faW5pdF9fKCJzaG93IGZyYW1lLWZpbHRlciIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9PQlNDVVJFLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBM RVRFX05PTkUsIFRydWUpCisrY2xhc3MgSW5mb0ZyYW1lRmlsdGVyKGdkYi5Db21tYW5kKToKKysg ICAgIiIiTGlzdCBhbGwgcmVnaXN0ZXJlZCBQeXRob24gZnJhbWUtZmlsdGVycy4KKysKKysgICAg VXNhZ2U6IGluZm8gZnJhbWUtZmlsdGVycworKyAgICAiIiIKKysKKysgICAgZGVmIF9faW5pdF9f KHNlbGYpOgorKyAgICAgICAgc3VwZXIoSW5mb0ZyYW1lRmlsdGVyLCBzZWxmKS5fX2luaXRfXygi aW5mbyBmcmFtZS1maWx0ZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorKyAgICBAc3RhdGljbWV0aG9kCisrICAgIGRl ZiBlbmFibGVkX3N0cmluZyhzdGF0ZSk6CisrICAgICAgICAiIiJSZXR1cm4gIlllcyIgaWYgZmls dGVyIGlzIGVuYWJsZWQsIG90aGVyd2lzZSAiTm8iLiIiIgorKyAgICAgICAgaWYgc3RhdGU6Cisr ICAgICAgICAgICAgcmV0dXJuICJZZXMiCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHJl dHVybiAiTm8iCisrCisrICAgIGRlZiBsaXN0X2ZyYW1lX2ZpbHRlcnMoc2VsZiwgZnJhbWVfZmls dGVycyk6CisrICAgICAgICAiIiIgSW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRvIGxpc3QgYW5k IHByaW50IGZyYW1lIGZpbHRlcnMKKysgICAgICAgIGluIGEgZGljdGlvbmFyeS4KKysKKysgICAg ICAgIEFyZ3VtZW50czoKKysgICAgICAgICAgIGZyYW1lX2ZpbHRlcnM6IFRoZSBuYW1lIG9mIHRo ZSBkaWN0aW9uYXJ5LCBhcworKyAgICAgICAgICAgc3BlY2lmaWVkIGJ5IEdEQiB1c2VyIGNvbW1h bmRzLgorKyAgICAgICAgIiIiCisrCisrICAgICAgICBzb3J0ZWRfZnJhbWVfZmlsdGVycyA9IHNv cnRlZChmcmFtZV9maWx0ZXJzLml0ZW1zKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrZXk9bGFtYmRhIGk6IGdkYi5mcmFtZXMuZ2V0X3ByaW9yaXR5KGlbMV0pLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZT1UcnVlKQorKwor KyAgICAgICAgaWYgbGVuKHNvcnRlZF9mcmFtZV9maWx0ZXJzKSA9PSAwOgorKyAgICAgICAgICAg IHByaW50KCIgIE5vIGZyYW1lIGZpbHRlcnMgcmVnaXN0ZXJlZC4iKQorKyAgICAgICAgZWxzZToK KysgICAgICAgICAgICBwcmludCgiICBQcmlvcml0eSAgRW5hYmxlZCAgTmFtZSIpCisrICAgICAg ICAgICAgZm9yIGZyYW1lX2ZpbHRlciBpbiBzb3J0ZWRfZnJhbWVfZmlsdGVyczoKKysgICAgICAg ICAgICAgICAgbmFtZSA9IGZyYW1lX2ZpbHRlclswXQorKyAgICAgICAgICAgICAgICB0cnk6Cisr ICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSA9ICd7Ojw4fScuZm9ybWF0KAorKyAgICAgICAg ICAgICAgICAgICAgICAgIHN0cihnZGIuZnJhbWVzLmdldF9wcmlvcml0eShmcmFtZV9maWx0ZXJb MV0pKSkKKysgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgPSAnezo8N30nLmZvcm1hdCgKKysg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuYWJsZWRfc3RyaW5nKGdkYi5mcmFtZXMuZ2V0 X2VuYWJsZWQoZnJhbWVfZmlsdGVyWzFdKSkpCisrICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKKysgICAgICAgICAgICAgICAgICAgIHByaW50KCIgIEVycm9yIHByaW50aW5n IGZpbHRlciAnIituYW1lKyInOiAiK3N0cihlKSkKKysgICAgICAgICAgICAgICAgZWxzZToKKysg ICAgICAgICAgICAgICAgICAgIHByaW50KCIgICVzICAlcyAgJXMiICUgKHByaW9yaXR5LCBlbmFi bGVkLCBuYW1lKSkKKysKKysgICAgZGVmIHByaW50X2xpc3Qoc2VsZiwgdGl0bGUsIGZpbHRlcl9s aXN0LCBibGFua19saW5lKToKKysgICAgICAgIHByaW50KHRpdGxlKQorKyAgICAgICAgc2VsZi5s aXN0X2ZyYW1lX2ZpbHRlcnMoZmlsdGVyX2xpc3QpCisrICAgICAgICBpZiBibGFua19saW5lOgor KyAgICAgICAgICAgIHByaW50KCIiKQorKworKyAgICBkZWYgaW52b2tlKHNlbGYsIGFyZywgZnJv bV90dHkpOgorKyAgICAgICAgc2VsZi5wcmludF9saXN0KCJnbG9iYWwgZnJhbWUtZmlsdGVyczoi LCBnZGIuZnJhbWVfZmlsdGVycywgVHJ1ZSkKKysKKysgICAgICAgIGNwID0gZ2RiLmN1cnJlbnRf cHJvZ3NwYWNlKCkKKysgICAgICAgIHNlbGYucHJpbnRfbGlzdCgicHJvZ3NwYWNlICVzIGZyYW1l LWZpbHRlcnM6IiAlIGNwLmZpbGVuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNwLmZy YW1lX2ZpbHRlcnMsIFRydWUpCisrCisrICAgICAgICBmb3Igb2JqZmlsZSBpbiBnZGIub2JqZmls ZXMoKToKKysgICAgICAgICAgICBzZWxmLnByaW50X2xpc3QoIm9iamZpbGUgJXMgZnJhbWUtZmls dGVyczoiICUgb2JqZmlsZS5maWxlbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg b2JqZmlsZS5mcmFtZV9maWx0ZXJzLCBGYWxzZSkKKysKKysjIEludGVybmFsIGVuYWJsZS9kaXNh YmxlIGZ1bmN0aW9ucy4KKysKKytkZWYgX2VuYWJsZV9wYXJzZV9hcmcoY21kX25hbWUsIGFyZyk6 CisrICAgICIiIiBJbnRlcm5hbCB3b3JrZXIgZnVuY3Rpb24gdG8gdGFrZSBhbiBhcmd1bWVudCBm cm9tCisrICAgIGVuYWJsZS9kaXNhYmxlIGFuZCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMu CisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIGNtZF9uYW1lOiBOYW1lIG9mIHRoZSBjb21t YW5kIGludm9raW5nIHRoaXMgZnVuY3Rpb24uCisrICAgICAgICBhcmdzOiBUaGUgYXJndW1lbnQg YXMgYSBzdHJpbmcuCisrCisrICAgIFJldHVybnM6CisrICAgICAgICBBIHR1cGxlIGNvbnRhaW5p bmcgdGhlIGRpY3Rpb25hcnksIGFuZCB0aGUgYXJndW1lbnQsIG9yIGp1c3QKKysgICAgICAgIHRo ZSBkaWN0aW9uYXJ5IGluIHRoZSBjYXNlIG9mICJhbGwiLgorKyAgICAiIiIKKysKKysgICAgYXJn diA9IGdkYi5zdHJpbmdfdG9fYXJndihhcmcpOworKyAgICBhcmdjID0gbGVuKGFyZ3YpCisrICAg IGlmIGFyZ3ZbMF0gPT0gImFsbCIgYW5kIGFyZ2MgPiAxOgorKyAgICAgICAgcmFpc2UgZ2RiLkdk YkVycm9yKGNtZF9uYW1lICsgIjogd2l0aCAnYWxsJyAiIFwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICJ5b3UgbWF5IG5vdCBzcGVjaWZ5IGEgZmlsdGVyLiIpCisrICAgIGVsc2U6CisrICAg ICAgICBpZiBhcmd2WzBdICE9ICJhbGwiIGFuZCBhcmdjICE9IDI6CisrICAgICAgICAgICAgcmFp c2UgZ2RiLkdkYkVycm9yKGNtZF9uYW1lICsgIiB0YWtlcyBleGFjdGx5IHR3byBhcmd1bWVudHMu IikKKysKKysgICAgcmV0dXJuIGFyZ3YKKysKKytkZWYgX2RvX2VuYWJsZV9mcmFtZV9maWx0ZXIo Y29tbWFuZF90dXBsZSwgZmxhZyk6CisrICAgICIiIldvcmtlciBmb3IgZW5hYmxpbmcvZGlzYWJs aW5nIGZyYW1lX2ZpbHRlcnMuCisrCisrICAgIEFyZ3VtZW50czoKKysgICAgICAgIGNvbW1hbmRf dHlwZTogQSB0dXBsZSB3aXRoIHRoZSBmaXJzdCBlbGVtZW50IGJlaW5nIHRoZQorKyAgICAgICAg ICAgICAgICAgICAgICBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgYmVp bmcKKysgICAgICAgICAgICAgICAgICAgICAgdGhlIGZyYW1lIGZpbHRlciBuYW1lLgorKyAgICAg ICAgZmxhZzogVHJ1ZSBmb3IgRW5hYmxlLCBGYWxzZSBmb3IgRGlzYWJsZS4KKysgICAgIiIiCisr CisrICAgIGxpc3Rfb3AgPSBjb21tYW5kX3R1cGxlWzBdCisrICAgIG9wX2xpc3QgPSBnZGIuZnJh bWVzLnJldHVybl9saXN0KGxpc3Rfb3ApCisrCisrICAgIGlmIGxpc3Rfb3AgPT0gImFsbCI6Cisr ICAgICAgICBmb3IgaXRlbSBpbiBvcF9saXN0OgorKyAgICAgICAgICAgIGdkYi5mcmFtZXMuc2V0 X2VuYWJsZWQoaXRlbSwgZmxhZykKKysgICAgZWxzZToKKysgICAgICAgIGZyYW1lX2ZpbHRlciA9 IGNvbW1hbmRfdHVwbGVbMV0KKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBmZiA9IG9wX2xp c3RbZnJhbWVfZmlsdGVyXQorKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorKyAgICAgICAgICAg IG1zZyA9ICJmcmFtZS1maWx0ZXIgJyIgKyBzdHIobmFtZSkgKyAiJyBub3QgZm91bmQuIgorKyAg ICAgICAgICAgIHJhaXNlIGdkYi5HZGJFcnJvcihtc2cpCisrCisrICAgICAgICBnZGIuZnJhbWVz LnNldF9lbmFibGVkKGZmLCBmbGFnKQorKworK2RlZiBfY29tcGxldGVfZnJhbWVfZmlsdGVyX2xp c3QodGV4dCwgd29yZCwgYWxsX2ZsYWcpOgorKyAgICAiIiJXb3JrZXIgZm9yIGZyYW1lIGZpbHRl ciBkaWN0aW9uYXJ5IG5hbWUgY29tcGxldGlvbi4KKysKKysgICAgQXJndW1lbnRzOgorKyAgICAg ICAgdGV4dDogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgY29tbWFuZCBsaW5lLgorKyAgICAgICAgd29y ZDogVGhlIG1vc3QgcmVjZW50IHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZS4KKysgICAgICAgIGFs bF9mbGFnOiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHdvcmQgImFsbCIgaW4gY29tcGxldGlvbi4K KysKKysgICAgUmV0dXJuczoKKysgICAgICAgIEEgbGlzdCBvZiBzdWdnZXN0ZWQgZnJhbWUgZmls dGVyIGRpY3Rpb25hcnkgbmFtZSBjb21wbGV0aW9ucworKyAgICAgICAgZnJvbSB0ZXh0L3dvcmQg YW5hbHlzaXMuICBUaGlzIGxpc3QgY2FuIGJlIGVtcHR5IHdoZW4gdGhlcmUKKysgICAgICAgIGFy ZSBubyBzdWdnZXN0aW9ucyBmb3IgY29tcGxldGlvbi4KKysgICAgICAgICIiIgorKyAgICBpZiBh bGxfZmxhZyA9PSBUcnVlOgorKyAgICAgICAgZmlsdGVyX2xvY2F0aW9ucyA9IFsiYWxsIiwgImds b2JhbCIsICJwcm9nc3BhY2UiXQorKyAgICBlbHNlOgorKyAgICAgICAgZmlsdGVyX2xvY2F0aW9u cyA9IFsiZ2xvYmFsIiwgInByb2dzcGFjZSJdCisrICAgIGZvciBvYmpmaWxlIGluIGdkYi5vYmpm aWxlcygpOgorKyAgICAgICAgZmlsdGVyX2xvY2F0aW9ucy5hcHBlbmQob2JqZmlsZS5maWxlbmFt ZSkKKysKKysgICAgIyBJZiB0aGUgdXNlciBqdXN0IGFza2VkIGZvciBjb21wbGV0aW9ucyB3aXRo IG5vIGNvbXBsZXRpb24KKysgICAgIyBoaW50cywganVzdCByZXR1cm4gYWxsIHRoZSBmcmFtZSBm aWx0ZXIgZGljdGlvbmFyaWVzIHdlIGtub3cKKysgICAgIyBhYm91dC4KKysgICAgaWYgKHRleHQg PT0gIiIpOgorKyAgICAgICAgcmV0dXJuIGZpbHRlcl9sb2NhdGlvbnMKKysKKysgICAgIyBPdGhl cndpc2UgZmlsdGVyIG9uIHdoYXQgd2Uga25vdy4KKysgICAgZmxpc3QgPSBmaWx0ZXIobGFtYmRh IHgseT10ZXh0Onguc3RhcnRzd2l0aCh5KSwgZmlsdGVyX2xvY2F0aW9ucykKKysKKysgICAgIyBJ ZiB3ZSBvbmx5IGhhdmUgb25lIGNvbXBsZXRpb24sIGNvbXBsZXRlIGl0IGFuZCByZXR1cm4gaXQu CisrICAgIGlmIGxlbihmbGlzdCkgPT0gMToKKysgICAgICAgIGZsaXN0WzBdID0gZmxpc3RbMF1b bGVuKHRleHQpLWxlbih3b3JkKTpdCisrCisrICAgICMgT3RoZXJ3aXNlLCByZXR1cm4gYW4gZW1w dHkgbGlzdCwgb3IgYSBsaXN0IG9mIGZyYW1lIGZpbHRlcgorKyAgICAjIGRpY3Rpb25hcmllcyB0 aGF0IHRoZSBwcmV2aW91cyBmaWx0ZXIgb3BlcmF0aW9uIHJldHVybmVkLgorKyAgICByZXR1cm4g Zmxpc3QKKysKKytkZWYgX2NvbXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdvcmQsIHByaW50ZXJf ZGljdCk6CisrICAgICIiIldvcmtlciBmb3IgZnJhbWUgZmlsdGVyIG5hbWUgY29tcGxldGlvbi4K KysKKysgICAgQXJndW1lbnRzOgorKworKyAgICAgICAgd29yZDogVGhlIG1vc3QgcmVjZW50IHdv cmQgb2YgdGhlIGNvbW1hbmQgbGluZS4KKysKKysgICAgICAgIHByaW50ZXJfZGljdDogVGhlIGZy YW1lIGZpbHRlciBkaWN0aW9uYXJ5IHRvIHNlYXJjaCBmb3IgZnJhbWUKKysgICAgICAgIGZpbHRl ciBuYW1lIGNvbXBsZXRpb25zLgorKworKyAgICAgICAgUmV0dXJuczogQSBsaXN0IG9mIHN1Z2dl c3RlZCBmcmFtZSBmaWx0ZXIgbmFtZSBjb21wbGV0aW9ucworKyAgICAgICAgZnJvbSB3b3JkIGFu YWx5c2lzIG9mIHRoZSBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeS4gIFRoaXMgbGlzdAorKyAgICAg ICAgY2FuIGJlIGVtcHR5IHdoZW4gdGhlcmUgYXJlIG5vIHN1Z2dlc3Rpb25zIGZvciBjb21wbGV0 aW9uLgorKyAgICAiIiIKKysKKysgICAgcHJpbnRlcl9rZXlzID0gcHJpbnRlcl9kaWN0LmtleXMo KQorKyAgICBpZiAod29yZCA9PSAiIik6CisrICAgICAgICByZXR1cm4gcHJpbnRlcl9rZXlzCisr CisrICAgIGZsaXN0ID0gZmlsdGVyKGxhbWJkYSB4LHk9d29yZDp4LnN0YXJ0c3dpdGgoeSksIHBy aW50ZXJfa2V5cykKKysgICAgcmV0dXJuIGZsaXN0CisrCisrY2xhc3MgRW5hYmxlRnJhbWVGaWx0 ZXIoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIHRoZSBzcGVj aWZpZWQgZnJhbWUtZmlsdGVyLgorKworKyAgICBVc2FnZTogZW5hYmxlIGZyYW1lLWZpbHRlciBl bmFibGUgRElDVElPTkFSWSBbTkFNRV0KKysKKysgICAgRElDVElPTkFSWSBpcyB0aGUgbmFtZSBv ZiB0aGUgZnJhbWUgZmlsdGVyIGRpY3Rpb25hcnkgb24gd2hpY2ggdG8KKysgICAgb3BlcmF0ZS4g IElmIGRpY3Rpb25hcnkgaXMgc2V0IHRvICJhbGwiLCBwZXJmb3JtIG9wZXJhdGlvbnMgb24gYWxs CisrICAgIGRpY3Rpb25hcmllcy4gIE5hbWVkIGRpY3Rpb25hcmllcyBhcmU6ICJnbG9iYWwiIGZv ciB0aGUgZ2xvYmFsCisrICAgIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCAicHJvZ3NwYWNlIiBm b3IgdGhlIHByb2dyYW0gc3BhY2UncyBmcmFtZQorKyAgICBmaWx0ZXIgZGljdGlvbmFyeS4gIElm IGVpdGhlciBhbGwsIG9yIHRoZSB0d28gbmFtZWQgZGljdGlvbmFyaWVzCisrICAgIGFyZSBub3Qg c3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG5hbWUK KysgICAgb2YgdGhlIG9iamVjdC1maWxlIG5hbWUuCisrCisrICAgIE5BTUUgbWF0Y2hlcyB0aGUg bmFtZSBvZiB0aGUgZnJhbWUtZmlsdGVyIHRvIG9wZXJhdGUgb24uICBJZgorKyAgICBESUNUSU9O QVJZIGlzICJhbGwiLCBOQU1FIGlzIGlnbm9yZWQuCisrICAgICIiIgorKyAgICBkZWYgX19pbml0 X18oc2VsZik6CisrICAgICAgICBzdXBlcihFbmFibGVGcmFtZUZpbHRlciwgc2VsZikuX19pbml0 X18oImVuYWJsZSBmcmFtZS1maWx0ZXIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBKQorKyAgICBkZWYgY29tcGxldGUo c2VsZiwgdGV4dCwgd29yZCk6CisrICAgICAgICAiIiJDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBi b3RoIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCBhbmQKKysgICAgICAgIGZyYW1lIGZpbHRlciBu YW1lLiIiIgorKyAgICAgICAgaWYgdGV4dC5jb3VudCgiICIpID09IDA6CisrICAgICAgICAgICAg cmV0dXJuIF9jb21wbGV0ZV9mcmFtZV9maWx0ZXJfbGlzdCh0ZXh0LCB3b3JkLCBUcnVlKQorKyAg ICAgICAgZWxzZToKKysgICAgICAgICAgICBwcmludGVyX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVy bl9saXN0KHRleHQuc3BsaXQoKVswXS5yc3RyaXAoKSkKKysgICAgICAgICAgICByZXR1cm4gX2Nv bXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdvcmQsIHByaW50ZXJfbGlzdCkKKysKKysgICAgZGVm IGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKysgICAgICAgIGNvbW1hbmRfdHVwbGUgPSBf ZW5hYmxlX3BhcnNlX2FyZygiZW5hYmxlIGZyYW1lLWZpbHRlciIsIGFyZykKKysgICAgICAgIF9k b19lbmFibGVfZnJhbWVfZmlsdGVyKGNvbW1hbmRfdHVwbGUsIFRydWUpCisrCisrCisrY2xhc3Mg RGlzYWJsZUZyYW1lRmlsdGVyKGdkYi5Db21tYW5kKToKKysgICAgIiIiR0RCIGNvbW1hbmQgdG8g ZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGZyYW1lLWZpbHRlci4KKysKKysgICAgVXNhZ2U6IGRpc2Fi bGUgZnJhbWUtZmlsdGVyIGRpc2FibGUgRElDVElPTkFSWSBbTkFNRV0KKysKKysgICAgRElDVElP TkFSWSBpcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUgZmlsdGVyIGRpY3Rpb25hcnkgb24gd2hpY2gg dG8KKysgICAgb3BlcmF0ZS4gIElmIGRpY3Rpb25hcnkgaXMgc2V0IHRvICJhbGwiLCBwZXJmb3Jt IG9wZXJhdGlvbnMgb24gYWxsCisrICAgIGRpY3Rpb25hcmllcy4gIE5hbWVkIGRpY3Rpb25hcmll cyBhcmU6ICJnbG9iYWwiIGZvciB0aGUgZ2xvYmFsCisrICAgIGZyYW1lIGZpbHRlciBkaWN0aW9u YXJ5LCAicHJvZ3NwYWNlIiBmb3IgdGhlIHByb2dyYW0gc3BhY2UncyBmcmFtZQorKyAgICBmaWx0 ZXIgZGljdGlvbmFyeS4gIElmIGVpdGhlciBhbGwsIG9yIHRoZSB0d28gbmFtZWQgZGljdGlvbmFy aWVzCisrICAgIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeSBuYW1lIGlzIGFzc3Vt ZWQgdG8gYmUgdGhlIG5hbWUKKysgICAgb2YgdGhlIG9iamVjdC1maWxlIG5hbWUuCisrCisrICAg IE5BTUUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUtZmlsdGVyIHRvIG9wZXJhdGUgb24u ICBJZgorKyAgICBESUNUSU9OQVJZIGlzICJhbGwiLCBOQU1FIGlzIGlnbm9yZWQuCisrICAgICIi IgorKyAgICBkZWYgX19pbml0X18oc2VsZik6CisrICAgICAgICBzdXBlcihEaXNhYmxlRnJhbWVG aWx0ZXIsIHNlbGYpLl9faW5pdF9fKCJkaXNhYmxlIGZyYW1lLWZpbHRlciIsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRB KQorKworKyAgICBkZWYgY29tcGxldGUoc2VsZiwgdGV4dCwgd29yZCk6CisrICAgICAgICAiIiJD b21wbGV0aW9uIGZ1bmN0aW9uIGZvciBib3RoIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5LCBhbmQK KysgICAgICAgIGZyYW1lIGZpbHRlciBuYW1lLiIiIgorKyAgICAgICAgaWYgdGV4dC5jb3VudCgi ICIpID09IDA6CisrICAgICAgICAgICAgcmV0dXJuIF9jb21wbGV0ZV9mcmFtZV9maWx0ZXJfbGlz dCh0ZXh0LCB3b3JkLCBUcnVlKQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBwcmludGVy X2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KHRleHQuc3BsaXQoKVswXS5yc3RyaXAoKSkK KysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1lX2ZpbHRlcl9uYW1lKHdvcmQsIHBy aW50ZXJfbGlzdCkKKysKKysgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKKysg ICAgICAgIGNvbW1hbmRfdHVwbGUgPSBfZW5hYmxlX3BhcnNlX2FyZygiZGlzYWJsZSBmcmFtZS1m aWx0ZXIiLCBhcmcpCisrICAgICAgICBfZG9fZW5hYmxlX2ZyYW1lX2ZpbHRlcihjb21tYW5kX3R1 cGxlLCBGYWxzZSkKKysKKytjbGFzcyBTZXRGcmFtZUZpbHRlclByaW9yaXR5KGdkYi5Db21tYW5k KToKKysgICAgIiIiR0RCIGNvbW1hbmQgdG8gc2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgc3BlY2lm aWVkIGZyYW1lLWZpbHRlci4KKysKKysgICAgVXNhZ2U6IHNldCBmcmFtZS1maWx0ZXIgcHJpb3Jp dHkgRElDVElPTkFSWSBOQU1FIFBSSU9SSVRZCisrCisrICAgIERJQ1RJT05BUlkgaXMgdGhlIG5h bWUgb2YgdGhlIGZyYW1lIGZpbHRlciBkaWN0aW9uYXJ5IG9uIHdoaWNoIHRvCisrICAgIG9wZXJh dGUuICBOYW1lZCBkaWN0aW9uYXJpZXMgYXJlOiAiZ2xvYmFsIiBmb3IgdGhlIGdsb2JhbCBmcmFt ZQorKyAgICBmaWx0ZXIgZGljdGlvbmFyeSwgInByb2dzcGFjZSIgZm9yIHRoZSBwcm9ncmFtIHNw YWNlJ3MgZnJhbWVmaWx0ZXIKKysgICAgZGljdGlvbmFyeS4gIElmIGVpdGhlciBvZiB0aGVzZSB0 d28gYXJlIG5vdCBzcGVjaWZpZWQsIHRoZQorKyAgICBkaWN0aW9uYXJ5IG5hbWUgaXMgYXNzdW1l ZCB0byBiZSB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0LWZpbGUgbmFtZS4KKysKKysgICAgTkFNRSBt YXRjaGVzIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSBmaWx0ZXIgdG8gb3BlcmF0ZSBvbi4KKysKKysg ICAgUFJJT1JJVFkgaXMgdGhlIGFuIGludGVnZXIgdG8gYXNzaWduIHRoZSBuZXcgcHJpb3JpdHkg dG8gdGhlIGZyYW1lCisrICAgIGZpbHRlci4KKysgICAgIiIiCisrCisrICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysgICAgICAgIHN1cGVyKFNldEZyYW1lRmlsdGVyUHJpb3JpdHksIHNlbGYpLl9f aW5pdF9fKCJzZXQgZnJhbWUtZmlsdGVyICIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaW9yaXR5IiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEpCisr CisrICAgIGRlZiBfcGFyc2VfcHJpX2FyZyhzZWxmLCBhcmcpOgorKyAgICAgICAgIiIiSW50ZXJu YWwgd29ya2VyIHRvIHBhcnNlIGEgcHJpb3JpdHkgZnJvbSBhIHR1cGxlLgorKworKyAgICAgICAg QXJndW1lbnRzOgorKyAgICAgICAgICAgIGFyZzogVHVwbGUgd2hpY2ggY29udGFpbnMgdGhlIGFy Z3VtZW50cyBmcm9tIHRoZSBjb21tYW5kLgorKworKyAgICAgICAgUmV0dXJuczoKKysgICAgICAg ICAgICBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGRpY3Rpb25hcnksIG5hbWUgYW5kIHByaW9yaXR5 IGZyb20KKysgICAgICAgICAgICB0aGUgYXJndW1lbnRzLgorKworKyAgICAgICAgUmFpc2VzOgor KyAgICAgICAgICAgIGdkYi5HZGJFcnJvcjogQW4gZXJyb3IgcGFyc2luZyB0aGUgYXJndW1lbnRz LgorKyAgICAgICAgIiIiCisrCisrICAgICAgICBhcmd2ID0gZ2RiLnN0cmluZ190b19hcmd2KGFy Zyk7CisrICAgICAgICBhcmdjID0gbGVuKGFyZ3YpCisrICAgICAgICBpZiBhcmdjICE9IDM6Cisr ICAgICAgICAgICAgcHJpbnQoInNldCBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgIiBcCisrICAgICAg ICAgICAgICAgICAgInRha2VzIGV4YWN0bHkgdGhyZWUgYXJndW1lbnRzLiIpCisrICAgICAgICAg ICAgcmV0dXJuIE5vbmUKKysKKysgICAgICAgIHJldHVybiBhcmd2CisrCisrICAgIGRlZiBfc2V0 X2ZpbHRlcl9wcmlvcml0eShzZWxmLCBjb21tYW5kX3R1cGxlKToKKysgICAgICAgICIiIkludGVy bmFsIHdvcmtlciBmb3Igc2V0dGluZyBwcmlvcml0eSBvZiBmcmFtZS1maWx0ZXJzLCBieQorKyAg ICAgICAgcGFyc2luZyBhIHR1cGxlIGFuZCBjYWxsaW5nIF9zZXRfcHJpb3JpdHkgd2l0aCB0aGUg cGFyc2VkCisrICAgICAgICB0dXBsZS4KKysKKysgICAgICAgIEFyZ3VtZW50czoKKysgICAgICAg ICAgICBjb21tYW5kX3R1cGxlOiBUdXBsZSB3aGljaCBjb250YWlucyB0aGUgYXJndW1lbnRzIGZy b20gdGhlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC4KKysgICAgICAgICIi IgorKworKyAgICAgICAgbGlzdF9vcCA9IGNvbW1hbmRfdHVwbGVbMF0KKysgICAgICAgIGZyYW1l X2ZpbHRlciA9IGNvbW1hbmRfdHVwbGVbMV0KKysgICAgICAgIHByaW9yaXR5ID0gY29tbWFuZF90 dXBsZVsyXQorKworKyAgICAgICAgb3BfbGlzdCA9IGdkYi5mcmFtZXMucmV0dXJuX2xpc3QobGlz dF9vcCkKKysKKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBmZiA9IG9wX2xpc3RbZnJhbWVf ZmlsdGVyXQorKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorKyAgICAgICAgICAgIG1zZyA9ICJm cmFtZS1maWx0ZXIgJyIgKyBzdHIobmFtZSkgKyAiJyBub3QgZm91bmQuIgorKyAgICAgICAgICAg IHJhaXNlIGdkYi5HZGJFcnJvcihtc2cpCisrCisrICAgICAgICBnZGIuZnJhbWVzLnNldF9wcmlv cml0eShmZiwgcHJpb3JpdHkpCisrCisrICAgIGRlZiBjb21wbGV0ZShzZWxmLCB0ZXh0LCB3b3Jk KToKKysgICAgICAgICIiIkNvbXBsZXRpb24gZnVuY3Rpb24gZm9yIGJvdGggZnJhbWUgZmlsdGVy IGRpY3Rpb25hcnksIGFuZAorKyAgICAgICAgZnJhbWUgZmlsdGVyIG5hbWUuIiIiCisrICAgICAg ICBpZiB0ZXh0LmNvdW50KCIgIikgPT0gMDoKKysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRl X2ZyYW1lX2ZpbHRlcl9saXN0KHRleHQsIHdvcmQsIEZhbHNlKQorKyAgICAgICAgZWxzZToKKysg ICAgICAgICAgICBwcmludGVyX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KHRleHQuc3Bs aXQoKVswXS5yc3RyaXAoKSkKKysgICAgICAgICAgICByZXR1cm4gX2NvbXBsZXRlX2ZyYW1lX2Zp bHRlcl9uYW1lKHdvcmQsIHByaW50ZXJfbGlzdCkKKysKKysgICAgZGVmIGludm9rZShzZWxmLCBh cmcsIGZyb21fdHR5KToKKysgICAgICAgIGNvbW1hbmRfdHVwbGUgPSBzZWxmLl9wYXJzZV9wcmlf YXJnKGFyZykKKysgICAgICAgIGlmIGNvbW1hbmRfdHVwbGUgIT0gTm9uZToKKysgICAgICAgICAg ICBzZWxmLl9zZXRfZmlsdGVyX3ByaW9yaXR5KGNvbW1hbmRfdHVwbGUpCisrCisrY2xhc3MgU2hv d0ZyYW1lRmlsdGVyUHJpb3JpdHkoZ2RiLkNvbW1hbmQpOgorKyAgICAiIiJHREIgY29tbWFuZCB0 byBzaG93IHRoZSBwcmlvcml0eSBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lLWZpbHRlci4KKysKKysg ICAgVXNhZ2U6IHNob3cgZnJhbWUtZmlsdGVyIHByaW9yaXR5IERJQ1RJT05BUlkgTkFNRQorKwor KyAgICBESUNUSU9OQVJZIGlzIHRoZSBuYW1lIG9mIHRoZSBmcmFtZSBmaWx0ZXIgZGljdGlvbmFy eSBvbiB3aGljaCB0bworKyAgICBvcGVyYXRlLiAgTmFtZWQgZGljdGlvbmFyaWVzIGFyZTogImds b2JhbCIgZm9yIHRoZSBnbG9iYWwgZnJhbWUKKysgICAgZmlsdGVyIGRpY3Rpb25hcnksICJwcm9n c3BhY2UiIGZvciB0aGUgcHJvZ3JhbSBzcGFjZSdzIGZyYW1lZmlsdGVyCisrICAgIGRpY3Rpb25h cnkuICBJZiBlaXRoZXIgb2YgdGhlc2UgdHdvIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGUKKysgICAg ZGljdGlvbmFyeSBuYW1lIGlzIGFzc3VtZWQgdG8gYmUgdGhlIG5hbWUgb2YgdGhlIG9iamVjdC1m aWxlIG5hbWUuCisrCisrICAgIE5BTUUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUgZnJhbWUtZmls dGVyIHRvIG9wZXJhdGUgb24uCisrICAgICIiIgorKworKyAgICBkZWYgX19pbml0X18oc2VsZik6 CisrICAgICAgICBzdXBlcihTaG93RnJhbWVGaWx0ZXJQcmlvcml0eSwgc2VsZikuX19pbml0X18o InNob3cgZnJhbWUtZmlsdGVyICIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJwcmlvcml0eSIsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfREFUQSkKKysKKysg ICAgZGVmIF9wYXJzZV9wcmlfYXJnKHNlbGYsIGFyZyk6CisrICAgICAgICAiIiJJbnRlcm5hbCB3 b3JrZXIgdG8gcGFyc2UgYSBkaWN0aW9uYXJ5IGFuZCBuYW1lIGZyb20gYQorKyAgICAgICAgdHVw bGUuCisrCisrICAgICAgICBBcmd1bWVudHM6CisrICAgICAgICAgICAgYXJnOiBUdXBsZSB3aGlj aCBjb250YWlucyB0aGUgYXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQuCisrCisrICAgICAgICBS ZXR1cm5zOgorKyAgICAgICAgICAgIEEgdHVwbGUgY29udGFpbmluZyB0aGUgZGljdGlvbmFyeSwg IGFuZCBmcmFtZSBmaWx0ZXIgbmFtZS4KKysKKysgICAgICAgIFJhaXNlczoKKysgICAgICAgICAg ICBnZGIuR2RiRXJyb3I6IEFuIGVycm9yIHBhcnNpbmcgdGhlIGFyZ3VtZW50cy4KKysgICAgICAg ICIiIgorKworKyAgICAgICAgYXJndiA9IGdkYi5zdHJpbmdfdG9fYXJndihhcmcpOworKyAgICAg ICAgYXJnYyA9IGxlbihhcmd2KQorKyAgICAgICAgaWYgYXJnYyAhPSAyOgorKyAgICAgICAgICAg IHByaW50KCJzaG93IGZyYW1lLWZpbHRlciBwcmlvcml0eSAiIFwKKysgICAgICAgICAgICAgICAg ICAidGFrZXMgZXhhY3RseSB0d28gYXJndW1lbnRzLiIpCisrICAgICAgICAgICAgcmV0dXJuIE5v bmUKKysKKysgICAgICAgIHJldHVybiBhcmd2CisrCisrICAgIGRlZiBnZXRfZmlsdGVyX3ByaW9y aXR5KHNlbGYsIGZyYW1lX2ZpbHRlcnMsIG5hbWUpOgorKyAgICAgICAgIiIiV29ya2VyIGZvciBy ZXRyaWV2aW5nIHRoZSBwcmlvcml0eSBvZiBmcmFtZV9maWx0ZXJzLgorKworKyAgICAgICAgQXJn dW1lbnRzOgorKyAgICAgICAgICAgIGZyYW1lX2ZpbHRlcnM6IE5hbWUgb2YgZnJhbWUgZmlsdGVy IGRpY3Rpb25hcnkuCisrICAgICAgICAgICAgbmFtZTogb2JqZWN0IHRvIHNlbGVjdCBwcmludGVy cy4KKysKKysgICAgICAgIFJldHVybnM6CisrICAgICAgICAgICAgVGhlIHByaW9yaXR5IG9mIHRo ZSBmcmFtZSBmaWx0ZXIuCisrCisrICAgICAgICBSYWlzZXM6CisrICAgICAgICAgICAgZ2RiLkdk YkVycm9yOiBBIGZyYW1lIGZpbHRlciBjYW5ub3QgYmUgZm91bmQuCisrICAgICAgICAiIiIKKysK KysgICAgICAgIG9wX2xpc3QgPSBnZGIuZnJhbWVzLnJldHVybl9saXN0KGZyYW1lX2ZpbHRlcnMp CisrCisrICAgICAgICB0cnk6CisrICAgICAgICAgICAgZmYgPSBvcF9saXN0W25hbWVdCisrICAg ICAgICBleGNlcHQgS2V5RXJyb3I6CisrICAgICAgICAgICAgbXNnID0gImZyYW1lLWZpbHRlciAn IiArIHN0cihuYW1lKSArICInIG5vdCBmb3VuZC4iCisrICAgICAgICAgICAgcmFpc2UgZ2RiLkdk YkVycm9yKG1zZykKKysKKysgICAgICAgIHJldHVybiBnZGIuZnJhbWVzLmdldF9wcmlvcml0eShm ZikKKysKKysgICAgZGVmIGNvbXBsZXRlKHNlbGYsIHRleHQsIHdvcmQpOgorKyAgICAgICAgIiIi Q29tcGxldGlvbiBmdW5jdGlvbiBmb3IgYm90aCBmcmFtZSBmaWx0ZXIgZGljdGlvbmFyeSwgYW5k CisrICAgICAgICBmcmFtZSBmaWx0ZXIgbmFtZS4iIiIKKysKKysgICAgICAgIGlmIHRleHQuY291 bnQoIiAiKSA9PSAwOgorKyAgICAgICAgICAgIHJldHVybiBfY29tcGxldGVfZnJhbWVfZmlsdGVy X2xpc3QodGV4dCwgd29yZCwgRmFsc2UpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHBy aW50ZXJfbGlzdCA9IGZyYW1lLl9yZXR1cm5fbGlzdCh0ZXh0LnNwbGl0KClbMF0ucnN0cmlwKCkp CisrICAgICAgICAgICAgcmV0dXJuIF9jb21wbGV0ZV9mcmFtZV9maWx0ZXJfbmFtZSh3b3JkLCBw cmludGVyX2xpc3QpCisrCisrICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJnLCBmcm9tX3R0eSk6Cisr ICAgICAgICBjb21tYW5kX3R1cGxlID0gc2VsZi5fcGFyc2VfcHJpX2FyZyhhcmcpCisrICAgICAg ICBpZiBjb21tYW5kX3R1cGxlID09IE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuCisrICAgICAg ICBmaWx0ZXJfbmFtZSA9IGNvbW1hbmRfdHVwbGVbMV0KKysgICAgICAgIGxpc3RfbmFtZSA9IGNv bW1hbmRfdHVwbGVbMF0KKysgICAgICAgIHRyeToKKysgICAgICAgICAgICBwcmlvcml0eSA9IHNl bGYuZ2V0X2ZpbHRlcl9wcmlvcml0eShsaXN0X25hbWUsIGZpbHRlcl9uYW1lKTsKKysgICAgICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKysgICAgICAgICAgICBwcmludCgiRXJyb3IgcHJpbnRp bmcgZmlsdGVyIHByaW9yaXR5IGZvciAnIituYW1lKyInOiIrc3RyKGUpKQorKyAgICAgICAgZWxz ZToKKysgICAgICAgICAgICBwcmludCgiUHJpb3JpdHkgb2YgZmlsdGVyICciICsgZmlsdGVyX25h bWUgKyAiJyBpbiBsaXN0ICciIFwKKysgICAgICAgICAgICAgICAgKyBsaXN0X25hbWUgKyAiJyBp czogIiArIHN0cihwcmlvcml0eSkpCisrCisrIyBSZWdpc3RlciBjb21tYW5kcworK1NldEZpbHRl clByZWZpeENtZCgpCisrU2hvd0ZpbHRlclByZWZpeENtZCgpCisrSW5mb0ZyYW1lRmlsdGVyKCkK KytFbmFibGVGcmFtZUZpbHRlcigpCisrRGlzYWJsZUZyYW1lRmlsdGVyKCkKKytTZXRGcmFtZUZp bHRlclByaW9yaXR5KCkKKytTaG93RnJhbWVGaWx0ZXJQcmlvcml0eSgpCitJbmRleDogZ2RiLTcu Ni9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXItZ2RiLnB5LmluCis9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAw CisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXItZ2Ri LnB5LmluCTIwMTMtMDUtMjAgMjI6MjU6NTIuMTE0MTY1NzY2ICswMjAwCitAQCAtMCwwICsxLDQ4 IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKysjIGZyYW1l LWZpbHRlcnMuCisraW1wb3J0IGdkYgorK2ltcG9ydCBpdGVydG9vbHMKKytmcm9tIGdkYi5GcmFt ZURlY29yYXRvciBpbXBvcnQgRnJhbWVEZWNvcmF0b3IKKysKKysKKytjbGFzcyBGcmFtZU9iakZp bGUgKCk6CisrCisrICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisrICAgICAgICBzZWxmLm5hbWUg PSAiRmlsdGVyMSIKKysgICAgICAgIHNlbGYucHJpb3JpdHkgPSAxCisrICAgICAgICBzZWxmLmVu YWJsZWQgPSBGYWxzZQorKyAgICAgICAgZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkuZnJhbWVfZmls dGVycyBbIlByb2dzcGFjZSIgKyBzZWxmLm5hbWVdID0gc2VsZgorKyAgICAgICAgZ2RiLmN1cnJl bnRfb2JqZmlsZSgpLmZyYW1lX2ZpbHRlcnMgWyJPYmplY3RGaWxlIiArIHNlbGYubmFtZV0gPSBz ZWxmCisrCisrICAgIGRlZiBmaWx0ZXIgKHNlbGYsIGZyYW1lX2l0ZXIpOgorKyAgICAgICAgcmV0 dXJuIGZyYW1lX2l0ZXIKKysKKytjbGFzcyBGcmFtZU9iakZpbGUyICgpOgorKworKyAgICBkZWYg X19pbml0X18gKHNlbGYpOgorKyAgICAgICAgc2VsZi5uYW1lID0gIkZpbHRlcjIiCisrICAgICAg ICBzZWxmLnByaW9yaXR5ID0gMTAwCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAg ICAgICBnZGIuY3VycmVudF9wcm9nc3BhY2UoKS5mcmFtZV9maWx0ZXJzIFsiUHJvZ3NwYWNlIiAr IHNlbGYubmFtZV0gPSBzZWxmCisrICAgICAgICBnZGIuY3VycmVudF9vYmpmaWxlKCkuZnJhbWVf ZmlsdGVycyBbIk9iamVjdEZpbGUiICsgc2VsZi5uYW1lXSA9IHNlbGYKKysKKysgICAgZGVmIGZp bHRlciAoc2VsZiwgZnJhbWVfaXRlcik6CisrICAgICAgICByZXR1cm4gZnJhbWVfaXRlcgorKwor K0ZyYW1lT2JqRmlsZSgpCisrRnJhbWVPYmpGaWxlMigpCitJbmRleDogZ2RiLTcuNi9nZGIvdGVz dHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVmaWx0ZXItbWkuYworPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9k ZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdkYi03LjYv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmMJMjAxMy0wNS0yMCAy MjoyNTo1Mi4xMTQxNjU3NjYgKzAyMDAKK0BAIC0wLDAgKzEsMTM4IEBACisrLyogVGhpcyB0ZXN0 Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKysKKysgICBDb3B5cmlnaHQg MjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisrICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKysgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworK3Zv aWQgZnVuY2Eodm9pZCk7CisraW50IGNvdW50ID0gMDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sK KysgIGNoYXIgKm5vdGhpbmc7CisrICBpbnQgZjsKKysgIHNob3J0IHM7CisrfSBmb29iYXI7Cisr Cisrdm9pZCBlbmRfZnVuYyAoaW50IGZvbywgY2hhciAqYmFyLCBmb29iYXIgKmZiLCBmb29iYXIg YmYpCisreworKyAgY29uc3QgY2hhciAqc3RyID0gIlRoZSBFbmQiOworKyAgY29uc3QgY2hhciAq c3QyID0gIklzIE5lYXIiOworKyAgaW50IGIgPSAxMjsKKysgIHNob3J0IGMgPSA1OworKyAgewor KyAgICBpbnQgZCA9IDE1OworKyAgICBpbnQgZSA9IDE0OworKyAgICBjb25zdCBjaGFyICpmb28g PSAiSW5zaWRlIGJsb2NrIjsKKysgICAgeworKyAgICAgIGludCBmID0gNDI7CisrICAgICAgaW50 IGcgPSAxOTsKKysgICAgICBjb25zdCBjaGFyICpiYXIgPSAiSW5zaWRlIGJsb2NrIHgyIjsKKysg ICAgICB7CisrCXNob3J0IGggPSA5OworKwloID0gaCArMTsgIC8qIElubmVyIHRlc3QgYnJlYWtw b2ludCAgKi8KKysgICAgICB9CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybjsgLyogQmFja3Ry YWNlIGVuZCBicmVha3BvaW50ICovCisrfQorKworK3ZvaWQgZnVuY2IoaW50IGopCisreworKyAg c3RydWN0IGZvbworKyAgeworKyAgICBpbnQgYTsKKysgICAgaW50IGI7CisrICB9OworKworKyAg c3RydWN0IGZvbyBiYXI7CisrCisrICBiYXIuYSA9IDQyOworKyAgYmFyLmIgPSA4NDsKKysKKysg IGZ1bmNhKCk7CisrICByZXR1cm47CisrfQorKworK3ZvaWQgZnVuY2Eodm9pZCkKKyt7CisrICBm b29iYXIgZmI7CisrICBmb29iYXIgKmJmOworKworKyAgaWYgKGNvdW50IDwgMTApCisrICAgIHsK KysgICAgICBjb3VudCsrOworKyAgICAgIGZ1bmNiKGNvdW50KTsKKysgICAgfQorKworKyAgZmIu bm90aGluZyA9ICJGb28gQmFyIjsKKysgIGZiLmYgPSA0MjsKKysgIGZiLnMgPSAxOTsKKysKKysg IGJmID0gbWFsbG9jIChzaXplb2YgKGZvb2JhcikpOworKyAgYmYtPm5vdGhpbmcgPSBtYWxsb2Mg KDEyOCk7CisrICBiZi0+bm90aGluZyA9ICJCYXIgRm9vIjsKKysgIGJmLT5mID0gMjQ7CisrICBi Zi0+cyA9IDkxOworKworKyAgZW5kX2Z1bmMoMjEsICJQYXJhbSIsIGJmLCBmYik7CisrICBmcmVl IChiZi0+bm90aGluZyk7CisrICBmcmVlIChiZik7CisrICByZXR1cm47CisrfQorKworKworK3Zv aWQgZnVuYzEodm9pZCkKKyt7CisrICBmdW5jYSgpOworKyAgcmV0dXJuOworK30KKysKKytpbnQg ZnVuYzIodm9pZCkKKyt7CisrICBmdW5jMSgpOworKyAgcmV0dXJuIDE7CisrfQorKworK3ZvaWQg ZnVuYzMoaW50IGkpCisreworKyAgZnVuYzIoKTsKKysKKysgIHJldHVybjsKKyt9CisrCisraW50 IGZ1bmM0KGludCBqKQorK3sKKysgIGZ1bmMzKGopOworKworKyAgcmV0dXJuIDI7CisrfQorKwor K2ludCBmdW5jNShpbnQgZiwgaW50IGQpCisreworKyAgaW50IGkgPSAwOworKyAgY2hhciAqcmFu ZG9tID0gInJhbmRvbSI7CisrICBpPWkrZjsKKysKKysgIGZ1bmM0KGkpOworKyAgcmV0dXJuIGk7 CisrfQorKworK21haW4oKQorK3sKKysgIGZ1bmM1KDMsNSk7CisrfQorSW5kZXg6IGdkYi03LjYv Z2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmV4cAorPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysr IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVyLW1pLmV4cAky MDEzLTA1LTIwIDIyOjI1OjUyLjExNTE2NTc2NiArMDIwMAorQEAgLTAsMCArMSwxNzkgQEAKKysj IENvcHlyaWdodCAoQykgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysj IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisr IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0 aGUgR0RCIHRlc3RzdWl0ZS4gIEl0IHRlc3RzIFB5dGhvbi1iYXNlZAorKyMgZnJhbWUtZmlsdGVy cy4KKytsb2FkX2xpYiBtaS1zdXBwb3J0LmV4cAorK2xvYWRfbGliIGdkYi1weXRob24uZXhwCisr Cisrc2V0IE1JRkxBR1MgIi1pPW1pMiIKKysKKytnZGJfZXhpdAorK2lmIFttaV9nZGJfc3RhcnRd IHsKKysgICAgY29udGludWUKKyt9CisrCisrc3RhbmRhcmRfdGVzdGZpbGUgcHktZnJhbWVmaWx0 ZXItbWkuYworK3NldCBweWZpbGUgcHktZnJhbWVmaWx0ZXIucHkKKysKKytpZiAgeyBbZ2RiX2Nv bXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1 dGFibGUge2RlYnVnIGFkZGl0aW9uYWxfZmxhZ3M9LURNSX1dICE9ICIiIH0geworKyAgICB1bnRl c3RlZCAke3Rlc3RmaWxlfS5leHAKKysgICAgcmV0dXJuIC0xCisrfQorKworK21pX2RlbGV0ZV9i cmVha3BvaW50cworK21pX2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorK21p X2dkYl9sb2FkICR7YmluZmlsZX0KKysKKytpZiB7W2xzZWFyY2ggLWV4YWN0IFttaV9nZXRfZmVh dHVyZXNdIHB5dGhvbl0gPCAwfSB7CisrICAgIHVuc3VwcG9ydGVkICJweXRob24gc3VwcG9ydCBp cyBkaXNhYmxlZCIKKysgICAgcmV0dXJuIC0xCisrfQorKworK21pX3J1bnRvIG1haW4KKysKKytz ZXQgcmVtb3RlX3B5dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtz dWJkaXJ9LyR7cHlmaWxlfV0KKysKKyttaV9nZGJfdGVzdCAicHl0aG9uIGV4ZWNmaWxlICgnJHty ZW1vdGVfcHl0aG9uX2ZpbGV9JykiICIuKlxcXmRvbmUuIiBcCisrICAgICJMb2FkIHB5dGhvbiBm aWxlIgorKworKyMgTXVsdGlwbGUgYmxvY2tzIHRlc3QKKyttaV9jb250aW51ZV90b19saW5lIFtn ZGJfZ2V0X2xpbmVfbnVtYmVyIHtJbm5lciB0ZXN0IGJyZWFrcG9pbnR9ICR7c3JjZmlsZX1dIFwK KysgICJzdGVwIHRvIGJyZWFrcG9pbnQiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxv Y2FscyAtLWFsbC12YWx1ZXMiIFwKKysgICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cImhc Iix2YWx1ZT1cIjlcIn0se25hbWU9XCJmXCIsdmFsdWU9XCI0MlwifSx7bmFtZT1cImdcIix2YWx1 ZT1cIjE5XCJ9LHtuYW1lPVwiYmFyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIkluc2lkZSBibG9jayB4 MlxcXFxcIlwifSx7bmFtZT1cImRcIix2YWx1ZT1cIjE1XCJ9LHtuYW1lPVwiZVwiLHZhbHVlPVwi MTRcIn0se25hbWU9XCJmb29cIix2YWx1ZT1cIiRoZXggXFxcXFwiSW5zaWRlIGJsb2NrXFxcXFwi XCJ9LHtuYW1lPVwic3RyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIlRoZSBFbmRcXFxcXCJcIn0se25h bWU9XCJzdDJcIix2YWx1ZT1cIiRoZXggXFxcXFwiSXMgTmVhclxcXFxcIlwifSx7bmFtZT1cImJc Iix2YWx1ZT1cIjEyXCJ9LHtuYW1lPVwiY1wiLHZhbHVlPVwiNVwifVxcXF0iIFwKKysgICAgInN0 YWNrLWxpc3QtbG9jYWxzIC0tYWxsLXZhbHVlcyIKKysKKyttaV9nZGJfdGVzdCAiLWVuYWJsZS1m cmFtZS1maWx0ZXJzIiAiLipcXF5kb25lLiIgImVuYWJsZSBmcmFtZSBmaWx0ZXJzIgorK21pX2dk Yl90ZXN0ICItc3RhY2stbGlzdC1sb2NhbHMgLS1hbGwtdmFsdWVzIiBcCisrICAgICJcXF5kb25l LGxvY2Fscz1cXFxbe25hbWU9XCJoXCIsdmFsdWU9XCI5XCJ9LHtuYW1lPVwiZlwiLHZhbHVlPVwi NDJcIn0se25hbWU9XCJnXCIsdmFsdWU9XCIxOVwifSx7bmFtZT1cImJhclwiLHZhbHVlPVwiJGhl eCBcXFxcXCJJbnNpZGUgYmxvY2sgeDJcXFxcXCJcIn0se25hbWU9XCJkXCIsdmFsdWU9XCIxNVwi fSx7bmFtZT1cImVcIix2YWx1ZT1cIjE0XCJ9LHtuYW1lPVwiZm9vXCIsdmFsdWU9XCIkaGV4IFxc XFxcIkluc2lkZSBibG9ja1xcXFxcIlwifSx7bmFtZT1cInN0clwiLHZhbHVlPVwiJGhleCBcXFxc XCJUaGUgRW5kXFxcXFwiXCJ9LHtuYW1lPVwic3QyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIklzIE5l YXJcXFxcXCJcIn0se25hbWU9XCJiXCIsdmFsdWU9XCIxMlwifSx7bmFtZT1cImNcIix2YWx1ZT1c IjVcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLWFsbC12YWx1ZXMgZnJhbWUg ZmlsdGVycyBlbmFibGVkIgorKworK21pX2NvbnRpbnVlX3RvX2xpbmUgW2dkYl9nZXRfbGluZV9u dW1iZXIge0JhY2t0cmFjZSBlbmQgYnJlYWtwb2ludH0gJHtzcmNmaWxlfV0gXAorKyAgInN0ZXAg dG8gYnJlYWtwb2ludCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtZnJhbWVzIiBcCisr ICAgICJcXF5kb25lLHN0YWNrPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYWRkcj1cIiRoZXhcIixm dW5jPVwiY251Zl9kbmVcIi4qfSxmcmFtZT17bGV2ZWw9XCIxXCIsYWRkcj1cIiRoZXhcIixmdW5j PVwiYWNudWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIyXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYmNu dWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIzXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYWNudWZcIi4q fSxmcmFtZT17bGV2ZWw9XCIyMlwiLGFkZHI9XCIkaGV4XCIsZnVuYz1cIjFjbnVmXCIuKixjaGls ZHJlbj1cXFxbZnJhbWU9e2xldmVsPVwiMjNcIixhZGRyPVwiJGhleFwiLGZ1bmM9XCJmdW5jMlwi Lip9XFxcXX0sZnJhbWU9e2xldmVsPVwiMjRcIixhZGRyPVwiJGhleFwiLGZ1bmM9XCIzY251Zlwi Lip9LGZyYW1lPXtsZXZlbD1cIjI3XCIsYWRkcj1cIiRoZXhcIixmdW5jPVwibmlhbVwiLip9XFxc XS4qIiBcCisrICAgICJmaWx0ZXJlZCBzdGFjayBsaXN0aW5nIgorK21pX2dkYl90ZXN0ICItc3Rh Y2stbGlzdC1mcmFtZXMgMCAzIiBcCisrICAgICJcXF5kb25lLHN0YWNrPVxcXFtmcmFtZT17bGV2 ZWw9XCIwXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiY251Zl9kbmVcIi4qfSxmcmFtZT17bGV2ZWw9 XCIxXCIsYWRkcj1cIiRoZXhcIixmdW5jPVwiYWNudWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIyXCIs YWRkcj1cIiRoZXhcIixmdW5jPVwiYmNudWZcIi4qfSxmcmFtZT17bGV2ZWw9XCIzXCIsYWRkcj1c IiRoZXhcIixmdW5jPVwiYWNudWZcIi4qfVxcXF0iIFwKKysgICAgImZpbHRlcmVkIHN0YWNrIGxp c3QgMCAzIgorK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1mcmFtZXMgMjIgMjQiIFwKKysgICAg IlxcXmRvbmUsc3RhY2s9XFxcW2ZyYW1lPXtsZXZlbD1cIjIyXCIsYWRkcj1cIiRoZXhcIixmdW5j PVwiMWNudWZcIi4qLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFkZHI9XCIkaGV4 XCIsZnVuYz1cImZ1bmMyXCIuKn1cXFxdfSxmcmFtZT17bGV2ZWw9XCIyNFwiLGFkZHI9XCIkaGV4 XCIsZnVuYz1cIjNjbnVmXCIuKn1cXFxdIiBcCisrICAgICJmaWx0ZXJlZCBzdGFjayBsaXN0IDIy IDI0IgorKworKyNzdGFjayBsaXN0IGFyZ3VtZW50cworKworKworK21pX2dkYl90ZXN0ICItc3Rh Y2stbGlzdC1hcmd1bWVudHMgMCIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFt ZT17bGV2ZWw9XCIwXCIsYXJncz1cXFxbbmFtZT1cImZvb1wiLG5hbWU9XCJiYXJcIixuYW1lPVwi ZmJcIixuYW1lPVwiYmZcIlxcXF19LGZyYW1lPXtsZXZlbD1cIjFcIixhcmdzPVxcXFtcXFxdfSxm cmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbbmFtZT1cImpcIlxcXF19LC4qZnJhbWU9e2xldmVs PVwiMjJcIixhcmdzPVxcXFtcXFxdLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFy Z3M9XFxcW1xcXF19XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW25hbWU9XCJm XCIsbmFtZT1cImRcIlxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxd IiBcCisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAwIgorKworK21pX2dkYl90ZXN0ICItc3Rh Y2stbGlzdC1hcmd1bWVudHMgLS1uby1mcmFtZS1maWx0ZXJzIDAiIFwKKysgICAgIlxcXmRvbmUs c3RhY2stYXJncz1cXFxbZnJhbWU9e2xldmVsPVwiMFwiLGFyZ3M9XFxcW25hbWU9XCJmb29cIixu YW1lPVwiYmFyXCIsbmFtZT1cImZiXCIsbmFtZT1cImJmXCJcXFxdfSxmcmFtZT17bGV2ZWw9XCIx XCIsYXJncz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW25hbWU9XCJqXCJc XFxdfSwuKmZyYW1lPXtsZXZlbD1cIjIyXCIsYXJncz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwi MjNcIixhcmdzPVxcXFtcXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbbmFtZT1c ImZcIixuYW1lPVwiZFwiXFxcXX0sZnJhbWU9e2xldmVsPVwiMjdcIixhcmdzPVxcXFtcXFxdfVxc XF0iIFwKKysgICAgInN0YWNrLWxpc3QtYXJndW1lbnRzIC0tbm8tZnJhbWUtZmlsdGVycyAwIgor KworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVudHMgMCAwIDMiIFwKKysgICAgIlxc XmRvbmUsc3RhY2stYXJncz1cXFxbZnJhbWU9e2xldmVsPVwiMFwiLGFyZ3M9XFxcW25hbWU9XCJm b29cIixuYW1lPVwiYmFyXCIsbmFtZT1cImZiXCIsbmFtZT1cImJmXCJcXFxdfSxmcmFtZT17bGV2 ZWw9XCIxXCIsYXJncz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW25hbWU9 XCJqXCJcXFxdfSxmcmFtZT17bGV2ZWw9XCIzXCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAg ICJzdGFjay1saXN0LWFyZ3VtZW50cyAwIDAgMyIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxp c3QtYXJndW1lbnRzIDAgMjIgMjciIFwKKysgICAgIlxcXmRvbmUsc3RhY2stYXJncz1cXFxbZnJh bWU9e2xldmVsPVwiMjJcIixhcmdzPVxcXFtcXFxdLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9 XCIyM1wiLGFyZ3M9XFxcW1xcXF19XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxc W25hbWU9XCJmXCIsbmFtZT1cImRcIlxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxb XFxcXX1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAwIDIyIDI3IgorKworK21p X2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1bWVudHMgMSIgXAorKyAgICAiXFxeZG9uZSxzdGFj ay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIwXCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix2YWx1 ZT1cIjIxXCJ9LHtuYW1lPVwiYmFyXCIsdmFsdWU9XCIkaGV4IFxcXFxcIlBhcmFtXFxcXFwiXCJ9 LHtuYW1lPVwiZmJcIix2YWx1ZT1cIiRoZXhcIn0se25hbWU9XCJiZlwiLHZhbHVlPVwie25vdGhp bmcgPSAkaGV4IFxcXFxcIkZvbyBCYXJcXFxcXCIsIGYgPSA0MiwgcyA9IDE5fVwifVxcXF19LGZy YW1lPXtsZXZlbD1cIjFcIixhcmdzPVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9XCIyXCIsYXJncz1c XFxbe25hbWU9XCJqXCIsdmFsdWU9XCIxMFwifVxcXF19LC4qZnJhbWU9e2xldmVsPVwiMjJcIixh cmdzPVxcXFtcXFxdLGNoaWxkcmVuPVxcXFtmcmFtZT17bGV2ZWw9XCIyM1wiLGFyZ3M9XFxcW1xc XF19XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwiLHZhbHVl PVwiM1wifSx7bmFtZT1cImRcIix2YWx1ZT1cIjVcIn1cXFxdfSxmcmFtZT17bGV2ZWw9XCIyN1wi LGFyZ3M9XFxcW1xcXF19XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1hcmd1bWVudHMgMSIKKysK KyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtYXJndW1lbnRzIC0tbm8tZnJhbWUtZmlsdGVycyAx IiBcCisrICAgICJcXF5kb25lLHN0YWNrLWFyZ3M9XFxcW2ZyYW1lPXtsZXZlbD1cIjBcIixhcmdz PVxcXFt7bmFtZT1cImZvb1wiLHZhbHVlPVwiMjFcIn0se25hbWU9XCJiYXJcIix2YWx1ZT1cIiRo ZXggXFxcXFwiUGFyYW1cXFxcXCJcIn0se25hbWU9XCJmYlwiLHZhbHVlPVwiJGhleFwifSx7bmFt ZT1cImJmXCIsdmFsdWU9XCJ7bm90aGluZyA9ICRoZXggXFxcXFwiRm9vIEJhclxcXFxcIiwgZiA9 IDQyLCBzID0gMTl9XCJ9XFxcXX0sZnJhbWU9e2xldmVsPVwiMVwiLGFyZ3M9XFxcW1xcXF19LGZy YW1lPXtsZXZlbD1cIjJcIixhcmdzPVxcXFt7bmFtZT1cImpcIix2YWx1ZT1cIjEwXCJ9XFxcXX0s LipmcmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXtsZXZlbD1cIjIzXCIs YXJncz1cXFxbXFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwi LHZhbHVlPVwiM1wifSx7bmFtZT1cImRcIix2YWx1ZT1cIjVcIn1cXFxdfSxmcmFtZT17bGV2ZWw9 XCIyN1wiLGFyZ3M9XFxcW1xcXF19XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1hcmd1bWVudHMg LS1uby1mcmFtZS1maWx0ZXJzIDEiCisrCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWFy Z3VtZW50cyAxIDAgMyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2 ZWw9XCIwXCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix2YWx1ZT1cIjIxXCJ9LHtuYW1lPVwiYmFy XCIsdmFsdWU9XCIkaGV4IFxcXFxcIlBhcmFtXFxcXFwiXCJ9LHtuYW1lPVwiZmJcIix2YWx1ZT1c IiRoZXhcIn0se25hbWU9XCJiZlwiLHZhbHVlPVwie25vdGhpbmcgPSAkaGV4IFxcXFxcIkZvbyBC YXJcXFxcXCIsIGYgPSA0MiwgcyA9IDE5fVwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjFcIixhcmdz PVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbe25hbWU9XCJqXCIsdmFsdWU9 XCIxMFwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjNcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysg ICAgInN0YWNrLWxpc3QtYXJndW1lbnRzIDEgMCAzIgorKworK21pX2dkYl90ZXN0ICItc3RhY2st bGlzdC1hcmd1bWVudHMgMSAyMiAyNyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtm cmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF0sY2hpbGRyZW49XFxcW2ZyYW1lPXtsZXZl bD1cIjIzXCIsYXJncz1cXFxbXFxcXX1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1c XFxbe25hbWU9XCJmXCIsdmFsdWU9XCIzXCJ9LHtuYW1lPVwiZFwiLHZhbHVlPVwiNVwifVxcXF19 LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJzdGFjay1s aXN0LWFyZ3VtZW50cyAxIDIyIDI3IgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1 bWVudHMgMiIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIw XCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix0eXBlPVwiaW50XCIsdmFsdWU9XCIyMVwifSx7bmFt ZT1cImJhclwiLHR5cGU9XCJjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiUGFyYW1cXFxc XCJcIn0se25hbWU9XCJmYlwiLHR5cGU9XCJmb29iYXIgXFxcKlwiLHZhbHVlPVwiJGhleFwifSx7 bmFtZT1cImJmXCIsdHlwZT1cImZvb2JhclwiXH1cXFxdfSxmcmFtZT17bGV2ZWw9XCIxXCIsYXJn cz1cXFxbXFxcXX0sZnJhbWU9e2xldmVsPVwiMlwiLGFyZ3M9XFxcW3tuYW1lPVwialwiLHR5cGU9 XCJpbnRcIix2YWx1ZT1cIjEwXCJ9XFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxc W1xcXF0sY2hpbGRyZW49XFxcW2ZyYW1lPXtsZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxcXX1cXFxd fSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbe25hbWU9XCJmXCIsdHlwZT1cImludFwi LHZhbHVlPVwiM1wifSx7bmFtZT1cImRcIix0eXBlPVwiaW50XCIsdmFsdWU9XCI1XCJ9XFxcXX0s ZnJhbWU9e2xldmVsPVwiMjdcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0YWNrLWxp c3QtYXJndW1lbnRzIDIiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWFyZ3VtZW50cyAt LW5vLWZyYW1lLWZpbHRlcnMgMiIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFt ZT17bGV2ZWw9XCIwXCIsYXJncz1cXFxbe25hbWU9XCJmb29cIix0eXBlPVwiaW50XCIsdmFsdWU9 XCIyMVwifSx7bmFtZT1cImJhclwiLHR5cGU9XCJjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxc XFwiUGFyYW1cXFxcXCJcIn0se25hbWU9XCJmYlwiLHR5cGU9XCJmb29iYXIgXFxcKlwiLHZhbHVl PVwiJGhleFwifSx7bmFtZT1cImJmXCIsdHlwZT1cImZvb2JhclwifVxcXF19LGZyYW1lPXtsZXZl bD1cIjFcIixhcmdzPVxcXFtcXFxdfSxmcmFtZT17bGV2ZWw9XCIyXCIsYXJncz1cXFxbe25hbWU9 XCJqXCIsdHlwZT1cImludFwiLHZhbHVlPVwiMTBcIn1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjIy XCIsYXJncz1cXFxbXFxcXX0sLipmcmFtZT17bGV2ZWw9XCIyNlwiLGFyZ3M9XFxcW3tuYW1lPVwi ZlwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjNcIn0se25hbWU9XCJkXCIsdHlwZT1cImludFwiLHZh bHVlPVwiNVwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIsYXJncz1cXFxbXFxcXX1cXFxdIiBc CisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZpbHRlcnMgMiIKKysKKysK KyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtYXJndW1lbnRzIDIgMCAzIiBcCisrICAgICJcXF5k b25lLHN0YWNrLWFyZ3M9XFxcW2ZyYW1lPXtsZXZlbD1cIjBcIixhcmdzPVxcXFt7bmFtZT1cImZv b1wiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjIxXCJ9LHtuYW1lPVwiYmFyXCIsdHlwZT1cImNoYXIg XFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJQYXJhbVxcXFxcIlwifSx7bmFtZT1cImZiXCIsdHlw ZT1cImZvb2JhciBcXFwqXCIsdmFsdWU9XCIkaGV4XCJ9LHtuYW1lPVwiYmZcIix0eXBlPVwiZm9v YmFyXCJ9XFxcXX0sZnJhbWU9e2xldmVsPVwiMVwiLGFyZ3M9XFxcW1xcXF19LGZyYW1lPXtsZXZl bD1cIjJcIixhcmdzPVxcXFt7bmFtZT1cImpcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIxMFwifVxc XF19LGZyYW1lPXtsZXZlbD1cIjNcIixhcmdzPVxcXFtcXFxdfVxcXF0iIFwKKysgICAgInN0YWNr LWxpc3QtYXJndW1lbnRzIDIgMCAzIgorKworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1hcmd1 bWVudHMgMiAyMiAyNyIgXAorKyAgICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2 ZWw9XCIyMlwiLGFyZ3M9XFxcW1xcXF0sY2hpbGRyZW49XFxcW2ZyYW1lPXtsZXZlbD1cIjIzXCIs YXJncz1cXFxbXFxcXX1cXFxdfSwuKmZyYW1lPXtsZXZlbD1cIjI2XCIsYXJncz1cXFxbe25hbWU9 XCJmXCIsdHlwZT1cImludFwiLHZhbHVlPVwiM1wifSx7bmFtZT1cImRcIix0eXBlPVwiaW50XCIs dmFsdWU9XCI1XCJ9XFxcXX0sZnJhbWU9e2xldmVsPVwiMjdcIixhcmdzPVxcXFtcXFxdfVxcXF0i IFwKKysgICAgInN0YWNrLWxpc3QtYXJndW1lbnRzIDIgMjIgMjciCisrCisrbWlfZ2RiX3Rlc3Qg Ii1zdGFjay1saXN0LWFyZ3VtZW50cyAtLW5vLWZyYW1lLWZpbHRlcnMgMiAyMiAyNyIgXAorKyAg ICAiXFxeZG9uZSxzdGFjay1hcmdzPVxcXFtmcmFtZT17bGV2ZWw9XCIyMlwiLGFyZ3M9XFxcW1xc XF19LGZyYW1lPXtsZXZlbD1cIjIzXCIsYXJncz1cXFxbXFxcXX0sLipmcmFtZT17bGV2ZWw9XCIy NlwiLGFyZ3M9XFxcW3tuYW1lPVwiZlwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjNcIn0se25hbWU9 XCJkXCIsdHlwZT1cImludFwiLHZhbHVlPVwiNVwifVxcXF19LGZyYW1lPXtsZXZlbD1cIjI3XCIs YXJncz1cXFxbXFxcXX1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWFyZ3VtZW50cyAtLW5vLWZy YW1lLWZpbHRlcnMgMiAyMiAyNyIKKysKKysjc3RhY2stbGlzdC1sb2NhbHMKKyttaV9nZGJfdGVz dCAiLXN0YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAwIiBcCisrICAgICJcXF5k b25lLGxvY2Fscz1cXFxbbmFtZT1cInN0clwiLG5hbWU9XCJzdDJcIixuYW1lPVwiYlwiLG5hbWU9 XCJjXCJcXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZpbHRlcnMg MCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVy cyAxIiBcCisrICAgICJcXF5kb25lLGxvY2Fscz1cXFxbe25hbWU9XCJzdHJcIix2YWx1ZT1cIiRo ZXggXFxcXFwiVGhlIEVuZFxcXFxcIlwifSx7bmFtZT1cInN0MlwiLHZhbHVlPVwiJGhleCBcXFxc XCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwiLHZhbHVlPVwiMTJcIn0se25hbWU9XCJjXCIs dmFsdWU9XCI1XCJ9XFxcXSIgXAorKyAgICAic3RhY2stbGlzdC1sb2NhbHMgLS1uby1mcmFtZS1m aWx0ZXJzIDEiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1l LWZpbHRlcnMgMiIgXAorKyAgICAiXFxeZG9uZSxsb2NhbHM9XFxcW3tuYW1lPVwic3RyXCIsdHlw ZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJUaGUgRW5kXFxcXFwiXCJ9 LHtuYW1lPVwic3QyXCIsdHlwZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVlPVwiJGhleCBcXFxc XCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwiLHR5cGU9XCJpbnRcIix2YWx1ZT1cIjEyXCJ9 LHtuYW1lPVwiY1wiLHR5cGU9XCJzaG9ydFwiLHZhbHVlPVwiNVwifVxcXF0iIFwKKysgICAgInN0 YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAyIgorKworK21pX2dkYl90ZXN0ICIt c3RhY2stbGlzdC1sb2NhbHMgLS1uby1mcmFtZS1maWx0ZXJzIC0tbm8tdmFsdWVzIiBcCisrICAg ICJcXF5kb25lLGxvY2Fscz1cXFxbbmFtZT1cInN0clwiLG5hbWU9XCJzdDJcIixuYW1lPVwiYlwi LG5hbWU9XCJjXCJcXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAtLW5vLWZyYW1lLWZp bHRlcnMgLS1uby12YWx1ZXMiCisrCisrbWlfZ2RiX3Rlc3QgIi1zdGFjay1saXN0LWxvY2FscyAt LW5vLWZyYW1lLWZpbHRlcnMgLS1hbGwtdmFsdWVzIiBcCisrICAgICJcXF5kb25lLGxvY2Fscz1c XFxbe25hbWU9XCJzdHJcIix2YWx1ZT1cIiRoZXggXFxcXFwiVGhlIEVuZFxcXFxcIlwifSx7bmFt ZT1cInN0MlwiLHZhbHVlPVwiJGhleCBcXFxcXCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwi LHZhbHVlPVwiMTJcIn0se25hbWU9XCJjXCIsdmFsdWU9XCI1XCJ9XFxcXSIgXAorKyAgICAic3Rh Y2stbGlzdC1sb2NhbHMgLS1uby1mcmFtZS1maWx0ZXJzIC0tYWxsLXZhbHVlcyIKKysKKyttaV9n ZGJfdGVzdCAiLXN0YWNrLWxpc3QtbG9jYWxzIC0tbm8tZnJhbWUtZmlsdGVycyAtLXNpbXBsZS12 YWx1ZXMiIFwKKysgICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cInN0clwiLHR5cGU9XCJj b25zdCBjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiVGhlIEVuZFxcXFxcIlwifSx7bmFt ZT1cInN0MlwiLHR5cGU9XCJjb25zdCBjaGFyIFxcXCpcIix2YWx1ZT1cIiRoZXggXFxcXFwiSXMg TmVhclxcXFxcIlwifSx7bmFtZT1cImJcIix0eXBlPVwiaW50XCIsdmFsdWU9XCIxMlwifSx7bmFt ZT1cImNcIix0eXBlPVwic2hvcnRcIix2YWx1ZT1cIjVcIn1cXFxdIiBcCisrICAgICJzdGFjay1s aXN0LWxvY2FscyAtLW5vLWZyYW1lLWZpbHRlcnMgLS1zaW1wbGUtdmFsdWVzIgorKworK21pX2dk Yl90ZXN0ICItc3RhY2stbGlzdC1sb2NhbHMgMCIgXAorKyAgICAiXFxeZG9uZSxsb2NhbHM9XFxc W25hbWU9XCJzdHJcIixuYW1lPVwic3QyXCIsbmFtZT1cImJcIixuYW1lPVwiY1wiXFxcXSIgXAor KyAgICAic3RhY2stbGlzdC1sb2NhbHMgMCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxpc3Qt bG9jYWxzIDEiIFwKKysgICAgIlxcXmRvbmUsbG9jYWxzPVxcXFt7bmFtZT1cInN0clwiLHZhbHVl PVwiJGhleCBcXFxcXCJUaGUgRW5kXFxcXFwiXCJ9LHtuYW1lPVwic3QyXCIsdmFsdWU9XCIkaGV4 IFxcXFxcIklzIE5lYXJcXFxcXCJcIn0se25hbWU9XCJiXCIsdmFsdWU9XCIxMlwifSx7bmFtZT1c ImNcIix2YWx1ZT1cIjVcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LWxvY2FscyAxIgorKwor K21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC1sb2NhbHMgMiIgXAorKyAgICAiXFxeZG9uZSxsb2Nh bHM9XFxcW3tuYW1lPVwic3RyXCIsdHlwZT1cImNvbnN0IGNoYXIgXFxcKlwiLHZhbHVlPVwiJGhl eCBcXFxcXCJUaGUgRW5kXFxcXFwiXCJ9LHtuYW1lPVwic3QyXCIsdHlwZT1cImNvbnN0IGNoYXIg XFxcKlwiLHZhbHVlPVwiJGhleCBcXFxcXCJJcyBOZWFyXFxcXFwiXCJ9LHtuYW1lPVwiYlwiLHR5 cGU9XCJpbnRcIix2YWx1ZT1cIjEyXCJ9LHtuYW1lPVwiY1wiLHR5cGU9XCJzaG9ydFwiLHZhbHVl PVwiNVwifVxcXF0iIFwKKysgICAgInN0YWNrLWxpc3QtbG9jYWxzIDIiCisrCisrIyBzdGFjay1s aXN0LXZhcmlhYmxlcworK21pX2dkYl90ZXN0ICItc3RhY2stbGlzdC12YXJpYWJsZXMgLS1uby1m cmFtZS1maWx0ZXJzIDAiIFwKKysgICAgIlxcXmRvbmUsdmFyaWFibGVzPVxcXFt7bmFtZT1cImZv b1wiLGFyZz1cIjFcIn0se25hbWU9XCJiYXJcIixhcmc9XCIxXCJ9LHtuYW1lPVwiZmJcIixhcmc9 XCIxXCJ9LHtuYW1lPVwiYmZcIixhcmc9XCIxXCJ9LHtuYW1lPVwic3RyXCJ9LHtuYW1lPVwic3Qy XCJ9LHtuYW1lPVwiYlwifSx7bmFtZT1cImNcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LXZh cmlhYmxlcyAtLW5vLWZyYW1lLWZpbHRlcnMgMCIKKysKKyttaV9nZGJfdGVzdCAiLXN0YWNrLWxp c3QtdmFyaWFibGVzIDAiIFwKKysgICAgIlxcXmRvbmUsdmFyaWFibGVzPVxcXFt7bmFtZT1cImZv b1wiLGFyZz1cIjFcIn0se25hbWU9XCJiYXJcIixhcmc9XCIxXCJ9LHtuYW1lPVwiZmJcIixhcmc9 XCIxXCJ9LHtuYW1lPVwiYmZcIixhcmc9XCIxXCJ9LHtuYW1lPVwic3RyXCJ9LHtuYW1lPVwic3Qy XCJ9LHtuYW1lPVwiYlwifSx7bmFtZT1cImNcIn1cXFxdIiBcCisrICAgICJzdGFjay1saXN0LXZh cmlhYmxlcyAwIgorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZy YW1lZmlsdGVyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDow MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9w eS1mcmFtZWZpbHRlci5jCTIwMTMtMDUtMjAgMjI6MjU6NTIuMTE1MTY1NzY2ICswMjAwCitAQCAt MCwwICsxLDE1NSBAQAorKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUg ZGVidWdnZXIuCisrCisrICAgQ29weXJpZ2h0IDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKwor KyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKyt2b2lkIGZ1bmNhKHZvaWQpOworK2ludCBjb3VudCA9 IDA7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjaGFyICpub3RoaW5nOworKyAgaW50IGY7 CisrICBzaG9ydCBzOworK30gZm9vYmFyOworKworK3ZvaWQgZW5kX2Z1bmMgKGludCBmb28sIGNo YXIgKmJhciwgZm9vYmFyICpmYiwgZm9vYmFyIGJmKQorK3sKKysgIGNvbnN0IGNoYXIgKnN0ciA9 ICJUaGUgRW5kIjsKKysgIGNvbnN0IGNoYXIgKnN0MiA9ICJJcyBOZWFyIjsKKysgIGludCBiID0g MTI7CisrICBzaG9ydCBjID0gNTsKKysKKysgIHsKKysgICAgaW50IGQgPSAxNTsKKysgICAgaW50 IGUgPSAxNDsKKysgICAgY29uc3QgY2hhciAqZm9vID0gIkluc2lkZSBibG9jayI7CisrICAgIHsK KysgICAgICBpbnQgZiA9IDQyOworKyAgICAgIGludCBnID0gMTk7CisrICAgICAgY29uc3QgY2hh ciAqYmFyID0gIkluc2lkZSBibG9jayB4MiI7CisrICAgICAgeworKwlzaG9ydCBoID0gOTsKKysJ aCA9IGggKzE7ICAvKiBJbm5lciB0ZXN0IGJyZWFrcG9pbnQgICovCisrICAgICAgfQorKyAgICB9 CisrICB9CisrCisrICByZXR1cm47IC8qIEJhY2t0cmFjZSBlbmQgYnJlYWtwb2ludCAqLworK30K KysKKyt2b2lkIGZ1bmNiKGludCBqKQorK3sKKysgIHN0cnVjdCBmb28KKysgIHsKKysgICAgaW50 IGE7CisrICAgIGludCBiOworKyAgfTsKKysKKysgIHN0cnVjdCBmb28gYmFyOworKworKyAgYmFy LmEgPSA0MjsKKysgIGJhci5iID0gODQ7CisrCisrICBmdW5jYSgpOworKyAgcmV0dXJuOworK30K KysKKyt2b2lkIGZ1bmNhKHZvaWQpCisreworKyAgZm9vYmFyIGZiOworKyAgZm9vYmFyICpiZiA9 IE5VTEw7CisrCisrICBpZiAoY291bnQgPCAxMCkKKysgICAgeworKyAgICAgIGNvdW50Kys7Cisr ICAgICAgZnVuY2IoY291bnQpOworKyAgICB9CisrCisrICBmYi5ub3RoaW5nID0gIkZvbyBCYXIi OworKyAgZmIuZiA9IDQyOworKyAgZmIucyA9IDE5OworKworKyAgYmYgPSBhbGxvY2EgKHNpemVv ZiAoZm9vYmFyKSk7CisrICBiZi0+bm90aGluZyA9IGFsbG9jYSAoMTI4KTsKKysgIGJmLT5ub3Ro aW5nID0gIkJhciBGb28iOworKyAgYmYtPmYgPSAyNDsKKysgIGJmLT5zID0gOTE7CisrCisrICBl bmRfZnVuYygyMSwgIlBhcmFtIiwgYmYsIGZiKTsKKysgIHJldHVybjsKKyt9CisrCisrCisrdm9p ZCBmdW5jMSh2b2lkKQorK3sKKysgIGZ1bmNhKCk7CisrICByZXR1cm47CisrfQorKworK2ludCBm dW5jMihpbnQgZikKKyt7CisrICBpbnQgYzsKKysgIGNvbnN0IGNoYXIgKmVsaWRlZCA9ICJFbGlk ZWQgZnJhbWUiOworKyAgZm9vYmFyIGZiOworKyAgZm9vYmFyICpiZiA9IE5VTEw7CisrCisrICBm Yi5ub3RoaW5nID0gIkVsaWRlZCBGb28gQmFyIjsKKysgIGZiLmYgPSA4NDsKKysgIGZiLnMgPSAz ODsKKysKKysgIGJmID0gYWxsb2NhIChzaXplb2YgKGZvb2JhcikpOworKyAgYmYtPm5vdGhpbmcg PSBhbGxvY2EgKDEyOCk7CisrICBiZi0+bm90aGluZyA9ICJFbGlkZWQgQmFyIEZvbyI7CisrICBi Zi0+ZiA9IDQ4OworKyAgYmYtPnMgPSAxODI7CisrCisrICBmdW5jMSgpOworKyAgcmV0dXJuIDE7 CisrfQorKworK3ZvaWQgZnVuYzMoaW50IGkpCisreworKyAgZnVuYzIoaSk7CisrCisrICByZXR1 cm47CisrfQorKworK2ludCBmdW5jNChpbnQgaikKKyt7CisrICBmdW5jMyhqKTsKKysKKysgIHJl dHVybiAyOworK30KKysKKytpbnQgZnVuYzUoaW50IGYsIGludCBkKQorK3sKKysgIGludCBpID0g MDsKKysgIGNoYXIgKnJhbmRvbSA9ICJyYW5kb20iOworKyAgaT1pK2Y7CisrCisrICBmdW5jNChp KTsKKysgIHJldHVybiBpOworK30KKysKKyttYWluKCkKKyt7CisrICBpbnQgeiA9IDMyOworKyAg aW50IHkgPSA0NDsKKysgIGNvbnN0IGNoYXIgKmZvbzEgPSAiVGVzdCI7CisrICBmdW5jNSgzLDUp OworK30KK0luZGV4OiBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1mcmFtZWZp bHRlci5leHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4w MDAwMDAwMDAgKzAwMDAKKysrKyBnZGItNy42L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1m cmFtZWZpbHRlci5leHAJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTUxNjU3NjYgKzAyMDAKK0BAIC0w LDAgKzEsMjM5IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9y CisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor KyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBm aWxlIGlzIHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQK KysjIGZyYW1lLWZpbHRlcnMuCisrCisrbG9hZF9saWIgZ2RiLXB5dGhvbi5leHAKKysKKytzdGFu ZGFyZF90ZXN0ZmlsZQorKworKyMgV2UgY2Fubm90IHVzZSBwcmVwYXJlX2Zvcl90ZXN0aW5nIGFz IHdlIGhhdmUgdG8gc2V0IHRoZSBzYWZlLXBhdGNoCisrIyB0byBjaGVjayBvYmpmaWxlIGFuZCBw cm9nc3BhY2UgcHJpbnRlcnMuCisraWYge1tidWlsZF9leGVjdXRhYmxlICR0ZXN0ZmlsZS5leHAg JHRlc3RmaWxlICRzcmNmaWxlIGRlYnVnXSA9PSAtMX0geworKyAgICByZXR1cm4gLTEKKyt9Cisr CisrIyBTdGFydCB3aXRoIGEgZnJlc2ggZ2RiLgorK2dkYl9leGl0CisrZ2RiX3N0YXJ0CisrCisr IyBTa2lwIGFsbCB0ZXN0cyBpZiBQeXRob24gc2NyaXB0aW5nIGlzIG5vdCBlbmFibGVkLgorK2lm IHsgW3NraXBfcHl0aG9uX3Rlc3RzXSB9IHsgY29udGludWUgfQorKworKyMgTWFrZSB0aGUgLWdk Yi5weSBzY3JpcHQgYXZhaWxhYmxlIHRvIGdkYiwgaXQgaXMgYXV0b21hZ2ljYWxseSBsb2FkZWQg YnkgZ2RiLgorKyMgQ2FyZSBpcyB0YWtlbiB0byBwdXQgaXQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5 IGFzIHRoZSBiaW5hcnkgc28gdGhhdAorKyMgZ2RiIHdpbGwgZmluZCBpdC4KKytzZXQgcmVtb3Rl X29ial9weXRob25fZmlsZSBcCisrICAgIFtyZW1vdGVfZG93bmxvYWQgXAorKwkgaG9zdCAke3Ny Y2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LWdkYi5weS5pbiBcCisrCSAke3N1YmRpcn0vJHt0 ZXN0ZmlsZX0tZ2RiLnB5XQorKworK2dkYl9yZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRp cgorK2dkYl90ZXN0X25vX291dHB1dCAic2V0IGF1dG8tbG9hZCBzYWZlLXBhdGggJHtyZW1vdGVf b2JqX3B5dGhvbl9maWxlfSIgXAorKyAgICAic2V0IGF1dG8tbG9hZCBzYWZlLXBhdGgiCisrZ2Ri X2xvYWQgJHtiaW5maWxlfQorKyMgVmVyaWZ5IGdkYiBsb2FkZWQgdGhlIHNjcmlwdC4KKytnZGJf dGVzdCAiaW5mbyBhdXRvLWxvYWQgcHl0aG9uLXNjcmlwdHMiICJZZXMuKi8ke3Rlc3RmaWxlfS1n ZGIucHkuKiIgXAorKyAgICAiVGVzdCBhdXRvLWxvYWQgaGFkIGxvYWRlZCBweXRob24gc2NyaXB0 cyIKKysKKytpZiAhW3J1bnRvX21haW5dIHRoZW4geworKyAgICBwZXJyb3IgImNvdWxkbid0IHJ1 biB0byBicmVha3BvaW50IgorKyAgICByZXR1cm4KKyt9CisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJz ZXQgcHl0aG9uIHByaW50LXN0YWNrIGZ1bGwiIFwKKysgICAgIlNldCBweXRob24gcHJpbnQtc3Rh Y2sgdG8gZnVsbCIKKysKKysjIExvYWQgZ2xvYmFsIGZyYW1lLWZpbHRlcnMKKytzZXQgcmVtb3Rl X3B5dGhvbl9maWxlIFtyZW1vdGVfZG93bmxvYWQgaG9zdCAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7 dGVzdGZpbGV9LnB5XQorK2dkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGV4ZWNmaWxlICgnJHty ZW1vdGVfcHl0aG9uX2ZpbGV9JykiIFwKKysgICAgIkxvYWQgcHl0aG9uIGZpbGUiCisrCisrZ2Ri X2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgIkJhY2t0cmFjZSBlbmQgYnJlYWtwb2lu dCJdCisrZ2RiX2JyZWFrcG9pbnQgW2dkYl9nZXRfbGluZV9udW1iZXIgIklubmVyIHRlc3QgYnJl YWtwb2ludCJdCisrZ2RiX2NvbnRpbnVlX3RvX2JyZWFrcG9pbnQgIklubmVyIHRlc3QgYnJlYWtw b2ludCIKKysKKysjIFRlc3QgbXVsdGlwbGUgbG9jYWwgYmxvY2tzLgorK2dkYl90ZXN0ICJidCBm dWxsIG5vLWZpbHRlcnMiIFwKKysgICAgIi4qIzAuKmVuZF9mdW5jLipoID0gOS4qZiA9IDQyLipn ID0gMTkuKmJhciA9ICRoZXggXCJJbnNpZGUgYmxvY2sgeDJcIi4qZCA9IDE1LiplID0gMTQuKmZv byA9ICRoZXggXCJJbnNpZGUgYmxvY2tcIi4qc3RyID0gJGhleCBcIlRoZSBFbmRcIi4qc3QyID0g JGhleCBcIklzIE5lYXJcIi4qYiA9IDEyLipjID0gNS4qIiBcCisrICAgICJidCBmdWxsIG5vLWZp bHRlcnMiCisrZ2RiX3Rlc3QgImJ0IGZ1bGwiIFwKKysgICAgIi4qIzAuKmNudWZfZG5lLipoID0g OS4qZiA9IDQyLipnID0gMTkuKmJhciA9ICRoZXggXCJJbnNpZGUgYmxvY2sgeDJcIi4qZCA9IDE1 LiplID0gMTQuKmZvbyA9ICRoZXggXCJJbnNpZGUgYmxvY2tcIi4qc3RyID0gJGhleCBcIlRoZSBF bmRcIi4qc3QyID0gJGhleCBcIklzIE5lYXJcIi4qYiA9IDEyLipjID0gNS4qIiBcCisrICAgICJi dCBmdWxsIHdpdGggZmlsdGVycyIKKysKKytnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiQmFj a3RyYWNlIGVuZCBicmVha3BvaW50IgorKworKyMgVGVzdCBzZXQvc2hvdworK2dkYl90ZXN0ICJp bmZvIGZyYW1lLWZpbHRlciIgXAorKyAgICAiLio5MDAuKlllcy4qRWxpZGVyLioxMDAuKlllcy4q UmV2ZXJzZS4qMTAuKi4qTm8uKk9iamVjdC4qMS4qIiBcCisrICAgICJpbmZvIGZyYW1lIGZpbHRl ciBiZWZvcmUgc2V0dGluZyBwcmlvcml0eSIKKytnZGJfdGVzdCAic2hvdyBmcmFtZS1maWx0ZXIg cHJpb3JpdHkgZ2xvYmFsIEVsaWRlciIgXAorKyAgICAiUHJpb3JpdHkgb2YgZmlsdGVyICdFbGlk ZXInIGluIGxpc3QgJ2dsb2JhbCcgaXM6IDkwMCIgXAorKyAgICAic2hvdyBmcmFtZS1maWx0ZXIg cHJpb3JpdHkgZ2xvYmFsIEVsaWRlciBiZWZvcmUgc2V0dGluZyIKKytnZGJfdGVzdF9ub19vdXRw dXQgICJzZXQgZnJhbWUtZmlsdGVyIHByaW9yaXR5IGdsb2JhbCBFbGlkZXIgMTAwMCIgXAorKyAg ICAic2V0IGZyYW1lLWZpbHRlciBwcmlvdGl5IGdsb2JhbCBFbGlkZXIgMTAwMCIKKytnZGJfdGVz dCAic2hvdyBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgZ2xvYmFsIEVsaWRlciIgXAorKyAgICAgICAg IlByaW9yaXR5IG9mIGZpbHRlciAnRWxpZGVyJyBpbiBsaXN0ICdnbG9iYWwnIGlzOiAxMDAwIiBc CisrICAgICAgICAic2hvdyBmcmFtZS1maWx0ZXIgcHJpb3JpdHkgZ2xvYmFsIEVsaWRlciBhZnRl ciBzZXR0aW5nIgorK2dkYl90ZXN0ICJpbmZvIGZyYW1lLWZpbHRlciIgXAorKyAgICAiLioxMDAw LipZZXMuKkVsaWRlci4qMTAwLipZZXMuKlJldmVyc2UuKjEwLiouKk5vLipPYmplY3QuKjEuKiIg XAorKyAgICAiaW5mbyBmcmFtZSBmaWx0ZXIgYWZ0ZXIgc2V0dGluZyBwcmlvcml0eSIKKysKKysj IFRlc3QgZW5hYmxlL2Rpc2FibGUKKytnZGJfdGVzdCAiaW5mbyBmcmFtZS1maWx0ZXIiIFwKKysg ICAgIi4qMTAwMC4qWWVzLipFbGlkZXIuKjEwMC4qWWVzLipSZXZlcnNlLioxMC4qLipOby4qT2Jq ZWN0LioxLioiIFwKKysgICAgImluZm8gZnJhbWUgZmlsdGVyIGJlZm9yZSBkaXNhYmxlIGZyYW1l IGZpbHRlciIKKytnZGJfdGVzdF9ub19vdXRwdXQgICJkaXNhYmxlIGZyYW1lLWZpbHRlciBnbG9i YWwgRWxpZGVyIiBcCisrICAgICJkaXNhYmxlIGZyYW1lLWZpbHRlciBnbG9iYWwgRWxpZGVyIgor K2dkYl90ZXN0ICJpbmZvIGZyYW1lLWZpbHRlciIgXAorKyAgICAiLioxMDAwLipOby4qRWxpZGVy LioxMDAuKlllcy4qUmV2ZXJzZS4qMTAuKi4qTm8uKk9iamVjdC4qMS4qIiBcCisrICAgICJpbmZv IGZyYW1lIGZpbHRlciBhZnRlciBkaXNhYmxlIGZyYW1lIGZpbHRlciIKKytnZGJfdGVzdF9ub19v dXRwdXQgICJlbmFibGUgZnJhbWUtZmlsdGVyIGdsb2JhbCBFbGlkZXIiIFwKKysgICAgImVuYWJs ZSBmcmFtZS1maWx0ZXIgZ2xvYmFsIEVsaWRlciIKKytnZGJfdGVzdCAiaW5mbyBmcmFtZS1maWx0 ZXIiIFwKKysgICAgIi4qMTAwMC4qWWVzLipFbGlkZXIuKjEwMC4qWWVzLipSZXZlcnNlLioxMC4q LipOby4qT2JqZWN0LioxLioiIFwKKysgICAgImluZm8gZnJhbWUgZmlsdGVyIGFmdGVyIHJlZW5h YmxpbmcgZnJhbWUgZmlsdGVyIgorKworKyMgVGVzdCBuby1maWx0ZXJzCisrZ2RiX3Rlc3QgImJ0 IG5vLWZpbHRlcnMiIFwKKysgICAgIi4qIzAuKmVuZF9mdW5jLiojMjIuKmluIGZ1bmMxLiojMjcu KmluIG1haW4gXFwoXFwpLioiIFwKKysgICAgImJ0IG5vLWZpbHRlcnMiCisrCisrIyBUZXN0IHJl dmVyc2UKKytnZGJfdGVzdCAiYnQiIFwKKysgICAgIi4qIzAuKmNudWZfZG5lLiojMjIuKmluIDFj bnVmLiojMjcuKmluIG5pYW0gXFwoXFwpLioiIFwKKysgICAgImJ0IHdpdGggZnJhbWUgZmlsdGVy cyIKKysKKysjIERpc2FibGUgUmV2ZXJzZQorK2dkYl90ZXN0X25vX291dHB1dCAiZGlzYWJsZSBm cmFtZS1maWx0ZXIgZ2xvYmFsIFJldmVyc2UiIFwKKysgICAgImRpc2FibGUgZnJhbWUtZmlsdGVy IGdsb2JhbCBSZXZlcnNlIgorK2dkYl90ZXN0ICJidCIgXAorKyAgICAiLiojMC4qZW5kX2Z1bmMu KiMyMi4qaW4gZnVuYzEuKiMyNy4qaW4gbWFpbiBcXChcXCkuKiIgXAorKyAgICAiYnQgd2l0aCBm cmFtZS1maWx0ZXIgUmV2ZXJzZSBkaXNhYmxlZCIKKytnZGJfdGVzdCAiYnQgLTIiIFwKKysgICAg Ii4qIzI2LipmdW5jNS4qIzI3LippbiBtYWluIFxcKFxcKS4qIiBcCisrICAgICJidCAtMiB3aXRo IGZyYW1lLWZpbHRlciBSZXZlcnNlIGRpc2FibGVkIgorK2dkYl90ZXN0ICJidCAzIiBcCisrICAg ICIuKiMwLiplbmRfZnVuYy4qIzEuKmluIGZ1bmNhIFxcKFxcKS4qIzIuKmluIGZ1bmNiIFxcKGo9 MTBcXCkuKiIgXAorKyAgICAiYnQgMyB3aXRoIGZyYW1lLWZpbHRlciBSZXZlcnNlIGRpc2FibGVk IgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgZnVsbCIgXAorKyAgICAiLiojMC4qZW5kX2Z1bmMu KnN0ciA9ICRoZXggXCJUaGUgRW5kXCIuKnN0MiA9ICRoZXggXCJJcyBOZWFyXCIuKmIgPSAxMi4q YyA9IDUuKiMxLippbiBmdW5jYSBcXChcXCkuKiMyLippbiBmdW5jYiBcXChqPTEwXFwpLipiYXIg PSBce2EgPSA0MiwgYiA9IDg0XH0uKiIgXAorKyAgICAiYnQgbm8tZmlsdGVycyBmdWxsIHdpdGgg UmV2ZXJzZSBkaXNhYmxlZCIKKytnZGJfdGVzdCAiYnQgZnVsbCIgXAorKyAgICAiLiojMC4qZW5k X2Z1bmMuKnN0ciA9ICRoZXggXCJUaGUgRW5kXCIuKnN0MiA9ICRoZXggXCJJcyBOZWFyXCIuKmIg PSAxMi4qYyA9IDUuKiMxLippbiBmdW5jYSBcXChcXCkuKiMyLippbiBmdW5jYiBcXChqPTEwXFwp LipiYXIgPSBce2EgPSA0MiwgYiA9IDg0XH0uKiMyMi4qaW4gZnVuYzEgXFwoXFwpLiojMjMuKmlu IGZ1bmMyIFxcKGY9M1xcKS4qZWxpZGVkID0gJGhleCBcIkVsaWRlZCBmcmFtZVwiLipmYiA9IFx7 bm90aGluZyA9ICRoZXggXCJFbGlkZWQgRm9vIEJhclwiLCBmID0gODQsIHMgPSAzOFx9LipiZiA9 ICRoZXguKiIgXAorKyAgICAiYnQgZnVsbCB3aXRoIFJldmVyc2UgZGlzYWJsZWQiCisrCisrIyBU ZXN0IHNldCBwcmludCBmcmFtZS1hcmd1bWVudHMKKysjIG5vbmUKKytnZGJfdGVzdF9ub19vdXRw dXQgInNldCBwcmludCBmcmFtZS1hcmd1bWVudHMgbm9uZSIgXAorKyAgICAidHVybiBvZmYgZnJh bWUgYXJndW1lbnRzIgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgMSIgXAorKyAgICAiIzAuKmVu ZF9mdW5jIFxcKGZvbz1cLlwuXC4sIGJhcj1cLlwuXC4sIGZiPVwuXC5cLiwgYmY9XC5cLlwuXFwp IGF0IC4qcHktZnJhbWVmaWx0ZXIuYy4qIiBcCisrICAgICJidCBuby1maWx0ZXIgMSBubyBhcmdz IgorK2dkYl90ZXN0ICJidCAxIiBcCisrICAgICIjMC4qZW5kX2Z1bmMgXFwoZm9vPVwuXC5cLiwg YmFyPVwuXC5cLiwgZmI9XC5cLlwuLCBiZj1cLlwuXC5cXCkgYXQgLipweS1mcmFtZWZpbHRlci5j LioiIFwKKysgICAgImJ0IDEgbm8gYXJncyIKKysKKysjIHNjYWxhcnMKKytnZGJfdGVzdF9ub19v dXRwdXQgInNldCBwcmludCBmcmFtZS1hcmd1bWVudHMgc2NhbGFycyIgXAorKyAgICAidHVybiBm cmFtZSBhcmd1bWVudHMgdG8gc2NhbGFycyBvbmx5IgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIg MSIgXAorKyAgICAiIzAuKmVuZF9mdW5jIFxcKGZvbz0yMSwgYmFyPSRoZXggXCJQYXJhbVwiLCBm Yj0kaGV4LCBiZj1cLlwuXC5cXCkgYXQgLipweS1mcmFtZWZpbHRlci5jLioiIFwKKysgICAgImJ0 IG5vLWZpbHRlciAxIHNjYWxhcnMiCisrZ2RiX3Rlc3QgImJ0IDEiIFwKKysgICAgIiMwLiplbmRf ZnVuYyBcXChmb289MjEsIGJhcj0kaGV4IFwiUGFyYW1cIiwgZmI9JGhleCwgYmY9XC5cLlwuXFwp IGF0IC4qcHktZnJhbWVmaWx0ZXIuYy4qIiBcCisrICAgICJidCAxIHNjYWxhcnMiCisrCisrIyBh bGwKKytnZGJfdGVzdF9ub19vdXRwdXQgInNldCBwcmludCBmcmFtZS1hcmd1bWVudHMgYWxsIiBc CisrICAgICJ0dXJuIG9uIGZyYW1lIGFyZ3VtZW50cyIKKytnZGJfdGVzdCAiYnQgbm8tZmlsdGVy IDEiIFwKKysgICAgIiMwLiplbmRfZnVuYyBcXChmb289MjEsIGJhcj0kaGV4IFwiUGFyYW1cIiwg ZmI9JGhleCwgYmY9XHtub3RoaW5nID0gJGhleCBcIkZvbyBCYXJcIiwgZiA9IDQyLCBzID0gMTlc fVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAgICAiYnQgbm8tZmlsdGVyIDEgYWxs IGFyZ3MiCisrZ2RiX3Rlc3QgImJ0IDEiIFwKKysgICAgIiMwLiplbmRfZnVuYyBcXChmb289MjEs IGJhcj0kaGV4IFwiUGFyYW1cIiwgZmI9JGhleCwgYmY9XHtub3RoaW5nID0gJGhleCBcIkZvbyBC YXJcIiwgZiA9IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAorKyAg ICAiYnQgMSBhbGwgYXJncyIKKysKKysjIHNldCBwcmludCBhZGRyZXNzIG9mZgorK2dkYl90ZXN0 X25vX291dHB1dCAic2V0IHByaW50IGFkZHJlc3Mgb2ZmIiBcCisrICAgICJUdXJuIG9mZiBhZGRy ZXNzIHByaW50aW5nIgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXIgMSIgXAorKyAgICAiIzAgIGVu ZF9mdW5jIFxcKGZvbz0yMSwgYmFyPVwiUGFyYW1cIiwgZmI9LCBiZj1ce25vdGhpbmcgPSBcIkZv byBCYXJcIiwgZiA9IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVyLmMuKiIgXAor KyAgICAiYnQgbm8tZmlsdGVyIDEgbm8gYWRkcmVzcyIKKytnZGJfdGVzdCAiYnQgMSIgXAorKyAg ICAiIzAgIGVuZF9mdW5jIFxcKGZvbz0yMSwgYmFyPVwiUGFyYW1cIiwgZmI9LCBiZj1ce25vdGhp bmcgPSBcIkZvbyBCYXJcIiwgZiA9IDQyLCBzID0gMTlcfVxcKSBhdCAuKnB5LWZyYW1lZmlsdGVy LmMuKiIgXAorKyAgICAiYnQgMSBubyBhZGRyZXNzcyIKKysKKytyZW1vdGVfZmlsZSBob3N0IGRl bGV0ZSAke3JlbW90ZV9weXRob25fZmlsZX0KKysKKysjIFRlc3Qgd2l0aCBubyBkZWJ1Z2luZm8K KysKKysjIFdlIGNhbm5vdCB1c2UgcHJlcGFyZV9mb3JfdGVzdGluZyBhcyB3ZSBoYXZlIHRvIHNl dCB0aGUgc2FmZS1wYXRjaAorKyMgdG8gY2hlY2sgb2JqZmlsZSBhbmQgcHJvZ3NwYWNlIHByaW50 ZXJzLgorK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAkdGVzdGZpbGUuZXhwICR0ZXN0ZmlsZSAkc3Jj ZmlsZSB7bm9kZWJ1Z31dID09IC0xfSB7CisrICAgIHJldHVybiAtMQorK30KKysKKysjIFN0YXJ0 IHdpdGggYSBmcmVzaCBnZGIuCisrZ2RiX2V4aXQKKytnZGJfc3RhcnQKKysKKysjIFNraXAgYWxs IHRlc3RzIGlmIFB5dGhvbiBzY3JpcHRpbmcgaXMgbm90IGVuYWJsZWQuCisraWYgeyBbc2tpcF9w eXRob25fdGVzdHNdIH0geyBjb250aW51ZSB9CisrCisrIyBNYWtlIHRoZSAtZ2RiLnB5IHNjcmlw dCBhdmFpbGFibGUgdG8gZ2RiLCBpdCBpcyBhdXRvbWFnaWNhbGx5IGxvYWRlZCBieSBnZGIuCisr IyBDYXJlIGlzIHRha2VuIHRvIHB1dCBpdCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGJp bmFyeSBzbyB0aGF0CisrIyBnZGIgd2lsbCBmaW5kIGl0LgorK3NldCByZW1vdGVfb2JqX3B5dGhv bl9maWxlIFwKKysgICAgW3JlbW90ZV9kb3dubG9hZCBcCisrCSBob3N0ICR7c3JjZGlyfS8ke3N1 YmRpcn0vJHt0ZXN0ZmlsZX0tZ2RiLnB5LmluIFwKKysJICR7c3ViZGlyfS8ke3Rlc3RmaWxlfS1n ZGIucHldCisrCisrZ2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCisrZ2RiX3Rl c3Rfbm9fb3V0cHV0ICJzZXQgYXV0by1sb2FkIHNhZmUtcGF0aCAke3JlbW90ZV9vYmpfcHl0aG9u X2ZpbGV9IiBcCisrICAgICJzZXQgYXV0by1sb2FkIHNhZmUtcGF0aCBmb3Igbm8gZGVidWcgaW5m byIKKytnZGJfbG9hZCAke2JpbmZpbGV9CisrCisrIyBWZXJpZnkgZ2RiIGxvYWRlZCB0aGUgc2Ny aXB0LgorK2dkYl90ZXN0ICJpbmZvIGF1dG8tbG9hZCBweXRob24tc2NyaXB0cyIgIlllcy4qLyR7 dGVzdGZpbGV9LWdkYi5weS4qIiBcCisrICAgICJTZXQgYXV0b2xvYWQgcGF0aCBmb3Igbm8gZGVi dWcgaW5mbyB0ZXN0cyIKKytpZiAhW3J1bnRvX21haW5dIHRoZW4geworKyAgICBwZXJyb3IgImNv dWxkbid0IHJ1biB0byBicmVha3BvaW50IgorKyAgICByZXR1cm4KKyt9CisrCisrZ2RiX3Rlc3Rf bm9fb3V0cHV0ICJzZXQgcHl0aG9uIHByaW50LXN0YWNrIGZ1bGwiIFwKKysgICAgInNldCBweXRo b24gcHJpbnQtc3RhY2sgZnVsbCBmb3Igbm8gZGVidWdpbmZvIHRlc3RzIgorKworKyMgTG9hZCBn bG9iYWwgZnJhbWUtZmlsdGVycworK3NldCByZW1vdGVfcHl0aG9uX2ZpbGUgW3JlbW90ZV9kb3du bG9hZCBob3N0ICR7c3JjZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCisrZ2RiX3Rlc3Rf bm9fb3V0cHV0ICJweXRob24gZXhlY2ZpbGUgKCcke3JlbW90ZV9weXRob25fZmlsZX0nKSIgXAor KyAgICAiTG9hZCBweXRob24gZmlsZSBmb3Igbm8gZGVidWdpbmZvIHRlc3RzIgorKworKyMgRGlz YWJsZSBSZXZlcnNlCisrZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJkaXNhYmxlIGZyYW1lLWZpbHRlciBn bG9iYWwgUmV2ZXJzZSIgXAorKyAgICAiZGlzYWJsZSBmcmFtZS1maWx0ZXIgZ2xvdmFsIFJldmVy c2UgZm9yIG5vIGRlYnVnaW5mbyIKKytnZGJfdGVzdCAiYnQiIFwKKysgICAgIi4qIzAuLippbiBt YWluIFxcKFxcKS4qIiBcCisrICAgICJidCBmb3Igbm8gZGVidWdpbmZvIgorK2dkYl90ZXN0ICJi dCBmdWxsIiBcCisrICAgICIuKiMwLi4qaW4gbWFpbiBcXChcXCkuKiIgXAorKyAgICAiYnQgZnVs bCBmb3Igbm8gZGVidWdpbmZvIgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXJzIiBcCisrICAgICIu KiMwLi4qaW4gbWFpbiBcXChcXCkuKiIgXAorKyAgICAiYnQgbm8gZmlsdGVycyBmb3Igbm8gZGVi dWdpbmZvIgorK2dkYl90ZXN0ICJidCBuby1maWx0ZXJzIGZ1bGwiIFwKKysgICAgIi4qIzAuLipp biBtYWluIFxcKFxcKS4qIiBcCisrICAgICJidCBuby1maWx0ZXJzIGZ1bGwgbm8gZGVidWdpbmZv IgorSW5kZXg6IGdkYi03LjYvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LWZyYW1lZmlsdGVy LnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAw MDAwICswMDAwCisrKysgZ2RiLTcuNi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktZnJhbWVm aWx0ZXIucHkJMjAxMy0wNS0yMCAyMjoyNTo1Mi4xMTUxNjU3NjYgKzAyMDAKK0BAIC0wLDAgKzEs MTE3IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKworKyMgVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIEdEQiB0ZXN0c3VpdGUuICBJdCB0ZXN0cyBQeXRob24tYmFzZWQKKysjIGZy YW1lLWZpbHRlcnMuCisraW1wb3J0IGdkYgorK2ltcG9ydCBpdGVydG9vbHMKKytmcm9tIGdkYi5G cmFtZURlY29yYXRvciBpbXBvcnQgRnJhbWVEZWNvcmF0b3IKKytpbXBvcnQgY29weQorKworK2Ns YXNzIFJldmVyc2VfRnVuY3Rpb24gKEZyYW1lRGVjb3JhdG9yKToKKysKKysgICAgZGVmIF9faW5p dF9fKHNlbGYsIGZvYmopOgorKyAgICAgICAgc3VwZXIoUmV2ZXJzZV9GdW5jdGlvbiwgc2VsZiku X19pbml0X18oZm9iaikKKysgICAgICAgIHNlbGYuZm9iaiA9IGZvYmoKKysKKysgICAgZGVmIGZ1 bmN0aW9uIChzZWxmKToKKysgICAgICAgIGZuYW1lID0gc3RyIChzZWxmLmZvYmouZnVuY3Rpb24o KSkKKysgICAgICAgIGlmIChmbmFtZSA9PSBOb25lIG9yIGZuYW1lID09ICIiKToKKysgICAgICAg ICAgICByZXR1cm4gTm9uZQorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBmbmFtZSA9IGZu YW1lWzo6LTFdCisrICAgICAgICByZXR1cm4gZm5hbWUKKysKKytjbGFzcyBEdW1teSAoRnJhbWVE ZWNvcmF0b3IpOgorKworKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm9iaik6CisrICAgICAgICBz dXBlcihEdW1teSwgc2VsZikuX19pbml0X18oZm9iaikKKysgICAgICAgIHNlbGYuZm9iaiA9IGZv YmoKKysKKysgICAgZGVmIGZ1bmN0aW9uIChzZWxmKToKKysgICAgICAgIHJldHVybiAiRHVtbXkg ZnVuY3Rpb24iCisrCisrICAgIGRlZiBhZGRyZXNzIChzZWxmKToKKysgICAgICAgIHJldHVybiAw eDEyMworKworKyAgICBkZWYgZmlsZW5hbWUgKHNlbGYpOgorKyAgICAgICAgcmV0dXJuICJEdW1t eSBmaWxlbmFtZSIKKysKKysgICAgZGVmIGZyYW1lX2FyZ3MgKHNlbGYpOgorKyAgICAgICAgcmV0 dXJuIFsoIkZvbyIsZ2RiLlZhbHVlKDEyKSksKCJCYXIiLCJTdHVmZiIpLCAoIkZvb0JhciIsNDIp XQorKworKyAgICBkZWYgZnJhbWVfbG9jYWxzIChzZWxmKToKKysgICAgICAgIHJldHVybiBbXQor KworKyAgICBkZWYgbGluZSAoc2VsZik6CisrICAgICAgICByZXR1cm4gMAorKworKyAgICBkZWYg ZWxpZGVkIChzZWxmKToKKysgICAgICAgIHJldHVybiBOb25lCisrCisrY2xhc3MgRnJhbWVGaWx0 ZXIgKCk6CisrCisrICAgIGRlZiBfX2luaXRfXyAoc2VsZik6CisrICAgICAgICBzZWxmLm5hbWUg PSAiUmV2ZXJzZSIKKysgICAgICAgIHNlbGYucHJpb3JpdHkgPSAxMDAKKysgICAgICAgIHNlbGYu ZW5hYmxlZCA9IFRydWUKKysgICAgICAgIGdkYi5mcmFtZV9maWx0ZXJzIFtzZWxmLm5hbWVdID0g c2VsZgorKworKyAgICBkZWYgZmlsdGVyIChzZWxmLCBmcmFtZV9pdGVyKToKKysgICAgICAgIGZy YW1lX2l0ZXIgPSBpdGVydG9vbHMuaW1hcCAoUmV2ZXJzZV9GdW5jdGlvbiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVfaXRlcikKKysgICAgICAgIHJldHVybiBm cmFtZV9pdGVyCisrCisrY2xhc3MgRWxpZGluZ0ZyYW1lRGVjb3JhdG9yKEZyYW1lRGVjb3JhdG9y KToKKysKKysgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lLCBlbGlkZWRfZnJhbWVzKToKKysg ICAgICAgIHN1cGVyKEVsaWRpbmdGcmFtZURlY29yYXRvciwgc2VsZikuX19pbml0X18oZnJhbWUp CisrICAgICAgICBzZWxmLmVsaWRlZF9mcmFtZXMgPSBlbGlkZWRfZnJhbWVzCisrCisrICAgIGRl ZiBlbGlkZWQoc2VsZik6CisrICAgICAgICByZXR1cm4gaXRlcihzZWxmLmVsaWRlZF9mcmFtZXMp CisrCisrY2xhc3MgRWxpZGluZ0l0ZXJhdG9yOgorKyAgICBkZWYgX19pbml0X18oc2VsZiwgaWkp OgorKyAgICAgICAgc2VsZi5pbnB1dF9pdGVyYXRvciA9IGlpCisrCisrICAgIGRlZiBfX2l0ZXJf XyhzZWxmKToKKysgICAgICAgIHJldHVybiBzZWxmCisrCisrICAgIGRlZiBuZXh0KHNlbGYpOgor KyAgICAgICAgZnJhbWUgPSBuZXh0KHNlbGYuaW5wdXRfaXRlcmF0b3IpCisrICAgICAgICBpZiBz dHIoZnJhbWUuZnVuY3Rpb24oKSkgIT0gJ2Z1bmMxJzoKKysgICAgICAgICAgICByZXR1cm4gZnJh bWUKKysKKysgICAgICAgICMgU3VwcG9zZSB3ZSB3YW50IHRvIHJldHVybiB0aGUgJ2Z1bmMxJyBm cmFtZSBidXQgZWxpZGUgdGhlCisrICAgICAgICAjIG5leHQgZnJhbWUuICBFLmcuLCBpZiBjYWxs IGluIG91ciBpbnRlcnByZXRlciBsYW5ndWFnZSB0YWtlcworKyAgICAgICAgIyB0d28gQyBmcmFt ZXMgdG8gaW1wbGVtZW50LCBhbmQgdGhlIGZpcnN0IG9uZSB3ZSBzZWUgaXMgdGhlCisrICAgICAg ICAjICJzZW50aW5lbCIuCisrICAgICAgICBlbGlkZWQgPSBuZXh0KHNlbGYuaW5wdXRfaXRlcmF0 b3IpCisrICAgICAgICByZXR1cm4gRWxpZGluZ0ZyYW1lRGVjb3JhdG9yKGZyYW1lLCBbZWxpZGVk XSkKKysKKytjbGFzcyBGcmFtZUVsaWRlciAoKToKKysKKysgICAgZGVmIF9faW5pdF9fIChzZWxm KToKKysgICAgICAgIHNlbGYubmFtZSA9ICJFbGlkZXIiCisrICAgICAgICBzZWxmLnByaW9yaXR5 ID0gOTAwCisrICAgICAgICBzZWxmLmVuYWJsZWQgPSBUcnVlCisrICAgICAgICBnZGIuZnJhbWVf ZmlsdGVycyBbc2VsZi5uYW1lXSA9IHNlbGYKKysKKysgICAgZGVmIGZpbHRlciAoc2VsZiwgZnJh bWVfaXRlcik6CisrICAgICAgICByZXR1cm4gRWxpZGluZ0l0ZXJhdG9yIChmcmFtZV9pdGVyKQor KworK0ZyYW1lRmlsdGVyKCkKKytGcmFtZUVsaWRlcigpCgpkaWZmIC0tZ2l0IGEvZ2RiLXVwc3Ry ZWFtLWZyYW1lZmlsdGVycy0yb2YyLnBhdGNoIGIvZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0y b2YyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDZlZjYKLS0t IC9kZXYvbnVsbAorKysgYi9nZGItdXBzdHJlYW0tZnJhbWVmaWx0ZXJzLTJvZjIucGF0Y2gKQEAg LTAsMCArMSwxNzUgQEAKK2h0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItY3ZzLzIwMTMtMDUv bXNnMDAxNDEuaHRtbAorCisjIyMgc3JjL2dkYi9DaGFuZ2VMb2cJMjAxMy8wNS8xNyAwNjo1ODoz MwkxLjE1NTY1CisjIyMgc3JjL2dkYi9DaGFuZ2VMb2cJMjAxMy8wNS8xNyAwODozNDoxOAkxLjE1 NTY2CisjIyAtMSwzICsxLDE4IEBACisrMjAxMy0wNS0xNyAgUGhpbCBNdWxkb29uICA8cG11bGRv b25AcmVkaGF0LmNvbT4KKysKKysJKiBmcmFtZS5jIChmcmFtZV9zdGFzaCk6IENvbnZlcnQgdG8g aHRhYi4KKysJKGZyYW1lX2FkZHJfaGFzaCk6IE5ldyBmdW5jdGlvbi4KKysJKGZyYW1lX2FkZHJf aGFzaF9lcSk6IE5ldyBmdW5jdGlvbi4KKysJKGZyYW1lX3N0YXNoX2NyZWF0ZSk6IENvbnZlcnQg ZnVuY3Rpb24gdG8gY3JlYXRlCisrCWEgaGFzaCB0YWJsZS4KKysJKGZyYW1lX3N0YXNoX2FkZCk6 IENvbnZlcnQgZnVuY3Rpb24gdG8gYWRkIGFuIGVudHJ5IHRvIGEgaGFzaAorKwl0YWJsZS4KKysJ KGZyYW1lX3N0YXNoX2ZpbmQpOiBDb252ZXJ0IGZ1bmN0aW9uIHRvIHNlYXJjaCB0aGUgaGFzaCB0 YWJsZS4KKysJKGZyYW1lX3N0YXNoX2ludmFsaWRhdGUpOiBDb252ZXJ0IGZ1bmN0aW9uIHRvIGVt cHR5IHRoZSBoYXNoCisrCXRhYmxlLgorKwkoZ2V0X2ZyYW1lX2lkKTogT25seSBhZGQgdG8gc3Rh c2ggaWYgYSBmcmFtZV9pZCBpcyBjcmVhdGVkLgorKwkoX2luaXRpYWxpemVfZnJhbWUpOiBDYWxs IGZyYW1lX3N0YXNoX2NyZWF0ZS4KKysKKyAyMDEzLTA1LTE2ICBZdWUgTHUgIDxoYWNrbHUubmV3 Ym9ybkBnbWFpbC5jb20+ICAodGlueSBjaGFuZ2UpCisgCisgCSogY29uZmlndXJlLmFjOiBFbnN1 cmUgTUlHIGlzIGF2YWlsYWJsZSB3aGVuIGJ1aWxkaW5nIGZvciBHTlUgSHVyZAorLS0tIHNyYy9n ZGIvZnJhbWUuYwkyMDEzLzA0LzEwIDE1OjExOjExCTEuMzE3CisrKysgc3JjL2dkYi9mcmFtZS5j CTIwMTMvMDUvMTcgMDg6MzQ6MTgJMS4zMTgKK0BAIC00Myw2ICs0Myw3IEBACisgI2luY2x1ZGUg ImJsb2NrLmgiCisgI2luY2x1ZGUgImlubGluZS1mcmFtZS5oIgorICNpbmNsdWRlICJ0cmFjZXBv aW50LmgiCisrI2luY2x1ZGUgImhhc2h0YWIuaCIKKyAKKyBzdGF0aWMgc3RydWN0IGZyYW1lX2lu Zm8gKmdldF9wcmV2X2ZyYW1lXzEgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKTsKKyBz dGF0aWMgc3RydWN0IGZyYW1lX2luZm8gKmdldF9wcmV2X2ZyYW1lX3JhdyAoc3RydWN0IGZyYW1l X2luZm8gKnRoaXNfZnJhbWUpOworQEAgLTEyOCwzOCArMTI5LDEwNyBAQAorICAgZW51bSB1bndp bmRfc3RvcF9yZWFzb24gc3RvcF9yZWFzb247CisgfTsKKyAKKy0vKiBBIGZyYW1lIHN0YXNoIHVz ZWQgdG8gc3BlZWQgdXAgZnJhbWUgbG9va3Vwcy4gICovCisrLyogQSBmcmFtZSBzdGFzaCB1c2Vk IHRvIHNwZWVkIHVwIGZyYW1lIGxvb2t1cHMuICBDcmVhdGUgYSBoYXNoIHRhYmxlCisrICAgdG8g c3Rhc2ggZnJhbWVzIHByZXZpb3VzbHkgYWNjZXNzZWQgZnJvbSB0aGUgZnJhbWUgY2FjaGUgZm9y CisrICAgcXVpY2tlciBzdWJzZXF1ZW50IHJldHJpZXZhbC4gIFRoZSBoYXNoIHRhYmxlIGlzIGVt cHRpZWQgd2hlbmV2ZXIKKysgICB0aGUgZnJhbWUgY2FjaGUgaXMgaW52YWxpZGF0ZWQuICAqLwor KworK3N0YXRpYyBodGFiX3QgZnJhbWVfc3Rhc2g7CisrCisrLyogSW50ZXJuYWwgZnVuY3Rpb24g dG8gY2FsY3VsYXRlIGEgaGFzaCBmcm9tIHRoZSBmcmFtZV9pZCBhZGRyZXNzZXMsCisrICAgdXNp bmcgYXMgbWFueSB2YWxpZCBhZGRyZXNzZXMgYXMgcG9zc2libGUuICBGcmFtZXMgYmVsb3cgbGV2 ZWwgMAorKyAgIGFyZSBub3Qgc3RvcmVkIGluIHRoZSBoYXNoIHRhYmxlLiAgKi8KKysKKytzdGF0 aWMgaGFzaHZhbF90CisrZnJhbWVfYWRkcl9oYXNoIChjb25zdCB2b2lkICphcCkKKyt7CisrICBj b25zdCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUgPSBhcDsKKysgIGNvbnN0IHN0cnVjdCBmcmFt ZV9pZCBmX2lkID0gZnJhbWUtPnRoaXNfaWQudmFsdWU7CisrICBoYXNodmFsX3QgaGFzaCA9IDA7 CisrCisrICBnZGJfYXNzZXJ0IChmX2lkLnN0YWNrX2FkZHJfcCB8fCBmX2lkLmNvZGVfYWRkcl9w CisrCSAgICAgIHx8IGZfaWQuc3BlY2lhbF9hZGRyX3ApOworKworKyAgaWYgKGZfaWQuc3RhY2tf YWRkcl9wKQorKyAgICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKCZmX2lkLnN0YWNrX2FkZHIsCisr CQkJICAgc2l6ZW9mIChmX2lkLnN0YWNrX2FkZHIpLCBoYXNoKTsKKysgIGlmIChmX2lkLmNvZGVf YWRkcl9wKQorKyAgICBoYXNoID0gaXRlcmF0aXZlX2hhc2ggKCZmX2lkLmNvZGVfYWRkciwKKysJ CQkgICBzaXplb2YgKGZfaWQuY29kZV9hZGRyKSwgaGFzaCk7CisrICBpZiAoZl9pZC5zcGVjaWFs X2FkZHJfcCkKKysgICAgaGFzaCA9IGl0ZXJhdGl2ZV9oYXNoICgmZl9pZC5zcGVjaWFsX2FkZHIs CisrCQkJICAgc2l6ZW9mIChmX2lkLnNwZWNpYWxfYWRkciksIGhhc2gpOworIAorLS8qIFdlIGN1 cnJlbnRseSBvbmx5IHN0YXNoIG9uZSBmcmFtZSBhdCBhIHRpbWUsIGFzIHRoaXMgc2VlbXMgdG8g YmUKKy0gICBzdWZmaWNpZW50IGZvciBub3cuICAqLworLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfaW5m byAqZnJhbWVfc3Rhc2ggPSBOVUxMOworKyAgcmV0dXJuIGhhc2g7CisrfQorKworKy8qIEludGVy bmFsIGVxdWFsaXR5IGZ1bmN0aW9uIGZvciB0aGUgaGFzaCB0YWJsZS4gIFRoaXMgZnVuY3Rpb24K KysgICBkZWZlcnMgZXF1YWxpdHkgb3BlcmF0aW9ucyB0byBmcmFtZV9pZF9lcS4gICovCisrCisr c3RhdGljIGludAorK2ZyYW1lX2FkZHJfaGFzaF9lcSAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9p ZCAqYikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZl9lbnRyeSA9IGE7CisrICBj b25zdCBzdHJ1Y3QgZnJhbWVfaW5mbyAqZl9lbGVtZW50ID0gYjsKKyAKKy0vKiBBZGQgdGhlIGZv bGxvd2luZyBGUkFNRSB0byB0aGUgZnJhbWUgc3Rhc2guICAqLworKyAgcmV0dXJuIGZyYW1lX2lk X2VxIChmX2VudHJ5LT50aGlzX2lkLnZhbHVlLAorKwkJICAgICAgZl9lbGVtZW50LT50aGlzX2lk LnZhbHVlKTsKKyt9CisrCisrLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBmcmFt ZV9zdGFzaCBoYXNoIHRhYmxlLiAgMTAwIHNlZW1zCisrICAgdG8gYmUgYSBnb29kIGNvbXByb21p c2UgdG8gc3RhcnQgdGhlIGhhc2ggdGFibGUgYXQuICAqLworKworK3N0YXRpYyB2b2lkCisrZnJh bWVfc3Rhc2hfY3JlYXRlICh2b2lkKQorK3sKKysgIGZyYW1lX3N0YXNoID0gaHRhYl9jcmVhdGUg KDEwMCwKKysJCQkgICAgIGZyYW1lX2FkZHJfaGFzaCwKKysJCQkgICAgIGZyYW1lX2FkZHJfaGFz aF9lcSwKKysJCQkgICAgIE5VTEwpOworK30KKysKKysvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBh ZGQgYSBmcmFtZSB0byB0aGUgZnJhbWVfc3Rhc2ggaGFzaCB0YWJsZS4gIERvCisrICAgbm90IHN0 b3JlIGZyYW1lcyBiZWxvdyAwIGFzIHRoZXkgbWF5IG5vdCBoYXZlIGFueSBhZGRyZXNzZXMgdG8K KysgICBjYWxjdWxhdGUgYSBoYXNoLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIGZyYW1lX3N0YXNo X2FkZCAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lKQorIHsKKy0gIGZyYW1lX3N0YXNoID0gZnJh bWU7CisrICAvKiBEbyBub3Qgc3Rhc2ggZnJhbWVzIGJlbG93IGxldmVsIDAuICAqLworKyAgaWYg KGZyYW1lLT5sZXZlbCA+PSAwKQorKyAgICB7CisrICAgICAgc3RydWN0IGZyYW1lX2luZm8gKipz bG90OworKworKyAgICAgIHNsb3QgPSAoc3RydWN0IGZyYW1lX2luZm8gKiopIGh0YWJfZmluZF9z bG90IChmcmFtZV9zdGFzaCwKKysJCQkJCQkgICAgZnJhbWUsCisrCQkJCQkJICAgIElOU0VSVCk7 CisrICAgICAgKnNsb3QgPSBmcmFtZTsKKysgICAgfQorIH0KKyAKKy0vKiBTZWFyY2ggdGhlIGZy YW1lIHN0YXNoIGZvciBhbiBlbnRyeSB3aXRoIHRoZSBnaXZlbiBmcmFtZSBJRC4KKy0gICBJZiBm b3VuZCwgcmV0dXJuIHRoYXQgZnJhbWUuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworKy8q IEludGVybmFsIGZ1bmN0aW9uIHRvIHNlYXJjaCB0aGUgZnJhbWUgc3Rhc2ggZm9yIGFuIGVudHJ5 IHdpdGggdGhlCisrICAgZ2l2ZW4gZnJhbWUgSUQuICBJZiBmb3VuZCwgcmV0dXJuIHRoYXQgZnJh bWUuICBPdGhlcndpc2UgcmV0dXJuCisrICAgTlVMTC4gICovCisgCisgc3RhdGljIHN0cnVjdCBm cmFtZV9pbmZvICoKKyBmcmFtZV9zdGFzaF9maW5kIChzdHJ1Y3QgZnJhbWVfaWQgaWQpCisgewor LSAgaWYgKGZyYW1lX3N0YXNoICYmIGZyYW1lX2lkX2VxIChmcmFtZV9zdGFzaC0+dGhpc19pZC52 YWx1ZSwgaWQpKQorLSAgICByZXR1cm4gZnJhbWVfc3Rhc2g7CisrICBzdHJ1Y3QgZnJhbWVfaW5m byBkdW1teTsKKysgIHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZTsKKyAKKy0gIHJldHVybiBOVUxM OworKyAgZHVtbXkudGhpc19pZC52YWx1ZSA9IGlkOworKyAgZnJhbWUgPSBodGFiX2ZpbmQgKGZy YW1lX3N0YXNoLCAmZHVtbXkpOworKyAgcmV0dXJuIGZyYW1lOworIH0KKyAKKy0vKiBJbnZhbGlk YXRlIHRoZSBmcmFtZSBzdGFzaCBieSByZW1vdmluZyBhbGwgZW50cmllcyBpbiBpdC4gICovCisr LyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gaW52YWxpZGF0ZSB0aGUgZnJhbWUgc3Rhc2ggYnkgcmVt b3ZpbmcgYWxsCisrICAgZW50cmllcyBpbiBpdC4gIFRoaXMgb25seSBvY2N1cnMgd2hlbiB0aGUg ZnJhbWUgY2FjaGUgaXMKKysgICBpbnZhbGlkYXRlZC4gICovCisgCisgc3RhdGljIHZvaWQKKyBm cmFtZV9zdGFzaF9pbnZhbGlkYXRlICh2b2lkKQorIHsKKy0gIGZyYW1lX3N0YXNoID0gTlVMTDsK KysgIGh0YWJfZW1wdHkgKGZyYW1lX3N0YXNoKTsKKyB9CisgCisgLyogRmxhZyB0byBjb250cm9s IGRlYnVnZ2luZy4gICovCitAQCAtMzQ1LDEwICs0MTUsOSBAQAorIAkgIGZwcmludF9mcmFtZV9p ZCAoZ2RiX3N0ZGxvZywgZmktPnRoaXNfaWQudmFsdWUpOworIAkgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgIiB9XG4iKTsKKyAJfQorKyAgICAgIGZyYW1lX3N0YXNoX2FkZCAoZmkp OworICAgICB9CisgCistICBmcmFtZV9zdGFzaF9hZGQgKGZpKTsKKy0KKyAgIHJldHVybiBmaS0+ dGhpc19pZC52YWx1ZTsKKyB9CisgCitAQCAtMjQ1MSw2ICsyNTIwLDggQEAKKyB7CisgICBvYnN0 YWNrX2luaXQgKCZmcmFtZV9jYWNoZV9vYnN0YWNrKTsKKyAKKysgIGZyYW1lX3N0YXNoX2NyZWF0 ZSAoKTsKKysKKyAgIG9ic2VydmVyX2F0dGFjaF90YXJnZXRfY2hhbmdlZCAoZnJhbWVfb2JzZXJ2 ZXJfdGFyZ2V0X2NoYW5nZWQpOworIAorICAgYWRkX3ByZWZpeF9jbWQgKCJiYWNrdHJhY2UiLCBj bGFzc19tYWludGVuYW5jZSwgc2V0X2JhY2t0cmFjZV9jbWQsIF8oIlwKCmRpZmYgLS1naXQgYS9n ZGItdXBzdHJlYW0ucGF0Y2ggYi9nZGItdXBzdHJlYW0ucGF0Y2gKaW5kZXggYmNjNTY2Ny4uMzI0 MGFiMiAxMDA2NDQKLS0tIGEvZ2RiLXVwc3RyZWFtLnBhdGNoCisrKyBiL2dkYi11cHN0cmVhbS5w YXRjaApAQCAtMTE5OSwzICsxMTk5LDk3IEBAIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGIt Y3ZzLzIwMTMtMDQvbXNnMDAwNzAuaHRtbAogIAktKCQoUE9EMk1BTjUpIGdkYmluaXQucG9kIHwg c2VkIC1lICcvXi5pZiBuIC5uYS9kJyA+ICRALlQkJCQkICYmIFwKICAJCW12IC1mICRALlQkJCQk ICRAKSB8fCAocm0gLWYgJEAuVCQkJCQgJiYgZXhpdCAxKQogIAlybSAtZiBnZGJpbml0LnBvZAor CisKKworaHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNTQx MworaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2dkYi1jdnMvMjAxMy0wNS9tc2cwMDA2My5odG1s CisKKyMjIyBzcmMvZ2RiL0NoYW5nZUxvZwkyMDEzLzA0LzI2IDE0OjEzOjEzCTEuMTUyNjAuMi41 MAorIyMjIHNyYy9nZGIvQ2hhbmdlTG9nCTIwMTMvMDUvMDcgMTc6MDQ6NTYJMS4xNTI2MC4yLjUx CisjIyAtMSwzICsxLDEwIEBACisrMjAxMy0wNS0wNyAgU2VyZ2lvIER1cmlnYW4gSnVuaW9yICA8 c2VyZ2lvZGpAcmVkaGF0LmNvbT4KKysKKysJUFIgYnJlYWtwb2ludHMvMTU0MTM6CisrCSogYnJl YWtwb2ludC5jIChjb25kaXRpb25fY29tcGxldGVyKTogU2ltcGxpZnkgdGhlIGNvZGUgdG8KKysJ ZGlzY29uc2lkZXIgbXVsdGlwbGUgbG9jYXRpb25zIG9mIGJyZWFrcG9pbnRzIHdoZW4gY29tcGxl dGluZyB0aGUKKysJImNvbmRpdGlvbiIgY29tbWFuZC4KKysKKyAyMDEzLTA0LTI2ICBKb2VsIEJy b2JlY2tlciAgPGJyb2JlY2tlckBhZGFjb3JlLmNvbT4KKyAKKyAJKiB2ZXJzaW9uLmluOiBTZXQg dmVyc2lvbiB0byA3LjYuMC4yMDEzMDQyNi1jdnMuCistLS0gc3JjL2dkYi9icmVha3BvaW50LmMJ MjAxMy8wNC8yNSAwODoxNTozNAkxLjc0NS4yLjUKKysrKyBzcmMvZ2RiL2JyZWFrcG9pbnQuYwky MDEzLzA1LzA3IDE3OjA0OjU3CTEuNzQ1LjIuNgorQEAgLTEwMTUsMjcgKzEwMTUsMTQgQEAKKyAg ICAgICBsZW4gPSBzdHJsZW4gKHRleHQpOworIAorICAgICAgIEFMTF9CUkVBS1BPSU5UUyAoYikK Ky0gICAgICB7CistCWludCBzaW5nbGUgPSBiLT5sb2MtPm5leHQgPT0gTlVMTDsKKy0Jc3RydWN0 IGJwX2xvY2F0aW9uICpsb2M7CistCWludCBjb3VudCA9IDE7CistCistCWZvciAobG9jID0gYi0+ bG9jOyBsb2M7IGxvYyA9IGxvYy0+bmV4dCkKKy0JICB7CistCSAgICBjaGFyIGxvY2F0aW9uWzUw XTsKKy0KKy0JICAgIGlmIChzaW5nbGUpCistCSAgICAgIHhzbnByaW50ZiAobG9jYXRpb24sIHNp emVvZiAobG9jYXRpb24pLCAiJWQiLCBiLT5udW1iZXIpOworLQkgICAgZWxzZQorLQkgICAgICB4 c25wcmludGYgKGxvY2F0aW9uLCBzaXplb2YgKGxvY2F0aW9uKSwgICIlZC4lZCIsIGItPm51bWJl ciwKKy0JCQkgY291bnQpOworKwl7CisrCSAgY2hhciBudW1iZXJbNTBdOworIAorLQkgICAgaWYg KHN0cm5jbXAgKGxvY2F0aW9uLCB0ZXh0LCBsZW4pID09IDApCistCSAgICAgIFZFQ19zYWZlX3B1 c2ggKGNoYXJfcHRyLCByZXN1bHQsIHhzdHJkdXAgKGxvY2F0aW9uKSk7CisrCSAgeHNucHJpbnRm IChudW1iZXIsIHNpemVvZiAobnVtYmVyKSwgIiVkIiwgYi0+bnVtYmVyKTsKKyAKKy0JICAgICsr Y291bnQ7CistCSAgfQorLSAgICAgIH0KKysJICBpZiAoc3RybmNtcCAobnVtYmVyLCB0ZXh0LCBs ZW4pID09IDApCisrCSAgICBWRUNfc2FmZV9wdXNoIChjaGFyX3B0ciwgcmVzdWx0LCB4c3RyZHVw IChudW1iZXIpKTsKKysJfQorIAorICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgIH0KKyMjIyBz cmMvZ2RiL3Rlc3RzdWl0ZS9DaGFuZ2VMb2cJMjAxMy8wNS8wMyAxNjoyNjozMgkxLjM1ODAuMi4y MAorIyMjIHNyYy9nZGIvdGVzdHN1aXRlL0NoYW5nZUxvZwkyMDEzLzA1LzA3IDE3OjA0OjU3CTEu MzU4MC4yLjIxCisjIyAtMSwzICsxLDExIEBACisrMjAxMy0wNS0wNyAgU2VyZ2lvIER1cmlnYW4g SnVuaW9yICA8c2VyZ2lvZGpAcmVkaGF0LmNvbT4KKysKKysJUFIgYnJlYWtwb2ludHMvMTU0MTM6 CisrCSogZ2RiLmJhc2UvcGVuZGluZy5leHA6IEFkZCB0ZXN0IGZvciBjb21wbGV0aW9uIG9mIHRo ZSAiY29uZGl0aW9uIgorKwljb21tYW5kIGZvciBwZW5kaW5nIGJyZWFrcG9pbnRzLgorKwkqIGdk Yi5saW5lc3BlYy9saW5lc3BlYy5leDogQWRkIHRlc3QgZm9yIGNvbXBsZXRpb24gb2YgdGhlCisr CSJjb25kaXRpb24iIGNvbW1hbmQgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgbG9jYXRpb25z LgorKworIDIwMTMtMDUtMDMgIEhhZml6IEFiaWQgUWFkZWVyICA8YWJpZGhAY29kZXNvdXJjZXJ5 LmNvbT4KKyAKKyAJKiBzdGF0dXMtc3RvcC5leHAgKHRlc3RfdHN0YXJ0X3RzdGFydCk6IENoZWNr IGZvciBlcnJvcgorLS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3BlbmRpbmcuZXhwCTIw MTMvMDEvMDEgMDY6MzM6MjYJMS4yNworKysrIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3Bl bmRpbmcuZXhwCTIwMTMvMDUvMDcgMTc6MDQ6NTcJMS4yNy4yLjEKK0BAIC01NSw2ICs1NSw5IEBA CisgICAgICB9CisgfQorIAorKyMgQ29tcGxldGUgdGhlIGNvbmRpdGlvbiAoUFIgMTU0MTMpLgor K2dkYl90ZXN0ICJjb21wbGV0ZSBjb25kaXRpb24gIiAiY29uZGl0aW9uIDEiCisrCisgZ2RiX3Rl c3QgImluZm8gYnJlYWsiIFwKKyAgICAgIk51bSAgICAgVHlwZVxbIFxdK0Rpc3AgRW5iIEFkZHJl c3NcWyBcXStXaGF0LioKKyBcWzAtOVxdK1xbXHQgXF0rYnJlYWtwb2ludCAgICAga2VlcCB5LipQ RU5ESU5HLipwZW5kZnVuYzEuKiIgXAorLS0tIHNyYy9nZGIvdGVzdHN1aXRlL2dkYi5saW5lc3Bl Yy9saW5lc3BlYy5leHAJMjAxMy8wMS8wMSAwNjo0MToyNAkxLjYKKysrKyBzcmMvZ2RiL3Rlc3Rz dWl0ZS9nZGIubGluZXNwZWMvbGluZXNwZWMuZXhwCTIwMTMvMDUvMDcgMTc6MDQ6NTcJMS42LjIu MQorQEAgLTYzLDYgKzYzLDEwIEBACisgICAgICJCcmVha3BvaW50ICRkZWNpbWFsIGF0ICRoZXg6 IGR1cG5hbWU6bGFiZWwuIFxbKFxdMiBsb2NhdGlvbnNcWylcXSIgXAorICAgICAibXVsdGktbG9j YXRpb24gYnJlYWsgdXNpbmcgZHVwbGljYXRlIGZ1bmN0aW9uIG5hbWUgYW5kIGxhYmVsIgorIAor KyMgVGVzdGluZyBpZiB0aGUgImNvbmRpdGlvbiIgY29tbWFuZCBjb21wbGV0ZXMgb25seSB0aGUg YnJlYWtwb2ludHMsCisrIyBub3QgdGhlIGxvY2F0aW9ucy4KKytnZGJfdGVzdCAiY29tcGxldGUg Y29uZGl0aW9uICIgImNvbmRpdGlvbiAkZGVjaW1hbFxyXG5jb25kaXRpb24gJGRlY2ltYWxcclxu Y29uZGl0aW9uICRkZWNpbWFsIgorKworIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGJyZWFrcG9p bnQgcGVuZGluZyBvZmYiIFwKKyAgICAgImRpc2FibGUgcGVuZGluZyBicmVha3BvaW50cyBmb3Ig bGluZXNwZWMgdGVzdHMiCisgCgpkaWZmIC0tZ2l0IGEvZ2RiLnNwZWMgYi9nZGIuc3BlYwppbmRl eCAxNmJjM2YwLi44YWFkYTA0IDEwMDY0NAotLS0gYS9nZGIuc3BlYworKysgYi9nZGIuc3BlYwpA QCAtMzYsNyArMzYsNyBAQCBWZXJzaW9uOiA3LjYKIAogIyBUaGUgcmVsZWFzZSBhbHdheXMgY29u dGFpbnMgYSBsZWFkaW5nIHJlc2VydmVkIG51bWJlciwgc3RhcnQgaXQgYXQgMS4KICMgYHVwc3Ry ZWFtJyBpcyBub3QgYSBwYXJ0IG9mIGBuYW1lJyB0byBzdGF5IGZ1bGx5IHJwbSBkZXBlbmRlbmNp ZXMgY29tcGF0aWJsZSBmb3IgdGhlIHRlc3RpbmcuCi1SZWxlYXNlOiAyOSV7P2Rpc3R9CitSZWxl YXNlOiAzMCV7P2Rpc3R9CiAKIExpY2Vuc2U6IEdQTHYzKyBhbmQgR1BMdjMrIHdpdGggZXhjZXB0 aW9ucyBhbmQgR1BMdjIrIGFuZCBHUEx2Misgd2l0aCBleGNlcHRpb25zIGFuZCBHUEwrIGFuZCBM R1BMdjIrIGFuZCBCU0QgYW5kIFB1YmxpYyBEb21haW4KIEdyb3VwOiBEZXZlbG9wbWVudC9EZWJ1 Z2dlcnMKQEAgLTI2Niw2ICsyNjYsOSBAQCBQYXRjaDIzMTogZ2RiLTYuMy1iejIwMjY4OS1leGVj LWZyb20tcHRocmVhZC10ZXN0LnBhdGNoCiBQYXRjaDIzMjogZ2RiLXVwc3RyZWFtLnBhdGNoCiBQ YXRjaDgyODogZ2RiLXVwc3RyZWFtLW1hbi1nY29yZS0xb2YyLnBhdGNoCiBQYXRjaDgyOTogZ2Ri LXVwc3RyZWFtLW1hbi1nY29yZS0yb2YyLnBhdGNoCisjIEJhY2twb3J0ZWQgUHl0aG9uIGZyYW1l IGZpbHRlcnMgKFBoaWwgTXVsZG9vbikuCitQYXRjaDgzNjogZ2RiLXVwc3RyZWFtLWZyYW1lZmls dGVycy0xb2YyLnBhdGNoCitQYXRjaDgzNzogZ2RiLXVwc3RyZWFtLWZyYW1lZmlsdGVycy0yb2Yy LnBhdGNoCiAKICMgVGVzdGNhc2UgZm9yIFBQQyBQb3dlcjYvREZQIGluc3RydWN0aW9ucyBkaXNh c3NlbWJseSAoQlogMjMwMDAwKS4KICM9ZmVkb3JhdGVzdCtwcGMKQEAgLTc4MCw2ICs3ODMsOCBA QCBmaW5kIC1uYW1lICIqLmluZm8qInx4YXJncyBybSAtZgogJXBhdGNoMjMyIC1wMQogJXBhdGNo ODI4IC1wMQogJXBhdGNoODI5IC1wMQorJXBhdGNoODM2IC1wMQorJXBhdGNoODM3IC1wMQogJXBh dGNoMSAtcDEKICVwYXRjaDMgLXAxCiAKQEAgLTEzOTcsOCArMTQwMiwxMiBAQCBmaQogJWVuZGlm ICMgMCV7IT9lbDU6MX0gfHwgIiV7X3RhcmdldF9jcHV9IiA9PSAibm9hcmNoIgogCiAlY2hhbmdl bG9nCisqIFR1ZSBNYXkgMjEgMjAxMyBKYW4gS3JhdG9jaHZpbCA8amFuLmtyYXRvY2h2aWxAcmVk aGF0LmNvbT4gLSA3LjYtMzAuZmMxOQorLSBCYWNrcG9ydGVkIFB5dGhvbiBmcmFtZSBmaWx0ZXJz IChQaGlsIE11bGRvb24pLgorLSBCYWNrcG9ydGVkIGJyZWFrcG9pbnQgY29uZGl0aW9ucyBjcmFz aCBmaXggKFNlcmdpbyBEdXJpZ2FuIEp1bmlvcikuCisKICogU3VuIE1heSAxOSAyMDEzIEphbiBL cmF0b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOS5mYzE5Ci0tIEZp eCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdoZW4gaW5mZXJpb3Igb3BlbnMgbWFueSBsaWJyYXJp ZXMgKEdhcnkgQmVuc29uKS4KKy0gRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gb3BlbmluZyBt YW55IGxpYnJhcmllcyAoR2FyeSBCZW5zb24sIEJaIDk2NTEwNikuCiAKICogVGh1IE1heSAgOSAy MDEzIEphbiBLcmF0b2NodmlsIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPiAtIDcuNi0yOC5m YzE5CiAtIEZpeCBuZWVkbGVzcyBleHBhbnNpb24gb2Ygbm9uLWdkYmluZGV4IHN5bXRhYnMgKERv dWcgRXZhbnMpLgo=