ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDkzODY2OWYuLjNlZGY2YjQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDYgQEAKIGdpdAogZ2l0LWFkZAorZ2l0LWFtCiBnaXQtYXBwbHkKIGdpdC1hcHBseW1ib3gKIGdpdC1hcHBseXBhdGNoCkBAIC03LDkgKzgsMTEgQEAKIGdpdC1iaXNlY3QKIGdpdC1icmFuY2gKIGdpdC1jYXQtZmlsZQorZ2l0LWNoZWNrLXJlZi1mb3JtYXQKIGdpdC1jaGVja291dAogZ2l0LWNoZWNrb3V0LWluZGV4CiBnaXQtY2hlcnJ5CitnaXQtY2hlcnJ5LXBpY2sKIGdpdC1jbG9uZQogZ2l0LWNsb25lLXBhY2sKIGdpdC1jb21taXQKQEAgLTIwLDE5ICsyMywyMCBAQAogZ2l0LWRhZW1vbgogZ2l0LWRpZmYKIGdpdC1kaWZmLWZpbGVzCi1naXQtZGlmZi1oZWxwZXIKIGdpdC1kaWZmLWluZGV4CiBnaXQtZGlmZi1zdGFnZXMKIGdpdC1kaWZmLXRyZWUKLWdpdC1leHBvcnQKIGdpdC1mZXRjaAogZ2l0LWZldGNoLXBhY2sKK2dpdC1maW5kdGFncworZ2l0LWZtdC1tZXJnZS1tc2cKIGdpdC1mb3JtYXQtcGF0Y2gKIGdpdC1mc2NrLW9iamVjdHMKIGdpdC1nZXQtdGFyLWNvbW1pdC1pZAogZ2l0LWdyZXAKIGdpdC1oYXNoLW9iamVjdAogZ2l0LWh0dHAtZmV0Y2gKK2dpdC1pbmRleC1wYWNrCiBnaXQtaW5pdC1kYgogZ2l0LWxvY2FsLWZldGNoCiBnaXQtbG9nCkBAIC00NiwxMCArNTAsMTMgQEAKIGdpdC1tZXJnZS1pbmRleAogZ2l0LW1lcmdlLW9jdG9wdXMKIGdpdC1tZXJnZS1vbmUtZmlsZQorZ2l0LW1lcmdlLW91cnMKIGdpdC1tZXJnZS1yZWN1cnNpdmUKIGdpdC1tZXJnZS1yZXNvbHZlCiBnaXQtbWVyZ2Utc3R1cGlkCiBnaXQtbWt0YWcKK2dpdC1uYW1lLXJldgorZ2l0LW12CiBnaXQtb2N0b3B1cwogZ2l0LXBhY2stb2JqZWN0cwogZ2l0LXBhcnNlLXJlbW90ZQpAQCAtNzAsMTEgKzc3LDExIEBACiBnaXQtcmVzb2x2ZQogZ2l0LXJldi1saXN0CiBnaXQtcmV2LXBhcnNlCi1naXQtcmV2LXRyZWUKIGdpdC1yZXZlcnQKIGdpdC1zZW5kLWVtYWlsCiBnaXQtc2VuZC1wYWNrCiBnaXQtc2gtc2V0dXAKK2dpdC1zaGVsbAogZ2l0LXNob3J0bG9nCiBnaXQtc2hvdy1icmFuY2gKIGdpdC1zaG93LWluZGV4CkBAIC04NCwxMSArOTEsMTQgQEAKIGdpdC1zc2gtdXBsb2FkCiBnaXQtc3RhdHVzCiBnaXQtc3RyaXBzcGFjZQorZ2l0LXN2bmltcG9ydAorZ2l0LXN5bWJvbGljLXJlZgogZ2l0LXRhZwogZ2l0LXRhci10cmVlCiBnaXQtdW5wYWNrLWZpbGUKIGdpdC11bnBhY2stb2JqZWN0cwogZ2l0LXVwZGF0ZS1pbmRleAorZ2l0LXVwZGF0ZS1yZWYKIGdpdC11cGRhdGUtc2VydmVyLWluZm8KIGdpdC11cGxvYWQtcGFjawogZ2l0LXZhcgpAQCAtMTAxLDMgKzExMSw2IEBACiAqLmRzYwogKi5kZWIKIGdpdC1jb3JlLnNwZWMKKyouZXhlCitsaWJnaXQuYQorKi5vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCAwMWZhZDhlLi43NDFmMTRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTE3LDE0ICsxNywxNCBAQAogRE9DX01BTjE9JChwYXRzdWJzdCAlLnR4dCwlLjEsJChNQU4xX1RYVCkpCiBET0NfTUFONz0kKHBhdHN1YnN0ICUudHh0LCUuNywkKE1BTjdfVFhUKSkKIAotcHJlZml4PSQoSE9NRSkKK3ByZWZpeD89JChIT01FKQogYmluPSQocHJlZml4KS9iaW4KIG1hbmRpcj0kKHByZWZpeCkvbWFuCiBtYW4xPSQobWFuZGlyKS9tYW4xCiBtYW43PSQobWFuZGlyKS9tYW43CiAjIERFU1RESVI9CiAKLUlOU1RBTEw9aW5zdGFsbAorSU5TVEFMTD89aW5zdGFsbAogCiAjCiAjIFBsZWFzZSBub3RlIHRoYXQgdGhlcmUgaXMgYSBtaW5vciBidWcgaW4gYXNjaWlkb2MuCkBAIC01MiwyMCArNTIsMjggQEAKICMgJ2luY2x1ZGUnIGRlcGVuZGVuY2llcwogJChwYXRzdWJzdCAlLnR4dCwlLjEsJCh3aWxkY2FyZCBnaXQtZGlmZi0qLnR4dCkpOiBcCiAJZGlmZi1mb3JtYXQudHh0IGRpZmYtb3B0aW9ucy50eHQKKyQocGF0c3Vic3QgJS50eHQsJS5odG1sLCQod2lsZGNhcmQgZ2l0LWRpZmYtKi50eHQpKTogXAorCWRpZmYtZm9ybWF0LnR4dCBkaWZmLW9wdGlvbnMudHh0CisKICQocGF0c3Vic3QgJSwlLjEsZ2l0LWZldGNoIGdpdC1wdWxsIGdpdC1wdXNoKTogcHVsbC1mZXRjaC1wYXJhbS50eHQKKyQocGF0c3Vic3QgJSwlLmh0bWwsZ2l0LWZldGNoIGdpdC1wdWxsIGdpdC1wdXNoKTogcHVsbC1mZXRjaC1wYXJhbS50eHQKKworJChwYXRzdWJzdCAlLCUuMSxnaXQtbWVyZ2UgZ2l0LXB1bGwpOiBtZXJnZS1wdWxsLW9wdHMudHh0CiskKHBhdHN1YnN0ICUsJS5odG1sLGdpdC1tZXJnZSBnaXQtcHVsbCk6IG1lcmdlLXB1bGwtb3B0cy50eHQKKwogZ2l0Ljc6IC4uL1JFQURNRQogCiBjbGVhbjoKIAlybSAtZiAqLnhtbCAqLmh0bWwgKi4xICouNyBob3d0by1pbmRleC50eHQgaG93dG8vKi5odG1sCiAKICUuaHRtbCA6ICUudHh0Ci0JYXNjaWlkb2MgLWIgeGh0bWwxMSAtZCBtYW5wYWdlICQ8CisJYXNjaWlkb2MgLWIgeGh0bWwxMSAtZCBtYW5wYWdlIC1mIGFzY2lpZG9jLmNvbmYgJDwKIAogJS4xICUuNyA6ICUueG1sCiAJeG1sdG8gbWFuICQ8CiAKICUueG1sIDogJS50eHQKLQlhc2NpaWRvYyAtYiBkb2Nib29rIC1kIG1hbnBhZ2UgJDwKKwlhc2NpaWRvYyAtYiBkb2Nib29rIC1kIG1hbnBhZ2UgLWYgYXNjaWlkb2MuY29uZiAkPAogCiBnaXQuaHRtbDogZ2l0LnR4dCAuLi9SRUFETUUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDg3N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKQEAgLTAsMCArMSwyNiBAQAorIyMgZ2l0bGluazogbWFjcm8KKyMKKyMgVXNhZ2U6IGdpdGxpbms6Y29tbWFuZFttYW5wYWdlLXNlY3Rpb25dCisjCisjIE5vdGUsIHswfSBpcyB0aGUgbWFucGFnZSBzZWN0aW9uLCB3aGlsZSB7dGFyZ2V0fSBpcyB0aGUgY29tbWFuZC4KKyMKKyMgU2hvdyBHSVQgbGluayBhczogPGNvbW1hbmQ+KDxzZWN0aW9uPik7IGlmIHNlY3Rpb24gaXMgZGVmaW5lZCwgZWxzZSBqdXN0IHNob3cKKyMgdGhlIGNvbW1hbmQuCisKK1thdHRyaWJ1dGVzXQorY2FyZXQ9XgorCitpZmRlZjo6YmFja2VuZC1kb2Nib29rW10KK1tnaXRsaW5rLWlubGluZW1hY3JvXQorezAle3RhcmdldH19Cit7MCM8Y2l0ZXJlZmVudHJ5Pn0KK3swIzxyZWZlbnRyeXRpdGxlPnt0YXJnZXR9PC9yZWZlbnRyeXRpdGxlPjxtYW52b2xudW0+ezB9PC9tYW52b2xudW0+fQorezAjPC9jaXRlcmVmZW50cnk+fQorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCisKK2lmZGVmOjpiYWNrZW5kLXhodG1sMTFbXQorW2dpdGxpbmstaW5saW5lbWFjcm9dCis8YSBocmVmPSJ7dGFyZ2V0fS5odG1sIj57dGFyZ2V0fXswPyh7MH0pfTwvYT4KK2VuZGlmOjpiYWNrZW5kLXhodG1sMTFbXQorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2N2cy1taWdyYXRpb24udHh0CmluZGV4IDM5MGE3MjMuLjU3NDM2ZjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dApAQCAtMSw2ICsxLDUgQEAKLUdpdCBmb3IgQ1ZTIHVzZXJzCitnaXQgZm9yIENWUyB1c2VycwogPT09PT09PT09PT09PT09PT0KLXYwLjk5LjUsIEF1ZyAyMDA1CiAKIE9rLCBzbyB5b3UncmUgYSBDVlMgdXNlci4gVGhhdCdzIG9rLCBpdCdzIGEgdHJlYXRhYmxlIGNvbmRpdGlvbiwgYW5kIHRoZQogZmlyc3Qgc3RlcCB0byByZWNvdmVyeSBpcyBhZG1pdHRpbmcgeW91IGhhdmUgYSBwcm9ibGVtLiBUaGUgZmFjdCB0aGF0CkBAIC04LDcgKzcsNyBAQAogYWxyZWFkeS4KIAogVGhlIHRoaW5nIGFib3V0IENWUyBpcyB0aGF0IGl0IGFic29sdXRlbHkgc3Vja3MgYXMgYSBzb3VyY2UgY29udHJvbAotbWFuYWdlciwgYW5kIHlvdSdsbCB0aHVzIGJlIGhhcHB5IHdpdGggYWxtb3N0IGFueXRoaW5nIGVsc2UuIEdpdCwKK21hbmFnZXIsIGFuZCB5b3UnbGwgdGh1cyBiZSBoYXBweSB3aXRoIGFsbW9zdCBhbnl0aGluZyBlbHNlLiBnaXQsCiBob3dldmVyLCBtYXkgYmUgYSBiaXQgJ3RvbycgZGlmZmVyZW50IChyZWFkOiAiZ29vZCIpIGZvciB5b3VyIHRhc3RlLCBhbmQKIGRvZXMgYSBsb3Qgb2YgdGhpbmdzIGRpZmZlcmVudGx5LiAKIApAQCAtMTYsNyArMTUsNyBAQAogYmFzaWNhbGx5IGEgdG9vbCBmb3IgdHJhY2tpbmcgJ2ZpbGUnIGhpc3RvcnksIHdoaWxlIGdpdCBpcyBhIHRvb2wgZm9yCiB0cmFja2luZyAncHJvamVjdCcgaGlzdG9yeS4gIFRoaXMgc29tZXRpbWVzIGNhdXNlcyBwcm9ibGVtcyBpZiB5b3UgYXJlCiB1c2VkIHRvIGRvaW5nIHZlcnkgc3RyYW5nZSB0aGluZ3MgaW4gQ1ZTLCBpbiBwYXJ0aWN1bGFyIGlmIHlvdSdyZSBkb2luZwotdGhpbmdzIGxpa2UgbWFraW5nIGJyYW5jaGVzIG9mIGp1c3QgYSBzdWJzZXQgb2YgdGhlIHByb2plY3QuICBHaXQgY2FuJ3QKK3RoaW5ncyBsaWtlIG1ha2luZyBicmFuY2hlcyBvZiBqdXN0IGEgc3Vic2V0IG9mIHRoZSBwcm9qZWN0LiAgZ2l0IGNhbid0CiB0cmFjayB0aGF0LCBzaW5jZSBnaXQgbmV2ZXIgdHJhY2tzIHRoaW5ncyBvbiB0aGUgbGV2ZWwgb2YgYW4gaW5kaXZpZHVhbAogZmlsZSwgb25seSBvbiB0aGUgd2hvbGUgcHJvamVjdCBsZXZlbC4gCiAKQEAgLTI0LDcgKzIzLDcgQEAKIHBlb3BsZSB0aGluayBpdCdzIGEgYnVnIGluIENWUyB0aGF0IG1ha2VzIGl0IHRhZyAoYW5kIGNoZWNrIGluIGNoYW5nZXMpCiBvbmUgZmlsZSBhdCBhIHRpbWUuICBTbyBtb3N0IHByb2plY3RzIHlvdSdsbCBldmVyIHNlZSB3aWxsIHVzZSBDVlMKICdhcyBpZicgaXQgd2FzIHNhbmUuICBJbiB3aGljaCBjYXNlIHlvdSdsbCBmaW5kIGl0IHZlcnkgZWFzeSBpbmRlZWQgdG8KLW1vdmUgb3ZlciB0byBHaXQuIAorbW92ZSBvdmVyIHRvIGdpdC4gCiAKIEZpcnN0IG9mZjogdGhpcyBpcyBub3QgYSBnaXQgdHV0b3JpYWwuIFNlZQogbGluazp0dXRvcmlhbC5odG1sW0RvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0XSBmb3IgaG93IGdpdApAQCAtMzMsNyArMzIsNyBAQAogCiBTZWNvbmQ6IENWUyBoYXMgdGhlIG5vdGlvbiBvZiBhICJyZXBvc2l0b3J5IiBhcyBvcHBvc2VkIHRvIHRoZSB0aGluZwogdGhhdCB5b3UncmUgYWN0dWFsbHkgd29ya2luZyBpbiAoeW91ciB3b3JraW5nIGRpcmVjdG9yeSwgb3IgeW91cgotImNoZWNrZWQgb3V0IHRyZWUiKS4gIEdpdCBkb2VzIG5vdCBoYXZlIHRoYXQgbm90aW9uIGF0IGFsbCwgYW5kIGFsbCBnaXQKKyJjaGVja2VkIG91dCB0cmVlIikuICBnaXQgZG9lcyBub3QgaGF2ZSB0aGF0IG5vdGlvbiBhdCBhbGwsIGFuZCBhbGwgZ2l0CiB3b3JraW5nIGRpcmVjdG9yaWVzICdhcmUnIHRoZSByZXBvc2l0b3JpZXMuICBIb3dldmVyLCB5b3UgY2FuIGVhc2lseQogZW11bGF0ZSB0aGUgQ1ZTIG1vZGVsIGJ5IGhhdmluZyBvbmUgc3BlY2lhbCAiZ2xvYmFsIHJlcG9zaXRvcnkiLCB3aGljaAogcGVvcGxlIGNhbiBzeW5jaHJvbml6ZSB3aXRoLiAgU2VlIGRldGFpbHMgbGF0ZXIsIGJ1dCBpbiB0aGUgbWVhbnRpbWUKQEAgLTUwLDcgKzQ5LDcgQEAKIGhvdyB0byBjb21taXQgc3R1ZmYgZXRjIGluIGdpdCkgaXMgdG8gY3JlYXRlIGEgZ2l0J2lmaWVkIHZlcnNpb24gb2YgeW91cgogQ1ZTIGFyY2hpdmUuCiAKLUhhcHBpbHksIHRoYXQncyB2ZXJ5IGVhc3kgaW5kZWVkLiBHaXQgd2lsbCBkbyBpdCBmb3IgeW91LCBhbHRob3VnaCBnaXQKK0hhcHBpbHksIHRoYXQncyB2ZXJ5IGVhc3kgaW5kZWVkLiBnaXQgd2lsbCBkbyBpdCBmb3IgeW91LCBhbHRob3VnaCBnaXQKIHdpbGwgbmVlZCB0aGUgaGVscCBvZiBhIHByb2dyYW0gY2FsbGVkICJjdnNwcyI6CiAKIAlodHRwOi8vd3d3LmNvYml0ZS5jb20vY3ZzcHMvCkBAIC0xMzYsNyArMTM1LDcgQEAKIHRoZXJlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGVxdWl2YWxlbnQgaW5mb3JtYXRpb24gKHNlZSB0aGUgZ2l0CiBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgZm9yIGRldGFpbHMpLiAKIAotR2l0IGhhcyBhIGNvdXBsZSBvZiBhbHRlcm5hdGl2ZXMsIHRob3VnaCwgdGhhdCB5b3UgbWF5IGZpbmQgc3VmZmljaWVudAorZ2l0IGhhcyBhIGNvdXBsZSBvZiBhbHRlcm5hdGl2ZXMsIHRob3VnaCwgdGhhdCB5b3UgbWF5IGZpbmQgc3VmZmljaWVudAogb3IgZXZlbiBzdXBlcmlvciBkZXBlbmRpbmcgb24geW91ciB1c2UuICBPbmUgaXMgY2FsbGVkICJnaXQtd2hhdGNoYW5nZWQiCiAoZm9yIG9idmlvdXMgcmVhc29ucykgYW5kIHRoZSBvdGhlciBvbmUgaXMgY2FsbGVkICJwaWNrYXhlIiAoImEgdG9vbCBmb3IKIHRoZSBzb2Z0d2FyZSBhcmNoZW9sb2dpc3QiKS4gCkBAIC0yMDksNyArMjA4LDcgQEAKIEFsc28sIGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LCB0aGUgc2FtZSBzdGF0ZW1lbnQgbWlnaHQgaGF2ZQogYXBwZWFyZWQgYXQgZmlyc3QgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbmQgbGF0ZXIgdGhlIGZpbGUgd2FzCiByZW5hbWVkIHRvICJhLWZpbGUuYyIuICBDVlMgYW5ub3RhdGUgd291bGQgbm90IGhlbHAgeW91IHRvIGdvCi1iYWNrIGFjcm9zcyBzdWNoIGEgcmVuYW1lLCBidXQgR0lUIHdvdWxkIHN0aWxsIGhlbHAgeW91IGluIHN1Y2gKK2JhY2sgYWNyb3NzIHN1Y2ggYSByZW5hbWUsIGJ1dCBnaXQgd291bGQgc3RpbGwgaGVscCB5b3UgaW4gc3VjaAogYSBzaXR1YXRpb24uICBGb3IgdGhhdCwgeW91IGNhbiBnaXZlIHRoZSAtQyBmbGFnIHRvCiBnaXQtZGlmZi10cmVlLCBsaWtlIHRoaXM6CiAKQEAgLTIyOSwxMCArMjI4LDEwIEBACiAiby1maWxlLmMiLCBpdCB3b3VsZCBmaW5kIHRoZSBjb21taXQgdGhhdCBjaGFuZ2VkIHRoZSBzdGF0ZW1lbnQKIHdoZW4gaXQgd2FzIGluICJvLWZpbGUuYyIuCiAKLVsgQlRXLCB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiAiZ2l0LWRpZmYtdHJlZSAtQyIgaXMgbm90IGVhZ2VyCitOT1RFOiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mICJnaXQtZGlmZi10cmVlIC1DIiBpcyBub3QgZWFnZXIKICAgZW5vdWdoIHRvIGZpbmQgY29waWVzLCBhbmQgaXQgd2lsbCBtaXNzIHRoZSBmYWN0IHRoYXQgYS1maWxlLmMKICAgd2FzIGNyZWF0ZWQgYnkgY29weWluZyBvLWZpbGUuYyB1bmxlc3Mgby1maWxlLmMgd2FzIHNvbWVob3cKLSAgY2hhbmdlZCBpbiB0aGUgc2FtZSBjb21taXQuXQorICBjaGFuZ2VkIGluIHRoZSBzYW1lIGNvbW1pdC4KIAogWW91IGNhbiB1c2UgdGhlIC0tcGlja2F4ZS1hbGwgZmxhZyBpbiBhZGRpdGlvbiB0byB0aGUgLVMgZmxhZy4KIFRoaXMgY2F1c2VzIHRoZSBkaWZmZXJlbmNlcyBmcm9tIGFsbCB0aGUgZmlsZXMgY29udGFpbmVkIGluCkBAIC0yNDMsNiArMjQyLDYgQEAKIAkJbml0Zm9sKCk7CiAJfScgLS1waWNrYXhlLWFsbAogCi1bIFNpZGUgbm90ZS4gIFRoaXMgb3B0aW9uIGlzIGNhbGxlZCAiLS1waWNrYXhlLWFsbCIgYmVjYXVzZSAtUworTk9URTogVGhpcyBvcHRpb24gaXMgY2FsbGVkICItLXBpY2theGUtYWxsIiBiZWNhdXNlIC1TCiAgIG9wdGlvbiBpcyBpbnRlcm5hbGx5IGNhbGxlZCAicGlja2F4ZSIsIGEgdG9vbCBmb3Igc29mdHdhcmUKLSAgYXJjaGFlb2xvZ2lzdHMuXQorICBhcmNoYWVvbG9naXN0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKaW5kZXggNDI0ZTc1YS4uZDFkMGQyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKQEAgLTEsOCArMSw4IEBACiBUaGUgb3V0cHV0IGZvcm1hdCBmcm9tICJnaXQtZGlmZi1pbmRleCIsICJnaXQtZGlmZi10cmVlIiBhbmQKICJnaXQtZGlmZi1maWxlcyIgYXJlIHZlcnkgc2ltaWxhci4KIAotVGhlc2UgY29tbWFuZHMgYWxsIGNvbXBhcmUgdHdvIHNldHMgb2YgdGhpbmdzOyB3aGF0IGFyZQotY29tcGFyZWQgYXJlIGRpZmZlcmVudDoKK1RoZXNlIGNvbW1hbmRzIGFsbCBjb21wYXJlIHR3byBzZXRzIG9mIHRoaW5nczsgd2hhdCBpcyAKK2NvbXBhcmVkIGRpZmZlcnM6CiAKIGdpdC1kaWZmLWluZGV4IDx0cmVlLWlzaD46OgogICAgICAgICBjb21wYXJlcyB0aGUgPHRyZWUtaXNoPiBhbmQgdGhlIGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtLgpAQCAtNDYsNyArNDYsNyBAQAogLiBwYXRoIGZvciAiZHN0Ijsgb25seSBleGlzdHMgZm9yIEMgb3IgUi4KIC4gYW4gTEYgb3IgYSBOVUwgd2hlbiAnLXonIG9wdGlvbiBpcyB1c2VkLCB0byB0ZXJtaW5hdGUgdGhlIHJlY29yZC4KIAotPHNoYTE+IGlzIHNob3duIGFzIGFsbCAwJ3MgaWYgbmV3IGlzIGEgZmlsZSBvbiB0aGUgZmlsZXN5c3RlbQorPHNoYTE+IGlzIHNob3duIGFzIGFsbCAwJ3MgaWYgYSBmaWxlIGlzIG5ldyBvbiB0aGUgZmlsZXN5c3RlbQogYW5kIGl0IGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGNhY2hlLgogCiBFeGFtcGxlOgpAQCAtNTUsNiArNTUsMTEgQEAKIDoxMDA2NDQgMTAwNjQ0IDViZTRhNC4uLi4uLiAwMDAwMDAuLi4uLi4gTSBmaWxlLmMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGVuIGAtemAgb3B0aW9uIGlzIG5vdCB1c2VkLCBUQUIsIExGLCBhbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMKK2luIHBhdGhuYW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgYFx0YCwgYFxuYCwgYW5kIGBcXGAsCityZXNwZWN0aXZlbHkuCisKKwogR2VuZXJhdGluZyBwYXRjaGVzIHdpdGggLXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYyLDggKzY3LDcgQEAKIHdpdGggYSAnLXAnIG9wdGlvbiwgdGhleSBkbyBub3QgcHJvZHVjZSB0aGUgb3V0cHV0IGRlc2NyaWJlZCBhYm92ZTsKIGluc3RlYWQgdGhleSBwcm9kdWNlIGEgcGF0Y2ggZmlsZS4KIAotVGhlIHBhdGNoIGdlbmVyYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgYXQgdHdvIGxldmVscy4gIFRoaXMKLWN1c3RvbWl6YXRpb24gYWxzbyBhcHBsaWVzIHRvICJnaXQtZGlmZi1oZWxwZXIiLgorVGhlIHBhdGNoIGdlbmVyYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgYXQgdHdvIGxldmVscy4KIAogMS4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBub3Qgc2V0LAogICAgdGhlc2UgY29tbWFuZHMgaW50ZXJuYWxseSBpbnZva2UgImRpZmYiIGxpa2UgdGhpczoKQEAgLTkyLDcgKzk2LDcgQEAKIHdoZXJlOgogCiAgICAgIDxvbGR8bmV3Pi1maWxlOjogYXJlIGZpbGVzIEdJVF9FWFRFUk5BTF9ESUZGIGNhbiB1c2UgdG8gcmVhZCB0aGUKLQkJICAgICAgY29udGVudHMgb2YgPG9sZHxuZT4sCisJCSAgICAgIGNvbnRlbnRzIG9mIDxvbGR8bmV3PiwKICAgICAgPG9sZHxuZXc+LWhleDo6IGFyZSB0aGUgNDAtaGV4ZGlnaXQgU0hBMSBoYXNoZXMsCiAgICAgIDxvbGR8bmV3Pi1tb2RlOjogYXJlIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsZSBtb2Rlcy4KIApAQCAtMTA3LDcgKzExMSw3IEBACiBwYXJhbWV0ZXIsIDxwYXRoPi4KIAogCi1HaXQgc3BlY2lmaWMgZXh0ZW5zaW9uIHRvIGRpZmYgZm9ybWF0CitnaXQgc3BlY2lmaWMgZXh0ZW5zaW9uIHRvIGRpZmYgZm9ybWF0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQgLXAgb3B0aW9uIHByb2R1Y2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZQpAQCAtMTIyLDEyICsxMjYsMTEgQEAKIGludm9sdmVkLiAgRXNwZWNpYWxseSwgZXZlbiBmb3IgYSBjcmVhdGlvbiBvciBhIGRlbGV0aW9uLAogYC9kZXYvbnVsbGAgaXMgX25vdF8gdXNlZCBpbiBwbGFjZSBvZiBgYS9gIG9yIGBiL2AgZmlsZW5hbWVzLgogKwotV2hlbiByZW5hbWUvY29weSBpcyBpbnZvbHZlZCwgYGZpbGUxYCBhbmQgYGZpbGUyYCBzaG93cyB0aGUKK1doZW4gcmVuYW1lL2NvcHkgaXMgaW52b2x2ZWQsIGBmaWxlMWAgYW5kIGBmaWxlMmAgc2hvdyB0aGUKIG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIG9mIHRoZSByZW5hbWUvY29weSBhbmQgdGhlIG5hbWUgb2YKIHRoZSBmaWxlIHRoYXQgcmVuYW1lL2NvcHkgcHJvZHVjZXMsIHJlc3BlY3RpdmVseS4KIAotMi4gICBJdCBpcyBmb2xsb3dlZCBieSBleHRlbmRlZCBoZWFkZXIgbGluZXMgdGhhdCBhcmUgb25lIG9yCi0gICAgIG1vcmUgb2Y6CisyLiAgIEl0IGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGV4dGVuZGVkIGhlYWRlciBsaW5lczoKIAogICAgICAgIG9sZCBtb2RlIDxtb2RlPgogICAgICAgIG5ldyBtb2RlIDxtb2RlPgpAQCAtMTM5LDMgKzE0Miw3IEBACiAgICAgICAgcmVuYW1lIHRvIDxwYXRoPgogICAgICAgIHNpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KICAgICAgICBkaXNzaW1pbGFyaXR5IGluZGV4IDxudW1iZXI+CisgICAgICAgaW5kZXggPGhhc2g+Li48aGFzaD4gPG1vZGU+CisKKzMuICBUQUIsIExGLCBhbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gcGF0aG5hbWVzIGFyZQorICAgIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLCByZXNwZWN0aXZlbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKaW5kZXggNDhjZjkzYy4uMzIwMDViMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dApAQCAtNCwxOSArNCwxNCBAQAogLXU6OgogCVN5bm9ueW0gZm9yICItcCIuCiAKLS1yOjoKLQlMb29rIHJlY3Vyc2l2ZWx5IGluIHN1YmRpcmVjdG9yaWVzOyB0aGlzIGZsYWcgZG9lcyBub3QKLQltZWFuIGFueXRoaW5nIHRvIGNvbW1hbmRzIG90aGVyIHRoYW4gImdpdC1kaWZmLXRyZWUiOwotCW90aGVyIGRpZmYgY29tbWFuZHMgYWx3YXlzIGxvb2sgYXQgYWxsIHRoZSBzdWJkaXJlY3Rvcmllcy4KLQogLXo6OgogCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CiAKIC0tbmFtZS1vbmx5OjoKIAlTaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcy4KIAotLS1uYW1lLW9ubHktejo6Ci0JU2FtZSBhcyAtLW5hbWUtb25seSwgYnV0IHRlcm1pbmF0ZSBsaW5lcyB3aXRoIE5VTC4KKy0tbmFtZS1zdGF0dXM6OgorCVNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMuCiAKIC1COjoKIAlCcmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kIGNyZWF0ZS4KQEAgLTI4LDE5ICsyMywyNiBAQAogCURldGVjdCBjb3BpZXMgYXMgd2VsbCBhcyByZW5hbWVzLgogCiAtLWZpbmQtY29waWVzLWhhcmRlcjo6Ci0JQnkgZGVmYXVsdCwgLUMgb3B0aW9uIGZpbmRzIGNvcGllcyBvbmx5IGlmIHRoZSBvcmlnaW5hbAotCWZpbGUgb2YgdGhlIGNvcHkgd2FzIG1vZGlmaWVkIGluIHRoZSBzYW1lIGNoYW5nZXNldCBmb3IKLQlwZXJmb3JtYW5jZSByZWFzb25zLiAgVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kCisJRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGJ5IGRlZmF1bHQsIC1DIG9wdGlvbiBmaW5kcyBjb3BpZXMgb25seSAKKwlpZiB0aGUgb3JpZ2luYWwgZmlsZSBvZiB0aGUgY29weSB3YXMgbW9kaWZpZWQgaW4gdGhlIHNhbWUgCisJY2hhbmdlc2V0LiAgVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kCiAJaW5zcGVjdCB1bm1vZGlmaWVkIGZpbGVzIGFzIGNhbmRpZGF0ZXMgZm9yIHRoZSBzb3VyY2Ugb2YKIAljb3B5LiAgVGhpcyBpcyBhIHZlcnkgZXhwZW5zaXZlIG9wZXJhdGlvbiBmb3IgbGFyZ2UKIAlwcm9qZWN0cywgc28gdXNlIGl0IHdpdGggY2F1dGlvbi4KIAorLWw8bnVtPjo6CisJLU0gYW5kIC1DIG9wdGlvbnMgcmVxdWlyZSBPKG5eMikgcHJvY2Vzc2luZyB0aW1lIHdoZXJlIG4KKwlpcyB0aGUgbnVtYmVyIG9mIHBvdGVudGlhbCByZW5hbWUvY29weSB0YXJnZXRzLiAgVGhpcworCW9wdGlvbiBwcmV2ZW50cyByZW5hbWUvY29weSBkZXRlY3Rpb24gZnJvbSBydW5uaW5nIGlmCisJdGhlIG51bWJlciBvZiByZW5hbWUvY29weSB0YXJnZXRzIGV4Y2VlZHMgdGhlIHNwZWNpZmllZAorCW51bWJlci4KKwogLVM8c3RyaW5nPjo6Ci0JTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlIGluIDxzdHJpbmc+LgorCUxvb2sgZm9yIGRpZmZlcmVuY2VzIHRoYXQgY29udGFpbiB0aGUgY2hhbmdlIGluIDxzdHJpbmc+LgogCiAtLXBpY2theGUtYWxsOjoKIAlXaGVuIC1TIGZpbmRzIGEgY2hhbmdlLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBpbiB0aGF0Ci0JY2hhbmdlc2V0LCBub3QganVzdCB0aGUgZmlsZXMgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlCisJY2hhbmdlc2V0LCBub3QganVzdCB0aGUgZmlsZXMgdGhhdCBjb250YWluIHRoZSBjaGFuZ2UKIAlpbiA8c3RyaW5nPi4KIAogLU88b3JkZXJmaWxlPjo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmZjb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZmNvcmUudHh0CmluZGV4IDE5MDhiOTIuLmNiNGU1NjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGlmZmNvcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZmNvcmUudHh0CkBAIC02LDEzICs2LDEyIEBACiBJbnRyb2R1Y3Rpb24KIC0tLS0tLS0tLS0tLQogCi1UaGUgZGlmZiBjb21tYW5kcyBnaXQtZGlmZi1pbmRleCwgZ2l0LWRpZmYtZmlsZXMsIGFuZAotZ2l0LWRpZmYtdHJlZSBjYW4gYmUgdG9sZCB0byBtYW5pcHVsYXRlIGRpZmZlcmVuY2VzIHRoZXkgZmluZAotaW4gdW5jb252ZW50aW9uYWwgd2F5cyBiZWZvcmUgc2hvd2luZyBkaWZmKDEpIG91dHB1dC4gIFRoZQotbWFuaXB1bGF0aW9uIGlzIGNvbGxlY3RpdmVseSBjYWxsZWQgImRpZmZjb3JlIHRyYW5zZm9ybWF0aW9uIi4KLVRoaXMgc2hvcnQgbm90ZSBkZXNjcmliZXMgd2hhdCB0aGV5IGFyZSBhbmQgaG93IHRvIHVzZSB0aGVtIHRvCi1wcm9kdWNlIGRpZmYgb3V0cHV0cyB0aGF0IGFyZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGFuIHRoZQotY29udmVudGlvbmFsIGtpbmQuCitUaGUgZGlmZiBjb21tYW5kcyBnaXQtZGlmZi1pbmRleCwgZ2l0LWRpZmYtZmlsZXMsIGdpdC1kaWZmLXRyZWUsIGFuZAorZ2l0LWRpZmYtc3RhZ2VzIGNhbiBiZSB0b2xkIHRvIG1hbmlwdWxhdGUgZGlmZmVyZW5jZXMgdGhleSBmaW5kIGluCit1bmNvbnZlbnRpb25hbCB3YXlzIGJlZm9yZSBzaG93aW5nIGRpZmYoMSkgb3V0cHV0LiAgVGhlIG1hbmlwdWxhdGlvbgoraXMgY29sbGVjdGl2ZWx5IGNhbGxlZCAiZGlmZmNvcmUgdHJhbnNmb3JtYXRpb24iLiAgVGhpcyBzaG9ydCBub3RlCitkZXNjcmliZXMgd2hhdCB0aGV5IGFyZSBhbmQgaG93IHRvIHVzZSB0aGVtIHRvIHByb2R1Y2UgZGlmZiBvdXRwdXRzCit0aGF0IGFyZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGFuIHRoZSBjb252ZW50aW9uYWwga2luZC4KIAogCiBUaGUgY2hhaW4gb2Ygb3BlcmF0aW9uCkBAIC0yOSw3ICsyOCwxMCBAQAogIC0gZ2l0LWRpZmYtZmlsZXMgY29tcGFyZXMgY29udGVudHMgb2YgdGhlIGluZGV4IGZpbGUgYW5kIHRoZQogICAgd29ya2luZyBkaXJlY3Rvcnk7CiAKLSAtIGdpdC1kaWZmLXRyZWUgY29tcGFyZXMgY29udGVudHMgb2YgdHdvICJ0cmVlIiBvYmplY3RzLgorIC0gZ2l0LWRpZmYtdHJlZSBjb21wYXJlcyBjb250ZW50cyBvZiB0d28gInRyZWUiIG9iamVjdHM7CisKKyAtIGdpdC1kaWZmLXN0YWdlcyBjb21wYXJlcyBjb250ZW50cyBvZiBibG9icyBhdCB0d28gc3RhZ2VzIGluIGFuCisgICB1bm1lcmdlZCBpbmRleCBmaWxlLgogCiBJbiBhbGwgb2YgdGhlc2UgY2FzZXMsIHRoZSBjb21tYW5kcyB0aGVtc2VsdmVzIGNvbXBhcmUKIGNvcnJlc3BvbmRpbmcgcGF0aHMgaW4gdGhlIHR3byBzZXRzIG9mIGZpbGVzLiAgVGhlIHJlc3VsdCBvZgpAQCAtNjUsMTQgKzY3LDIzIEBACiBkaWZmLXBhdGNoIGZvcm1hdC4KIAogCi1kaWZmY29yZS1wYXRoc3BlYwotLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmZjb3JlLXBhdGhzcGVjOiBGb3IgSWdub3JpbmcgRmlsZXMgT3V0c2lkZSBPdXIgQ29uc2lkZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBmaXJzdCB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgY2hhaW4gaXMgZGlmZmNvcmUtcGF0aHNwZWMsIGFuZAogaXMgY29udHJvbGxlZCBieSBnaXZpbmcgdGhlIHBhdGhuYW1lIHBhcmFtZXRlcnMgdG8gdGhlCiBnaXQtZGlmZi0qIGNvbW1hbmRzIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgcGF0aHNwZWMgaXMgdXNlZAogdG8gbGltaXQgdGhlIHdvcmxkIGRpZmYgb3BlcmF0ZXMgaW4uICBJdCByZW1vdmVzIHRoZSBmaWxlcGFpcnMKLW91dHNpZGUgdGhlIHNwZWNpZmllZCBzZXQgb2YgcGF0aG5hbWVzLgorb3V0c2lkZSB0aGUgc3BlY2lmaWVkIHNldCBvZiBwYXRobmFtZXMuICBFLmcuIElmIHRoZSBpbnB1dCBzZXQgCitvZiBmaWxlcGFpcnMgaW5jbHVkZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0ganVua2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitidXQgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3YXMgImdpdC1kaWZmLWZpbGVzIG15ZmlsZSIsIHRoZW4gdGhlCitqdW5rZmlsZSBlbnRyeSB3b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYmVjYXVzZSBvbmx5ICJteWZpbGUiCitpcyB1bmRlciBjb25zaWRlcmF0aW9uLgogCiBJbXBsZW1lbnRhdGlvbiBub3RlLiAgRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGdpdC1kaWZmLXRyZWUKIHVzZXMgdGhlIHBhdGhuYW1lIHBhcmFtZXRlcnMgb24gdGhlIGNvbW1hbmQgbGluZSB0byBjdWxsIHNldCBvZgpAQCAtODAsOCArOTEsOCBAQAogdXNlIGRpZmZjb3JlLXBhdGhzcGVjLCBidXQgdGhlIGVuZCByZXN1bHQgaXMgdGhlIHNhbWUuCiAKIAotZGlmZmNvcmUtYnJlYWsKLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1icmVhazogRm9yIFNwbGl0dGluZyBVcCAiQ29tcGxldGUgUmV3cml0ZXMiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBzZWNvbmQgdHJhbnNmb3JtYXRpb24gaW4gdGhlIGNoYWluIGlzIGRpZmZjb3JlLWJyZWFrLCBhbmQgaXMKIGNvbnRyb2xsZWQgYnkgdGhlIC1CIG9wdGlvbiB0byB0aGUgZ2l0LWRpZmYtKiBjb21tYW5kcy4gIFRoaXMgaXMKQEAgLTExNSw4ICsxMjYsOCBAQAogYWZ0ZXIgIi1CIiBvcHRpb24gKGUuZy4gIi1CNzUiIHRvIHRlbGwgaXQgdG8gdXNlIDc1JSkuCiAKIAotZGlmZmNvcmUtcmVuYW1lCi0tLS0tLS0tLS0tLS0tLS0KK2RpZmZjb3JlLXJlbmFtZTogRm9yIERldGVjdGlvbiBSZW5hbWVzIGFuZCBDb3BpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB1c2VkIHRvIGRldGVjdCByZW5hbWVzIGFuZCBjb3BpZXMsIGFuZCBpcwogY29udHJvbGxlZCBieSB0aGUgLU0gb3B0aW9uICh0byBkZXRlY3QgcmVuYW1lcykgYW5kIHRoZSAtQyBvcHRpb24KQEAgLTEzNiwxNiArMTQ3LDE2IEBACiA6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDAxMjM0NTYuLi4gUjEwMCBmaWxlWCBmaWxlMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4gdGhlICItQyIgb3B0aW9uIGlzIHVzZWQsIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiBtb2RpZmllZAotZmlsZXMgYW5kIGNvbnRlbnRzIG9mIHVuY2hhbmdlZCBmaWxlcyBhcmUgY29uc2lkZXJlZCBhcwotY2FuZGlkYXRlcyBvZiB0aGUgc291cmNlIGZpbGVzIGluIHJlbmFtZS9jb3B5IG9wZXJhdGlvbiwgaW4KLWFkZGl0aW9uIHRvIHRoZSBkZWxldGVkIGZpbGVzLiAgSWYgdGhlIGlucHV0IHdlcmUgbGlrZSB0aGVzZQotZmlsZXBhaXJzLCB0aGF0IHRhbGsgYWJvdXQgYSBtb2RpZmllZCBmaWxlIGZpbGVZIGFuZCBhIG5ld2x5CitXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkLCB0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgbW9kaWZpZWQgZmlsZXMsCithbmQgZGVsZXRlZCBmaWxlcyAoYW5kIGFsc28gdW5tb2RpZmllZCBmaWxlcywgaWYgdGhlCisiXC0tZmluZC1jb3BpZXMtaGFyZGVyIiBvcHRpb24gaXMgdXNlZCkgYXJlIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlcworb2YgdGhlIHNvdXJjZSBmaWxlcyBpbiByZW5hbWUvY29weSBvcGVyYXRpb24uICBJZiB0aGUgaW5wdXQgd2VyZSBsaWtlCit0aGVzZSBmaWxlcGFpcnMsIHRoYXQgdGFsayBhYm91dCBhIG1vZGlmaWVkIGZpbGUgZmlsZVkgYW5kIGEgbmV3bHkKIGNyZWF0ZWQgZmlsZSBmaWxlMDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQotOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMTIzNDU2Li4uIEEgZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gYmNkMzQ1Ni4uLiBBIGZpbGUwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIGZpbGVZIGFuZCB0aGUgcmVzdWx0aW5nIGNvbnRlbnRzIG9mCkBAIC0xNTQsMTQgKzE2NSwxNCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDoxMDA2NDQgMTAwNjQ0IDAxMjM0NTYuLi4gMTIzNDU2Ny4uLiBNIGZpbGVZCi06MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDAxMjM0NTYuLi4gQzEwMCBmaWxlWSBmaWxlMAorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiBiY2QzNDU2Li4uIEMxMDAgZmlsZVkgZmlsZTAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiBib3RoIHJlbmFtZSBhbmQgY29weSBkZXRlY3Rpb24sIHRoZSBzYW1lICJleHRlbnQgb2YgY2hhbmdlcyIKIGFsZ29yaXRobSB1c2VkIGluIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3bwogZmlsZXMgYXJlICJzaW1pbGFyIGVub3VnaCIsIGFuZCBjYW4gYmUgY3VzdG9taXplZCB0byB1c2UKLXNpbWlsYXJpdHkgc2NvcmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgNTAlIGJ5IGdpdmluZyBhCi1udW1iZXIgYWZ0ZXIgIi1NIiBvciAiLUMiIG9wdGlvbiAoZS5nLiAiLU04IiB0byB0ZWxsIGl0IHRvIHVzZQorYSBzaW1pbGFyaXR5IHNjb3JlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IG9mIDUwJSBieSBnaXZpbmcgYQorbnVtYmVyIGFmdGVyIHRoZSAiLU0iIG9yICItQyIgb3B0aW9uIChlLmcuICItTTgiIHRvIHRlbGwgaXQgdG8gdXNlCiA4LzEwID0gODAlKS4KIAogTm90ZS4gIFdoZW4gdGhlICItQyIgb3B0aW9uIGlzIHVzZWQgd2l0aCBgXC0tZmluZC1jb3BpZXMtaGFyZGVyYApAQCAtMTczLDExICsxODQsMTEgQEAKIGNvcGllZCBoYXBwZW5lZCB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbWUgY2hhbmdlc2V0LgogCiAKLWRpZmZjb3JlLW1lcmdlLWJyb2tlbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1tZXJnZS1icm9rZW46IEZvciBQdXR0aW5nICJDb21wbGV0ZSBSZXdyaXRlcyIgQmFjayBUb2dldGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB1c2VkIHRvIG1lcmdlIGZpbGVwYWlycyBicm9rZW4gYnkKLWRpZmZjb3JlLWJyZWFrLCBhbmQgd2VyZSBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQorZGlmZmNvcmUtYnJlYWssIGFuZCBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQogZGlmZmNvcmUtcmVuYW1lLCBiYWNrIGludG8gYSBzaW5nbGUgbW9kaWZpY2F0aW9uLiAgVGhpcyBhbHdheXMKIHJ1bnMgd2hlbiBkaWZmY29yZS1icmVhayBpcyB1c2VkLgogCkBAIC0yMDYsMTcgKzIxNywxNyBAQAogKiAtQi82MCAodGhlIHNhbWUgYXMgYWJvdmUsIHNpbmNlIGRpZmZjb3JlLWJyZWFrIGRlZmF1bHRzIHRvIDUwJSkuCiAKIE5vdGUgdGhhdCBlYXJsaWVyIGltcGxlbWVudGF0aW9uIGxlZnQgYSBicm9rZW4gcGFpciBhcyBhIHNlcGFyYXRlCi1jcmVhdGlvbiBhbmQgZGVsZXRpb24gcGF0Y2hlcy4gIFRoaXMgd2FzIHVubmVjZXNzYXJ5IGhhY2sgYW5kCitjcmVhdGlvbiBhbmQgZGVsZXRpb24gcGF0Y2hlcy4gIFRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IGhhY2sgYW5kCiB0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uIGFsd2F5cyBtZXJnZXMgYWxsIHRoZSBicm9rZW4gcGFpcnMKIGJhY2sgaW50byBtb2RpZmljYXRpb25zLCBidXQgdGhlIHJlc3VsdGluZyBwYXRjaCBvdXRwdXQgaXMKLWZvcm1hdHRlZCBkaWZmZXJlbnRseSB0byBzdGlsbCBsZXQgdGhlIHJldmlld2luZyBlYXNpZXIgZm9yIHN1Y2gKK2Zvcm1hdHRlZCBkaWZmZXJlbnRseSBmb3IgZWFzaWVyIHJldmlldyBpbiBjYXNlIG9mIHN1Y2gKIGEgY29tcGxldGUgcmV3cml0ZSBieSBzaG93aW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygb2xkIHZlcnNpb24KIHByZWZpeGVkIHdpdGggJy0nLCBmb2xsb3dlZCBieSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIG5ldwogdmVyc2lvbiBwcmVmaXhlZCB3aXRoICcrJy4KIAogCi1kaWZmY29yZS1waWNrYXhlCi0tLS0tLS0tLS0tLS0tLS0tCitkaWZmY29yZS1waWNrYXhlOiBGb3IgRGV0ZWN0aW5nIEFkZGl0aW9uL0RlbGV0aW9uIG9mIFNwZWNpZmllZCBTdHJpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gZmluZCBmaWxlcGFpcnMgdGhhdCByZXByZXNlbnQKIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHNwZWNpZmllZCBzdHJpbmcsIGFuZCBpcyBjb250cm9sbGVkIGJ5IHRoZQpAQCAtMjMwLDcgKzI0MSw3IEBACiBvcHBvc2l0ZSBjYXNlIHRoYXQgbG9zZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcuCiAKIFdoZW4gYFwtLXBpY2theGUtYWxsYCBpcyBub3QgaW4gZWZmZWN0LCBkaWZmY29yZS1waWNrYXhlIGxlYXZlcwotb25seSBzdWNoIGZpbGVwYWlycyB0aGF0IHRvdWNoZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcgaW4gaXRzCitvbmx5IHN1Y2ggZmlsZXBhaXJzIHRoYXQgdG91Y2ggdGhlIHNwZWNpZmllZCBzdHJpbmcgaW4gaXRzCiBvdXRwdXQuICBXaGVuIGBcLS1waWNrYXhlLWFsbGAgaXMgdXNlZCwgZGlmZmNvcmUtcGlja2F4ZSBsZWF2ZXMgYWxsCiBmaWxlcGFpcnMgaW50YWN0IGlmIHRoZXJlIGlzIHN1Y2ggYSBmaWxlcGFpciwgb3IgbWFrZXMgdGhlCiBvdXRwdXQgZW1wdHkgb3RoZXJ3aXNlLiAgVGhlIGxhdHRlciBiZWhhdmlvdXIgaXMgZGVzaWduZWQgdG8KQEAgLTIzOCwyNyArMjQ5LDI3IEBACiBjaGFuZ2VzZXQgZWFzaWVyLgogCiAKLWRpZmZjb3JlLW9yZGVyCi0tLS0tLS0tLS0tLS0tLQorZGlmZmNvcmUtb3JkZXI6IEZvciBTb3J0aW5nIHRoZSBPdXRwdXQgQmFzZWQgb24gRmlsZW5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBpcyB1c2VkIHRvIHJlb3JkZXIgdGhlIGZpbGVwYWlycyBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncwogKG9yIHByb2plY3QncykgdGFzdGUsIGFuZCBpcyBjb250cm9sbGVkIGJ5IHRoZSAtTyBvcHRpb24gdG8gdGhlCiBnaXQtZGlmZi0qIGNvbW1hbmRzLgogCi1UaGlzIHRha2VzIGEgdGV4dCBmaWxlIGVhY2ggb2Ygd2hvc2UgbGluZSBpcyBhIHNoZWxsIGdsb2IKK1RoaXMgdGFrZXMgYSB0ZXh0IGZpbGUgZWFjaCBvZiB3aG9zZSBsaW5lcyBpcyBhIHNoZWxsIGdsb2IKIHBhdHRlcm4uICBGaWxlcGFpcnMgdGhhdCBtYXRjaCBhIGdsb2IgcGF0dGVybiBvbiBhbiBlYXJsaWVyIGxpbmUKIGluIHRoZSBmaWxlIGFyZSBvdXRwdXQgYmVmb3JlIG9uZXMgdGhhdCBtYXRjaCBhIGxhdGVyIGxpbmUsIGFuZAogZmlsZXBhaXJzIHRoYXQgZG8gbm90IG1hdGNoIGFueSBnbG9iIHBhdHRlcm4gYXJlIG91dHB1dCBsYXN0LgogCi1BcyBhbiBleGFtcGxlLCB0eXBpY2FsIG9yZGVyZmlsZSBmb3IgdGhlIGNvcmUgR0lUIHByb2JhYmx5CitBcyBhbiBleGFtcGxlLCBhIHR5cGljYWwgb3JkZXJmaWxlIGZvciB0aGUgY29yZSBnaXQgcHJvYmFibHkKIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBSRUFETUUKLSAgICBNYWtlZmlsZQotICAgIERvY3VtZW50YXRpb24KLSAgICAqLmgKLSAgICAqLmMKLSAgICB0CitSRUFETUUKK01ha2VmaWxlCitEb2N1bWVudGF0aW9uCisqLmgKKyouYwordAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CmluZGV4IGJlYjQ1MDAuLjRjYWU0MTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtMywyMSArMyw2MyBAQAogCiBOQU1FCiAtLS0tCi1naXQtYWRkIC0gQWRkIGZpbGVzIHRvIHRoZSBjYWNoZS4KK2dpdC1hZGQgLSBBZGQgZmlsZXMgdG8gdGhlIGluZGV4IGZpbGUuCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1hZGQnIDxmaWxlPi4uLgorJ2dpdC1hZGQnIFstbl0gWy12XSA8ZmlsZT4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1BIHNpbXBsZSB3cmFwcGVyIHRvIGdpdC11cGRhdGUtaW5kZXggdG8gYWRkIGZpbGVzIHRvIHRoZSBjYWNoZSBmb3IgcGVvcGxlIHVzZWQKLXRvIGRvICJjdnMgYWRkIi4KK0Egc2ltcGxlIHdyYXBwZXIgZm9yIGdpdC11cGRhdGUtaW5kZXggdG8gYWRkIGZpbGVzIHRvIHRoZSBpbmRleCwKK2ZvciBwZW9wbGUgdXNlZCB0byBkbyAiY3ZzIGFkZCIuCisKIAogT1BUSU9OUwogLS0tLS0tLQogPGZpbGU+Li4uOjoKLQlGaWxlcyB0byBhZGQgdG8gdGhlIGNhY2hlLgorCUZpbGVzIHRvIGFkZCB0byB0aGUgaW5kZXguCisKKy1uOjoKKyAgICAgICAgRG9uJ3QgYWN0dWFsbHkgYWRkIHRoZSBmaWxlKHMpLCBqdXN0IHNob3cgaWYgdGhleSBleGlzdC4KKworLXY6OgorICAgICAgICBCZSB2ZXJib3NlLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIGxpc3Qgb2YgPGZpbGU+IGdpdmVuIHRvIHRoZSBjb21tYW5kIGlzIGZlZCB0byBgZ2l0LWxzLWZpbGVzYAorY29tbWFuZCB0byBsaXN0IGZpbGVzIHRoYXQgYXJlIG5vdCByZWdpc3RlcmQgaW4gdGhlIGluZGV4IGFuZAorYXJlIG5vdCBpZ25vcmVkL2V4Y2x1ZGVkIGJ5IGAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGVgIGZpbGUgb3IKK2AuZ2l0aWdub3JlYCBmaWxlIGluIGVhY2ggZGlyZWN0b3J5LiAgVGhpcyBtZWFucyB0d28gdGhpbmdzOgorCisuIFlvdSBjYW4gcHV0IHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZAorICB0aGUgY29tbWFuZCB3aWxsIGFkZCBhbGwgZmlsZXMgaW4gaXQgYW5kIGl0cyBzdWJkaXJlY3RvcmllczsKKworLiBHaXZpbmcgdGhlIG5hbWUgb2YgYSBmaWxlIHRoYXQgaXMgYWxyZWFkeSBpbiBpbmRleCBkb2VzIG5vdAorICBydW4gYGdpdC11cGRhdGUtaW5kZXhgIG9uIHRoYXQgcGF0aC4KKworCitFWEFNUExFUworLS0tLS0tLS0KK2dpdC1hZGQgRG9jdW1lbnRhdGlvbi9cXCoudHh0OjoKKworCUFkZHMgYWxsIGBcKi50eHRgIGZpbGVzIHRoYXQgYXJlIG5vdCBpbiB0aGUgaW5kZXggdW5kZXIKKwlgRG9jdW1lbnRhdGlvbmAgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuCisrCitOb3RlIHRoYXQgdGhlIGFzdGVyaXNrIGBcKmAgaXMgcXVvdGVkIGZyb20gdGhlIHNoZWxsIGluIHRoaXMKK2V4YW1wbGU7IHRoaXMgbGV0cyB0aGUgY29tbWFuZCB0byBpbmNsdWRlIHRoZSBmaWxlcyBmcm9tCitzdWJkaXJlY3RvcmllcyBvZiBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4KKworZ2l0LWFkZCBnaXQtKi5zaDo6CisKKwlBZGRzIGFsbCBnaXQtKi5zaCBzY3JpcHRzIHRoYXQgYXJlIG5vdCBpbiB0aGUgaW5kZXguCisJQmVjYXVzZSB0aGlzIGV4YW1wbGUgbGV0cyBzaGVsbCBleHBhbmQgdGhlIGFzdGVyaXNrCisJKGkuZS4geW91IGFyZSBsaXN0aW5nIHRoZSBmaWxlcyBleHBsaWNpdGx5KSwgaXQgZG9lcyBub3QKKwlhZGQgYHN1YmRpci9naXQtZm9vLnNoYCB0byB0aGUgaW5kZXguCisKIAogQXV0aG9yCiAtLS0tLS0KQEAgLTI5LDUgKzcxLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZGY0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKQEAgLTAsMCArMSw4OCBAQAorZ2l0LWFtKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBpbiBhIG1haWxib3gKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtYW0nIFstLXNpZ25vZmZdIFstLWRvdGVzdD08ZGlyPl0gWy0tdXRmOF0gWy0tM3dheV0gPG1ib3g+Li4uCisnZ2l0LWFtJyBbLS1za2lwXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorLS1zaWdub2ZmOjoKKwlBZGQgYFNpZ25lZC1vZmYtYnk6YCBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSwgdXNpbmcKKwl0aGUgY29tbWl0dGVyIGlkZW50aXR5IG9mIHlvdXJzZWxmLgorCistLWRvdGVzdD08ZGlyPjo6CisJSW5zdGVhZCBvZiBgLmRvdGVzdGAgZGlyZWN0b3J5LCB1c2UgPGRpcj4gYXMgYSB3b3JraW5nCisJYXJlYSB0byBzdG9yZSBleHRyYWN0ZWQgcGF0Y2hlcy4KKworLS11dGY4LCAtLWtlZXA6OgorCVBhc3MgYC0tdXRmOGAgYW5kIGAtLWtlZXBgIGZsYWdzIHRvIGBnaXQtbWFpbGluZm9gIChzZWUKKwlnaXRsaW5rOmdpdC1tYWlsaW5mb1sxXSkuCisKKy0tM3dheTo6CisJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uCisJMy13YXkgbWVyZ2UsIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLCBhbmQgd2UgaGF2ZSB0aG9zZSBibG9icworCWxvY2FsbHkuCisKKy0tc2tpcDo6CisJU2tpcCB0aGUgY3VycmVudCBwYXRjaC4gIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIHdoZW4KKwlyZXN0YXJ0aW5nIGFuIGFib3J0ZWQgcGF0Y2guCisKKy0taW50ZXJhY3RpdmU6OgorCVJ1biBpbnRlcmFjdGl2ZWx5LCBqdXN0IGxpa2UgZ2l0LWFwcGx5bWJveC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1doZW4gaW5pdGlhbGx5IGludm9raW5nIGl0LCB5b3UgZ2l2ZSBpdCBuYW1lcyBvZiB0aGUgbWFpbGJveGVzCit0byBjcnVuY2guICBVcG9uIHNlZWluZyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSwgaXQKK2Fib3J0cyBpbiB0aGUgbWlkZGxlLCBqdXN0IGxpa2UgJ2dpdC1hcHBseW1ib3gnIGRvZXMuICBZb3UgY2FuCityZWNvdmVyIGZyb20gdGhpcyBpbiBvbmUgb2YgdHdvIHdheXM6CisKKy4gc2tpcCB0aGUgY3VycmVudCBvbmUgYnkgcmUtcnVubmluZyB0aGUgY29tbWFuZCB3aXRoICctLXNraXAnCisgIG9wdGlvbi4KKworLiBoYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgcnVuICdnaXQKKyAgZGlmZiBIRUFEJyB0byBleHRyYWN0IHRoZSBtZXJnZSByZXN1bHQgaW50byBhIHBhdGNoIGZvcm0gYW5kCisgIHJlcGxhY2luZyB0aGUgcGF0Y2ggaW4gLmRvdGVzdC9wYXRjaCBmaWxlLiAgQWZ0ZXIgZG9pbmcgdGhpcywKKyAgcnVuIGBnaXQtcmVzZXQgLS1oYXJkIEhFQURgIHRvIGJyaW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlCisgIHN0YXRlIGJlZm9yZSBoYWxmLWFwcGx5aW5nIHRoZSBwYXRjaCwgdGhlbiByZS1ydW4gdGhlIGNvbW1hbmQKKyAgd2l0aG91dCBhbnkgb3B0aW9ucy4KKworVGhlIGNvbW1hbmQgcmVmdXNlcyB0byBwcm9jZXNzIG5ldyBtYWlsYm94ZXMgd2hpbGUgYC5kb3Rlc3RgCitkaXJlY3RvcnkgZXhpc3RzLCBzbyBpZiB5b3UgZGVjaWRlIHRvIHN0YXJ0IG92ZXIgZnJvbSBzY3JhdGNoLAorcnVuIGBybSAtZiAuZG90ZXN0YCBiZWZvcmUgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIG1haWxib3gKK25hbWVzLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorZ2l0bGluazpnaXQtYXBwbHltYm94WzFdLCBnaXRsaW5rOmdpdC1hcHBseXBhdGNoWzFdLgorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24gYnkgUGV0ciBCYXVkaXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CmluZGV4IDM5MWQ2ZjUuLmViOGY5MDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKQEAgLTEsMTkgKzEsMTggQEAKIGdpdC1hcHBseSgxKQogPT09PT09PT09PT09Ci12MC4xLCBKdW5lIDIwMDUKIAogTkFNRQogLS0tLQotZ2l0LWFwcGx5IC0gQXBwbHkgcGF0Y2ggb24gYSBHSVQgaW5kZXggZmlsZSBhbmQgYSB3b3JrIHRyZWUKK2dpdC1hcHBseSAtIEFwcGx5IHBhdGNoIG9uIGEgZ2l0IGluZGV4IGZpbGUgYW5kIGEgd29yayB0cmVlCiAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWFwcGx5JyBbLS1uby1tZXJnZV0gWy0tc3RhdF0gWy0tc3VtbWFyeV0gWy0tY2hlY2tdIFstLWluZGV4XSBbLS1zaG93LWZpbGVzXSBbLS1hcHBseV0gWzxwYXRjaD4uLi5dCisnZ2l0LWFwcGx5JyBbLS1zdGF0XSBbLS1udW1zdGF0XSBbLS1zdW1tYXJ5XSBbLS1jaGVja10gWy0taW5kZXhdIFstLWFwcGx5XSBbLS1pbmRleC1pbmZvXSBbLXpdIFs8cGF0Y2g+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVJlYWRzIHN1cHBsaWVkIGRpZmYgb3V0cHV0IGFuZCBhcHBsaWVzIGl0IG9uIGEgR0lUIGluZGV4IGZpbGUKK1JlYWRzIHN1cHBsaWVkIGRpZmYgb3V0cHV0IGFuZCBhcHBsaWVzIGl0IG9uIGEgZ2l0IGluZGV4IGZpbGUKIGFuZCBhIHdvcmsgdHJlZS4KIAogT1BUSU9OUwpAQCAtMjIsMTUgKzIxLDE2IEBACiAJVGhlIGZpbGVzIHRvIHJlYWQgcGF0Y2ggZnJvbS4gICctJyBjYW4gYmUgdXNlZCB0byByZWFkCiAJZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKLS0tbm8tbWVyZ2U6OgotCVRoZSBkZWZhdWx0IG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHRoZSBtZXJnZSBiZWhhdmlvdXIKLQl3aGljaCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LiAgVGhpcyBmbGFnIGV4cGxpY2l0bHkKLQl0ZWxscyB0aGUgcHJvZ3JhbSBub3QgdG8gdXNlIHRoZSBtZXJnZSBiZWhhdmlvdXIuCi0KIC0tc3RhdDo6CiAJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlCiAJaW5wdXQuICBUdXJucyBvZmYgImFwcGx5Ii4KIAorLS1udW1zdGF0OjoKKwlTaW1pbGFyIHRvIFwtLXN0YXQsIGJ1dCBzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCBwYXRobmFtZSB3aXRob3V0CisJYWJicmV2aWF0aW9uLCB0byBtYWtlIGl0IG1vcmUgbWFjaGluZSBmcmllbmRseS4gIFR1cm5zCisJb2ZmICJhcHBseSIuCisKIC0tc3VtbWFyeTo6CiAJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIGNvbmRlbnNlZAogCXN1bW1hcnkgb2YgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBnaXQgZGlmZiBleHRlbmRlZApAQCAtNTEsOCArNTEsMTkgQEAKIAl1cC10by1kYXRlLCBpdCBpcyBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgVGhpcyBmbGFnIGFsc28KIAljYXVzZXMgdGhlIGluZGV4IGZpbGUgdG8gYmUgdXBkYXRlZC4KIAotLS1zaG93LWZpbGVzOjoKLQlTaG93IHN1bW1hcnkgb2YgZmlsZXMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLgorLS1pbmRleC1pbmZvOjoKKwlOZXdlciBnaXQtZGlmZiBvdXRwdXQgaGFzIGVtYmVkZGVkICdpbmRleCBpbmZvcm1hdGlvbicKKwlmb3IgZWFjaCBibG9iIHRvIGhlbHAgaWRlbnRpZnkgdGhlIG9yaWdpbmFsIHZlcnNpb24gdGhhdAorCXRoZSBwYXRjaCBhcHBsaWVzIHRvLiAgV2hlbiB0aGlzIGZsYWcgaXMgZ2l2ZW4sIGFuZCBpZgorCXRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBibG9iIGlzIGF2YWlsYWJsZSBsb2NhbGx5LAorCW91dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlbSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCistejo6CisJV2hlbiBzaG93aW5nIHRoZSBpbmRleCBpbmZvcm1hdGlvbiwgZG8gbm90IG11bmdlIHBhdGhzLAorCWJ1dCB1c2UgTlVMIHRlcm1pbmF0ZWQgbWFjaGluZSByZWFkYWJsZSBmb3JtYXQuICBXaXRob3V0CisJdGhpcyBmbGFnLCB0aGUgcGF0aG5hbWVzIG91dHB1dCB3aWxsIGhhdmUgVEFCLCBMRiwgYW5kCisJYmFja3NsYXNoIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCBgXHRgLCBgXG5gLCBhbmQgYFxcYCwKKwlyZXNwZWN0aXZlbHkuCiAKIC0tYXBwbHk6OgogCUlmIHlvdSB1c2UgYW55IG9mIHRoZSBvcHRpb25zIG1hcmtlZCBgYFR1cm5zIG9mZgpAQCAtNzIsNSArODMsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseW1ib3gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHltYm94LnR4dAppbmRleCBmNmQ4NTdjLi5mNzRjNmE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseW1ib3gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5bWJveC50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1hcHBseW1ib3gnIFstdV0gWy1rXSBbLXFdICggLWMgLmRvdGVzdC88bnVtPiB8IDxtYm94PiApIFsgPHNpZ25vZmY+IF0KKydnaXQtYXBwbHltYm94JyBbLXVdIFsta10gWy1xXSBbLW1dICggLWMgLmRvdGVzdC88bnVtPiB8IDxtYm94PiApIFsgPHNpZ25vZmY+IF0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMiw3ICsyMiw3IEBACiAtcTo6CiAJQXBwbHkgcGF0Y2hlcyBpbnRlcmFjdGl2ZWx5LiAgVGhlIHVzZXIgd2lsbCBiZSBnaXZlbgogCW9wcG9ydHVuaXR5IHRvIGVkaXQgdGhlIGxvZyBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggYmVmb3JlCi0JYXR0ZW1wdGluZyB0byBhcHBseSBwYXRjaCBpbiBlYWNoIGUtbWFpbCBtZXNzYWdlLgorCWF0dGVtcHRpbmcgdG8gYXBwbHkgaXQuCiAKIC1rOjoKIAlVc3VhbGx5IHRoZSBwcm9ncmFtICdjbGVhbnMgdXAnIHRoZSBTdWJqZWN0OiBoZWFkZXIgbGluZQpAQCAtMzMsNiArMzMsMTQgQEAKIAltdW5naW5nLCBhbmQgaXMgbW9zdCB1c2VmdWwgd2hlbiB1c2VkIHRvIHJlYWQgYmFjayAnZ2l0CiAJZm9ybWF0LXBhdGNoIC0tbWJveCcgb3V0cHV0LgogCistbTo6CisJUGF0Y2hlcyBhcmUgYXBwbGllZCB3aXRoIGBnaXQtYXBwbHlgIGNvbW1hbmQsIGFuZCB1bmxlc3MKKwlpdCBjbGVhbmx5IGFwcGxpZXMgd2l0aG91dCBmdXp6LCB0aGUgcHJvY2Vzc2luZyBmYWlscy4KKwlXaXRoIHRoaXMgZmxhZywgaWYgYSB0cmVlIHRoYXQgdGhlIHBhdGNoIGFwcGxpZXMgY2xlYW5seQorCWlzIGZvdW5kIGluIGEgcmVwb3NpdG9yeSwgdGhlIHBhdGNoIGlzIGFwcGxpZWQgdG8gdGhlCisJdHJlZSBhbmQgdGhlbiBhIDMtd2F5IG1lcmdlIGJldHdlZW4gdGhlIHJlc3VsdGluZyB0cmVlCisJYW5kIHRoZSBjdXJyZW50IHRyZWUuCisKIC11OjoKIAlCeSBkZWZhdWx0LCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLCBhdXRob3IgbmFtZSBhbmQKIAlhdXRob3IgZW1haWwgYXJlIHRha2VuIGZyb20gdGhlIGUtbWFpbCB3aXRob3V0IGFueQpAQCAtNjcsNyArNzUsNyBAQAogCiBTRUUgQUxTTwogLS0tLS0tLS0KLWxpbms6Z2l0LWFwcGx5cGF0Y2guaHRtbFtnaXQtYXBwbHlwYXRjaF0uCitnaXRsaW5rOmdpdC1hbVsxXSwgZ2l0bGluazpnaXQtYXBwbHlwYXRjaFsxXS4KIAogCiBBdXRob3IKQEAgLTgwLDUgKzg4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHlwYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseXBhdGNoLnR4dAppbmRleCBiODk0NjMyLi41YjkwMzdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseXBhdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseXBhdGNoLnR4dApAQCAtMzAsNyArMzAsNyBAQAogPHBhdGNoPjo6CiAJVGhlIHBhdGNoIHRvIGFwcGx5LgogCi08aW5mbz46Cis8aW5mbz46OgogCUF1dGhvciBhbmQgc3ViamVjdCBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSBlLW1haWwsCiAJdXNlZCBvbiAiYXV0aG9yIiBsaW5lIGFuZCBhcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUKIAljb21taXQgbG9nIG1lc3NhZ2UuCkBAIC00Niw1ICs0Niw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKaW5kZXggZmEwNzc5Yi4uZmNkYTAxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKQEAgLTMsNyArMyw3IEBACiAKIE5BTUUKIC0tLS0KLWdpdC1hcmNoaW1wb3J0IC0gSW1wb3J0IGFuIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdJVAorZ2l0LWFyY2hpbXBvcnQgLSBJbXBvcnQgYW4gQXJjaCByZXBvc2l0b3J5IGludG8gZ2l0CiAKIAogU1lOT1BTSVMKQEAgLTIwLDMxICsyMCwzNCBAQAogYXMgYSBtZXJnZSB3aGVuZXZlciBwb3NzaWJsZSAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLiAKIAogVGhlIHNjcmlwdCBleHBlY3RzIHlvdSB0byBwcm92aWRlIHRoZSBrZXkgcm9vdHMgd2hlcmUgaXQgY2FuIHN0YXJ0IHRoZSBpbXBvcnQgCi1mcm9tIGFuICdpbml0aWFsIGltcG9ydCcgb3IgJ3RhZycgdHlwZSBvZiBBcmNoIGNvbW1pdC4gSXQgd2lsbCBmb2xsb3cgYW5kIGltcG9ydCAKLW5ldyBicmFuY2hlcyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJvb3RzLiAKK2Zyb20gYW4gJ2luaXRpYWwgaW1wb3J0JyBvciAndGFnJyB0eXBlIG9mIEFyY2ggY29tbWl0LiBJdCB3aWxsIGZvbGxvdyBhbmQgCitpbXBvcnQgbmV3IGJyYW5jaGVzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcm9vdHMuIAogCiBJdCBleHBlY3RzIHRvIGJlIGRlYWxpbmcgd2l0aCBvbmUgcHJvamVjdCBvbmx5LiBJZiBpdCBzZWVzIAotYnJhbmNoZXMgdGhhdCBoYXZlIGRpZmZlcmVudCByb290cywgaXQgd2lsbCByZWZ1c2UgdG8gcnVuLiBJbiB0aGF0IGNhc2UsIGVkaXQgeW91cgotPGFyY2hpdmUvYnJhbmNoPiBwYXJhbWV0ZXJzIHRvIGRlZmluZSBjbGVhcmx5IHRoZSBzY29wZSBvZiB0aGUgaW1wb3J0LiAKK2JyYW5jaGVzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgcm9vdHMsIGl0IHdpbGwgcmVmdXNlIHRvIHJ1bi4gSW4gdGhhdCBjYXNlLCAKK2VkaXQgeW91ciA8YXJjaGl2ZS9icmFuY2g+IHBhcmFtZXRlcnMgdG8gZGVmaW5lIGNsZWFybHkgdGhlIHNjb3BlIG9mIHRoZSAKK2ltcG9ydC4gCiAKLWBnaXQtYXJjaGltcG9ydGAgdXNlcyBgdGxhYCBleHRlbnNpdmVseSBpbiB0aGUgYmFja2dyb3VuZCB0byBhY2Nlc3MgdGhlIEFyY2ggcmVwb3NpdG9yeS4KK2BnaXQtYXJjaGltcG9ydGAgdXNlcyBgdGxhYCBleHRlbnNpdmVseSBpbiB0aGUgYmFja2dyb3VuZCB0byBhY2Nlc3MgdGhlIAorQXJjaCByZXBvc2l0b3J5LgogTWFrZSBzdXJlIHlvdSBoYXZlIGEgcmVjZW50IHZlcnNpb24gb2YgYHRsYWAgYXZhaWxhYmxlIGluIHRoZSBwYXRoLiBgdGxhYCBtdXN0CiBrbm93IGFib3V0IHRoZSByZXBvc2l0b3JpZXMgeW91IHBhc3MgdG8gYGdpdC1hcmNoaW1wb3J0YC4gCiAKIEZvciB0aGUgaW5pdGlhbCBpbXBvcnQgYGdpdC1hcmNoaW1wb3J0YCBleHBlY3RzIHRvIGZpbmQgaXRzZWxmIGluIGFuIGVtcHR5IAogZGlyZWN0b3J5LiBUbyBmb2xsb3cgdGhlIGRldmVsb3BtZW50IG9mIGEgcHJvamVjdCB0aGF0IHVzZXMgQXJjaCwgcmVydW4gCi1gZ2l0LWFyY2hpbXBvcnRgIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgaW5pdGlhbCBpbXBvcnQgdG8gcGVyZm9ybSBpbmNyZW1lbnRhbCBpbXBvcnRzLgorYGdpdC1hcmNoaW1wb3J0YCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlIGluaXRpYWwgaW1wb3J0IHRvIHBlcmZvcm0gCitpbmNyZW1lbnRhbCBpbXBvcnRzLgogCiBNRVJHRVMKIC0tLS0tLQotUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBHSVQgYXMgd2VsbC4gR0lUIAorUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBnaXQgYXMgd2VsbC4gZ2l0IAogZG9lcyBub3QgY2FyZSBtdWNoIGFib3V0IHRyYWNraW5nIHBhdGNoZXMsIGFuZCBvbmx5IGNvbnNpZGVycyBhIG1lcmdlIHdoZW4gYQogYnJhbmNoIGluY29ycG9yYXRlcyBhbGwgdGhlIGNvbW1pdHMgc2luY2UgdGhlIHBvaW50IHRoZXkgZm9ya2VkLiBUaGUgZW5kIHJlc3VsdAotaXMgdGhhdCBHSVQgd2lsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIGhvdyBmYXIgYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZC4gU28gdGhlIAoraXMgdGhhdCBnaXQgd2lsbCBoYXZlIGEgZ29vZCBpZGVhIG9mIGhvdyBmYXIgYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZC4gU28gdGhlIAogaW1wb3J0IHByb2Nlc3MgZG9lcyBsb3NlIHNvbWUgcGF0Y2gtdHJhZGluZyBtZXRhZGF0YS4KIAogRm9ydHVuYXRlbHksIHdoZW4geW91IHRyeSBhbmQgbWVyZ2UgYnJhbmNoZXMgaW1wb3J0ZWQgZnJvbSBBcmNoLCAKLUdJVCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZyAKK2dpdCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZyAKIHBhdGNoZXMgdGhhdCBoYXZlIGJlZW4gdHJhZGVkIG91dC1vZi1zZXF1ZW5jZSBiZXR3ZWVuIHRoZSBicmFuY2hlcy4gCiAKIE9QVElPTlMKQEAgLTc4LDUgKzgxLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggZjEwZGY1My4uMzlmYTY2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC03Niw3ICs3Niw3IEBACiAKIHRvIHNlZSB0aGUgY3VycmVudGx5IHJlbWFpbmluZyBzdXNwZWN0cyBpbiBgZ2l0a2AuCiAKLVRoZSBnb29kL2JhZCB5b3UgdG9sZCB0aGUgY29tbWFuZCBpcyBsb2dnZWQsIGFuZCBgZ2l0IGJpc2VjdAorVGhlIGdvb2QvYmFkIGlucHV0IGlzIGxvZ2dlZCwgYW5kIGBnaXQgYmlzZWN0CiBsb2dgIHNob3dzIHdoYXQgeW91IGhhdmUgZG9uZSBzbyBmYXIuICBZb3UgY2FuIHRydW5jYXRlIGl0cwogb3V0cHV0IHNvbWV3aGVyZSBhbmQgc2F2ZSBpdCBpbiBhIGZpbGUsIGFuZCBydW4KIApAQCAtOTEsMTAgKzkxLDEwIEBACiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KIAogRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0KIERvY3VtZW50YXRpb24gYnkgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CmluZGV4IDkxNGMwZTYuLmE3MTIxYTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dApAQCAtMjMsNyArMjMsNyBAQAogCVRoZSBuYW1lIG9mIHRoZSBicmFuY2ggdG8gY3JlYXRlLgogCiBzdGFydC1wb2ludDo6Ci0JV2hlcmUgdG8gbWFrZSB0aGUgYnJhbmNoOyBkZWZhdWx0cyB0byBIRUFELgorCVdoZXJlIHRvIGNyZWF0ZSB0aGUgYnJhbmNoOyBkZWZhdWx0cyB0byBIRUFELgogCiBBdXRob3IKIC0tLS0tLQpAQCAtMzUsNSArMzUsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKaW5kZXggMjEzMWEyOS4uYWI0ZGNhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jYXQtZmlsZSgxKQogPT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zMiw3ICszMSw3IEBACiAKIDx0eXBlPjo6CiAJVHlwaWNhbGx5IHRoaXMgbWF0Y2hlcyB0aGUgcmVhbCB0eXBlIG9mIDxvYmplY3Q+IGJ1dCBhc2tpbmcKLQlmb3IgYSB0eXBlIHRoYXQgY2FuIHRyaXZpYWxseSBkZXJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4KKwlmb3IgYSB0eXBlIHRoYXQgY2FuIHRyaXZpYWxseSBiZSBkZXJlZmVyZW5jZWQgZnJvbSB0aGUgZ2l2ZW4KIAk8b2JqZWN0PiBpcyBhbHNvIHBlcm1pdHRlZC4gIEFuIGV4YW1wbGUgaXMgdG8gYXNrIGZvciBhCiAJInRyZWUiIHdpdGggPG9iamVjdD4gYmVpbmcgYSBjb21taXQgb2JqZWN0IHRoYXQgY29udGFpbnMgaXQsCiAJb3IgdG8gYXNrIGZvciBhICJibG9iIiB3aXRoIDxvYmplY3Q+IGJlaW5nIGEgdGFnIG9iamVjdCB0aGF0CkBAIC01Nyw1ICs1Niw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2stcmVmLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZTk1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK2dpdC1jaGVjay1yZWYtZm9ybWF0KDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2stcmVmLWZvcm1hdCAtIE1ha2Ugc3VyZSByZWYgbmFtZSBpcyB3ZWxsIGZvcm1lZC4KKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0LWNoZWNrLXJlZi1mb3JtYXQnIDxyZWZuYW1lPgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NoZWNrcyBpZiBhIGdpdmVuICdyZWZuYW1lJyBpcyBhY2NlcHRhYmxlLCBhbmQgZXhpdHMgbm9uLXplcm8gaWYKK2l0IGlzIG5vdC4KKworQSByZWZlcmVuY2UgaXMgdXNlZCBpbiBnaXQgdG8gc3BlY2lmeSBicmFuY2hlcyBhbmQgdGFncy4gIEEKK2JyYW5jaCBoZWFkIGlzIHN0b3JlZCB1bmRlciBgJEdJVF9ESVIvcmVmcy9oZWFkc2AgZGlyZWN0b3J5LCBhbmQKK2EgdGFnIGlzIHN0b3JlZCB1bmRlciBgJEdJVF9ESVIvcmVmcy90YWdzYCBkaXJlY3RvcnkuICBnaXQKK2ltcG9zZXMgdGhlIGZvbGxvd2luZyBydWxlcyBvbiBob3cgcmVmcyBhcmUgbmFtZWQ6CisKKy4gSXQgY291bGQgYmUgbmFtZWQgaGllcmFyY2hpY2FsbHkgKGkuZS4gc2VwYXJhdGVkIHdpdGggc2xhc2gKKyAgYC9gKSwgYnV0IGVhY2ggb2YgaXRzIGNvbXBvbmVudCBjYW5ub3QgYmVnaW4gd2l0aCBhIGRvdCBgLmA7CisKKy4gSXQgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgYC4uYCBhbnl3aGVyZTsKKworLiBJdCBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciAoaS5lLiBieXRlcyB3aG9zZQorICB2YWx1ZXMgYXJlIGxvd2VyIHRoYW4gXDA0MCwgb3IgXDE3NyBgREVMYCksIHNwYWNlLCB0aWxkZSBgfmAsCisgIGNhcmV0IGB7Y2FyZXR9YCwgb3IgY29sb24gYDpgIGFueXdoZXJlOworCisuIEl0IGNhbm5vdCBlbmQgd2l0aCBhIHNsYXNoIGAvYC4KKworVGhlc2UgcnVsZXMgbWFrZXMgaXQgZWFzeSBmb3Igc2hlbGwgc2NyaXB0IGJhc2VkIHRvb2xzIHRvIHBhcnNlCityZWZuYW1lcywgYW5kIGFsc28gYXZvaWRzIGFtYmlndWl0aWVzIGluIGNlcnRhaW4gcmVmbmFtZQorZXhwcmVzc2lvbnMgKHNlZSBnaXRsaW5rOmdpdC1yZXYtcGFyc2VbMV0pLiAgTmFtZWx5OgorCisuIGRvdWJsZS1kb3QgYC4uYCBhcmUgb2Z0ZW4gdXNlZCBhcyBpbiBgcmVmMS4ucmVmMmAsIGFuZCBpbiBzb21lCisgIGNvbnRleHQgdGhpcyBub3RhdGlvbiBtZWFucyBge2NhcmV0fXJlZjEgcmVmMmAgKGkuZS4gbm90IGluCisgIHJlZjEgYW5kIGluIHJlZjIpLgorCisuIHRpbGRlIGB+YCBhbmQgY2FyZXQgYHtjYXJldH1gIGFyZSB1c2VkIHRvIGludHJvZHVjZSBwb3N0Zml4CisgICdudGggcGFyZW50JyBhbmQgJ3BlZWwgb25pb24nIG9wZXJhdGlvbi4KKworLiBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncworICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CmluZGV4IGJiMTUyMTQuLjU4OWRjOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY2hlY2tvdXQtaW5kZXgoMSkKID09PT09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzAsOCArMjksOCBAQAogCWZvcmNlcyBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMKIAogLWE6OgotCWNoZWNrcyBvdXQgYWxsIGZpbGVzIGluIHRoZSBjYWNoZSAod2lsbCB0aGVuIGNvbnRpbnVlIHRvCi0JcHJvY2VzcyBsaXN0ZWQgZmlsZXMpLgorCWNoZWNrcyBvdXQgYWxsIGZpbGVzIGluIHRoZSBjYWNoZS4gIENhbm5vdCBiZSB1c2VkCisJdG9nZXRoZXIgd2l0aCBleHBsaWNpdCBmaWxlbmFtZXMuCiAKIC1uOjoKIAlEb24ndCBjaGVja291dCBuZXcgZmlsZXMsIG9ubHkgcmVmcmVzaCBmaWxlcyBhbHJlYWR5IGNoZWNrZWQKQEAgLTQ0LDE1ICs0Myw5IEBACiAtLTo6CiAJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KIAotTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgZmxhZ3MgbWF0dGVyczoKK1RoZSBvcmRlciBvZiB0aGUgZmxhZ3MgdXNlZCB0byBtYXR0ZXIsIGJ1dCBub3QgYW55bW9yZS4KIAotICAgICBnaXQtY2hlY2tvdXQtaW5kZXggLWEgLWYgZmlsZS5jCi0KLXdpbGwgZmlyc3QgY2hlY2sgb3V0IGFsbCBmaWxlcyBsaXN0ZWQgaW4gdGhlIGNhY2hlIChidXQgbm90IG92ZXJ3cml0ZQotYW55IG9sZCBvbmVzKSwgYW5kIHRoZW4gZm9yY2UtY2hlY2tvdXQgYGZpbGUuY2AgYSBzZWNvbmQgdGltZSAoaWUgdGhhdAotb25lICp3aWxsKiBvdmVyd3JpdGUgYW55IG9sZCBjb250ZW50cyB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lKS4KLQotQWxzbywganVzdCBkb2luZyAiZ2l0LWNoZWNrb3V0LWluZGV4IiBkb2VzIG5vdGhpbmcuIFlvdSBwcm9iYWJseSBtZWFudAorSnVzdCBkb2luZyAiZ2l0LWNoZWNrb3V0LWluZGV4IiBkb2VzIG5vdGhpbmcuIFlvdSBwcm9iYWJseSBtZWFudAogImdpdC1jaGVja291dC1pbmRleCAtYSIuIEFuZCBpZiB5b3Ugd2FudCB0byBmb3JjZSBpdCwgeW91IHdhbnQKICJnaXQtY2hlY2tvdXQtaW5kZXggLWYgLWEiLgogCkBAIC03OCwxMiArNzEsMTIgQEAKIFRoZSBwcmVmaXggYWJpbGl0eSBiYXNpY2FsbHkgbWFrZXMgaXQgdHJpdmlhbCB0byB1c2UKIGdpdC1jaGVja291dC1pbmRleCBhcyBhbiAiZXhwb3J0IGFzIHRyZWUiIGZ1bmN0aW9uLiBKdXN0IHJlYWQgdGhlCiBkZXNpcmVkIHRyZWUgaW50byB0aGUgaW5kZXgsIGFuZCBkbyBhCi0gIAorCiAgICAgICAgIGdpdC1jaGVja291dC1pbmRleCAtLXByZWZpeD1naXQtZXhwb3J0LWRpci8gLWEKLSAgCisKIGFuZCBnaXQtY2hlY2tvdXQtaW5kZXggd2lsbCAiZXhwb3J0IiB0aGUgY2FjaGUgaW50byB0aGUgc3BlY2lmaWVkCiBkaXJlY3RvcnkuCi0gIAorCiBOT1RFIFRoZSBmaW5hbCAiLyIgaXMgaW1wb3J0YW50LiBUaGUgZXhwb3J0ZWQgbmFtZSBpcyBsaXRlcmFsbHkganVzdAogcHJlZml4ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHN0cmluZywgc28geW91IGNhbiBhbHNvIGRvIHNvbWV0aGluZyBsaWtlCiAKQEAgLTEwMiw1ICs5NSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dAppbmRleCAzYmM3NzQzLi5iN2JiMWI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC03LDEyICs3LDI0IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1jaGVja291dCcgWy1mXSBbLWIgPG5ld19icmFuY2g+XSBbPGJyYW5jaD5dCisnZ2l0LWNoZWNrb3V0JyBbLWZdIFstYiA8bmV3X2JyYW5jaD5dIFs8YnJhbmNoPl0gWzxwYXRocz4uLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotVXBkYXRlcyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQgYnJhbmNoLAotPGJyYW5jaD4uIFVwZGF0ZXMgSEVBRCB0byBiZSA8YnJhbmNoPiBvciwgaWYgc3BlY2lmaWVkLCA8bmV3X2JyYW5jaD4uCisKK1doZW4gPHBhdGhzPiBhcmUgbm90IGdpdmVuLCB0aGlzIGNvbW1hbmQgc3dpdGNoZXMgYnJhbmNoZXMsIGJ5Cit1cGRhdGluZyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSB0byByZWZsZWN0IHRoZSBzcGVjaWZpZWQKK2JyYW5jaCwgPGJyYW5jaD4sIGFuZCB1cGRhdGluZyBIRUFEIHRvIGJlIDxicmFuY2g+IG9yLCBpZgorc3BlY2lmaWVkLCA8bmV3X2JyYW5jaD4uCisKK1doZW4gPHBhdGhzPiBhcmUgZ2l2ZW4sIHRoaXMgY29tbWFuZCBkb2VzICpub3QqIHN3aXRjaAorYnJhbmNoZXMuICBJdCB1cGRhdGVzIHRoZSBuYW1lZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIGZyb20KK3RoZSBpbmRleCBmaWxlIChpLmUuIGl0IHJ1bnMgYGdpdC1jaGVja291dC1pbmRleCAtZiAtdWApLiAgSW4KK3RoaXMgY2FzZSwgYC1mYCBhbmQgYC1iYCBvcHRpb25zIGFyZSBtZWFuaW5nbGVzcyBhbmQgZ2l2aW5nCitlaXRoZXIgb2YgdGhlbSByZXN1bHRzIGluIGFuIGVycm9yLiAgPGJyYW5jaD4gYXJndW1lbnQgY2FuIGJlCit1c2VkIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB0cmVlLWlzaCB0byB1cGRhdGUgdGhlIGluZGV4IGZvciB0aGUKK2dpdmVuIHBhdGhzIGJlZm9yZSB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlLgorCiAKIE9QVElPTlMKIC0tLS0tLS0KQEAgLTI5LDYgKzQxLDMwIEBACiAJQnJhbmNoIHRvIGNoZWNrb3V0OyBtYXkgYmUgYW55IG9iamVjdCBJRCB0aGF0IHJlc29sdmVzIHRvIGEKIAljb21taXQuIERlZmF1bHRzIHRvIEhFQUQuCiAKKworRVhBTVBMRQorLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIHNlcXVlbmNlIGNoZWNrcyBvdXQgdGhlIGBtYXN0ZXJgIGJyYW5jaCwgcmV2ZXJ0cwordGhlIGBNYWtlZmlsZWAgdG8gdHdvIHJldmlzaW9ucyBiYWNrLCBkZWxldGVzIGhlbGxvLmMgYnkKK21pc3Rha2UsIGFuZCBnZXRzIGl0IGJhY2sgZnJvbSB0aGUgaW5kZXguCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCBjaGVja291dCBtYXN0ZXJ+MiBNYWtlZmlsZQorJCBybSAtZiBoZWxsby5jCiskIGdpdCBjaGVja291dCBoZWxsby5jCistLS0tLS0tLS0tLS0KKworSWYgeW91IGhhdmUgYW4gdW5mb3J0dW5hdGUgYnJhbmNoIHRoYXQgaXMgbmFtZWQgYGhlbGxvLmNgLCB0aGUKK2xhc3Qgc3RlcCBhYm92ZSB3b3VsZCBiZSBjb25mdXNlZCBhcyBhbiBpbnN0cnVjdGlvbiB0byBzd2l0Y2ggdG8KK3RoYXQgYnJhbmNoLiAgWW91IHNob3VsZCBpbnN0ZWFkIHdyaXRlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC0tIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KQEAgLTM5LDUgKzc1LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CmluZGV4IDM4YTQ4NzUuLjI2ZTA0NjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY2hlcnJ5LXBpY2soMSkKID09PT09PT09PT09PT09PT09PQotdjAuOTkuNSBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0yMiw3ICsyMSw3IEBACiAJQ29tbWl0IHRvIGNoZXJyeS1waWNrLgogCiAtcjo6Ci0JVXN1YWxsIHRoZSBjb21tYW5kIGFwcGVuZHMgd2hpY2ggY29tbWl0IHdhcworCVVzdWFsbHkgdGhlIGNvbW1hbmQgYXBwZW5kcyB3aGljaCBjb21taXQgd2FzCiAJY2hlcnJ5LXBpY2tlZCBhZnRlciB0aGUgb3JpZ2luYWwgY29tbWl0IG1lc3NhZ2Ugd2hlbgogCW1ha2luZyBhIGNvbW1pdC4gIFRoaXMgb3B0aW9uLCAnLS1yZXBsYXknLCBjYXVzZXMgaXQgdG8KIAl1c2UgdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIGludGFjdC4gIFRoaXMgaXMgdXNlZnVsCkBAIC0zOCw5ICszNyw5IEBACiAJb3B0aW9uIGlzIHVzZWQsIHlvdXIgd29ya2luZyB0cmVlIGRvZXMgbm90IGhhdmUgdG8gbWF0Y2gKIAl0aGUgSEVBRCBjb21taXQuICBUaGUgY2hlcnJ5LXBpY2sgaXMgZG9uZSBhZ2FpbnN0IHRoZQogCWJlZ2lubmluZyBzdGF0ZSBvZiB5b3VyIHdvcmtpbmcgdHJlZS4KLQotCVRoaXMgaXMgdXNlZnVsIHdoZW4gY2hlcnJ5LXBpY2tpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJwotCWVmZmVjdCB0byB5b3VyIHdvcmtpbmcgdHJlZSBpbiBhIHJvdy4KKysKK1RoaXMgaXMgdXNlZnVsIHdoZW4gY2hlcnJ5LXBpY2tpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJworZWZmZWN0IHRvIHlvdXIgd29ya2luZyB0cmVlIGluIGEgcm93LgogCiAKIEF1dGhvcgpAQCAtNTMsNSArNTIsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dAppbmRleCA5ZmY3YmMyLi5hZjg3OTY2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKQEAgLTM4LDUgKzM4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS1wYWNrLnR4dAppbmRleCAwZGM4OWE5Li5jZmM3YjYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS1wYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS1wYWNrLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jbG9uZS1wYWNrKDEpCiA9PT09PT09PT09PT09PT09PQotdjAuMSwgSnVseSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTksMjcgKzgsMjMgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWNsb25lLXBhY2snIFstcV0gWy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxoZWFkPi4uLl0KKydnaXQtY2xvbmUtcGFjaycgWy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPl0gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxoZWFkPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCiBDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSBieSBpbnZva2luZwogJ2dpdC11cGxvYWQtcGFjaycsIHBvc3NpYmx5IG9uIHRoZSByZW1vdGUgaG9zdCB2aWEgc3NoLCBpbgotdGhlIG5hbWVkIHJlcG9zaXRvcnksIGFuZCBpbnZva2luZyAnZ2l0LXVucGFjay1vYmplY3RzJyBsb2NhbGx5Ci10byByZWNlaXZlIHRoZSBwYWNrLgordGhlIG5hbWVkIHJlcG9zaXRvcnksIGFuZCBzdG9yZXMgdGhlIHNlbnQgcGFjayBpbiB0aGUgbG9jYWwKK3JlcG9zaXRvcnkuCiAKIE9QVElPTlMKIC0tLS0tLS0KLS1xOjoKLQlQYXNzICctcScgZmxhZyB0byAnZ2l0LXVucGFjay1vYmplY3RzJzsgdGhpcyBtYWtlcyB0aGUKLQljbG9uaW5nIHByb2Nlc3MgbGVzcyB2ZXJib3NlLgotCiAtLWV4ZWM9PGdpdC11cGxvYWQtcGFjaz46OgogCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCi0JcmVtb3RlIHNpZGUsIGlmIGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILgotCUluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKKwlyZW1vdGUgc2lkZSwgaWYgaXQgaXMgbm90IGZvdW5kIG9uIHlvdXIgJFBBVEguCisJSW5zdGFsbGF0aW9ucyBvZiBzc2hkIGlnbm9yZSB0aGUgdXNlcidzIGVudmlyb25tZW50CiAJc2V0dXAgc2NyaXB0cyBmb3IgbG9naW4gc2hlbGxzIChlLmcuIC5iYXNoX3Byb2ZpbGUpIGFuZAotCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBHSVQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KIAlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKIAl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCiAJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQpAQCAtNjEsNSArNTYsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKaW5kZXggY2ZmODdlYS4uZmVmZDI5OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jbG9uZSgxKQogPT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSwxNCArOCwzMCBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgY2xvbmUnIFstbF0gWy11IDx1cGxvYWQtcGFjaz5dIFstcV0gPHJlcG9zaXRvcnk+IDxkaXJlY3Rvcnk+CisnZ2l0LWNsb25lJyBbLWwgWy1zXV0gWy1xXSBbLW5dIFstdSA8dXBsb2FkLXBhY2s+XSA8cmVwb3NpdG9yeT4gPGRpcmVjdG9yeT4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1DbG9uZXMgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeS4KK0Nsb25lcyBhIHJlcG9zaXRvcnkgaW50byBhIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5LiAgQWxsIHJlbW90ZQorYnJhbmNoIGhlYWRzIGFyZSBjb3BpZWQgdW5kZXIgYCRHSVRfRElSL3JlZnMvaGVhZHMvYCwgZXhjZXB0Cit0aGF0IHRoZSByZW1vdGUgYG1hc3RlcmAgaXMgYWxzbyBjb3BpZWQgdG8gYG9yaWdpbmAgYnJhbmNoLgorCitJbiBhZGRpdGlvbiwgYCRHSVRfRElSL3JlbW90ZXMvb3JpZ2luYCBmaWxlIGlzIHNldCB1cCB0byBoYXZlCit0aGlzIGxpbmU6CisKKwlQdWxsOiBtYXN0ZXI6b3JpZ2luCisKK1RoaXMgaXMgdG8gaGVscCB0aGUgdHlwaWNhbCB3b3JrZmxvdyBvZiB3b3JraW5nIG9mZiBvZiB0aGUKK3JlbW90ZSBgbWFzdGVyYCBicmFuY2guICBFdmVyeSB0aW1lIGBnaXQgcHVsbGAgd2l0aG91dCBhcmd1bWVudAoraXMgcnVuLCB0aGUgcHJvZ3Jlc3Mgb24gdGhlIHJlbW90ZSBgbWFzdGVyYCBicmFuY2ggaXMgdHJhY2tlZCBieQorY29weWluZyBpdCBpbnRvIHRoZSBsb2NhbCBgb3JpZ2luYCBicmFuY2gsIGFuZCBtZXJnZWQgaW50byB0aGUKK2JyYW5jaCB5b3UgYXJlIGN1cnJlbnRseSB3b3JraW5nIG9uLiAgUmVtb3RlIGJyYW5jaGVzIG90aGVyIHRoYW4KK2BtYXN0ZXJgIGFyZSBhbHNvIGFkZGVkIHRoZXJlIHRvIGJlIHRyYWNrZWQuCisKIAogT1BUSU9OUwogLS0tLS0tLQorLS1sb2NhbDo6CiAtbDo6CiAJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tIGlzIG9uIGEgbG9jYWwgbWFjaGluZSwKIAl0aGlzIGZsYWcgYnlwYXNzZXMgbm9ybWFsICJnaXQgYXdhcmUiIHRyYW5zcG9ydApAQCAtMjUsMTAgKzQwLDIzIEBACiAJVGhlIGZpbGVzIHVuZGVyIC5naXQvb2JqZWN0cy8gZGlyZWN0b3J5IGFyZSBoYXJkbGlua2VkCiAJdG8gc2F2ZSBzcGFjZSB3aGVuIHBvc3NpYmxlLgogCistLXNoYXJlZDo6Cistczo6CisJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKKwlpbnN0ZWFkIG9mIHVzaW5nIGhhcmQgbGlua3MsIGF1dG9tYXRpY2FsbHkgc2V0dXAKKwkuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGl2ZXMgdG8gc2hhcmUgdGhlIG9iamVjdHMKKwl3aXRoIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4gIFRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeQorCXN0YXJ0cyBvdXQgd2l0aG91dCBhbnkgb2JqZWN0IG9mIGl0cyBvd24uCisKKy0tcXVpZXQ6OgogLXE6OgogCU9wZXJhdGUgcXVpZXRseS4gIFRoaXMgZmxhZyBpcyBwYXNzZWQgdG8gInJzeW5jIiBhbmQKIAkiZ2l0LWNsb25lLXBhY2siIGNvbW1hbmRzIHdoZW4gZ2l2ZW4uCiAKKy1uOjoKKwlObyBjaGVja291dCBvZiBIRUFEIGlzIHBlcmZvcm1lZCBhZnRlciB0aGUgY2xvbmUgaXMgY29tcGxldGUuCisKKy0tdXBsb2FkLXBhY2sgPHVwbG9hZC1wYWNrPjo6CiAtdSA8dXBsb2FkLXBhY2s+OjoKIAlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBoYW5kbGVkCiAJYnkgJ2dpdC1jbG9uZS1wYWNrJywgJy0tZXhlYz08dXBsb2FkLXBhY2s+JyBpcyBwYXNzZWQgdG8KQEAgLTM3LDE0ICs2NSwxMyBAQAogCiA8cmVwb3NpdG9yeT46OgogCVRoZSAocG9zc2libHkgcmVtb3RlKSByZXBvc2l0b3J5IHRvIGNsb25lIGZyb20uICBJdCBjYW4KLQliZSBhbiAicnN5bmM6Ly9ob3N0L2RpciIgVVJMLCBhbiAiaHR0cDovL2hvc3QvZGlyIiBVUkwsCi0Jb3IgWzxob3N0PjpdL2RpciBub3RhdGlvbiB0aGF0IGlzIHVzZWQgYnkgJ2dpdC1jbG9uZS1wYWNrJy4KLQlDdXJyZW50bHkgaHR0cCB0cmFuc3BvcnQgaXMgbm90IHN1cHBvcnRlZC4KKwliZSBhbnkgVVJMIGdpdC1mZXRjaCBzdXBwb3J0cy4KIAogPGRpcmVjdG9yeT46OgogCVRoZSBuYW1lIG9mIGEgbmV3IGRpcmVjdG9yeSB0byBiZSBjbG9uZWQgaW50by4gIEl0IGlzIGFuCiAJZXJyb3IgdG8gc3BlY2lmeSBhbiBleGlzdGluZyBkaXJlY3RvcnkuCiAKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgpAQCAtNTYsNSArODMsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKaW5kZXggNTUzNjY2OC4uYjY0Y2Q2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1jb21taXQtdHJlZSgxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zNiw3ICszNSw3IEBACiAJQW4gZXhpc3RpbmcgdHJlZSBvYmplY3QKIAogLXAgPHBhcmVudCBjb21taXQ+OjoKLQlFYWNoICctcCcgaW5kaWNhdGVzIGEgdGhlIGlkIG9mIGEgcGFyZW50IGNvbW1pdCBvYmplY3QuCisJRWFjaCAnLXAnIGluZGljYXRlcyB0aGUgaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdC4KIAkKIAogQ29tbWl0IEluZm9ybWF0aW9uCkBAIC00OSw4ICs0OCw4IEBACiAtIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgogCiBJZiBub3QgcHJvdmlkZWQsICJnaXQtY29tbWl0LXRyZWUiIHVzZXMgeW91ciBuYW1lLCBob3N0bmFtZSBhbmQgZG9tYWluIHRvCi1wcm92aWRlIGF1dGhvciBhbmQgY29tbWl0dGVyIGluZm8uIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlCi1mb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorcHJvdmlkZSBhdXRob3IgYW5kIGNvbW1pdHRlciBpbmZvLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5CitlaXRoZXIgYC5naXQvY29uZmlnYCBmaWxlLCBvciB1c2luZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KIAogCUdJVF9BVVRIT1JfTkFNRQogCUdJVF9BVVRIT1JfRU1BSUwKQEAgLTU4LDExICs1NywxOCBAQAogCUdJVF9DT01NSVRURVJfTkFNRQogCUdJVF9DT01NSVRURVJfRU1BSUwKIAotKG5iIDwsPiBhbmQgJ1xuJ3MgYXJlIHN0cmlwcGVkKQorKG5iICI8IiwgIj4iIGFuZCAiXG4icyBhcmUgc3RyaXBwZWQpCisKK0luIGAuZ2l0L2NvbmZpZ2AgZmlsZSwgdGhlIGZvbGxvd2luZyBpdGVtcyBhcmUgdXNlZDoKKworCVt1c2VyXQorCQluYW1lID0gIllvdXIgTmFtZSIKKwkJZW1haWwgPSAieW91ckBlbWFpbC5hZGRyZXNzLnh6IgogCiBBIGNvbW1pdCBjb21tZW50IGlzIHJlYWQgZnJvbSBzdGRpbiAobWF4IDk5OSBjaGFycykuIElmIGEgY2hhbmdlbG9nCi1lbnRyeSBpcyBub3QgcHJvdmlkZWQgdmlhICc8JyByZWRpcmVjdGlvbiwgImdpdC1jb21taXQtdHJlZSIgd2lsbCBqdXN0IHdhaXQKLWZvciBvbmUgdG8gYmUgZW50ZXJlZCBhbmQgdGVybWluYXRlZCB3aXRoIF5ECitlbnRyeSBpcyBub3QgcHJvdmlkZWQgdmlhICI8IiByZWRpcmVjdGlvbiwgImdpdC1jb21taXQtdHJlZSIgd2lsbCBqdXN0IHdhaXQKK2ZvciBvbmUgdG8gYmUgZW50ZXJlZCBhbmQgdGVybWluYXRlZCB3aXRoIF5ELgorCiAKIERpYWdub3N0aWNzCiAtLS0tLS0tLS0tLQpAQCAtNzUsNyArODEsNyBAQAogCiBTZWUgQWxzbwogLS0tLS0tLS0KLWxpbms6Z2l0LXdyaXRlLXRyZWUuaHRtbFtnaXQtd3JpdGUtdHJlZV0KK2dpdGxpbms6Z2l0LXdyaXRlLXRyZWVbMV0KIAogCiBBdXRob3IKQEAgLTg4LDUgKzk0LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKaW5kZXggYWZjZjZlZi4uMWVkYzI3OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWNvbW1pdCgxKQogPT09PT09PT09PT09PQotdjAuOTkuNCwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOCw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IGNvbW1pdCcgWy1hXSBbLXNdIFstdl0gWygtYyB8IC1DKSA8Y29tbWl0PiB8IC1GIDxmaWxlPiB8IC1tIDxtc2c+XSBbLWVdIDxmaWxlPi4uLgorJ2dpdC1jb21taXQnIFstYV0gWy1zXSBbLXZdIFsoLWMgfCAtQykgPGNvbW1pdD4gfCAtRiA8ZmlsZT4gfCAtbSA8bXNnPl0gWy1lXSA8ZmlsZT4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC02OSw0ICs2OCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb252ZXJ0LW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29udmVydC1vYmplY3RzLnR4dAppbmRleCBiMWJjMWM1Li5iMTIyMGMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb252ZXJ0LW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQKQEAgLTEsMTAgKzEsOSBAQAogZ2l0LWNvbnZlcnQtb2JqZWN0cygxKQogPT09PT09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQotZ2l0LWNvbnZlcnQtb2JqZWN0cyAtIENvbnZlcnRzIG9sZC1zdHlsZSBHSVQgcmVwb3NpdG9yeQorZ2l0LWNvbnZlcnQtb2JqZWN0cyAtIENvbnZlcnRzIG9sZC1zdHlsZSBnaXQgcmVwb3NpdG9yeQogCiAKIFNZTk9QU0lTCkBAIC0xMyw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotQ29udmVydHMgb2xkLXN0eWxlIEdJVCByZXBvc2l0b3J5IHRvIHRoZSBsYXRlc3QgZm9ybWF0CitDb252ZXJ0cyBvbGQtc3R5bGUgZ2l0IHJlcG9zaXRvcnkgdG8gdGhlIGxhdGVzdCBmb3JtYXQKIAogCiBBdXRob3IKQEAgLTI2LDUgKzI1LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dAppbmRleCA4MjQ4NTJjLi4zNjg4OGQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb3VudC1vYmplY3RzLnR4dApAQCAtMjQsNSArMjQsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dAppbmRleCBlZGY5NTIxLi40YjYyMjU2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtY3ZzaW1wb3J0KDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTEsNyArMTAsNyBAQAogLS0tLS0tLS0KICdnaXQtY3ZzaW1wb3J0JyBbIC1vIDxicmFuY2gtZm9yLUhFQUQ+IF0gWyAtaCBdIFsgLXYgXQogCQkJWyAtZCA8Q1ZTUk9PVD4gXSBbIC1wIDxvcHRpb25zLWZvci1jdnNwcz4gXQotCQkJWyAtQyA8R0lUX3JlcG9zaXRvcnk+IF0gWyAtaSBdIFsgLWsgXQorCQkJWyAtQyA8Z2l0X3JlcG9zaXRvcnk+IF0gWyAtaSBdIFsgLVAgPGZpbGU+IF0gWyAtayBdCiAJCQlbIC1zIDxzdWJzdD4gXSBbIC1tIF0gWyAtTSByZWdleCBdIFsgPENWU19tb2R1bGU+IF0KIAogCkBAIC0zMSw3ICszMCw3IEBACiAJYXJlIHN1cHBvcnRlZC4KIAogLUMgPHRhcmdldC1kaXI+OjoKLSAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorICAgICAgICBUaGUgZ2l0IHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CiAgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KIAogLWk6OgpAQCAtNTEsMTUgKzUwLDE5IEBACiAJVGhlICdIRUFEJyBicmFuY2ggZnJvbSBDVlMgaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4KIAl0aGUgZ2l0IHJlcG9zaXRvcnksIGFzICdIRUFEJyBhbHJlYWR5IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgZ2l0LgogCVVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaW50byBhIGRpZmZlcmVudCBicmFuY2guCi0KLQlVc2UgJy1vIG1hc3RlcicgZm9yIGNvbnRpbnVpbmcgYW4gaW1wb3J0IHRoYXQgd2FzIGluaXRpYWxseSBkb25lIGJ5Ci0JdGhlIG9sZCBjdnMyZ2l0IHRvb2wuCisrCitVc2UgJy1vIG1hc3RlcicgZm9yIGNvbnRpbnVpbmcgYW4gaW1wb3J0IHRoYXQgd2FzIGluaXRpYWxseSBkb25lIGJ5Cit0aGUgb2xkIGN2czJnaXQgdG9vbC4KIAogLXAgPG9wdGlvbnMtZm9yLWN2c3BzPjo6CiAJQWRkaXRpb25hbCBvcHRpb25zIGZvciBjdnNwcy4KIAlUaGUgb3B0aW9ucyAnLXUnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCitJZiB5b3UgbmVlZCB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZW0gd2l0aCBhIGNvbW1hLgogCi0JSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KKy1QOjogPGN2c3BzLW91dHB1dC1maWxlPgorCUluc3RlYWQgb2YgY2FsbGluZyBjdnNwcywgcmVhZCB0aGUgcHJvdmlkZWQgY3ZzcHMgb3V0cHV0IGZpbGUuIFVzZWZ1bAorCWZvciBkZWJ1Z2dpbmcgb3Igd2hlbiBjdnNwcyBpcyBiZWluZyBoYW5kbGVkIG91dHNpZGUgY3ZzaW1wb3J0LgogCiAtbTo6ICAgIAogCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCkBAIC0xMDUsNSArMTA4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKaW5kZXggNWZjNDVmMi4uNjdjNWYyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0zLDExICszLDEyIEBACiAKIE5BTUUKIC0tLS0KLWdpdC1kYWVtb24gLSBBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHSVQgcmVwb3NpdG9yaWVzLgorZ2l0LWRhZW1vbiAtIEEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIGdpdCByZXBvc2l0b3JpZXMuCiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1kYWVtb24nIFstLWluZXRkIHwgLS1wb3J0PW5dCisnZ2l0LWRhZW1vbicgWy0tdmVyYm9zZV0gWy0tc3lzbG9nXSBbLS1pbmV0ZCB8IC0tcG9ydD1uXSBbLS1leHBvcnQtYWxsXQorICAgICAgICAgICAgIFstLXRpbWVvdXQ9bl0gWy0taW5pdC10aW1lb3V0PW5dIFtkaXJlY3RvcnkuLi5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjAsMTggKzIxLDQyIEBACiAKIEl0IHZlcmlmaWVzIHRoYXQgdGhlIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgYW5kCiBpdCB3aWxsIHJlZnVzZSB0byBleHBvcnQgYW55IGdpdCBkaXJlY3RvcnkgdGhhdCBoYXNuJ3QgZXhwbGljaXRseSBiZWVuIG1hcmtlZAotZm9yIGV4cG9ydCB0aGlzIHdheS4KK2ZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUgJy0tZXhwb3J0LWFsbCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCkuIElmIHlvdQorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0LWRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKK3RoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KIAogVGhpcyBpcyBpZGVhbGx5IHN1aXRlZCBmb3IgcmVhZC1vbmx5IHVwZGF0ZXMsIGllIHB1bGxpbmcgZnJvbSBnaXQgcmVwb3NpdG9yaWVzLgogCiBPUFRJT05TCiAtLS0tLS0tCistLWV4cG9ydC1hbGw6OgorCUFsbG93IHB1bGxpbmcgZnJvbSBhbGwgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UgR0lUIHJlcG9zaXRvcmllcworCShoYXZlIHRoZSAnb2JqZWN0cycgc3ViZGlyZWN0b3J5IGFuZCBhICdIRUFEJyBmaWxlKSwgZXZlbiBpZiB0aGV5CisJZG8gbm90IGhhdmUgdGhlICdnaXQtZGFlbW9uLWV4cG9ydC1vaycgZmlsZS4KKwogLS1pbmV0ZDo6CiAJSGF2ZSB0aGUgc2VydmVyIHJ1biBhcyBhbiBpbmV0ZCBzZXJ2aWNlLgogCiAtLXBvcnQ6OgogCUxpc3RlbiBvbiBhbiBhbHRlcm5hdGl2ZSBwb3J0LgogCistLWluaXQtdGltZW91dDo6CisJVGltZW91dCBiZXR3ZWVuIHRoZSBtb21lbnQgdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZQorCWNsaWVudCByZXF1ZXN0IGlzIHJlY2VpdmVkICh0eXBpY2FsbHkgYSByYXRoZXIgbG93IHZhbHVlLCBzaW5jZQorCXRoYXQgc2hvdWxkIGJlIGJhc2ljYWxseSBpbW1lZGlhdGUpLgorCistLXRpbWVvdXQ6OgorCVRpbWVvdXQgZm9yIHNwZWNpZmljIGNsaWVudCBzdWItcmVxdWVzdHMuIFRoaXMgaW5jbHVkZXMgdGhlIHRpbWUKKwlpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGltZSBzcGVudAorCXdhaXRpbmcgZm9yIG5leHQgY2xpZW50J3MgcmVxdWVzdC4KKworLS1zeXNsb2c6OgorCUxvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBzdGRlcnIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbXBseQorCS0tdmVyYm9zZSwgdGh1cyBieSBkZWZhdWx0IG9ubHkgZXJyb3IgY29uZGl0aW9ucyB3aWxsIGJlIGxvZ2dlZC4KKworLS12ZXJib3NlOjoKKwlMb2cgZGV0YWlscyBhYm91dCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgYW5kIHJlcXVlc3RlZCBmaWxlcy4KKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQgWU9TSElGVUpJIEhpZGVha2kgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgpAQCAtNDIsNSArNjcsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CmluZGV4IDcyYzdhNzEuLmUzODczODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWRpZmYtZmlsZXMoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC00MCw1ICszOSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaGVscGVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaGVscGVyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZmNWYzOS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWhlbHBlci50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1naXQtZGlmZi1oZWxwZXIoMSkKLT09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKLQotTkFNRQotLS0tLQotZ2l0LWRpZmYtaGVscGVyIC0gR2VuZXJhdGVzIHBhdGNoIGZvcm1hdCBvdXRwdXQgZm9yIGdpdC1kaWZmLSoKLQotCi1TWU5PUFNJUwotLS0tLS0tLS0KLSdnaXQtZGlmZi1oZWxwZXInIFstel0gWy1TPHN0cmluZz5dIFstTzxvcmRlcmZpbGU+XQotCi1ERVNDUklQVElPTgotLS0tLS0tLS0tLS0KLVJlYWRzIG91dHB1dCBmcm9tICJnaXQtZGlmZi1pbmRleCIsICJnaXQtZGlmZi10cmVlIiBhbmQgImdpdC1kaWZmLWZpbGVzIiBhbmQKLWdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0LgotCi1PUFRJT05TCi0tLS0tLS0tCi0tejo6Ci0JXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBpbnB1dAotCi0tUzxzdHJpbmc+OjoKLQlMb29rIGZvciBkaWZmZXJlbmNlcyB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UgaW4gPHN0cmluZz4uCi0KLS0tcGlja2F4ZS1hbGw6OgotCVdoZW4gLVMgZmluZHMgYSBjaGFuZ2UsIHNob3cgYWxsIHRoZSBjaGFuZ2VzIGluIHRoYXQKLQljaGFuZ2VzZXQsIG5vdCBqdXN0IHRoZSBmaWxlcyB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2UKLQlpbiA8c3RyaW5nPi4KLQotLU88b3JkZXJmaWxlPjo6Ci0JT3V0cHV0IHRoZSBwYXRjaCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGluIHRoZQotCTxvcmRlcmZpbGU+LCB3aGljaCBoYXMgb25lIHNoZWxsIGdsb2IgcGF0dGVybiBwZXIgbGluZS4KLQotU2VlIEFsc28KLS0tLS0tLS0tCi1UaGUgc2VjdGlvbiBvbiBnZW5lcmF0aW5nIHBhdGNoZXMgaW4gbGluazpnaXQtZGlmZi1pbmRleC5odG1sW2dpdC1kaWZmLWluZGV4XQotCi0KLUF1dGhvcgotLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KLQotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tLQotRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KLQotR0lUCi0tLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CmluZGV4IDEyYmZjYjMuLjJmYzNlZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWRpZmYtaW5kZXgoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC04Niw4ICs4NSw4IEBACiBhICJnaXQtd3JpdGUtdHJlZSIgKyAiZ2l0LWRpZmYtdHJlZSIuIFRodXMgdGhhdCdzIHRoZSBkZWZhdWx0IG1vZGUuCiBUaGUgbm9uLWNhY2hlZCB2ZXJzaW9uIGFza3MgdGhlIHF1ZXN0aW9uOgogCi0gICBzaG93IG1lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQKLSAgIHRyZWUgLSBpbmRleCBjb250ZW50cyBfYW5kXyBmaWxlcyB0aGF0IGFyZW4ndCB1cC10by1kYXRlCisgIHNob3cgbWUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gSEVBRCBhbmQgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dAorICB0cmVlIC0gaW5kZXggY29udGVudHMgX2FuZF8gZmlsZXMgdGhhdCBhcmVuJ3QgdXAtdG8tZGF0ZQogCiB3aGljaCBpcyBvYnZpb3VzbHkgYSB2ZXJ5IHVzZWZ1bCBxdWVzdGlvbiB0b28sIHNpbmNlIHRoYXQgdGVsbHMgeW91IHdoYXQKIHlvdSAqY291bGQqIGNvbW1pdC4gQWdhaW4sIHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgImdpdC1kaWZmLXRyZWUgLXIiCkBAIC0xMDcsMTMgKzEwNiwxMyBAQAogZ2V0IHRoZSByZWFsIGRpZmYsIHlvdSBuZWVkIHRvIGxvb2sgYXQgdGhlIG9iamVjdCBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkKIGRpcmVjdGx5IHJhdGhlciB0aGFuIGRvIGFuIG9iamVjdC10by1vYmplY3QgZGlmZi4KIAotTk9URSEgQXMgd2l0aCBvdGhlciBjb21tYW5kcyBvZiB0aGlzIHR5cGUsICJnaXQtZGlmZi1pbmRleCIgZG9lcyBub3QKK05PVEU6IEFzIHdpdGggb3RoZXIgY29tbWFuZHMgb2YgdGhpcyB0eXBlLCAiZ2l0LWRpZmYtaW5kZXgiIGRvZXMgbm90CiBhY3R1YWxseSBsb29rIGF0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhdCBhbGwuIFNvIG1heWJlCiBga2VybmVsL3NjaGVkLmNgIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLCBhbmQgaXQncyBqdXN0IHRoYXQgeW91CiB0b3VjaGVkIGl0LiBJbiBlaXRoZXIgY2FzZSwgaXQncyBhIG5vdGUgdGhhdCB5b3UgbmVlZCB0bwogImdpdC11cGF0ZS1jYWNoZSIgaXQgdG8gbWFrZSB0aGUgY2FjaGUgYmUgaW4gc3luYy4KIAotTk9URSAyISBZb3UgY2FuIGhhdmUgYSBtaXh0dXJlIG9mIGZpbGVzIHNob3cgdXAgYXMgImhhcyBiZWVuIHVwZGF0ZWQiCitOT1RFOiBZb3UgY2FuIGhhdmUgYSBtaXh0dXJlIG9mIGZpbGVzIHNob3cgdXAgYXMgImhhcyBiZWVuIHVwZGF0ZWQiCiBhbmQgImlzIHN0aWxsIGRpcnR5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIgdG9nZXRoZXIuIFlvdSBjYW4gYWx3YXlzCiB0ZWxsIHdoaWNoIGZpbGUgaXMgaW4gd2hpY2ggc3RhdGUsIHNpbmNlIHRoZSAiaGFzIGJlZW4gdXBkYXRlZCIgb25lcwogc2hvdyBhIHZhbGlkIHNoYTEsIGFuZCB0aGUgIm5vdCBpbiBzeW5jIHdpdGggdGhlIGluZGV4IiBvbmVzIHdpbGwKQEAgLTEzMCw1ICsxMjksNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXN0YWdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXN0YWdlcy50eHQKaW5kZXggMjA4NGM3MC4uMjhjNjBmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1zdGFnZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtc3RhZ2VzLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1kaWZmLXN0YWdlcygxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdW5lIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzgsNCArMzcsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKaW5kZXggODE2YzU5Mi4uZjU3YzhkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWRpZmYtdHJlZSgxKQogPT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWRpZmYtdHJlZScgWy0tc3RkaW5dIFstbV0gWy1zXSBbLXZdIFstLXByZXR0eV0gWy10XSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXQorJ2dpdC1kaWZmLXRyZWUnIFstLXN0ZGluXSBbLW1dIFstc10gWy12XSBbLS1wcmV0dHldIFstdF0gWy1yXSBbLS1yb290XSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8dHJlZS1pc2g+XSBbPHBhdGg+Li4uXQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTM0LDYgKzMzLDkgQEAKIAlOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgd2lsZGNhcmQgb3IgcmVnZXhwCiAJZmVhdHVyZXMuCiAKKy1yOjoKKyAgICAgICAgcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworCiAtdDo6CiAJc2hvdyB0cmVlIGVudHJ5IGl0c2VsZiBhcyB3ZWxsIGFzIHN1YnRyZWVzLiAgSW1wbGllcyAtci4KIApAQCAtMTAxLDE2ICsxMDMsMTggQEAKIHdoaWNoIHRlbGxzIHlvdSB0aGF0IHRoZSBsYXN0IGNvbW1pdCBjaGFuZ2VkIGp1c3Qgb25lIGZpbGUgKGl0J3MgZnJvbQogdGhpcyBvbmU6CiAKLSAgY29tbWl0IDNjNmY3Y2ExOWFkNDA0M2U5ZTcyZmE5NDEwNmYzNTI4OTdlNjUxYTgKLSAgdHJlZSA1MzE5ZTRkNjA5Y2RkMjgyMDY5Y2M0ZGNlMzNjMWRiNTU5NTM5YjAzCi0gIHBhcmVudCBiNGU2MjhlYTMwZDVhYjM2MDYxMTlkMmVhNWNhZWFiMTQxZDM4ZGY3Ci0gIGF1dGhvciBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPiBTYXQgQXByIDkgMTI6MDI6MzAgMjAwNQotICBjb21taXR0ZXIgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQHBwYzk3MC5vc2RsLm9yZz4gU2F0IEFwciA5IDEyOjAyOjMwIDIwMDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjb21taXQgM2M2ZjdjYTE5YWQ0MDQzZTllNzJmYTk0MTA2ZjM1Mjg5N2U2NTFhOAordHJlZSA1MzE5ZTRkNjA5Y2RkMjgyMDY5Y2M0ZGNlMzNjMWRiNTU5NTM5YjAzCitwYXJlbnQgYjRlNjI4ZWEzMGQ1YWIzNjA2MTE5ZDJlYTVjYWVhYjE0MWQzOGRmNworYXV0aG9yIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmc+IFNhdCBBcHIgOSAxMjowMjozMCAyMDA1Citjb21taXR0ZXIgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQHBwYzk3MC5vc2RsLm9yZz4gU2F0IEFwciA5IDEyOjAyOjMwIDIwMDUKIAotICBNYWtlICJnaXQtZnNjay1vYmplY3RzIiBwcmludCBvdXQgYWxsIHRoZSByb290IGNvbW1pdHMgaXQgZmluZHMuCitNYWtlICJnaXQtZnNjay1vYmplY3RzIiBwcmludCBvdXQgYWxsIHRoZSByb290IGNvbW1pdHMgaXQgZmluZHMuCiAKLSAgT25jZSBJIGRvIHRoZSByZWZlcmVuY2UgdHJhY2tpbmcsIEknbGwgYWxzbyBtYWtlIGl0IHByaW50IG91dCBhbGwgdGhlCi0gIEhFQUQgY29tbWl0cyBpdCBmaW5kcywgd2hpY2ggaXMgZXZlbiBtb3JlIGludGVyZXN0aW5nLgorT25jZSBJIGRvIHRoZSByZWZlcmVuY2UgdHJhY2tpbmcsIEknbGwgYWxzbyBtYWtlIGl0IHByaW50IG91dCBhbGwgdGhlCitIRUFEIGNvbW1pdHMgaXQgZmluZHMsIHdoaWNoIGlzIGV2ZW4gbW9yZSBpbnRlcmVzdGluZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGluIGNhc2UgeW91IGNhcmUpLgogCkBAIC0xMjksNSArMTMzLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAppbmRleCBmYzM3ZWE3Li5jYWRhZjU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApAQCAtNDgsNSArNDgsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZXhwb3J0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkMGRjNC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1leHBvcnQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotZ2l0LWV4cG9ydCgxKQotPT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKLQotTkFNRQotLS0tLQotZ2l0LWV4cG9ydCAtIEV4cG9ydHMgZWFjaCBjb21taXQgYW5kIGEgZGlmZiBhZ2FpbnN0IGVhY2ggb2YgaXRzIHBhcmVudHMKLQotCi1TWU5PUFNJUwotLS0tLS0tLS0KLSdnaXQtZXhwb3J0JyB0b3AgW2Jhc2VdCi0KLURFU0NSSVBUSU9OCi0tLS0tLS0tLS0tLQotRXhwb3J0cyBlYWNoIGNvbW1pdCBhbmQgZGlmZiBhZ2FpbnN0IGVhY2ggb2YgaXRzIHBhcmVudHMsIGJldHdlZW4KLXRvcCBhbmQgYmFzZS4gIElmIGJhc2UgaXMgbm90IHNwZWNpZmllZCBpdCBleHBvcnRzIGV2ZXJ5dGhpbmcuCi0KLQotQXV0aG9yCi0tLS0tLS0KLVdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tLQotRG9jdW1lbnRhdGlvbiBieSBEYXZpZCBHcmVhdmVzLCBKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KLQotR0lUCi0tLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CmluZGV4IDU5YWZhMTQuLmVhNmZhYWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWZldGNoLXBhY2soMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzUsNyArMzQsNyBAQAogCXJlbW90ZSBzaWRlLCBpZiBpcyBub3QgZm91bmQgb24geW91ciAkUEFUSC4KIAlJbnN0YWxsYXRpb25zIG9mIHNzaGQgaWdub3JlcyB0aGUgdXNlcidzIGVudmlyb25tZW50CiAJc2V0dXAgc2NyaXB0cyBmb3IgbG9naW4gc2hlbGxzIChlLmcuIC5iYXNoX3Byb2ZpbGUpIGFuZAotCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBHSVQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KIAlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKIAl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCiAJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQpAQCAtNjYsNCArNjUsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CmluZGV4IDhjMWNjMDcuLjczZjhhOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtZmV0Y2goMSkKID09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMjYsNiArMjUsMTEgQEAKIC0tLS0tLS0KIGluY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KIAorLWEsIFwtLWFwcGVuZDo6CisJQXBwZW5kIHJlZiBuYW1lcyBhbmQgb2JqZWN0IG5hbWVzIG9mIGZldGNoZWQgcmVmcyB0byB0aGUKKwlleGlzdGluZyBjb250ZW50cyBvZiAkR0lUX0RJUi9GRVRDSF9IRUFELiAgV2l0aG91dCB0aGlzCisJb3B0aW9uIG9sZCBkYXRhIGluICRHSVRfRElSL0ZFVENIX0hFQUQgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKwogLXUsIFwtLXVwZGF0ZS1oZWFkLW9rOjoKIAlCeSBkZWZhdWx0ICdnaXQtZmV0Y2gnIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCiAJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQpAQCAtMzMsMTUgKzM3LDIwIEBACiAJdXBkYXRlIHRoZSBpbmRleCBhbmQgd29ya2luZyBkaXJlY3RvcnksIHNvIHVzZSBpdCB3aXRoIGNhcmUuCiAKIAorU0VFIEFMU08KKy0tLS0tLS0tCitnaXRsaW5rOmdpdC1wdWxsWzFdCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQKIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KIAogRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0KIERvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MGViMzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dApAQCAtMCwwICsxLDM5IEBACitnaXQtZm10LW1lcmdlLW1zZygxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZtdC1tZXJnZS1tc2cgLSBQcm9kdWNlIGEgbWVyZ2UgY29tbWl0IG1lc3NhZ2UKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtZm10LW1lcmdlLW1zZycgPCRHSVRfRElSL0ZFVENIX0hFQUQKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUYWtlcyB0aGUgbGlzdCBvZiBtZXJnZWQgb2JqZWN0cyBvbiBzdGRpbiBhbmQgcHJvZHVjZXMgYSBzdWl0YWJsZQorY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCwgdXN1YWxseSB0byBiZQorcGFzc2VkIGFzIHRoZSAnPG1lcmdlLW1lc3NhZ2U+JyBhcmd1bWVudCBvZiBgZ2l0LW1lcmdlYC4KKworVGhpcyBzY3JpcHQgaXMgaW50ZW5kZWQgbW9zdGx5IGZvciBpbnRlcm5hbCB1c2UgYnkgc2NyaXB0cworYXV0b21hdGljYWxseSBpbnZva2luZyBgZ2l0LW1lcmdlYC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2dpdGxpbms6Z2l0LW1lcmdlWzFdCisKKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBQZXRyIEJhdWRpcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAppbmRleCBiMzE0YzNhLi43YTNhYmVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1mb3JtYXQtcGF0Y2gnIFstbl1bLW8gPGRpcj5dWy1rXVstLW1ib3hdWy0tZGlmZi1vcHRpb25zXSA8aGlzPiBbPG1pbmU+XQorJ2dpdC1mb3JtYXQtcGF0Y2gnIFstbl1bLW8gPGRpcj58LS1zdGRvdXRdWy1rXVstLW1ib3hdWy0tZGlmZi1vcHRpb25zXSA8aGlzPiBbPG1pbmU+XQogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTU0LDYgKzU0LDMwIEBACiAJY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGFuZCBmZWQgdG8gYGdpdC1hcHBseW1ib3hgLgogCUltcGxpZXMgLS1hdXRob3IgYW5kIC0tZGF0ZS4KIAorLS1zdGRvdXQ6OgorCVRoaXMgZmxhZyBnZW5lcmF0ZXMgdGhlIG1ib3ggZm9ybWF0dGVkIG91dHB1dCB0byB0aGUKKwlzdGFuZGFyZCBvdXRwdXQsIGluc3RlYWQgb2Ygc2F2aW5nIHRoZW0gaW50byBhIGZpbGUgcGVyCisJcGF0Y2ggYW5kIGltcGxpZXMgLS1tYm94LgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitnaXQtZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IFIxLi5SMiB8IGdpdC1hbSAtMyAtazo6CisJRXh0cmFjdCBjb21taXRzIGJldHdlZW4gcmV2aXNpb25zIFIxIGFuZCBSMiwgYW5kIGFwcGx5CisJdGhlbSBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHVzaW5nIGBnaXQtYW1gIHRvCisJY2hlcnJ5LXBpY2sgdGhlbS4KKworZ2l0LWZvcm1hdC1wYXRjaCBvcmlnaW46OgorCUV4dHJhY3QgY29tbWl0cyB0aGUgY3VycmVudCBicmFuY2ggYWNjdW11bGF0ZWQgc2luY2UgaXQKKwlwdWxsZWQgZnJvbSBvcmlnaW4gdGhlIGxhc3QgdGltZSBpbiBhIHBhdGNoIGZvcm0gZm9yCisJZS1tYWlsIHN1Ym1pc3Npb24uCisKKworU2VlIEFsc28KKy0tLS0tLS0tCitnaXRsaW5rOmdpdC1hbVsxXSwgZ2l0bGluazpnaXQtc2VuZC1lbWFpbAorCiAKIEF1dGhvcgogLS0tLS0tCkBAIC02NSw1ICs4OSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0CmluZGV4IDJiODY0MDQuLjVkYzlkYmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZnNjay1vYmplY3RzLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1mc2NrLW9iamVjdHMoMSkKID09PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTE5LDkgKzE4LDkgQEAKIC0tLS0tLS0KIDxvYmplY3Q+OjoKIAlBbiBvYmplY3QgdG8gdHJlYXQgYXMgdGhlIGhlYWQgb2YgYW4gdW5yZWFjaGFiaWxpdHkgdHJhY2UuCi0KLQlJZiBubyBvYmplY3RzIGFyZSBnaXZlbiwgZ2l0LWZzY2stb2JqZWN0cyBkZWZhdWx0cyB0byB1c2luZyB0aGUKLQlpbmRleCBmaWxlIGFuZCBhbGwgU0hBMSByZWZlcmVuY2VzIGluIC5naXQvcmVmcy8qIGFzIGhlYWRzLgorKworSWYgbm8gb2JqZWN0cyBhcmUgZ2l2ZW4sIGdpdC1mc2NrLW9iamVjdHMgZGVmYXVsdHMgdG8gdXNpbmcgdGhlCitpbmRleCBmaWxlIGFuZCBhbGwgU0hBMSByZWZlcmVuY2VzIGluIC5naXQvcmVmcy8qIGFzIGhlYWRzLgogCiAtLXVucmVhY2hhYmxlOjoKIAlQcmludCBvdXQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0IGFyZW4ndCByZWFkYWJsZSBmcm9tIGFueQpAQCAtNDIsMjIgKzQxLDIyIEBACiAJKCRHSVRfRElSL29iamVjdHMpLCBtYWtpbmcgc3VyZSB0aGF0IGl0IGlzIGNvbnNpc3RlbnQgYW5kCiAJY29tcGxldGUgd2l0aG91dCByZWZlcnJpbmcgdG8gb2JqZWN0cyBmb3VuZCBpbiBhbHRlcm5hdGUKIAlvYmplY3QgcG9vbHMgbGlzdGVkIGluIEdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTLAotCW5vciBwYWNrZWQgR0lUIGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjazsKKwlub3IgcGFja2VkIGdpdCBhcmNoaXZlcyBmb3VuZCBpbiAkR0lUX0RJUi9vYmplY3RzL3BhY2s7CiAJY2Fubm90IGJlIHVzZWQgd2l0aCAtLWZ1bGwuCiAKIC0tZnVsbDo6CiAJQ2hlY2sgbm90IGp1c3Qgb2JqZWN0cyBpbiBHSVRfT0JKRUNUX0RJUkVDVE9SWQogCSgkR0lUX0RJUi9vYmplY3RzKSwgYnV0IGFsc28gdGhlIG9uZXMgZm91bmQgaW4gYWx0ZXJuYXRlCiAJb2JqZWN0IHBvb2xzIGxpc3RlZCBpbiBHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUywKLQlhbmQgaW4gcGFja2VkIEdJVCBhcmNoaXZlcyBmb3VuZCBpbiAkR0lUX0RJUi9vYmplY3RzL3BhY2sKKwlhbmQgaW4gcGFja2VkIGdpdCBhcmNoaXZlcyBmb3VuZCBpbiAkR0lUX0RJUi9vYmplY3RzL3BhY2sKIAlhbmQgY29ycmVzcG9uZGluZyBwYWNrIHN1YmRpcmVjdG9yaWVzIGluIGFsdGVybmF0ZQogCW9iamVjdCBwb29sczsgY2Fubm90IGJlIHVzZWQgd2l0aCAtLXN0YW5kYWxvbmUuCiAKIC0tc3RyaWN0OjoKIAlFbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmcsIG5hbWVseSB0byBjYXRjaCBhIGZpbGUgbW9kZQogCXJlY29yZGVkIHdpdGggZyt3IGJpdCBzZXQsIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IG9sZGVyCi0JdmVyc2lvbnMgb2YgR0lULiAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCi0JTGludXgga2VybmVsLCBHSVQgaXRzZWxmLCBhbmQgc3BhcnNlIHJlcG9zaXRvcnkgaGF2ZSBvbGQKKwl2ZXJzaW9ucyBvZiBnaXQuICBFeGlzdGluZyByZXBvc2l0b3JpZXMsIGluY2x1ZGluZyB0aGUKKwlMaW51eCBrZXJuZWwsIGdpdCBpdHNlbGYsIGFuZCBzcGFyc2UgcmVwb3NpdG9yeSBoYXZlIG9sZAogCW9iamVjdHMgdGhhdCB0cmlnZ2VycyB0aGlzIGNoZWNrLCBidXQgaXQgaXMgcmVjb21tZW5kZWQKIAl0byBjaGVjayBuZXcgcHJvamVjdHMgd2l0aCB0aGlzIGZsYWcuCiAKQEAgLTgxLDcgKzgwLDcgQEAKIHRoZSBob3BlcyB0aGF0IHNvbWVib2R5IGVsc2UgaGFzIHRoZSBvYmplY3QgeW91IGhhdmUgY29ycnVwdGVkKS4KIAogT2YgY291cnNlLCAidmFsaWQgdHJlZSIgZG9lc24ndCBtZWFuIHRoYXQgaXQgd2Fzbid0IGdlbmVyYXRlZCBieSBzb21lCi1ldmlsIHBlcnNvbiwgYW5kIHRoZSBlbmQgcmVzdWx0IG1pZ2h0IGJlIGNyYXAuIEdpdCBpcyBhIHJldmlzaW9uCitldmlsIHBlcnNvbiwgYW5kIHRoZSBlbmQgcmVzdWx0IG1pZ2h0IGJlIGNyYXAuIGdpdCBpcyBhIHJldmlzaW9uCiB0cmFja2luZyBzeXN0ZW0sIG5vdCBhIHF1YWxpdHkgYXNzdXJhbmNlIHN5c3RlbSA7KQogCiBFeHRyYWN0ZWQgRGlhZ25vc3RpY3MKQEAgLTEyOCw3ICsxMjcsNyBAQAogR0lUX0lOREVYX0ZJTEU6OgogCXVzZWQgdG8gc3BlY2lmeSB0aGUgaW5kZXggZmlsZSBvZiB0aGUgY2FjaGUKIAotR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVM6CitHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUzo6CiAJdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgb2JqZWN0IGRhdGFiYXNlIHJvb3RzICh1c3VhbGx5IHVuc2V0KQogCiBBdXRob3IKQEAgLTE0MSw1ICsxNDAsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQKaW5kZXggMGViNWUyOC4uMzBiMWZiZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApAQCAtMzMsNSArMzMsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CmluZGV4IGMyNzVhZTIuLjAxNzU3OTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWdyZXAoMSkKID09PT09PT09PT09Ci12MC45OS42LCBTZXAgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC00Myw1ICs0Miw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dAppbmRleCA0ZGQwNmY3Li45MjM5ZjExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWhhc2gtb2JqZWN0KDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTQwLDUgKzM5LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAppbmRleCA5Y2Q4NjJlLi4wODg2MjRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dApAQCAtMSwxMCArMSw5IEBACiBnaXQtaHR0cC1mZXRjaCgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KLWdpdC1odHRwLWZldGNoIC0gRG93bmxvYWRzIGEgcmVtb3RlIEdJVCByZXBvc2l0b3J5IHZpYSBIVFRQCitnaXQtaHR0cC1mZXRjaCAtIERvd25sb2FkcyBhIHJlbW90ZSBnaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAogCiAKIFNZTk9QU0lTCkBAIC0xMyw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotRG93bmxvYWRzIGEgcmVtb3RlIEdJVCByZXBvc2l0b3J5IHZpYSBIVFRQLgorRG93bmxvYWRzIGEgcmVtb3RlIGdpdCByZXBvc2l0b3J5IHZpYSBIVFRQLgogCiAtYzo6CiAJR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KQEAgLTM4LDUgKzM3LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcwNjZkNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKQEAgLTAsMCArMSw4OSBAQAorZ2l0LWh0dHAtcHVzaCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaHR0cC1wdXNoIC0gUHVzaCBtaXNzaW5nIG9iamVjdHMgdXNpbmcgSFRUUC9EQVYuCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0LWh0dHAtcHVzaCcgWy0tY29tcGxldGVdIFstLWZvcmNlXSBbLS12ZXJib3NlXSA8dXJsPiA8cmVmPiBbPHJlZj4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2VuZHMgbWlzc2luZyBvYmplY3RzIHRvIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgdXBkYXRlcyB0aGUKK3JlbW90ZSBicmFuY2guCisKKworT1BUSU9OUworLS0tLS0tLQorLS1jb21wbGV0ZTo6CisJRG8gbm90IGFzc3VtZSB0aGF0IHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyBjb21wbGV0ZSBpbiBpdHMKKwljdXJyZW50IHN0YXRlLCBhbmQgdmVyaWZ5IGFsbCBvYmplY3RzIGluIHRoZSBlbnRpcmUgbG9jYWwKKwlyZWYncyBoaXN0b3J5IGV4aXN0IGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworLS1mb3JjZTo6CisJVXN1YWxseSwgdGhlIGNvbW1hbmQgcmVmdXNlcyB0byB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQKKwlpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhlIGxvY2FsIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKwlUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQKKwl0aGUgcmVtb3RlIHJlcG9zaXRvcnkgY2FuIGxvc2UgY29tbWl0czsgdXNlIGl0IHdpdGgKKwljYXJlLgorCistLXZlcmJvc2U6OgorCVJlcG9ydCB0aGUgbGlzdCBvZiBvYmplY3RzIGJlaW5nIHdhbGtlZCBsb2NhbGx5IGFuZCB0aGUKKwlsaXN0IG9mIG9iamVjdHMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCis8cmVmPi4uLjoKKwlUaGUgcmVtb3RlIHJlZnMgdG8gdXBkYXRlLgorCisKK1NwZWNpZnlpbmcgdGhlIFJlZnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSAnPHJlZj4nIHNwZWNpZmljYXRpb24gY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBwYXR0ZXJuLCBvciBhIHBhaXIKK29mIHN1Y2ggcGF0dGVybnMgc2VwYXJhdGVkIGJ5IGEgY29sb24gIjoiICh0aGlzIG1lYW5zIHRoYXQgYSByZWYgbmFtZQorY2Fubm90IGhhdmUgYSBjb2xvbiBpbiBpdCkuICBBIHNpbmdsZSBwYXR0ZXJuICc8bmFtZT4nIGlzIGp1c3QgYSAKK3Nob3J0aGFuZCBmb3IgJzxuYW1lPjo8bmFtZT4nLgorCitFYWNoIHBhdHRlcm4gcGFpciBjb25zaXN0cyBvZiB0aGUgc291cmNlIHNpZGUgKGJlZm9yZSB0aGUgY29sb24pCithbmQgdGhlIGRlc3RpbmF0aW9uIHNpZGUgKGFmdGVyIHRoZSBjb2xvbikuICBUaGUgcmVmIHRvIGJlCitwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSBmaW5kaW5nIGEgbWF0Y2ggdGhhdCBtYXRjaGVzIHRoZSBzb3VyY2UKK3NpZGUsIGFuZCB3aGVyZSBpdCBpcyBwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUKK2Rlc3RpbmF0aW9uIHNpZGUuCisKKyAtIEl0IGlzIGFuIGVycm9yIGlmIDxzcmM+IGRvZXMgbm90IG1hdGNoIGV4YWN0bHkgb25lIG9mIHRoZQorICAgbG9jYWwgcmVmcy4KKworIC0gSWYgPGRzdD4gZG9lcyBub3QgbWF0Y2ggYW55IHJlbW90ZSByZWYsIGVpdGhlcgorCisgICAqIGl0IGhhcyB0byBzdGFydCB3aXRoICJyZWZzLyI7IDxkc3Q+IGlzIHVzZWQgYXMgdGhlCisgICAgIGRlc3RpbmF0aW9uIGxpdGVyYWxseSBpbiB0aGlzIGNhc2UuCisKKyAgICogPHNyYz4gPT0gPGRzdD4gYW5kIHRoZSByZWYgdGhhdCBtYXRjaGVkIHRoZSA8c3JjPiBtdXN0IG5vdAorICAgICBleGlzdCBpbiB0aGUgc2V0IG9mIHJlbW90ZSByZWZzOyB0aGUgcmVmIG1hdGNoZWQgPHNyYz4KKyAgICAgbG9jYWxseSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbi4KKworV2l0aG91dCAnLS1mb3JjZScsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgorPGRzdD4gZG9lcyBub3QgZXhpc3QsIG9yIDxkc3Q+IGlzIGEgcHJvcGVyIHN1YnNldCAoaS5lLiBhbgorYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QgZm9yd2FyZCBjaGVjayIsCitpcyBwZXJmb3JtZWQgaW4gb3JkZXIgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZQorcmVtb3RlIHJlZiBhbmQgbG9zZSBvdGhlciBwZW9wbGVzJyBjb21taXRzIGZyb20gdGhlcmUuCisKK1dpdGggJy0tZm9yY2UnLCB0aGUgZmFzdCBmb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KKworT3B0aW9uYWxseSwgYSA8cmVmPiBwYXJhbWV0ZXIgY2FuIGJlIHByZWZpeGVkIHdpdGggYSBwbHVzICcrJyBzaWduCit0byBkaXNhYmxlIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgb25seSBvbiB0aGF0IHJlZi4KKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBOaWNrIEhlbmdldmVsZCA8bmlja2hAcmVhY3RyaXguY29tPgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBOaWNrIEhlbmdldmVsZAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZTU1NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC0wLDAgKzEsNDQgQEAKK2dpdC1pbmRleC1wYWNrKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5kZXgtcGFjayAtIEJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtaW5kZXgtcGFjaycgWy1vIDxpbmRleC1maWxlPl0gPHBhY2stZmlsZT4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGEgcGFja2VkIGFyY2hpdmUgKC5wYWNrKSBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSwgYW5kCitidWlsZHMgYSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIGZvciBpdC4gIFRoZSBwYWNrZWQgYXJjaGl2ZQordG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCBjYW4gdGhlbiBiZSBwbGFjZWQgaW4gdGhlCitvYmplY3RzL3BhY2svIGRpcmVjdG9yeSBvZiBhIGdpdCByZXBvc2l0b3J5LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1vIDxpbmRleC1maWxlPjo6CisJV3JpdGUgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4IGludG8gdGhlIHNwZWNpZmllZAorCWZpbGUuICBXaXRob3V0IHRoaXMgb3B0aW9uIHRoZSBuYW1lIG9mIHBhY2sgaW5kZXgKKwlmaWxlIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIG5hbWUgb2YgcGFja2VkIGFyY2hpdmUKKwlmaWxlIGJ5IHJlcGxhY2luZyAucGFjayB3aXRoIC5pZHggKGFuZCB0aGUgcHJvZ3JhbQorCWZhaWxzIGlmIHRoZSBuYW1lIG9mIHBhY2tlZCBhcmNoaXZlIGRvZXMgbm90IGVuZAorCXdpdGggLnBhY2spLgorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IFNlcmdleSBWbGFzb3YgPHZzdUBhbHRsaW51eC5ydT4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBTZXJnZXkgVmxhc292CisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LWRiLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CmluZGV4IGZiOGI1MjIuLmVmMTgyNmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWluaXQtZGIoMSkKID09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zNyw1ICszNiw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvY2FsLWZldGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvY2FsLWZldGNoLnR4dAppbmRleCBhYWQ3ZDk5Li44N2FiZWMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1sb2NhbC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbG9jYWwtZmV0Y2gudHh0CkBAIC0xLDEwICsxLDkgQEAKIGdpdC1sb2NhbC1mZXRjaCgxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCi1naXQtbG9jYWwtZmV0Y2ggLSBEdXBsaWNhdGVzIGFub3RoZXIgR0lUIHJlcG9zaXRvcnkgb24gYSBsb2NhbCBzeXN0ZW0KK2dpdC1sb2NhbC1mZXRjaCAtIER1cGxpY2F0ZXMgYW5vdGhlciBnaXQgcmVwb3NpdG9yeSBvbiBhIGxvY2FsIHN5c3RlbQogCiAKIFNZTk9QU0lTCkBAIC0xMyw3ICsxMiw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotRHVwbGljYXRlcyBhbm90aGVyIEdJVCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtLgorRHVwbGljYXRlcyBhbm90aGVyIGdpdCByZXBvc2l0b3J5IG9uIGEgbG9jYWwgc3lzdGVtLgogCiBPUFRJT05TCiAtLS0tLS0tCkBAIC00MCw1ICszOSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CmluZGV4IGQxYzI0ZjcuLjljYWMwODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1sb2coMSkKID09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTksNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdCBsb2cnIDxvcHRpb24+Li4uCisnZ2l0LWxvZycgPG9wdGlvbj4uLi4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0zMSw2ICszMCwyNCBAQAogCVNob3cgb25seSBjb21taXRzIGJldHdlZW4gdGhlIG5hbWVkIHR3byBjb21taXRzLgogCiAKK0V4YW1wbGVzCistLS0tLS0tLQorZ2l0IGxvZyAtLW5vLW1lcmdlczo6CisKKwlTaG93IHRoZSB3aG9sZSBjb21taXQgaGlzdG9yeSwgYnV0IHNraXAgYW55IG1lcmdlcworCitnaXQgbG9nIHYyLjYuMTIuLiBpbmNsdWRlL3Njc2kgZHJpdmVycy9zY3NpOjoKKworCVNob3cgYWxsIGNvbW1pdHMgc2luY2UgdmVyc2lvbiAndjIuNi4xMicgdGhhdCBjaGFuZ2VkIGFueSBmaWxlCisJaW4gdGhlIGluY2x1ZGUvc2NzaSBvciBkcml2ZXJzL3Njc2kgc3ViZGlyZWN0b3JpZXMKKworZ2l0IGxvZyAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgLS0gZ2l0azo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIGR1cmluZyB0aGUgbGFzdCB0d28gd2Vla3MgdG8gdGhlIGZpbGUgJ2dpdGsnLgorCVRoZSAiLS0iIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgKmJyYW5jaCogbmFtZWQKKwknZ2l0aycKKworCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CkBAIC00MSw1ICs1OCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dAppbmRleCA5YzVlZjhlLi44YzE3ODRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWxzLWZpbGVzKDEpCiA9PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTEwLDExICs5LDExIEBACiBTWU5PUFNJUwogLS0tLS0tLS0KICdnaXQtbHMtZmlsZXMnIFstel0gWy10XQotCQkoLS1bY2FjaGVkfGRlbGV0ZWR8b3RoZXJzfGlnbm9yZWR8c3RhZ2V8dW5tZXJnZWR8a2lsbGVkXSlcKgotCQkoLVtjfGR8b3xpfHN8dXxrXSlcKgorCQkoLS1bY2FjaGVkfGRlbGV0ZWR8b3RoZXJzfGlnbm9yZWR8c3RhZ2V8dW5tZXJnZWR8a2lsbGVkfG1vZGlmaWVkXSlcKgorCQkoLVtjfGR8b3xpfHN8dXxrfG1dKVwqCiAJCVsteCA8cGF0dGVybj58LS1leGNsdWRlPTxwYXR0ZXJuPl0KIAkJWy1YIDxmaWxlPnwtLWV4Y2x1ZGUtZnJvbT08ZmlsZT5dCi0JCVstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZT5dCisJCVstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZT5dIFstLV0gWzxmaWxlPl1cKgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTMzLDYgKzMyLDkgQEAKIC1kfC0tZGVsZXRlZDo6CiAJU2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQKIAorLW18LS1tb2RpZmllZDo6CisJU2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0CisKIC1vfC0tb3RoZXJzOjoKIAlTaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQKIApAQCAtNDgsMTEgKzUwLDExIEBACiAKIC1rfC0ta2lsbGVkOjoKIAlTaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIGR1ZQotCXRvIGZpbGUvZGlyZWN0b3J5IGNvbmZsaWN0cyBmb3IgY2hlY2tvdXQtY2FjaGUgdG8KKwl0byBmaWxlL2RpcmVjdG9yeSBjb25mbGljdHMgZm9yIGNoZWNrb3V0LWluZGV4IHRvCiAJc3VjY2VlZC4KIAogLXo6OgotCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CisJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQuCiAKIC14fC0tZXhjbHVkZT08cGF0dGVybj46OgogCVNraXBzIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4uCkBAIC02OCwxMiArNzAsMjAgQEAKIC10OjoKIAlJZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0aGUgZm9sbG93aW5nIHRhZ3MgKGZvbGxvd2VkIGJ5CiAJYSBzcGFjZSkgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbGluZToKLQlICWNhY2hlZAotCU0JdW5tZXJnZWQKLQlSCXJlbW92ZWQvZGVsZXRlZAotCUsJdG8gYmUga2lsbGVkCisJSDo6CWNhY2hlZAorCU06Ogl1bm1lcmdlZAorCVI6OglyZW1vdmVkL2RlbGV0ZWQKKwlDOjoJbW9kaWZlZC9jaGFuZ2VkCisJSzo6CXRvIGJlIGtpbGxlZAogCT8Jb3RoZXIKIAorLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxmaWxlPjo6CisJRmlsZXMgdG8gc2hvdy4gSWYgbm8gZmlsZXMgYXJlIGdpdmVuIGFsbCBmaWxlcyB3aGljaCBtYXRjaCB0aGUgb3RoZXIKKwlzcGVjaWZpZWQgY3JpdGVyaWEgYXJlIHNob3duLgorCiBPdXRwdXQKIC0tLS0tLQogc2hvdyBmaWxlcyBqdXN0IG91dHB1dHMgdGhlIGZpbGVuYW1lIHVubGVzcyAnLS1zdGFnZScgaXMgc3BlY2lmaWVkIGluCkBAIC05MCw2ICsxMDAsMTAgQEAKIHRoZSB1c2VyIChvciB0aGUgcG9yY2VsYWluKSB0byBzZWUgd2hhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZWNvcmRlZCBhdCB0aGUKIHBhdGguIChzZWUgZ2l0LXJlYWQtdHJlZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdGF0ZSkKIAorV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCiAKIEV4Y2x1ZGUgUGF0dGVybnMKIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMCwxMyArMTE0LDEzIEBACiAKIFRoZXNlIGV4Y2x1ZGUgcGF0dGVybnMgY29tZSBmcm9tIHRoZXNlIHBsYWNlczoKIAotICgxKSBjb21tYW5kIGxpbmUgZmxhZyAtLWV4Y2x1ZGU9PHBhdHRlcm4+IHNwZWNpZmllcyBhIHNpbmdsZQorICAxLiBjb21tYW5kIGxpbmUgZmxhZyAtLWV4Y2x1ZGU9PHBhdHRlcm4+IHNwZWNpZmllcyBhIHNpbmdsZQogICAgICBwYXR0ZXJuLgogCi0gKDIpIGNvbW1hbmQgbGluZSBmbGFnIC0tZXhjbHVkZS1mcm9tPTxmaWxlPiBzcGVjaWZpZXMgYSBsaXN0IG9mCisgIDIuIGNvbW1hbmQgbGluZSBmbGFnIC0tZXhjbHVkZS1mcm9tPTxmaWxlPiBzcGVjaWZpZXMgYSBsaXN0IG9mCiAgICAgIHBhdHRlcm5zIHN0b3JlZCBpbiBhIGZpbGUuCiAKLSAoMykgY29tbWFuZCBsaW5lIGZsYWcgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PG5hbWU+IHNwZWNpZmllcworICAzLiBjb21tYW5kIGxpbmUgZmxhZyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08bmFtZT4gc3BlY2lmaWVzCiAgICAgIGEgbmFtZSBvZiB0aGUgZmlsZSBpbiBlYWNoIGRpcmVjdG9yeSAnZ2l0LWxzLWZpbGVzJwogICAgICBleGFtaW5lcywgYW5kIGlmIGV4aXN0cywgaXRzIGNvbnRlbnRzIGFyZSB1c2VkIGFzIGFuCiAgICAgIGFkZGl0aW9uYWwgbGlzdCBvZiBwYXR0ZXJucy4KQEAgLTE1OCwxMiArMTcyLDEzIEBACiAgLSBvdGhlcndpc2UsIGl0IGlzIGEgc2hlbGwgZ2xvYiBwYXR0ZXJuLCBzdWl0YWJsZSBmb3IKICAgIGNvbnN1bXB0aW9uIGJ5IGZubWF0Y2goMykgd2l0aCBGTk1fUEFUSE5BTUUgZmxhZy4gIEkuZS4gYQogICAgc2xhc2ggaW4gdGhlIHBhdHRlcm4gbXVzdCBtYXRjaCBhIHNsYXNoIGluIHRoZSBwYXRobmFtZS4KLSAgICJEb2N1bWVudGF0aW9uLyouaHRtbCIgbWF0Y2hlcyAiRG9jdW1lbnRhdGlvbi9naXQuaHRtbCIgYnV0CisgICAiRG9jdW1lbnRhdGlvbi9cKi5odG1sIiBtYXRjaGVzICJEb2N1bWVudGF0aW9uL2dpdC5odG1sIiBidXQKICAgIG5vdCAicHBjL3BwYy5odG1sIi4gIEFzIGEgbmF0dXJhbCBleGNlcHRpb24sICIvKi5jIiBtYXRjaGVzCiAgICAiY2F0LWZpbGUuYyIgYnV0IG5vdCAibW96aWxsYS1zaGExL3NoYTEuYyIuCiAKIEFuIGV4YW1wbGU6CiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgJCBjYXQgLmdpdC9pZ25vcmUKICAgICAjIGlnbm9yZSBvYmplY3RzIGFuZCBhcmNoaXZlcywgYW55d2hlcmUgaW4gdGhlIHRyZWUuCiAgICAgKi5bb2FdCkBAIC0xNzYsMTEgKzE5MSwxMiBAQAogICAgICAgICAtLWV4Y2x1ZGU9J0RvY3VtZW50YXRpb24vKi5bMC05XScgXAogICAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCiAgICAgICAgIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAogU2VlIEFsc28KIC0tLS0tLS0tCi1saW5rOmdpdC1yZWFkLXRyZWUuaHRtbFtnaXQtcmVhZC10cmVlXQorZ2l0bGluazpnaXQtcmVhZC10cmVlWzFdCiAKIAogQXV0aG9yCkBAIC0xOTMsNSArMjA5LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKaW5kZXggYzMxNTJiMS4uYzBhODBkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWxzLXJlbW90ZSgxKQogPT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtNjAsNSArNTksNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CmluZGV4IGZkYjIxNWUuLmJhMDQzOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LWxzLXRyZWUoMSkKID09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zOSw2ICszOCwxMCBAQAogLS0tLS0tLS0tLS0tLQogICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFRBQiA8ZmlsZT4KIAorV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCiAKIEF1dGhvcgogLS0tLS0tCkBAIC01MSw1ICs1NCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dAppbmRleCBlYjNhM2QxLi5kYzdkNzI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CkBAIC02MSw1ICs2MSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CmluZGV4IDc4OWQzYTkuLjAzYTk0NzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dApAQCAtNyw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LW1haWxzcGxpdCcgPG1ib3g+IDxkaXJlY3Rvcnk+CisnZ2l0LW1haWxzcGxpdCcgWy1kPHByZWM+XSBbPG1ib3g+XSA8ZGlyZWN0b3J5PgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTE3LDE0ICsxNywyMyBAQAogT1BUSU9OUwogLS0tLS0tLQogPG1ib3g+OjoKLQlNYm94IGZpbGUgdG8gc3BsaXQuCisJTWJveCBmaWxlIHRvIHNwbGl0LiAgSWYgbm90IGdpdmVuLCB0aGUgbWJveCBpcyByZWFkIGZyb20KKwl0aGUgc3RhbmRhcmQgaW5wdXQuCiAKIDxkaXJlY3Rvcnk+OjoKIAlEaXJlY3RvcnkgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIGluZGl2aWR1YWwgbWVzc2FnZXMuCiAKKy1kPHByZWM+OjoKKwlJbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IDQgZGlnaXRzIHdpdGggbGVhZGluZyB6ZXJvcywKKwlkaWZmZXJlbnQgcHJlY2lzaW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRoZSBnZW5lcmF0ZWQKKwlmaWxlbmFtZXMuCisKKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorYW5kIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKwogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtMzIsNSArNDEsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1iYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CmluZGV4IDFlMjdiZjIuLmQxZDU2ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1lcmdlLWJhc2UoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zMCw1ICsyOSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dAppbmRleCAxYjk5ZjJiLi5kMDcyZmRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LW1lcmdlLWluZGV4KDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTg1LDUgKzg0LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0CmluZGV4IGI4NGQxNGQuLjg2YWFkMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtbWVyZ2Utb25lLWZpbGUoMSkKID09PT09PT09PT09PT09PT09PT09PQotdjAuOTkuNCwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMjcsNSArMjYsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKaW5kZXggYTQ4Njk3Zi4uYjNlZjE5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1tZXJnZSgxKQogPT09PT09PT09PT09Ci12MC45OS42LCBTZXAgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtbWVyZ2UnIFstbl0gWy1zIDxzdHJhdGVneT5dLi4uIDxtc2c+IDxoZWFkPiA8cmVtb3RlPiA8cmVtb3RlPi4uLgorJ2dpdC1tZXJnZScgWy1uXSBbLS1uby1jb21taXRdIFstcyA8c3RyYXRlZ3k+XS4uLiA8bXNnPiA8aGVhZD4gPHJlbW90ZT4gPHJlbW90ZT4uLi4KIAogCiBERVNDUklQVElPTgpAQCAtMjAsMTQgKzE5LDEyIEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLS1uOjoKLQlEbyBub3Qgc2hvdyBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4KK2luY2x1ZGU6Om1lcmdlLXB1bGwtb3B0cy50eHRbXQogCi0tcyA8c3RyYXRlZ3k+OjoKLQl1c2UgdGhhdCBtZXJnZSBzdHJhdGVneTsgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlIHRvCi0Jc3BlY2lmeSB0aGVtIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC4gIElmCi0JdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24sIGJ1aWx0LWluIGxpc3Qgb2Ygc3RyYXRlZ2llcyBpcwotCXVzZWQgaW5zdGVhZC4KKzxtc2c+OjoKKwlUaGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4gY2FzZQorCWl0IGlzIGNyZWF0ZWQpLiBUaGUgYGdpdC1mbXQtbWVyZ2UtbXNnYCBzY3JpcHQgY2FuIGJlIHVzZWQKKwl0byBnaXZlIGEgZ29vZCBkZWZhdWx0IGZvciBhdXRvbWF0ZWQgYGdpdC1tZXJnZWAgaW52b2NhdGlvbnMuCiAKIDxoZWFkPjo6CiAJb3VyIGJyYW5jaCBoZWFkIGNvbW1pdC4KQEAgLTM3LDYgKzM0LDEzIEBACiAJbGVhc3Qgb25lIDxyZW1vdGU+LiAgU3BlY2lmeWluZyBtb3JlIHRoYW4gb25lIDxyZW1vdGU+CiAJb2J2aW91c2x5IG1lYW5zIHlvdSBhcmUgdHJ5aW5nIGFuIE9jdG9wdXMuCiAKK2luY2x1ZGU6Om1lcmdlLXN0cmF0ZWdpZXMudHh0W10KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2dpdGxpbms6Z2l0LWZtdC1tZXJnZS1tc2dbMV0sIGdpdGxpbms6Z2l0LXB1bGxbMV0KKwogCiBBdXRob3IKIC0tLS0tLQpAQCAtNDksNCArNTMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0CmluZGV4IDcwOGY0ZWYuLjI4NjBhM2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtbWt0YWcoMSkKID09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtNDQsNSArNDMsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkNTg4MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dApAQCAtMCwwICsxLDUxIEBACitnaXQtbXYoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbXYgLSBTY3JpcHQgdXNlZCB0byBtb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rLgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorJ2dpdC1tdicgWy1mXSBbLW5dIDxzb3VyY2U+IDxkZXN0aW5hdGlvbj4KKydnaXQtbXYnIFstZl0gWy1rXSBbLW5dIDxzb3VyY2U+IC4uLiA8ZGVzdGluYXRpb24gZGlyZWN0b3J5PgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gbW92ZSBvciByZW5hbWUgYSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltbGluay4KK0luIHRoZSBmaXJzdCBmb3JtLCBpdCByZW5hbWVzIDxzb3VyY2U+LCB3aGljaCBtdXN0IGV4aXN0IGFuZCBiZSBlaXRoZXIKK2EgZmlsZSwgc3ltbGluayBvciBkaXJlY3RvcnksIHRvIDxkZXN0aW5hdGlvbj4sIHdoaWNoIG11c3Qgbm90IGV4aXN0LgorSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeTsgdGhlIGdpdmVuIHNvdXJjZXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LgorCitUaGUgaW5kZXggaXMgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIGJ1dCB0aGUgY2hhbmdlIG11c3Qgc3RpbGwgYmUKK2NvbW1pdHRlZC4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorCUZvcmNlIHJlbmFtaW5nIG9yIG1vdmluZyBldmVuIHRhcmdldHMgZXhpc3QKKy1rOjoKKyAgICAgICAgU2tpcCBtb3ZlIG9yIHJlbmFtZSBhY3Rpb25zIHdoaWNoIHdvdWxkIGxlYWQgdG8gYW4gZXJyb3IKKwljb25kaXRpb24uIEFuIGVycm9yIGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBpcyBuZWl0aGVyIGV4aXN0aW5nIG5vcgorICAgICAgICBjb250cm9sbGVkIGJ5IEdJVCwgb3Igd2hlbiBpdCB3b3VsZCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKKyAgICAgICAgZmlsZSB1bmxlc3MgJy1mJyBpcyBnaXZlbi4KKy1uOjoKKwlEbyBub3RoaW5nOyBvbmx5IHNob3cgd2hhdCB3b3VsZCBoYXBwZW4KKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CitSZXdyaXR0ZW4gYnkgUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4KK01vdmUgZnVuY3Rpb25hbGl0eSBhZGRlZCBieSBKb3NlZiBXZWlkZW5kb3JmZXIgPEpvc2VmLldlaWRlbmRvcmZlckBnbXguZGU+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbmFtZS1yZXYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbmFtZS1yZXYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2IwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKQEAgLTAsMCArMSw2NiBAQAorZ2l0LW5hbWUtcmV2KDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW5hbWUtcmV2IC0gRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cy4KKworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtbmFtZS1yZXYnIFstLXRhZ3NdICggLS1hbGwgfCAtLXN0ZGluIHwgPGNvbW1pdGlzaD4uLi4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKK2Zvcm1hdCBwYXJzYWJsZSBieSBnaXQtcmV2LXBhcnNlLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLS10YWdzOjoKKwlEbyBub3QgdXNlIGJyYW5jaCBuYW1lcywgYnV0IG9ubHkgdGFncyB0byBuYW1lIHRoZSBjb21taXRzCisKKy0tYWxsOjoKKwlMaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzCisKKy0tc3RkaW46OgorCVJlYWQgZnJvbSBzdGRpbiwgYXBwZW5kICIoPHJldl9uYW1lPikiIHRvIGFsbCBzaGExJ3Mgb2YgbmFtZSdhYmxlCisJY29tbWl0cywgYW5kIHBhc3MgdG8gc3Rkb3V0CisKK0VYQU1QTEUKKy0tLS0tLS0KKworR2l2ZW4gYSBjb21taXQsIGZpbmQgb3V0IHdoZXJlIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhbCByZWZzLiBTYXkgc29tZWJvZHkKK3dyb3RlIHlvdSBhYm91dCB0aGF0IHBoYW50YXN0aWMgY29tbWl0IDMzZGI1ZjRkOTAyN2ExMGU0NzdjY2YwNTRiMmMxYWI5NGY3NGM4NWEuCitPZiBjb3Vyc2UsIHlvdSBsb29rIGludG8gdGhlIGNvbW1pdCwgYnV0IHRoYXQgb25seSB0ZWxscyB5b3Ugd2hhdCBoYXBwZW5lZCwgYnV0Citub3QgdGhlIGNvbnRleHQuCisKK0VudGVyIGdpdC1uYW1lLXJldjoKKworLS0tLS0tLS0tLS0tCislIGdpdCBuYW1lLXJldiAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhCistLS0tLS0tLS0tLS0KKworTm93IHlvdSBhcmUgd2lzZXIsIGJlY2F1c2UgeW91IGtub3cgdGhhdCBpdCBoYXBwZW5lZCA5NDAgcmV2aXNpb25zIGJlZm9yZSB2MC45OS4KKworQW5vdGhlciBuaWNlIHRoaW5nIHlvdSBjYW4gZG8gaXM6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgbG9nIHwgZ2l0IG5hbWUtcmV2IC0tc3RkaW4KKy0tLS0tLS0tLS0tLQorCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBKb2hhbm5lcyBTY2hpbmRlbGluLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtb2N0b3B1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1vY3RvcHVzLnR4dAppbmRleCA3YTljYzU0Li42ZTMyZWEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1vY3RvcHVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1vY3RvcHVzLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1vY3RvcHVzKDEpCiA9PT09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzUsNSArMzQsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dAppbmRleCA1Y2UxOTVjLi5kMWU5M2RiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcGFjay1vYmplY3RzKDEpCiA9PT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXBhY2stb2JqZWN0cycgWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QKKydnaXQtcGFjay1vYmplY3RzJyBbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QKIAogCiBERVNDUklQVElPTgpAQCAtMzEsNyArMzAsNyBAQAogCiBQbGFjaW5nIGJvdGggaW4gdGhlIHBhY2svIHN1YmRpcmVjdG9yeSBvZiAkR0lUX09CSkVDVF9ESVJFQ1RPUlkgKG9yCiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIG9uICRHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUykKLWVuYWJsZXMgR0lUIHRvIHJlYWQgZnJvbSBzdWNoIGFuIGFyY2hpdmUuCitlbmFibGVzIGdpdCB0byByZWFkIGZyb20gc3VjaCBhbiBhcmNoaXZlLgogCiAKIE9QVElPTlMKQEAgLTY1LDYgKzY0LDExIEBACiAJVGhpcyBmbGFnIGNhdXNlcyBhbiBvYmplY3QgYWxyZWFkeSBpbiBhIHBhY2sgaWdub3JlZAogCWV2ZW4gaWYgaXQgYXBwZWFycyBpbiB0aGUgc3RhbmRhcmQgaW5wdXQuCiAKKy0tbG9jYWw6OgorCVRoaXMgZmxhZyBpcyBzaW1pbGFyIHRvIGAtLWluY3JlbWVudGFsYDsgaW5zdGVhZCBvZgorCWlnbm9yaW5nIGFsbCBwYWNrZWQgb2JqZWN0cywgaXQgb25seSBpZ25vcmVzIG9iamVjdHMKKwl0aGF0IGFyZSBwYWNrZWQgYW5kIG5vdCBpbiB0aGUgbG9jYWwgb2JqZWN0IHN0b3JlCisJKGkuZS4gYm9ycm93ZWQgZnJvbSBhbiBhbHRlcm5hdGUpLgogCiBBdXRob3IKIC0tLS0tLQpAQCAtNzYsOSArODAsMTAgQEAKIAogU2VlLUFsc28KIC0tLS0tLS0tCi1naXQtcmVwYWNrKDEpIGdpdC1wcnVuZS1wYWNrZWQoMSkKK2dpdGxpbms6Z2l0LXJlcGFja1sxXQorZ2l0bGluazpnaXQtcHJ1bmUtcGFja2VkWzFdCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CmluZGV4IDdlZTAxNDUuLmZjMjdhZmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dApAQCAtNDUsNCArNDUsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CmluZGV4IGI2ZmEyYTguLmM4YmQxOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKQEAgLTE4LDYgKzE4LDEyIEBACiAKIElPVywgeW91IGNhbiB1c2UgdGhpcyB0aGluZyB0byBsb29rIGZvciBsaWtlbHkgZHVwbGljYXRlIGNvbW1pdHMuCiAKK1doZW4gZGVhbGluZyB3aXRoIGdpdC1kaWZmLXRyZWUgb3V0cHV0LCBpdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3RoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIHByZWZpeGVkIHdpdGggdGhlIG9iamVjdCBuYW1lIG9mIHRoZQorY29tbWl0LCBhbmQgb3V0cHV0cyB0d28gNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmcuICBUaGUgZmlyc3QKK3N0cmluZyBpcyB0aGUgcGF0Y2ggSUQsIGFuZCB0aGUgc2Vjb25kIHN0cmluZyBpcyB0aGUgY29tbWl0IElELgorVGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIGEgbWFwcGluZyBmcm9tIHBhdGNoIElEIHRvIGNvbW1pdCBJRC4KKwogT1BUSU9OUwogLS0tLS0tLQogPHBhdGNoPjo6CkBAIC0zMyw1ICszOSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dAppbmRleCA5MDA3NTQwLi45MTVkM2Y4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXBlZWstcmVtb3RlKDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0yMyw3ICsyMiw3IEBACiAJcmVtb3RlIHNpZGUsIGlmIGl0IGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILiBTb21lCiAJaW5zdGFsbGF0aW9ucyBvZiBzc2hkIGlnbm9yZXMgdGhlIHVzZXIncyBlbnZpcm9ubWVudAogCXNldHVwIHNjcmlwdHMgZm9yIGxvZ2luIHNoZWxscyAoZS5nLiAuYmFzaF9wcm9maWxlKSBhbmQKLQl5b3VyIHByaXZhdGVseSBpbnN0YWxsZWQgR0lUIG1heSBub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbQorCXlvdXIgcHJpdmF0ZWx5IGluc3RhbGxlZCBnaXQgbWF5IG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtCiAJZGVmYXVsdCAkUEFUSC4gIEFub3RoZXIgd29ya2Fyb3VuZCBzdWdnZXN0ZWQgaXMgdG8gc2V0CiAJdXAgeW91ciAkUEFUSCBpbiAiLmJhc2hyYyIsIGJ1dCB0aGlzIGZsYWcgaXMgZm9yIHBlb3BsZQogCXdobyBkbyBub3Qgd2FudCB0byBwYXkgdGhlIG92ZXJoZWFkIGZvciBub24taW50ZXJhY3RpdmUKQEAgLTQ5LDUgKzQ4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKaW5kZXggM2ZjYTI3NS4uMjhhMTUwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXBydW5lLXBhY2tlZCgxKQogPT09PT09PT09PT09PT09PT09PT09Ci12MC4xLCBBdWd1c3QgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zNCw5ICszMywxMCBAQAogCiBTZWUtQWxzbwogLS0tLS0tLS0KLWdpdC1wYWNrLW9iamVjdHMoMSkgZ2l0LXJlcGFjaygxKQorZ2l0bGluazpnaXQtcGFjay1vYmplY3RzWzFdCitnaXRsaW5rOmdpdC1yZXBhY2tbMV0KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CmluZGV4IGYzNjg0MjcuLjMzNjdjOWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcHJ1bmUoMSkKID09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzksNSArMzgsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CmluZGV4IDIzNWEwMzYuLjdlYmIwOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1bGwudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXB1bGwoMSkKID09PT09PT09PT09Ci12MC45OS40LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDIyICs4LDEwOSBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtcHVsbCcgPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLgorJ2dpdC1wdWxsJyA8b3B0aW9ucz4gPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLgogCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUnVucyAnZ2l0LWZldGNoJyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgorUnVucyBgZ2l0LWZldGNoYCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCBhbmQgY2FsbHMgYGdpdC1tZXJnZWAKK3RvIG1lcmdlIHRoZSByZXRyaWV2ZWQgaGVhZChzKSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4KIAotV2hlbiBvbmx5IG9uZSByZWYgaXMgZG93bmxvYWRlZCwgcnVucyAnZ2l0IHJlc29sdmUnIHRvIG1lcmdlIGl0Ci1pbnRvIHRoZSBsb2NhbCBIRUFELiAgT3RoZXJ3aXNlIHVzZXMgJ2dpdCBvY3RvcHVzJyB0byBtZXJnZSB0aGVtCi1pbnRvIHRoZSBsb2NhbCBIRUFELgotCitOb3RlIHRoYXQgeW91IGNhbiB1c2UgYC5gIChjdXJyZW50IGRpcmVjdG9yeSkgYXMgdGhlCis8cmVwb3NpdG9yeT4gdG8gcHVsbCBmcm9tIHRoZSBsb2NhbCByZXBvc2l0b3J5IC0tIHRoaXMgaXMgdXNlZnVsCit3aGVuIG1lcmdpbmcgbG9jYWwgYnJhbmNoZXMgaW50byB0aGUgY3VycmVudCBicmFuY2guCiAKIE9QVElPTlMKIC0tLS0tLS0KIGluY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KIAorLWEsIFwtLWFwcGVuZDo6CisJQXBwZW5kIHJlZiBuYW1lcyBhbmQgb2JqZWN0IG5hbWVzIG9mIGZldGNoZWQgcmVmcyB0byB0aGUKKwlleGlzdGluZyBjb250ZW50cyBvZiBgJEdJVF9ESVIvRkVUQ0hfSEVBRGAuICBXaXRob3V0IHRoaXMKKwlvcHRpb24gb2xkIGRhdGEgaW4gYCRHSVRfRElSL0ZFVENIX0hFQURgIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisKK2luY2x1ZGU6Om1lcmdlLXB1bGwtb3B0cy50eHRbXQorCitpbmNsdWRlOjptZXJnZS1zdHJhdGVnaWVzLnR4dFtdCisKKworCitFWEFNUExFUworLS0tLS0tLS0KKworZ2l0IHB1bGwsIGdpdCBwdWxsIG9yaWdpbjo6CisJRmV0Y2ggdGhlIGRlZmF1bHQgaGVhZCBmcm9tIHRoZSByZXBvc2l0b3J5IHlvdSBjbG9uZWQKKwlmcm9tIGFuZCBtZXJnZSBpdCBpbnRvIHlvdXIgY3VycmVudCBicmFuY2guCisKK2dpdCBwdWxsIC1zIG91cnMgLiBvYnNvbGV0ZTo6CisJTWVyZ2UgbG9jYWwgYnJhbmNoIGBvYnNvbGV0ZWAgaW50byB0aGUgY3VycmVudCBicmFuY2gsCisJdXNpbmcgYG91cnNgIG1lcmdlIHN0cmF0ZWd5LgorCitnaXQgcHVsbCAuIGZpeGVzIGVuaGFuY2VtZW50czo6CisJQnVuZGxlIGxvY2FsIGJyYW5jaCBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKKwl0aGUgY3VycmVudCBicmFuY2gsIG1ha2luZyBhbiBPY3RvcHVzIG1lcmdlLgorCitnaXQgcHVsbCAtLW5vLWNvbW1pdCAuIG1haW50OjoKKwlNZXJnZSBsb2NhbCBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0CisJZG8gbm90IG1ha2UgYSBjb21taXQgYXV0b21hdGljYWxseS4gIFRoaXMgY2FuIGJlIHVzZWQKKwl3aGVuIHlvdSB3YW50IHRvIGluY2x1ZGUgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBtZXJnZSwKKwlvciB3YW50IHRvIHdyaXRlIHlvdXIgb3duIG1lcmdlIGNvbW1pdCBtZXNzYWdlLgorKworWW91IHNob3VsZCByZWZyYWluIGZyb20gYWJ1c2luZyB0aGlzIG9wdGlvbiB0byBzbmVhayBzdWJzdGFudGlhbAorY2hhbmdlcyBpbnRvIGEgbWVyZ2UgY29tbWl0LiAgU21hbGwgZml4dXBzIGxpa2UgYnVtcGluZworcmVsZWFzZS92ZXJzaW9uIG5hbWUgd291bGQgYmUgYWNjZXB0YWJsZS4KKworQ29tbWFuZCBsaW5lIHB1bGwgb2YgbXVsdGlwbGUgYnJhbmNoZXMgZnJvbSBvbmUgcmVwb3NpdG9yeTo6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvcmVtb3Rlcy9vcmlnaW4KK1VSTDogZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdAorUHVsbDogbWFzdGVyOm9yaWdpbgorCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXI6b3JpZ2luICtwdTpwdSBtYWludDptYWludAorJCBnaXQgcHVsbCAuIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitIZXJlLCBhIHR5cGljYWwgYCRHSVRfRElSL3JlbW90ZXMvb3JpZ2luYCBmaWxlIGZyb20gYQorYGdpdC1jbG9uZWAgb3BlcmF0aW9uIGlzIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aAorY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gYGdpdC1mZXRjaGAgdG8gZmlyc3QgdXBkYXRlCittdWx0aXBsZSBicmFuY2hlcyBvZiB0aGUgbG9jYWwgcmVwb3NpdG9yeSBhbmQgdGhlbgordG8gbWVyZ2UgdGhlIHJlbW90ZSBgb3JpZ2luYCBicmFuY2ggaW50byB0aGUgbG9jYWwKK2BtYXN0ZXJgIGJyYW5jaC4gIFRoZSBsb2NhbCBgcHVgIGJyYW5jaCBpcyB1cGRhdGVkCitldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZCB1cGRhdGUuCitIZXJlLCB0aGUgcHVsbCBjYW4gb2J0YWluIGl0cyBvYmplY3RzIGZyb20gdGhlIGxvY2FsCityZXBvc2l0b3J5IHVzaW5nIGAuYCwgYXMgdGhlIHByZXZpb3VzIGBnaXQtZmV0Y2hgIGlzCitrbm93biB0byBoYXZlIGFscmVhZHkgb2J0YWluZWQgYW5kIG1hZGUgYXZhaWxhYmxlCithbGwgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLgorCisKK1B1bGwgb2YgbXVsdGlwbGUgYnJhbmNoZXMgZnJvbSBvbmUgcmVwb3NpdG9yeSB1c2luZyBgJEdJVF9ESVIvcmVtb3Rlc2AgZmlsZTo6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvcmVtb3Rlcy9vcmlnaW4KK1VSTDogZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdAorUHVsbDogbWFzdGVyOm9yaWdpbgorUHVsbDogK3B1OnB1CitQdWxsOiBtYWludDptYWludAorCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZ2l0IHB1bGwgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0hlcmUsIGEgdHlwaWNhbCBgJEdJVF9ESVIvcmVtb3Rlcy9vcmlnaW5gIGZpbGUgZnJvbSBhCitgZ2l0LWNsb25lYCBvcGVyYXRpb24gaGFzIGJlZW4gaGFuZC1tb2RpZmllZCB0byBpbmNsdWRlCit0aGUgYnJhbmNoLW1hcHBpbmcgb2YgYWRkaXRpb25hbCByZW1vdGUgYW5kIGxvY2FsCitoZWFkcyBkaXJlY3RseS4gIEEgc2luZ2xlIGBnaXQtcHVsbGAgb3BlcmF0aW9uIHdoaWxlCitpbiB0aGUgYG1hc3RlcmAgYnJhbmNoIHdpbGwgZmV0Y2ggbXVsdGlwbGUgaGVhZHMgYW5kCittZXJnZSB0aGUgcmVtb3RlIGBvcmlnaW5gIGhlYWQgaW50byB0aGUgY3VycmVudCwKK2xvY2FsIGBtYXN0ZXJgIGJyYW5jaC4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2dpdGxpbms6Z2l0LWZldGNoWzFdLCBnaXRsaW5rOmdpdC1tZXJnZVsxXQorCiAKIEF1dGhvcgogLS0tLS0tCkBAIC0zMyw5ICsxMTksMTEgQEAKIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KLURvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCitEb2N1bWVudGF0aW9uIGJ5IEpvbiBMb2VsaWdlciwKK0RhdmlkIEdyZWF2ZXMsCitKdW5pbyBDIEhhbWFubyBhbmQgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAppbmRleCBiODk5M2ViLi5mNDVhYzVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdXNoLnR4dApAQCAtMjEsNiArMjEsMTUgQEAKIC0tLS0tLS0KIGluY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KIAorXC0tYWxsOjoKKwlJbnN0ZWFkIG9mIG5hbWluZyBlYWNoIHJlZiB0byBwdXNoLCBzcGVjaWZpZXMgYWxsIHJlZnMKKwl0byBiZSBwdXNoZWQuCisKKy1mLCBcLS1mb3JjZTo6CisJVXN1YWxseSwgdGhlIGNvbW1hbmQgcmVmdXNlcyB0byB1cGRhdGUgYSBsb2NhbCByZWYgdGhhdCBpcworCW5vdCBhbiBhbmNlc3RvciBvZiB0aGUgcmVtb3RlIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKwlUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrLiAgV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgdGhlCisJbG9jYWwgcmVwb3NpdG9yeSBjYW4gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aCBjYXJlLgogCiBBdXRob3IKIC0tLS0tLQpAQCAtMzIsNSArNDEsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAppbmRleCBkOWM1YTEzLi43ZGI1ZmI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtcmVhZC10cmVlKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQtcmVhZC10cmVlJyAoPHRyZWUtaXNoPiB8IFstbSBbLXVdXSA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pCisnZ2l0LXJlYWQtdHJlZScgKDx0cmVlLWlzaD4gfCBbLW0gWy11fC1pXV0gPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKQogCiAKIERFU0NSSVBUSU9OCkBAIC0zNSw2ICszNCwxNiBAQAogCUFmdGVyIGEgc3VjY2Vzc2Z1bCBtZXJnZSwgdXBkYXRlIHRoZSBmaWxlcyBpbiB0aGUgd29yawogCXRyZWUgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4KIAorLWk6OgorCVVzdWFsbHkgYSBtZXJnZSByZXF1aXJlcyB0aGUgaW5kZXggZmlsZSBhcyB3ZWxsIGFzIHRoZQorCWZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYXJlIHVwIHRvIGRhdGUgd2l0aCB0aGUKKwljdXJyZW50IGhlYWQgY29tbWl0LCBpbiBvcmRlciBub3QgdG8gbG9zZSBsb2NhbAorCWNoYW5nZXMuICBUaGlzIGZsYWcgZGlzYWJsZXMgdGhlIGNoZWNrIHdpdGggdGhlIHdvcmtpbmcKKwl0cmVlIGFuZCBpcyBtZWFudCB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBtZXJnZSBvZgorCXRyZWVzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBjdXJyZW50CisJd29ya2luZyB0cmVlIHN0YXR1cyBpbnRvIGEgdGVtcG9yYXJ5IGluZGV4IGZpbGUuCisKKwogPHRyZWUtaXNoIz46OgogCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCiAKQEAgLTc0LDEwICs4MywxMCBAQAogV2hlbiB0d28gdHJlZXMgYXJlIHNwZWNpZmllZCwgdGhlIHVzZXIgaXMgdGVsbGluZyBnaXQtcmVhZC10cmVlCiB0aGUgZm9sbG93aW5nOgogCi0gICAgKDEpIFRoZSBjdXJyZW50IGluZGV4IGFuZCB3b3JrIHRyZWUgaXMgZGVyaXZlZCBmcm9tICRILCBidXQKKyAgICAgMS4gVGhlIGN1cnJlbnQgaW5kZXggYW5kIHdvcmsgdHJlZSBpcyBkZXJpdmVkIGZyb20gJEgsIGJ1dAogICAgICAgICB0aGUgdXNlciBtYXkgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIHRoZW0gc2luY2UgJEg7CiAKLSAgICAoMikgVGhlIHVzZXIgd2FudHMgdG8gZmFzdC1mb3J3YXJkIHRvICRNLgorICAgICAyLiBUaGUgdXNlciB3YW50cyB0byBmYXN0LWZvcndhcmQgdG8gJE0uCiAKIEluIHRoaXMgY2FzZSwgdGhlICJnaXQtcmVhZC10cmVlIC1tICRIICRNIiBjb21tYW5kIG1ha2VzIHN1cmUKIHRoYXQgbm8gbG9jYWwgY2hhbmdlIGlzIGxvc3QgYXMgdGhlIHJlc3VsdCBvZiB0aGlzICJtZXJnZSIuCkBAIC0yNTEsNyArMjYwLDcgQEAKIAogU2VlIEFsc28KIC0tLS0tLS0tCi1saW5rOmdpdC13cml0ZS10cmVlLmh0bWxbZ2l0LXdyaXRlLXRyZWVdOyBsaW5rOmdpdC1scy1maWxlcy5odG1sW2dpdC1scy1maWxlc10KK2dpdGxpbms6Z2l0LXdyaXRlLXRyZWVbMV07IGdpdGxpbms6Z2l0LWxzLWZpbGVzWzFdCiAKIAogQXV0aG9yCkBAIC0yNjQsNSArMjczLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKaW5kZXggMDliZDMyOC4uMTZjMTU4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CkBAIC0zMSw1ICszMSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CmluZGV4IDJjNjA2NWYuLjhhZmRlMTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1yZWNlaXZlLXBhY2soMSkKID09PT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC04MCw3ICs3OSw3IEBACiAKIFNFRSBBTFNPCiAtLS0tLS0tLQotbGluazpnaXQtc2VuZC1wYWNrLmh0bWxbZ2l0LXNlbmQtcGFja10KK2dpdGxpbms6Z2l0LXNlbmQtcGFja1sxXQogCiAKIEF1dGhvcgpAQCAtOTMsNCArOTIsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbGluay50eHQKaW5kZXggMjU5NzVhZS4uNjI0MDUzNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWxpbmsudHh0CkBAIC0zMyw1ICszMyw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbmFtZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW5hbWUudHh0CmluZGV4IDJjMjRiZmEuLjU4M2NiMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbmFtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVuYW1lLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1yZW5hbWUoMSkKID09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTI5LDUgKzI4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKaW5kZXggZDhlM2FkMC4uMGMxYWU0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXJlcGFjaygxKQogPT09PT09PT09PT09PQotdjAuOTkuNSwgQXVndXN0IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtNTEsOSArNTAsMTAgQEAKIAogU2VlLUFsc28KIC0tLS0tLS0tCi1naXQtcGFjay1vYmplY3RzKDEpIGdpdC1wcnVuZS1wYWNrZWQoMSkKK2dpdGxpbms6Z2l0LXBhY2stb2JqZWN0c1sxXQorZ2l0bGluazpnaXQtcHJ1bmUtcGFja2VkWzFdCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0CmluZGV4IDI3YTY2YWMuLjI0NjNlYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dApAQCAtMzYsNSArMzYsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKaW5kZXggYTY1NjdjNC4uMzFlYzIwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApAQCAtNDEsNSArNDEsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXNvbHZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc29sdmUudHh0CmluZGV4IGQwNTgzMTguLjRlNTdjMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc29sdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc29sdmUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXJlc29sdmUoMSkKID09PT09PT09PT09PT09Ci12MC45OS41LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgcmVzb2x2ZScgPGN1cnJlbnQ+IDxtZXJnZWQ+IDxtZXNzYWdlPgorJ2dpdC1yZXNvbHZlJyA8Y3VycmVudD4gPG1lcmdlZD4gPG1lc3NhZ2U+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzMsNSArMzIsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKaW5kZXggMzJjMDZhMS4uMDY0Y2NiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1yZXYtbGlzdCgxKQogPT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsMTggQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXJldi1saXN0JyBbICotLW1heC1jb3VudCo9bnVtYmVyIF0gWyAqLS1tYXgtYWdlKj10aW1lc3RhbXAgXSBbICotLW1pbi1hZ2UqPXRpbWVzdGFtcCBdIFsgKi0tYmlzZWN0KiBdIFsgKi0tcHJldHR5KiBdIFsgKi0tb2JqZWN0cyogXSBbICotLW1lcmdlLW9yZGVyKiBbICotLXNob3ctYnJlYWtzKiBdIF0gPGNvbW1pdD4gWyA8Y29tbWl0PiAuLi5dIFsgXjxjb21taXQ+IC4uLl0KKydnaXQtcmV2LWxpc3QnIFsgXC0tbWF4LWNvdW50PW51bWJlciBdCisJWyBcLS1tYXgtYWdlPXRpbWVzdGFtcCBdCisJWyBcLS1taW4tYWdlPXRpbWVzdGFtcCBdCisJWyBcLS1zcGFyc2UgXQorCVsgXC0tbm8tbWVyZ2VzIF0KKwlbIFwtLWFsbCBdCisJWyBbIFwtLW1lcmdlLW9yZGVyIFsgXC0tc2hvdy1icmVha3MgXSBdIHwgWyBcLS10b3BvLW9yZGVyIF0gfCBdCisJWyBcLS1wYXJlbnRzIF0KKwlbIFwtLW9iamVjdHMgWyBcLS11bnBhY2tlZCBdIF0KKwlbIFwtLXByZXR0eSB8IFwtLWhlYWRlciB8IF0KKwlbIFwtLWJpc2VjdCBdCisJPGNvbW1pdD4uLi4gWyBcLS0gPHBhdGhzPi4uLiBdCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMTcsNzEgKzI3LDExMiBAQAogZ2l2ZW4gY29tbWl0KHMpLCB0YWtpbmcgYW5jZXN0cnkgcmVsYXRpb25zaGlwIGludG8gYWNjb3VudC4gIFRoaXMgaXMKIHVzZWZ1bCB0byBwcm9kdWNlIGh1bWFuLXJlYWRhYmxlIGxvZyBvdXRwdXQuCiAKLUNvbW1pdHMgd2hpY2ggYXJlIHN0YXRlZCB3aXRoIGEgcHJlY2VkaW5nICdeJyBjYXVzZSBsaXN0aW5nIHRvIHN0b3AgYXQKLXRoYXQgcG9pbnQuIFRoZWlyIHBhcmVudHMgYXJlIGltcGxpZWQuICJnaXQtcmV2LWxpc3QgZm9vIGJhciBeYmF6IiB0aHVzCitDb21taXRzIHdoaWNoIGFyZSBzdGF0ZWQgd2l0aCBhIHByZWNlZGluZyAne2NhcmV0fScgY2F1c2UgbGlzdGluZyB0byBzdG9wIGF0Cit0aGF0IHBvaW50LiBUaGVpciBwYXJlbnRzIGFyZSBpbXBsaWVkLiAiZ2l0LXJldi1saXN0IGZvbyBiYXIge2NhcmV0fWJheiIgdGh1cwogbWVhbnMgImxpc3QgYWxsIHRoZSBjb21taXRzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiAnZm9vJyBhbmQgJ2JhcicsIGJ1dAogbm90IGluICdiYXonIi4KIAotSWYgKi0tcHJldHR5KiBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0IGNoYW5nZXNldHMKLWluIGh1bWFuLXJlYWRhYmxlIGZvcm0uCitBIHNwZWNpYWwgbm90YXRpb24gPGNvbW1pdDE+Li48Y29tbWl0Mj4gY2FuIGJlIHVzZWQgYXMgYQorc2hvcnQtaGFuZCBmb3Ige2NhcmV0fTxjb21taXQxPiA8Y29tbWl0Mj4uCiAKLVRoZSAqLS1vYmplY3RzKiBmbGFnIGNhdXNlcyAnZ2l0LXJldi1saXN0JyB0byBwcmludCB0aGUgb2JqZWN0IElEcyBvZgotYW55IG9iamVjdCByZWZlcmVuY2VkIGJ5IHRoZSBsaXN0ZWQgY29tbWl0cy4gJ2dpdC1yZXYtbGlzdCAtLW9iamVjdHMgZm9vCi1eYmFyJyB0aHVzIG1lYW5zICJzZW5kIG1lIGFsbCBvYmplY3QgSURzIHdoaWNoIEkgbmVlZCB0byBkb3dubG9hZCBpZgotSSBoYXZlIHRoZSBjb21taXQgb2JqZWN0ICdiYXInLCBidXQgbm90ICdmb28nIi4KIAotVGhlICotLWJpc2VjdCogZmxhZyBsaW1pdHMgb3V0cHV0IHRvIHRoZSBvbmUgY29tbWl0IG9iamVjdCB3aGljaCBpcwotcm91Z2hseSBoYWxmd2F5IGJldHdlZW4gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBjb21taXRzLiBUaHVzLAotaWYgJ2dpdC1yZXYtbGlzdCAtLWJpc2VjdCBmb28gXmJhcgotXmJheicgb3V0cHV0cyAnbWlkcG9pbnQnLCB0aGUgb3V0cHV0Ci1vZiAnZ2l0LXJldi1saXN0IGZvbyBebWlkcG9pbnQnIGFuZCAnZ2l0LXJldi1saXN0IG1pZHBvaW50Ci1eYmFyCi1eYmF6Jwotd291bGQgYmUgb2Ygcm91Z2hseSB0aGUgc2FtZSBsZW5ndGguIEZpbmRpbmcgdGhlIGNoYW5nZSB3aGljaCBpbnRyb2R1Y2VzCi1hIHJlZ3Jlc3Npb24gaXMgdGh1cyByZWR1Y2VkIHRvIGEgYmluYXJ5IHNlYXJjaDogcmVwZWF0ZWRseSBnZW5lcmF0ZSBhbmQKLXRlc3QgbmV3ICdtaWRwb2ludCdzIHVudGlsIHRoZSBjb21taXQgY2hhaW4gaXMgb2YgbGVuZ3RoIG9uZS4KK09QVElPTlMKKy0tLS0tLS0KKy0tcHJldHR5OjoKKwlQcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBjaGFuZ2VzZXRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uCiAKLUlmICotLW1lcmdlLW9yZGVyKiBpcyBzcGVjaWZpZWQsIHRoZSBjb21taXQgaGlzdG9yeSBpcyBkZWNvbXBvc2VkIGludG8gYQotdW5pcXVlIHNlcXVlbmNlIG9mIG1pbmltYWwsIG5vbi1saW5lYXIgZXBvY2hzIGFuZCBtYXhpbWFsLCBsaW5lYXIgZXBvY2hzLgotTm9uLWxpbmVhciBlcG9jaHMgYXJlIHRoZW4gbGluZWFyaXNlZCBieSBzb3J0aW5nIHRoZW0gaW50byBtZXJnZSBvcmRlciwgd2hpY2gKLWlzIGRlc2NyaWJlZCBiZWxvdy4KKy0taGVhZGVyOjoKKwlQcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBpbiByYXctZm9ybWF0OyBlYWNoCisJcmVjb3JkIGlzIHNlcGFyYXRlZCB3aXRoIGEgTlVMIGNoYXJhY3Rlci4KIAorLS1vYmplY3RzOjoKKwlQcmludCB0aGUgb2JqZWN0IElEcyBvZiBhbnkgb2JqZWN0IHJlZmVyZW5jZWQgYnkgdGhlIGxpc3RlZCBjb21taXRzLgorCSdnaXQtcmV2LWxpc3QgLS1vYmplY3RzIGZvbyBeYmFyJyB0aHVzIG1lYW5zICJzZW5kIG1lIGFsbCBvYmplY3QgSURzCisJd2hpY2ggSSBuZWVkIHRvIGRvd25sb2FkIGlmIEkgaGF2ZSB0aGUgY29tbWl0IG9iamVjdCAnYmFyJywgYnV0CisJbm90ICdmb28nIi4KKworLS11bnBhY2tlZDo6CisJT25seSB1c2VmdWwgd2l0aCBgLS1vYmplY3RzYDsgcHJpbnQgdGhlIG9iamVjdCBJRHMgdGhhdAorCWFyZSBub3QgaW4gcGFja3MuCisKKy0tYmlzZWN0OjoKKwlMaW1pdCBvdXRwdXQgdG8gdGhlIG9uZSBjb21taXQgb2JqZWN0IHdoaWNoIGlzIHJvdWdobHkgaGFsZndheQorCWJldHdlZW4gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZCBjb21taXRzLiBUaHVzLCBpZiAnZ2l0LXJldi1saXN0CisJLS1iaXNlY3QgZm9vIF5iYXIgXmJheicgb3V0cHV0cyAnbWlkcG9pbnQnLCB0aGUgb3V0cHV0CisJb2YgJ2dpdC1yZXYtbGlzdCBmb28gXm1pZHBvaW50JyBhbmQgJ2dpdC1yZXYtbGlzdCBtaWRwb2ludAorCV5iYXIgXmJheicgd291bGQgYmUgb2Ygcm91Z2hseSB0aGUgc2FtZSBsZW5ndGguIEZpbmRpbmcgdGhlIGNoYW5nZQorCXdoaWNoIGludHJvZHVjZXMgYSByZWdyZXNzaW9uIGlzIHRodXMgcmVkdWNlZCB0byBhIGJpbmFyeSBzZWFyY2g6CisJcmVwZWF0ZWRseSBnZW5lcmF0ZSBhbmQgdGVzdCBuZXcgJ21pZHBvaW50J3MgdW50aWwgdGhlIGNvbW1pdCBjaGFpbgorCWlzIG9mIGxlbmd0aCBvbmUuCisKKy0tbWF4LWNvdW50OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgb3V0cHV0LgorCistLW1heC1hZ2U9dGltZXN0YW1wLCAtLW1pbi1hZ2U9dGltZXN0YW1wOjoKKwlMaW1pdCB0aGUgY29tbWl0cyBvdXRwdXQgdG8gc3BlY2lmaWVkIHRpbWUgcmFuZ2UuCisKKy0tc3BhcnNlOjoKKwlXaGVuIG9wdGlvbmFsIHBhdGhzIGFyZSBnaXZlbiwgdGhlIGNvbW1hbmQgb3V0cHV0cyBvbmx5CisJdGhlIGNvbW1pdHMgdGhhdCBjaGFuZ2VzIGF0IGxlYXN0IG9uZSBvZiB0aGVtLCBhbmQgYWxzbworCWlnbm9yZXMgbWVyZ2VzIHRoYXQgZG8gbm90IHRvdWNoIHRoZSBnaXZlbiBwYXRocy4gIFRoaXMKKwlmbGFnIG1ha2VzIHRoZSBjb21tYW5kIG91dHB1dCBhbGwgZWxpZ2libGUgY29tbWl0cworCShzdGlsbCBzdWJqZWN0IHRvIGNvdW50IGFuZCBhZ2UgbGltaXRhdGlvbiksIGJ1dCBhcHBseQorCW1lcmdlIHNpbXBsaWZpY2F0aW9uIG5ldmVydGhlbGVzcy4KKworLS1hbGw6OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGAkR0lUX0RJUi9yZWZzL2AgYXJlCisJbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgPGNvbW1pdD4uCisKKy0tdG9wby1vcmRlcjo6CisJQnkgZGVmYXVsdCwgdGhlIGNvbW1pdHMgYXJlIHNob3duIGluIHJldmVyc2UKKwljaHJvbm9sb2dpY2FsIG9yZGVyLiAgVGhpcyBvcHRpb24gbWFrZXMgdGhlbSBhcHBlYXIgaW4KKwl0b3BvbG9naWNhbCBvcmRlciAoaS5lLiBkZXNjZW5kYW50IGNvbW1pdHMgYXJlIHNob3duCisJYmVmb3JlIHRoZWlyIHBhcmVudHMpLgorCistLW1lcmdlLW9yZGVyOjoKKwlXaGVuIHNwZWNpZmllZCB0aGUgY29tbWl0IGhpc3RvcnkgaXMgZGVjb21wb3NlZCBpbnRvIGEgdW5pcXVlCisJc2VxdWVuY2Ugb2YgbWluaW1hbCwgbm9uLWxpbmVhciBlcG9jaHMgYW5kIG1heGltYWwsIGxpbmVhciBlcG9jaHMuCisJTm9uLWxpbmVhciBlcG9jaHMgYXJlIHRoZW4gbGluZWFyaXNlZCBieSBzb3J0aW5nIHRoZW0gaW50byBtZXJnZQorCW9yZGVyLCB3aGljaCBpcyBkZXNjcmliZWQgYmVsb3cuCisrCiBNYXhpbWFsLCBsaW5lYXIgZXBvY2hzIGNvcnJlc3BvbmQgdG8gcGVyaW9kcyBvZiBzZXF1ZW50aWFsIGRldmVsb3BtZW50LgogTWluaW1hbCwgbm9uLWxpbmVhciBlcG9jaHMgY29ycmVzcG9uZCB0byBwZXJpb2RzIG9mIGRpdmVyZ2VudCBkZXZlbG9wbWVudAogZm9sbG93ZWQgYnkgYSBjb252ZXJnaW5nIG1lcmdlLiBUaGUgdGhlb3J5IG9mIGVwb2NocyBpcyBkZXNjcmliZWQgaW4gbW9yZQogZGV0YWlsIGF0CiBsaW5rOmh0dHA6Ly9ibGFja2N1YmVzLmR5bmRucy5vcmcvZXBvY2gvW2h0dHA6Ly9ibGFja2N1YmVzLmR5bmRucy5vcmcvZXBvY2gvXS4KLQorKwogVGhlIG1lcmdlIG9yZGVyIGZvciBhIG5vbi1saW5lYXIgZXBvY2ggaXMgZGVmaW5lZCBhcyBhIGxpbmVhcmlzYXRpb24gZm9yIHdoaWNoCiB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgYXJlIHRydWU6Ci0KKysKICAgICAxLiBpZiBhIGNvbW1pdCBQIGlzIHJlYWNoYWJsZSBmcm9tIGNvbW1pdCBOLCBjb21taXQgUCBzb3J0cyBhZnRlciBjb21taXQgTgogICAgICAgIGluIHRoZSBsaW5lYXJpc2VkIGxpc3QuCiAgICAgMi4gaWYgUGkgYW5kIFBqIGFyZSBhbnkgdHdvIHBhcmVudHMgb2YgYSBtZXJnZSBNICh3aXRoIGkgPCBqKSwgdGhlbiBhbnkKICAgICAgICBjb21taXQgTiwgc3VjaCB0aGF0IE4gaXMgcmVhY2hhYmxlIGZyb20gUGogYnV0IG5vdCByZWFjaGFibGUgZnJvbSBQaSwKICAgICAgICBzb3J0cyBiZWZvcmUgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gUGkuCi0KKysKIEludmFyaWFudCAxIHN0YXRlcyB0aGF0IGxhdGVyIGNvbW1pdHMgYXBwZWFyIGJlZm9yZSBlYXJsaWVyIGNvbW1pdHMgdGhleSBhcmUKIGRlcml2ZWQgZnJvbS4KLQorKwogSW52YXJpYW50IDIgc3RhdGVzIHRoYXQgY29tbWl0cyB1bmlxdWUgdG8gImxhdGVyIiBwYXJlbnRzIGluIGEgbWVyZ2UsIGFwcGVhcgogYmVmb3JlIGFsbCBjb21taXRzIGZyb20gImVhcmxpZXIiIHBhcmVudHMgb2YgYSBtZXJnZS4KIAotSWYgKi0tc2hvdy1icmVha3MqIGlzIHNwZWNpZmllZCwgZWFjaCBpdGVtIG9mIHRoZSBsaXN0IGlzIG91dHB1dCB3aXRoIGEKLTItY2hhcmFjdGVyIHByZWZpeCBjb25zaXN0aW5nIG9mIG9uZSBvZjogKHwpLCAoXiksICg9KSBmb2xsb3dlZCBieSBhIHNwYWNlLgotCistLXNob3ctYnJlYWtzOjoKKwlFYWNoIGl0ZW0gb2YgdGhlIGxpc3QgaXMgb3V0cHV0IHdpdGggYSAyLWNoYXJhY3RlciBwcmVmaXggY29uc2lzdGluZworCW9mIG9uZSBvZjogKHwpLCAoXiksICg9KSBmb2xsb3dlZCBieSBhIHNwYWNlLgorKwogQ29tbWl0cyBtYXJrZWQgd2l0aCAoPSkgcmVwcmVzZW50IHRoZSBib3VuZGFyaWVzIG9mIG1pbmltYWwsIG5vbi1saW5lYXIgZXBvY2hzCiBhbmQgY29ycmVzcG9uZCBlaXRoZXIgdG8gdGhlIHN0YXJ0IG9mIGEgcGVyaW9kIG9mIGRpdmVyZ2VudCBkZXZlbG9wbWVudCBvciB0bwogdGhlIGVuZCBvZiBzdWNoIGEgcGVyaW9kLgotCisrCiBDb21taXRzIG1hcmtlZCB3aXRoICh8KSBhcmUgZGlyZWN0IHBhcmVudHMgb2YgY29tbWl0cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcKIHRoZSBtYXJrZWQgY29tbWl0IGluIHRoZSBsaXN0LgotCisrCiBDb21taXRzIG1hcmtlZCB3aXRoICheKSBhcmUgbm90IHBhcmVudHMgb2YgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBjb21taXQuCiBUaGVzZSAiYnJlYWtzIiByZXByZXNlbnQgbmVjZXNzYXJ5IGRpc2NvbnRpbnVpdGllcyBpbXBsaWVkIGJ5IHRyeWluZyB0bwogcmVwcmVzZW50IGFuIGFyYnRpcmFyeSBEQUcgaW4gYSBsaW5lYXIgZm9ybS4KKysKK2AtLXNob3ctYnJlYWtzYCBpcyBvbmx5IHZhbGlkIGlmIGAtLW1lcmdlLW9yZGVyYCBpcyBhbHNvIHNwZWNpZmllZC4KIAotKi0tc2hvdy1icmVha3MqIGlzIG9ubHkgdmFsaWQgaWYgKi0tbWVyZ2Utb3JkZXIqIGlzIGFsc28gc3BlY2lmaWVkLgogCiBBdXRob3IKIC0tLS0tLQpAQCAtOTUsNSArMTQ2LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKaW5kZXggMDY3ZTRmMC4uNDMxYjhmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC01NCwxMyArNTQsMTMgQEAKIAlgZ2l0LWRpZmYtXCpgKS4KIAogLS1ub3Q6OgotCVdoZW4gc2hvd2luZyBvYmplY3QgbmFtZXMsIHByZWZpeCB0aGVtIHdpdGggJ14nIGFuZAotCXN0cmlwICdeJyBwcmVmaXggZnJvbSB0aGUgb2JqZWN0IG5hbWVzIHRoYXQgYWxyZWFkeSBoYXZlCisJV2hlbiBzaG93aW5nIG9iamVjdCBuYW1lcywgcHJlZml4IHRoZW0gd2l0aCAne2NhcmV0fScgYW5kCisJc3RyaXAgJ3tjYXJldH0nIHByZWZpeCBmcm9tIHRoZSBvYmplY3QgbmFtZXMgdGhhdCBhbHJlYWR5IGhhdmUKIAlvbmUuCiAKIC0tc3ltYm9saWM6OgogCVVzdWFsbHkgdGhlIG9iamVjdCBuYW1lcyBhcmUgb3V0cHV0IGluIFNIQTEgZm9ybSAod2l0aAotCXBvc3NpYmxlICdeJyBwcmVmaXgpOyB0aGlzIG9wdGlvbiBtYWtlcyB0aGVtIG91dHB1dCBpbiBhCisJcG9zc2libGUgJ3tjYXJldH0nIHByZWZpeCk7IHRoaXMgb3B0aW9uIG1ha2VzIHRoZW0gb3V0cHV0IGluIGEKIAlmb3JtIGFzIGNsb3NlIHRvIHRoZSBvcmlnaW5hbCBpbnB1dCBhcyBwb3NzaWJsZS4KIAogCkBAIC03Miw2ICs3MiwxNCBAQAogCXBhdGggb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSB0b3AtbGV2ZWwKIAlkaXJlY3RvcnkuCiAKKy0tc2luY2U9ZGF0ZXN0cmluZywgLS1hZnRlcj1kYXRlc3RyaW5nOjoKKwlQYXJzZXMgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0cyBjb3JyZXNwb25kaW5nCisJLS1tYXgtYWdlPSBwYXJhbWV0ZXIgZm9yIGdpdC1yZXYtbGlzdCBjb21tYW5kLgorCistLXVudGlsPWRhdGVzdHJpbmcsIC0tYmVmb3JlPWRhdGVzdHJpbmc6OgorCVBhcnNlcyB0aGUgZGF0ZSBzdHJpbmcsIGFuZCBvdXRwdXRzIGNvcnJlc3BvbmRpbmcKKwktLW1pbi1hZ2U9IHBhcmFtZXRlciBmb3IgZ2l0LXJldi1saXN0IGNvbW1hbmQuCisKIDxhcmdzPi4uLjo6CiAJRmxhZ3MgYW5kIHBhcmFtZXRlcnMgdG8gYmUgcGFyc2VkLgogCkBAIC03OSw4ICs4Nyw5IEBACiBTUEVDSUZZSU5HIFJFVklTSU9OUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQSByZXZpc2lvbiBwYXJhbWV0ZXIgdHlwaWNhbGx5IG5hbWVzIGEgY29tbWl0IG9iamVjdC4gIFRoZXkgdXNlCi13aGF0IGlzIGNhbGxlZCBhbiAnZXh0ZW5kZWQgU0hBMScgc3ludGF4LgorQSByZXZpc2lvbiBwYXJhbWV0ZXIgdHlwaWNhbGx5LCBidXQgbm90IG5lY2Vzc2FyaWx5LCBuYW1lcyBhCitjb21taXQgb2JqZWN0LiAgVGhleSB1c2Ugd2hhdCBpcyBjYWxsZWQgYW4gJ2V4dGVuZGVkIFNIQTEnCitzeW50YXguCiAKICogVGhlIGZ1bGwgU0hBMSBvYmplY3QgbmFtZSAoNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmcpLCBvcgogICBhIHN1YnN0cmluZyBvZiBzdWNoIHRoYXQgaXMgdW5pcXVlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4KQEAgLTkxLDI0ICsxMDAsNjMgQEAKICogQSBzeW1ib2xpYyByZWYgbmFtZS4gIEUuZy4gJ21hc3RlcicgdHlwaWNhbGx5IG1lYW5zIHRoZSBjb21taXQKICAgb2JqZWN0IHJlZmVyZW5jZWQgYnkgJEdJVF9ESVIvcmVmcy9oZWFkcy9tYXN0ZXIuICBJZiB5b3UKICAgaGFwcGVuIHRvIGhhdmUgYm90aCBoZWFkcy9tYXN0ZXIgYW5kIHRhZ3MvbWFzdGVyLCB5b3UgY2FuCi0gIGV4cGxpY2l0bHkgc2F5ICdoZWFkcy9tYXN0ZXInIHRvIHRlbGwgR0lUIHdoaWNoIG9uZSB5b3UgbWVhbi4KKyAgZXhwbGljaXRseSBzYXkgJ2hlYWRzL21hc3RlcicgdG8gdGVsbCBnaXQgd2hpY2ggb25lIHlvdSBtZWFuLgogCi0qIEEgc3VmZml4ICdeJyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgZmlyc3QgcGFyZW50IG9mCi0gIHRoYXQgY29tbWl0IG9iamVjdC4gICdePG4+JyBtZWFucyB0aGUgPG4+dGggcGFyZW50IChpLmUuCi0gICdyZXZeJwotICBpcyBlcXVpdmFsZW50IHRvICdyZXZeMScpLiAgQXMgYSBzcGVjaWFsIHJ1bGUsCi0gICdyZXZeMCcgbWVhbnMgdGhlIGNvbW1pdCBpdHNlbGYgYW5kIGlzIHVzZWQgd2hlbiAncmV2JyBpcyB0aGUKKyogQSBzdWZmaXggJ3tjYXJldH0nIHRvIGEgcmV2aXNpb24gcGFyYW1ldGVyIG1lYW5zIHRoZSBmaXJzdCBwYXJlbnQgb2YKKyAgdGhhdCBjb21taXQgb2JqZWN0LiAgJ3tjYXJldH08bj4nIG1lYW5zIHRoZSA8bj50aCBwYXJlbnQgKGkuZS4KKyAgJ3JldntjYXJldH0nCisgIGlzIGVxdWl2YWxlbnQgdG8gJ3JldntjYXJldH0xJykuICBBcyBhIHNwZWNpYWwgcnVsZSwKKyAgJ3JldntjYXJldH0wJyBtZWFucyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgaXMgdXNlZCB3aGVuICdyZXYnIGlzIHRoZQogICBvYmplY3QgbmFtZSBvZiBhIHRhZyBvYmplY3QgdGhhdCByZWZlcnMgdG8gYSBjb21taXQgb2JqZWN0LgogCiAqIEEgc3VmZml4ICd+PG4+JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciBtZWFucyB0aGUgY29tbWl0CiAgIG9iamVjdCB0aGF0IGlzIHRoZSA8bj50aCBnZW5lcmF0aW9uIGdyYW5kLXBhcmVudCBvZiB0aGUgbmFtZWQKICAgY29tbWl0IG9iamVjdCwgZm9sbG93aW5nIG9ubHkgdGhlIGZpcnN0IHBhcmVudC4gIEkuZS4gcmV2fjMgaXMKLSAgZXF1aXZhbGVudCB0byByZXZeXl4gd2hpY2ggaXMgZXF1aXZhbGVudCB0byByZXZeMV4xXjEuCisgIGVxdWl2YWxlbnQgdG8gcmV2e2NhcmV0fXtjYXJldH17Y2FyZXR9IHdoaWNoIGlzIGVxdWl2YWxlbnQgdG9cCisgIHJldntjYXJldH0xe2NhcmV0fTF7Y2FyZXR9MS4KIAotJ2dpdC1yZXYtcGFyc2UnIGFsc28gYWNjZXB0cyBhIHByZWZpeCAnXicgdG8gcmV2aXNpb24gcGFyYW1ldGVyLAorKiBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gb2JqZWN0IHR5cGUgbmFtZSBlbmNsb3NlZCBpbgorICBicmFjZSBwYWlyIChlLmcuIGB2MC45OS44e2NhcmV0fVx7Y29tbWl0XH1gKSBtZWFucyB0aGUgb2JqZWN0CisgIGNvdWxkIGJlIGEgdGFnLCBhbmQgZGVyZWZlcmVuY2UgdGhlIHRhZyByZWN1cnNpdmVseSB1bnRpbCBhbgorICBvYmplY3Qgb2YgdGhhdCB0eXBlIGlzIGZvdW5kIG9yIHRoZSBvYmplY3QgY2Fubm90IGJlCisgIGRlcmVmZXJlbmNlZCBhbnltb3JlIChpbiB3aGljaCBjYXNlLCBiYXJmKS4gIGByZXZ7Y2FyZXR9MGAKKyAgaW50cm9kdWNlZCBlYXJsaWVyIGlzIGEgc2hvcnQtaGFuZCBmb3IgYHJldntjYXJldH1ce2NvbW1pdFx9YC4KKworKiBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZW1wdHkgYnJhY2UgcGFpcgorICAoZS5nLiBgdjAuOTkuOHtjYXJldH1ce1x9YCkgbWVhbnMgdGhlIG9iamVjdCBjb3VsZCBiZSBhIHRhZywKKyAgYW5kIGRlcmVmZXJlbmNlIHRoZSB0YWcgcmVjdXJzaXZlbHkgdW50aWwgYSBub24tdGFnIG9iamVjdCBpcworICBmb3VuZC4KKworJ2dpdC1yZXYtcGFyc2UnIGFsc28gYWNjZXB0cyBhIHByZWZpeCAne2NhcmV0fScgdG8gcmV2aXNpb24gcGFyYW1ldGVyLAogd2hpY2ggaXMgcGFzc2VkIHRvICdnaXQtcmV2LWxpc3QnLiAgVHdvIHJldmlzaW9uIHBhcmFtZXRlcnMKIGNvbmNhdGVuYXRlZCB3aXRoICcuLicgaXMgYSBzaG9ydC1oYW5kIGZvciB3cml0aW5nIGEgcmFuZ2UKLWJldHdlZW4gdGhlbS4gIEkuZS4gJ3IxLi5yMicgaXMgZXF1aXZhbGVudCB0byBzYXlpbmcgJ15yMSByMicKK2JldHdlZW4gdGhlbS4gIEkuZS4gJ3IxLi5yMicgaXMgZXF1aXZhbGVudCB0byBzYXlpbmcgJ3tjYXJldH1yMSByMicKKworSGVyZSBpcyBhbiBpbGx1c3RyYXRpb24sIGJ5IEpvbiBMb2VsaWdlci4gIEJvdGggbm9kZSBCIGFuZCBDIGFyZQorYSBjb21taXQgcGFyZW50cyBvZiBjb21taXQgbm9kZSBBLiAgUGFyZW50IGNvbW1pdHMgYXJlIG9yZGVyZWQKK2xlZnQtdG8tcmlnaHQuCisKKyAgICBHICAgSCAgIEkgICBKCisgICAgIFwgLyAgICAgXCAvCisgICAgICBEICAgRSAgIEYKKyAgICAgICBcICB8ICAvCisgICAgICAgIFwgfCAvCisgICAgICAgICBcfC8KKyAgICAgICAgICBCICAgICBDCisgICAgICAgICAgIFwgICAvCisgICAgICAgICAgICBcIC8KKyAgICAgICAgICAgICBBCisKKyAgICBBID0gICAgICA9IEFeMAorICAgIEIgPSBBXiAgID0gQV4xICAgICA9IEF+MQorICAgIEMgPSBBXjIgID0gQV4yCisgICAgRCA9IEFeXiAgPSBBXjFeMSAgID0gQX4yCisgICAgRSA9IEJeMiAgPSBBXl4yCisgICAgRiA9IEJeMyAgPSBBXl4zCisgICAgRyA9IEFeXl4gPSBBXjFeMV4xID0gQX4zCisgICAgSCA9IEReMiAgPSBCXl4yICAgID0gQV5eXjIgID0gQX4yXjIKKyAgICBJID0gRl4gICA9IEJeM14gICAgPSBBXl4zXgorICAgIEogPSBGXjIgID0gQl4zXjIgICA9IEFeXjNeMgogCiAKIEF1dGhvcgpAQCAtMTIyLDUgKzE3MCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi10cmVlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjN2VkMC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtdHJlZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi1naXQtcmV2LXRyZWUoMSkKLT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKLQotTkFNRQotLS0tLQotZ2l0LXJldi10cmVlIC0gUHJvdmlkZXMgdGhlIHJldmlzaW9uIHRyZWUgZm9yIG9uZSBvciBtb3JlIGNvbW1pdHMKLQotCi1TWU5PUFNJUwotLS0tLS0tLS0KLSdnaXQtcmV2LXRyZWUnIFstLWVkZ2VzXSBbLS1jYWNoZSA8Y2FjaGUtZmlsZT5dIFteXTxjb21taXQ+IFtbXl08Y29tbWl0Pl0KLQotREVTQ1JJUFRJT04KLS0tLS0tLS0tLS0tCi1Qcm92aWRlcyB0aGUgcmV2aXNpb24gdHJlZSBmb3Igb25lIG9yIG1vcmUgY29tbWl0cy4KLQotT1BUSU9OUwotLS0tLS0tLQotLS1lZGdlczo6Ci0JU2hvdyBlZGdlcyAoaWUgcGxhY2VzIHdoZXJlIHRoZSBtYXJraW5nIGNoYW5nZXMgYmV0d2VlbiBwYXJlbnQKLQlhbmQgY2hpbGQpCi0KLS0tY2FjaGUgPGNhY2hlLWZpbGU+OjoKLQlVc2UgdGhlIHNwZWNpZmllZCBmaWxlIGFzIGEgY2FjaGUgZnJvbSBhIHByZXZpb3VzIGdpdC1yZXYtbGlzdCBydW4KLQl0byBzcGVlZCB0aGluZ3MgdXAuICBOb3RlIHRoYXQgdGhpcyAiY2FjaGUiIGlzIHRvdGFsbHkgZGlmZmVyZW50Ci0JY29uY2VwdCBmcm9tIHRoZSBkaXJlY3RvcnkgaW5kZXguICBBbHNvIHRoaXMgb3B0aW9uIGlzIG5vdAotCWltcGxlbWVudGVkIHlldC4KLQotW15dPGNvbW1pdD46OgotCVRoZSBjb21taXQgaWQgdG8gdHJhY2UgKGEgbGVhZGluZyBjYXJldCBtZWFucyB0byBpZ25vcmUgdGhpcwotCWNvbW1pdC1pZCBhbmQgYmVsb3cpCi0KLU91dHB1dAotLS0tLS0tCi0KLSAgICAgICAgPGRhdGU+IDxjb21taXQ+OjxmbGFncz4gWzxwYXJlbnQtY29tbWl0Pjo8ZmxhZ3M+IF1cKgotCi08ZGF0ZT46OgotCURhdGUgaW4gJ3NlY29uZHMgc2luY2UgZXBvY2gnCi0KLTxjb21taXQ+OjoKLQlpZCBvZiBjb21taXQgb2JqZWN0Ci0KLTxwYXJlbnQtY29tbWl0Pjo6Ci0JaWQgb2YgZWFjaCBwYXJlbnQgY29tbWl0IG9iamVjdCAoPjEgaW5kaWNhdGVzIGEgbWVyZ2UpCi0KLTxmbGFncz46OgotCi0JVGhlIGZsYWdzIGFyZSByZWFkIGFzIGEgYml0bWFzayByZXByZXNlbnRpbmcgZWFjaCBjb21taXQKLQlwcm92aWRlZCBvbiB0aGUgY29tbWFuZGxpbmUuIGVnOiBnaXZlbiB0aGUgY29tbWFuZDoKLQotCQkgJCBnaXQtcmV2LXRyZWUgPGNvbTE+IDxjb20yPiA8Y29tMz4KLQotCVRoZSBvdXRwdXQ6Ci0KLQkgICAgPGRhdGU+IDxjb21taXQ+OjUKLQotCSBtZWFucyB0aGF0IDxjb21taXQ+IGlzIHJlYWNoYWJsZSBmcm9tIDxjb20xPigxKSBhbmQgPGNvbTM+KDQpCi0JCi1BIHJldnRyZWUgY2FuIGdldCBxdWl0ZSBsYXJnZS4gImdpdC1yZXYtdHJlZSIgd2lsbCBldmVudHVhbGx5IGFsbG93Ci15b3UgdG8gY2FjaGUgcHJldmlvdXMgc3RhdGUgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBmb2xsb3cgdGhlIHdob2xlCi10aGluZyBkb3duLgotCi1TbyB0aGUgY2hhbmdlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tbWl0cyBpcyBsaXRlcmFsbHkKLQotCWdpdC1yZXYtdHJlZSBbY29tbWl0LWlkMV0gID4gY29tbWl0MS1yZXZ0cmVlCi0JZ2l0LXJldi10cmVlIFtjb21taXQtaWQyXSAgPiBjb21taXQyLXJldnRyZWUKLQlqb2luIC10IDogY29tbWl0MS1yZXZ0cmVlIGNvbW1pdDItcmV2dHJlZSA+IGNvbW1vbi1yZXZpc2lvbnMKLQotKHRoaXMgaXMgYWxzbyBob3cgdG8gZmluZCB0aGUgbW9zdCBjb21tb24gcGFyZW50IC0geW91J2QgbG9vayBhdCBqdXN0Ci10aGUgaGVhZCByZXZpc2lvbnMgLSB0aGUgb25lcyB0aGF0IGFyZW4ndCByZWZlcnJlZCB0byBieSBvdGhlcgotcmV2aXNpb25zIC0gaW4gImNvbW1vbi1yZXZpc2lvbiIsIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IG9uZS4gSQotdGhpbmsuKQotCi0KLUF1dGhvcgotLS0tLS0tCi1Xcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0KLURvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCi0KLUdJVAotLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKaW5kZXggYTNmOWE1Ni4uZmVlYmQ4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CkBAIC0yOSw5ICsyOSw5IEBACiAJd29ya2luZyB0cmVlIGRvZXMgbm90IGhhdmUgdG8gbWF0Y2ggdGhlIEhFQUQgY29tbWl0LgogCVRoZSByZXZlcnQgaXMgZG9uZSBhZ2FpbnN0IHRoZSBiZWdpbm5pbmcgc3RhdGUgb2YgeW91cgogCXdvcmtpbmcgdHJlZS4KLQotCVRoaXMgaXMgdXNlZnVsIHdoZW4gcmV2ZXJ0aW5nIG1vcmUgdGhhbiBvbmUgY29tbWl0cycKLQllZmZlY3QgdG8geW91ciB3b3JraW5nIHRyZWUgaW4gYSByb3cuCisrCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHJldmVydGluZyBtb3JlIHRoYW4gb25lIGNvbW1pdHMnCitlZmZlY3QgdG8geW91ciB3b3JraW5nIHRyZWUgaW4gYSByb3cuCiAKIAogQXV0aG9yCkBAIC00NCw1ICs0NCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggZmExMWVmYy4uYjliZWM1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2VuZC1lbWFpbCgxKQogPT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0yMSwzNSArMjAsMzcgQEAKIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHdpdGggYSBSZWFkTGluZQogZW5hYmxlZCBpbnRlcmZhY2UgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgogCitPUFRJT05TCistLS0tLS0tCiBUaGUgb3B0aW9ucyBhdmFpbGFibGUgYXJlOgogCi0gIC0tdG8KKy0tdG86OgogCVNwZWNpZnkgdGhlIHByaW1hcnkgcmVjaXBpZW50IG9mIHRoZSBlbWFpbHMgZ2VuZXJhdGVkLgogCUdlbmVyYWxseSwgdGhpcyB3aWxsIGJlIHRoZSB1cHN0cmVhbSBtYWludGFpbmVyIG9mIHRoZQogCXByb2plY3QgaW52b2x2ZWQuCiAKLSAgIC0tZnJvbQorLS1mcm9tOjoKIAlTcGVjaWZ5IHRoZSBzZW5kZXIgb2YgdGhlIGVtYWlscy4gIFRoaXMgd2lsbCBkZWZhdWx0IHRvCiAJdGhlIHZhbHVlIEdJVF9DT01NSVRURVJfSURFTlQsIGFzIHJldHVybmVkIGJ5ICJnaXQtdmFyIC1sIi4KIAlUaGUgdXNlciB3aWxsIHN0aWxsIGJlIHByb21wdGVkIHRvIGNvbmZpcm0gdGhpcyBlbnRyeS4KIAotICAgLS1jb21wb3NlCistLWNvbXBvc2U6OgogCVVzZSBcJEVESVRPUiB0byBlZGl0IGFuIGludHJvZHVjdG9yeSBtZXNzYWdlIGZvciB0aGUKIAlwYXRjaCBzZXJpZXMuCiAKLSAgIC0tc3ViamVjdAorLS1zdWJqZWN0OjoKICAgIAlTcGVjaWZ5IHRoZSBpbml0aWFsIHN1YmplY3Qgb2YgdGhlIGVtYWlsIHRocmVhZC4KIAlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKIAlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgogCi0gICAtLWluLXJlcGx5LXRvCistLWluLXJlcGx5LXRvOjoKIAlTcGVjaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QgSW4tUmVwbHktVG8gaGVhZGVyLgogCVN1YnNlcXVlbnQgZW1haWxzIHdpbGwgcmVmZXIgdG8gdGhlIHByZXZpb3VzIGVtYWlsIAogCWluc3RlYWQgb2YgdGhpcyBpZiAtLWNoYWluLXJlcGx5LXRvIGlzIHNldCAodGhlIGRlZmF1bHQpCiAJT25seSBuZWNlc3NhcnkgaWYgLS1jb21wb3NlIGlzIGFsc28gc2V0LiAgSWYgLS1jb21wb3NlCiAJaXMgbm90IHNldCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KIAotICAgLS1jaGFpbi1yZXBseS10bywgLS1uby1jaGFpbi1yZXBseS10bworLS1jaGFpbi1yZXBseS10bywgLS1uby1jaGFpbi1yZXBseS10bzo6CiAJSWYgdGhpcyBpcyBzZXQsIGVhY2ggZW1haWwgd2lsbCBiZSBzZW50IGFzIGEgcmVwbHkgdG8gdGhlIHByZXZpb3VzCiAJZW1haWwgc2VudC4gIElmIGRpc2FibGVkIHdpdGggIi0tbm8tY2hhaW4tcmVwbHktdG8iLCBhbGwgZW1haWxzIGFmdGVyCiAJdGhlIGZpcnN0IHdpbGwgYmUgc2VudCBhcyByZXBsaWVzIHRvIHRoZSBmaXJzdCBlbWFpbCBzZW50LiAgV2hlbiB1c2luZwpAQCAtNTcsNyArNTgsNyBAQAogCWVudGlyZSBwYXRjaCBzZXJpZXMuCiAJRGVmYXVsdCBpcyAtLWNoYWluLXJlcGx5LXRvCiAKLSAgIC0tc210cC1zZXJ2ZXIKKy0tc210cC1zZXJ2ZXI6OgogCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciB0byB1c2UuICBEZWZhdWx0cyB0bwogCWxvY2FsaG9zdC4KIApAQCAtNzUsNSArNzYsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dAppbmRleCA1ZWQyNWY1Li41NzdmMDZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2VuZC1wYWNrKDEpCiA9PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtNjEsOSArNjAsOSBAQAogV2l0aG91dCAnLS1hbGwnIGFuZCB3aXRob3V0IGFueSAnPHJlZj4nLCB0aGUgcmVmcyB0aGF0IGV4aXN0CiBib3RoIG9uIHRoZSBsb2NhbCBzaWRlIGFuZCBvbiB0aGUgcmVtb3RlIHNpZGUgYXJlIHVwZGF0ZWQuCiAKLVdoZW4gJzxyZWY+J3MgYXJlIHNwZWNpZmllZCBleHBsaWNpdGx5LCBpdCBjYW4gYmUgZWl0aGVyIGEKK1doZW4gb25lIG9yIG1vcmUgJzxyZWY+JyBhcmUgc3BlY2lmaWVkIGV4cGxpY2l0bHksIGl0IGNhbiBiZSBlaXRoZXIgYQogc2luZ2xlIHBhdHRlcm4sIG9yIGEgcGFpciBvZiBzdWNoIHBhdHRlcm4gc2VwYXJhdGVkIGJ5IGEgY29sb24KLSc6JyAodGhpcyBtZWFucyB0aGF0IGEgcmVmIG5hbWUgY2Fubm90IGhhdmUgYSBjb2xvbiBpbiBpdCkuICBBCisiOiIgKHRoaXMgbWVhbnMgdGhhdCBhIHJlZiBuYW1lIGNhbm5vdCBoYXZlIGEgY29sb24gaW4gaXQpLiAgQQogc2luZ2xlIHBhdHRlcm4gJzxuYW1lPicgaXMganVzdCBhIHNob3J0aGFuZCBmb3IgJzxuYW1lPjo8bmFtZT4nLgogCiBFYWNoIHBhdHRlcm4gcGFpciBjb25zaXN0cyBvZiB0aGUgc291cmNlIHNpZGUgKGJlZm9yZSB0aGUgY29sb24pCkBAIC03OSwxMCArNzgsMTAgQEAKIAogIC0gSWYgPGRzdD4gZG9lcyBub3QgbWF0Y2ggYW55IHJlbW90ZSByZWYsIGVpdGhlcgogCi0gICAtIGl0IGhhcyB0byBzdGFydCB3aXRoICJyZWZzLyI7IDxkc3Q+IGlzIHVzZWQgYXMgdGhlCisgICAqIGl0IGhhcyB0byBzdGFydCB3aXRoICJyZWZzLyI7IDxkc3Q+IGlzIHVzZWQgYXMgdGhlCiAgICAgIGRlc3RpbmF0aW9uIGxpdGVyYWxseSBpbiB0aGlzIGNhc2UuCiAKLSAgIC0gPHNyYz4gPT0gPGRzdD4gYW5kIHRoZSByZWYgdGhhdCBtYXRjaGVkIHRoZSA8c3JjPiBtdXN0IG5vdAorICAgKiA8c3JjPiA9PSA8ZHN0PiBhbmQgdGhlIHJlZiB0aGF0IG1hdGNoZWQgdGhlIDxzcmM+IG11c3Qgbm90CiAgICAgIGV4aXN0IGluIHRoZSBzZXQgb2YgcmVtb3RlIHJlZnM7IHRoZSByZWYgbWF0Y2hlZCA8c3JjPgogICAgICBsb2NhbGx5IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uLgogCkBAIC0xMDgsNCArMTA3LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dAppbmRleCBmY2YyY2RmLi42ZWY1OWFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC0xNCwxMSArMTQsMTIgQEAKIAogU2V0cyB1cCB0aGUgbm9ybWFsIGdpdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIGEgZmV3IGhlbHBlciBmdW5jdGlvbnMKIChjdXJyZW50bHkganVzdCAiZGllKCkiKSwgYW5kIHJldHVybnMgb2sgaWYgaXQgYWxsIGxvb2tzIGxpa2UgYSBnaXQgYXJjaGl2ZS4KLVNvIHVzZSBpdCBzb21ldGhpbmcgbGlrZQorU28sIHRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIGdpdCBzY3JpcHRzIG1vcmUgY2FyZWZ1bCBhbmQgcmVhZGFibGUsCit1c2UgaXQgYXMgZm9sbG93czoKIAotCS4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCi0KLXRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIGdpdCBzY3JpcHRzIG1vcmUgY2FyZWZ1bCBhbmQgcmVhZGFibGUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBdXRob3IKIC0tLS0tLQpAQCAtMzAsNSArMzEsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZDgwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dApAQCAtMCwwICsxLDM1IEBACitnaXQtc2hlbGwoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hlbGwgLSBSZXN0cmljdGVkIGxvZ2luIHNoZWxsIGZvciBHSVQgb3ZlciBTU0ggb25seQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorJ2dpdC1zaGVsbCAtYyA8Y29tbWFuZD4gPGFyZ3VtZW50PicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBsb2dpbiBzaGVsbCBmb3IgU1NIIGFjY291bnRzIHlvdSB3YW50Cit0byByZXN0cmljdCB0byBHSVQgcHVsbC9wdXNoIGFjY2VzcyBvbmx5LiBJdCBwZXJtaXRzIGV4ZWN1dGlvbiBvbmx5CitvZiBzZXJ2ZXItc2lkZSBHSVQgY29tbWFuZHMgaW1wbGVtZW50aW5nIHRoZSBwdWxsL3B1c2ggZnVuY3Rpb25hbGl0eS4KK1RoZSBjb21tYW5kcyBjYW4gYmUgZXhlY3V0ZWQgb25seSBieSB0aGUgJy1jJyBvcHRpb247IHRoZSBzaGVsbCBpcyBub3QKK2ludGVyYWN0aXZlLgorCitDdXJyZW50bHksIG9ubHkgdGhlIGBnaXQtcmVjZWl2ZS1wYWNrYCBhbmQgYGdpdC11cGxvYWQtcGFja2AgY29tbWFuZHMKK2FyZSBwZXJtaXR0ZWQgdG8gYmUgY2FsbGVkLCB3aXRoIGEgc2luZ2xlIHJlcXVpcmVkIGFyZ3VtZW50LgorCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IFBldHIgQmF1ZGlzIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CmluZGV4IDY5NjhjYTYuLjY1Y2E3N2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2hvcnRsb2coMSkKID09PT09PT09PT09PT09PQotdjAuOTkuNCwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOSw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8IGdpdCBzaG9ydGxvZycKKydnaXQtbG9nIC0tcHJldHR5PXNob3J0IHwgZ2l0IHNob3J0bG9nJwogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTI3LDUgKzI2LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CmluZGV4IDM5ZTA2ODIuLmM2Yzk3YjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc2hvdy1icmFuY2goMSkKID09PT09PT09PT09PT09PT09PQotdjAuOTkuNSwgQXVnIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtOCw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0IHNob3ctYnJhbmNoIFstLWFsbF0gWy0taGVhZHNdIFstLXRhZ3NdIFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gPHJlZmVyZW5jZT4uLi4nCisnZ2l0LXNob3ctYnJhbmNoIFstLWFsbF0gWy0taGVhZHNdIFstLXRhZ3NdIFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV0gWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSA8cmVmZXJlbmNlPi4uLicKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC00NSw2ICs0NCwxNSBAQAogCUFtb25nIHRoZSA8cmVmZXJlbmNlPnMgZ2l2ZW4sIGRpc3BsYXkgb25seSB0aGUgb25lcyB0aGF0CiAJY2Fubm90IGJlIHJlYWNoZWQgZnJvbSBhbnkgb3RoZXIgPHJlZmVyZW5jZT4uCiAKKy0tbm8tbmFtZTo6CisJRG8gbm90IHNob3cgbmFtaW5nIHN0cmluZ3MgZm9yIGVhY2ggY29tbWl0LgorCistLXNoYTEtbmFtZTo6CisJSW5zdGVhZCBvZiBuYW1pbmcgdGhlIGNvbW1pdHMgdXNpbmcgdGhlIHBhdGggdG8gcmVhY2gKKwl0aGVtIGZyb20gaGVhZHMgKGUuZy4gIm1hc3Rlcn4yIiB0byBtZWFuIHRoZSBncmFuZHBhcmVudAorCW9mICJtYXN0ZXIiKSwgbmFtZSB0aGVtIHdpdGggdGhlIHVuaXF1ZSBwcmVmaXggb2YgdGhlaXIKKwlvYmplY3QgbmFtZXMuCisKIE5vdGUgdGhhdCAtLW1vcmUsIC0tbGlzdCwgLS1pbmRlcGVuZGVudCBhbmQgLS1tZXJnZS1iYXNlIG9wdGlvbnMKIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAKQEAgLTg5LDIxICs5Nyw2IEBACiBhZGRzIG9uZSBjb21taXQgJ0ludHJvZHVjZSAicmVzZXQgdHlwZSInLiAgIm1oZiIgYnJhbmNoIGhhcyBtYW55CiBvdGhlciBjb21taXRzLgogCi1XaGVuIG9ubHkgb25lIGhlYWQgaXMgZ2l2ZW4sIHRoZSBvdXRwdXQgZm9ybWF0IGNoYW5nZXMgc2xpZ2h0bHkKLXRvIGNvbnNlcnZlIHNwYWNlLiAgVGhlICcrJyBzaWduIHRvIHNob3cgd2hpY2ggY29tbWl0IGlzCi1yZWFjaGFibGUgZnJvbSB3aGljaCBoZWFkIGFuZCB0aGUgZmlyc3QgTiBsaW5lcyB0byBzaG93IHRoZSBsaXN0Ci1vZiBoZWFkcyBiZWluZyBkaXNwbGF5ZWQgYXJlIGJvdGggbWVhbmluZ2xlc3Mgc28gdGhleSBhcmUKLW9taXR0ZWQuICBBbHNvIHRoZSBsYWJlbCBnaXZlbiB0byBlYWNoIGNvbW1pdCBkb2VzIG5vdCByZXBlYXQKLXRoZSBuYW1lIG9mIHRoZSBicmFuY2ggYmVjYXVzZSBpdCBpcyBvYnZpb3VzLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQgZ2l0IHNob3ctYnJhbmNoIC0tbW9yZT00IG1hc3RlcgotW21hc3Rlcl0gQWRkICdnaXQgc2hvdy1icmFuY2gnLgotW34xXSBBZGQgYSBuZXcgZXh0ZW5kZWQgU0hBMSBzeW50YXggPG5hbWU+fjxudW0+Ci1bfjJdIEZpeCAiZ2l0LWRpZmYgQSBCIgotW34zXSBnaXQtbHMtZmlsZXM6IGdlbmVyYWxpemVkIHBhdGhzcGVjcwotW340XSBNYWtlICJnaXQtbHMtZmlsZXMiIHdvcmsgaW4gc3ViZGlyZWN0b3JpZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBdXRob3IKIC0tLS0tLQpAQCAtMTE3LDQgKzExMCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CmluZGV4IGJlZWZlOTQuLmJlMDliNjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXNob3ctaW5kZXgoMSkKID09PT09PT09PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTQsNyArMTMsNyBAQAogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KLVJlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgR0lUIGFyY2hpdmUgY3JlYXRlZCB3aXRoCitSZWFkcyBnaXZlbiBpZHggZmlsZSBmb3IgcGFja2VkIGdpdCBhcmNoaXZlIGNyZWF0ZWQgd2l0aAogZ2l0LXBhY2stb2JqZWN0cyBjb21tYW5kLCBhbmQgZHVtcHMgaXRzIGNvbnRlbnRzLgogCiBUaGUgaW5mb3JtYXRpb24gaXQgb3V0cHV0cyBpcyBzdWJzZXQgb2Ygd2hhdCB5b3UgY2FuIGdldCBmcm9tCkBAIC0zMiw1ICszMSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtZmV0Y2gudHh0CmluZGV4IDRlZjAzZjYuLmI3MTE2YjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLWZldGNoLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1zc2gtZmV0Y2goMSkKID09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTQ4LDUgKzQ3LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXVwbG9hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtdXBsb2FkLnR4dAppbmRleCBmMWFhMGRmLi43MDI2NzRlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtdXBsb2FkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtdXBsb2FkLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC1zc2gtdXBsb2FkKDEpCiA9PT09PT09PT09PT09PT09PQotdjAuMSwgSnVuIDIwMDUKIAogTkFNRQogLS0tLQpAQCAtNDQsNSArNDMsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dAppbmRleCA4ODZmYjdjLi43NTNmYzA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtc3RhdHVzKDEpCiA9PT09PT09PT09PT09Ci12MC45OS40LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgc3RhdHVzJworJ2dpdC1zdGF0dXMnCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNDIsNSArNDEsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdHJpcHNwYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0CmluZGV4IDRmODJlZmIuLjUyOGExYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0CkBAIC0yOSw1ICsyOSw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bmltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm5pbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YmRjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm5pbXBvcnQudHh0CkBAIC0wLDAgKzEsMTM3IEBACitnaXQtc3ZuaW1wb3J0KDEpCis9PT09PT09PT09PT09PT09Cit2MC4xLCBKdWx5IDIwMDUKKworTkFNRQorLS0tLQorZ2l0LXN2bmltcG9ydCAtIEltcG9ydCBhIFNWTiByZXBvc2l0b3J5IGludG8gZ2l0CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCisnZ2l0LXN2bmltcG9ydCcgWyAtbyA8YnJhbmNoLWZvci1IRUFEPiBdIFsgLWggXSBbIC12IF0gWyAtZCB8IC1EIF0KKwkJCVsgLUMgPEdJVF9yZXBvc2l0b3J5PiBdIFsgLWkgXSBbIC11IF0gWy1sIGxpbWl0X25yX2NoYW5nZXNdCisJCQlbIC1iIGJyYW5jaF9zdWJkaXIgXSBbIC10IHRydW5rX3N1YmRpciBdIFsgLVQgdGFnX3N1YmRpciBdCisJCQlbIC1zIHN0YXJ0X2NoZyBdIFsgLW0gXSBbIC1NIHJlZ2V4IF0KKwkJCTxTVk5fcmVwb3NpdG9yeV9VUkw+IFsgPHBhdGg+IF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ltcG9ydHMgYSBTVk4gcmVwb3NpdG9yeSBpbnRvIGdpdC4gSXQgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3CityZXBvc2l0b3J5LCBvciBpbmNyZW1lbnRhbGx5IGltcG9ydCBpbnRvIGFuIGV4aXN0aW5nIG9uZS4KKworU1ZOIGFjY2VzcyBpcyBkb25lIGJ5IHRoZSBTVk46OiBQZXJsIG1vZHVsZS4KKworZ2l0LXN2bmltcG9ydCBhc3N1bWVzIHRoYXQgU1ZOIHJlcG9zaXRvcmllcyBhcmUgb3JnYW5pemVkIGludG8gb25lCisidHJ1bmsiIGRpcmVjdG9yeSB3aGVyZSB0aGUgbWFpbiBkZXZlbG9wbWVudCBoYXBwZW5zLCAiYnJhbmNoL0ZPTyIKK2RpcmVjdG9yaWVzIGZvciBicmFuY2hlcywgYW5kICIvdGFncy9GT08iIGRpcmVjdG9yaWVzIGZvciB0YWdzLgorT3RoZXIgc3ViZGlyZWN0b3JpZXMgYXJlIGlnbm9yZWQuCisKK2dpdC1zdm5pbXBvcnQgY3JlYXRlcyBhIGZpbGUgIi5naXQvc3ZuMmdpdCIsIHdoaWNoIGlzIHJlcXVpcmVkIGZvcgoraW5jcmVtZW50YWwgU1ZOIGltcG9ydHMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1DIDx0YXJnZXQtZGlyPjo6CisgICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCistcyA8c3RhcnRfcmV2Pjo6CisgICAgICAgIFN0YXJ0IGltcG9ydGluZyBhdCB0aGlzIFNWTiBjaGFuZ2UgbnVtYmVyLiBUaGUgIGRlZmF1bHQgaXMgMS4KKysKK1doZW4gaW1wb3J0aW5nIGluY2VtZW50YWxseSwgeW91IG1pZ2h0IG5lZWQgdG8gZWRpdCB0aGUgLmdpdC9zdm4yZ2l0IGZpbGUuCisKKy1pOjoKKwlJbXBvcnQtb25seTogZG9uJ3QgcGVyZm9ybSBhIGNoZWNrb3V0IGFmdGVyIGltcG9ydGluZy4gIFRoaXMgb3B0aW9uCisJZW5zdXJlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGNhY2hlIHJlbWFpbiB1bnRvdWNoZWQgYW5kIHdpbGwKKwlub3QgY3JlYXRlIHRoZW0gaWYgdGhleSBkbyBub3QgZXhpc3QuCisKKy10IDx0cnVua19zdWJkaXI+OjoKKwlOYW1lIHRoZSBTVk4gdHJ1bmsuIERlZmF1bHQgInRydW5rIi4KKworLVQgPHRhZ19zdWJkaXI+OjoKKwlOYW1lIHRoZSBTVk4gc3ViZGlyZWN0b3J5IGZvciB0YWdzLiBEZWZhdWx0ICJ0YWdzIi4KKworLWIgPGJyYW5jaF9zdWJkaXI+OjoKKwlOYW1lIHRoZSBTVk4gc3ViZGlyZWN0b3J5IGZvciBicmFuY2hlcy4gRGVmYXVsdCAiYnJhbmNoZXMiLgorCistbyA8YnJhbmNoLWZvci1IRUFEPjo6CisJVGhlICd0cnVuaycgYnJhbmNoIGZyb20gU1ZOIGlzIGltcG9ydGVkIHRvIHRoZSAnb3JpZ2luJyBicmFuY2ggd2l0aGluCisJdGhlIGdpdCByZXBvc2l0b3J5LiBVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaW1wb3J0IGludG8gYQorCWRpZmZlcmVudCBicmFuY2guCisKKy1tOjoKKwlBdHRlbXB0IHRvIGRldGVjdCBtZXJnZXMgYmFzZWQgb24gdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIG9wdGlvbgorCXdpbGwgZW5hYmxlIGRlZmF1bHQgcmVnZXhlcyB0aGF0IHRyeSB0byBjYXB0dXJlIHRoZSBuYW1lIHNvdXJjZQorCWJyYW5jaCBuYW1lIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlLgorCistTSA8cmVnZXg+OjoKKwlBdHRlbXB0IHRvIGRldGVjdCBtZXJnZXMgYmFzZWQgb24gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBjdXN0b20KKwlyZWdleC4gSXQgY2FuIGJlIHVzZWQgd2l0aCAtbSB0byBhbHNvIHNlZSB0aGUgZGVmYXVsdCByZWdleGVzLgorCVlvdSBtdXN0IGVzY2FwZSBmb3J3YXJkIHNsYXNoZXMuCisKKy1sIDxtYXhfbnVtX2NoYW5nZXM+OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIFNWTiBjaGFuZ2VzZXRzIHdlIHB1bGwgYmVmb3JlIHF1aXR0aW5nLgorCVRoaXMgb3B0aW9uIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTVk4gbGlicmFyeSBoYXMgc2VyaW91cyBtZW1vcnkKKwlsZWFrczsgdGhlIHJlY29tbWVuZGVkIHZhbHVlIGZvciBub250cml2aWFsIGltcG9ydHMgaXMgMTAwLgorCisJZ2l0LXN2bmltcG9ydCB3aWxsIHN0aWxsIGV4aXQgd2l0aCBhIHplcm8gZXhpdCBjb2RlLiBZb3UgY2FuIGNoZWNrCisJdGhlIHNpemUgb2YgdGhlIGZpbGUgIi5naXQvc3ZuMmdpdCIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY2FsbAorCXRoZSBpbXBvcnRlciBhZ2Fpbi4KKworLXY6OgorCVZlcmJvc2l0eTogbGV0ICdzdm5pbXBvcnQnIHJlcG9ydCB3aGF0IGl0IGlzIGRvaW5nLgorCistZDo6CisJVXNlIGRpcmVjdCBIVFRQIHJlcXVlc3RzIGlmIHBvc3NpYmxlLiBUaGUgIjxwYXRoPiIgYXJndW1lbnQgaXMgdXNlZAorCW9ubHkgZm9yIHJldHJpZXZpbmcgdGhlIFNWTiBsb2dzOyB0aGUgcGF0aCB0byB0aGUgY29udGVudHMgaXMKKwlpbmNsdWRlZCBpbiB0aGUgU1ZOIGxvZy4KKworLUQ6OgorCVVzZSBkaXJlY3QgSFRUUCByZXF1ZXN0cyBpZiBwb3NzaWJsZS4gVGhlICI8cGF0aD4iIGFyZ3VtZW50IGlzIHVzZWQKKwlmb3IgcmV0cmlldmluZyB0aGUgbG9ncywgYXMgd2VsbCBhcyBmb3IgdGhlIGNvbnRlbnRzLgorKworVGhlcmUncyBubyBzYWZlIHdheSB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoaWNoIG9mIHRoZXNlIG9wdGlvbnMgdG8KK3VzZSwgc28geW91IG5lZWQgdG8gdHJ5IGJvdGguIFVzdWFsbHksIHRoZSBvbmUgdGhhdCdzIHdyb25nIHdpbGwgZGllCit3aXRoIGEgNDB4IGVycm9yIHByZXR0eSBxdWlja2x5LgorCis8U1ZOX3JlcG9zaXRvcnlfVVJMPjo6CisJVGhlIFVSTCBvZiB0aGUgU1ZOIG1vZHVsZSB5b3Ugd2FudCB0byBpbXBvcnQuIEZvciBsb2NhbAorCXJlcG9zaXRvcmllcywgdXNlICJmaWxlOi8vL2Fic29sdXRlL3BhdGgiLgorKworSWYgeW91J3JlIHVzaW5nIHRoZSAiLWQiIG9yICItRCIgb3B0aW9uLCB0aGlzIGlzIHRoZSBVUkwgb2YgdGhlIFNWTgorcmVwb3NpdG9yeSBpdHNlbGY7IGl0IHVzdWFsbHkgZW5kcyBpbiAiL3N2biIuCisKKzxTVk5fcmVwb3NpdG9yeV9VUkw+OjoKKwlUaGUgVVJMIG9mIHRoZSBTVk4gbW9kdWxlIHlvdSB3YW50IHRvIGltcG9ydC4gRm9yIGxvY2FsCisJcmVwb3NpdG9yaWVzLCB1c2UgImZpbGU6Ly8vYWJzb2x1dGUvcGF0aCIuCisKKzxwYXRoPgorCVRoZSBwYXRoIHRvIHRoZSBtb2R1bGUgeW91IHdhbnQgdG8gY2hlY2sgb3V0LgorCistaDo6CisJUHJpbnQgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LgorCitPVVRQVVQKKy0tLS0tLQorSWYgJy12JyBpcyBzcGVjaWZpZWQsIHRoZSBzY3JpcHQgcmVwb3J0cyB3aGF0IGl0IGlzIGRvaW5nLgorCitPdGhlcndpc2UsIHN1Y2Nlc3MgaXMgaW5kaWNhdGVkIHRoZSBVbml4IHdheSwgaS5lLiBieSBzaW1wbHkgZXhpdGluZyB3aXRoCithIHplcm8gZXhpdCBzdGF0dXMuCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IE1hdHRoaWFzIFVybGljaHMgPHNtdXJmQHNtdXJmLm5vcmlzLmRlPiwgd2l0aCBoZWxwIGZyb20KK3ZhcmlvdXMgcGFydGljaXBhbnRzIG9mIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCisKK0Jhc2VkIG9uIGEgY3ZzMmdpdCBzY3JpcHQgYnkgdGhlIHNhbWUgYXV0aG9yLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorRG9jdW1lbnRhdGlvbiBieSBNYXR0aGlhcyBVcmxpY2hzIDxzbXVyZkBzbXVyZi5ub3Jpcy5kZT4uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODUxYWUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dApAQCAtMCwwICsxLDUyIEBACitnaXQtc3ltYm9saWMtcmVmKDEpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zeW1ib2xpYy1yZWYgLSByZWFkIGFuZCBtb2RpZnkgc3ltYm9saWMgcmVmcworCitTWU5PUFNJUworLS0tLS0tLS0KKydnaXQtc3ltYm9saWMtcmVmJyA8bmFtZT4gWzxyZWY+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdmVuIG9uZSBhcmd1bWVudCwgcmVhZHMgd2hpY2ggYnJhbmNoIGhlYWQgdGhlIGdpdmVuIHN5bWJvbGljCityZWYgcmVmZXJzIHRvIGFuZCBvdXRwdXRzIGl0cyBwYXRoLCByZWxhdGl2ZSB0byB0aGUgYC5naXQvYAorZGlyZWN0b3J5LiAgVHlwaWNhbGx5IHlvdSB3b3VsZCBnaXZlIGBIRUFEYCBhcyB0aGUgPG5hbWU+Cithcmd1bWVudCB0byBzZWUgb24gd2hpY2ggYnJhbmNoIHlvdXIgd29ya2luZyB0cmVlIGlzIG9uLgorCitHaXZlIHR3byBhcmd1bWVudHMsIGNyZWF0ZSBvciB1cGRhdGUgYSBzeW1ib2xpYyByZWYgPG5hbWU+IHRvCitwb2ludCBhdCB0aGUgZ2l2ZW4gYnJhbmNoIDxyZWY+LgorCitUcmFkaXRpb25hbGx5LCBgLmdpdC9IRUFEYCBpcyBhIHN5bWxpbmsgcG9pbnRpbmcgYXQKK2ByZWZzL2hlYWRzL21hc3RlcmAuICBXaGVuIHdlIHdhbnQgdG8gc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoLAord2UgZGlkIGBsbiAtc2YgcmVmcy9oZWFkcy9uZXdicmFuY2ggLmdpdC9IRUFEYCwgYW5kIHdoZW4gd2Ugd2FudAordG8gZmluZCBvdXQgd2hpY2ggYnJhbmNoIHdlIGFyZSBvbiwgd2UgZGlkIGByZWFkbGluayAuZ2l0L0hFQURgLgorVGhpcyB3YXMgZmluZSwgYW5kIGludGVybmFsbHkgdGhhdCBpcyB3aGF0IHN0aWxsIGhhcHBlbnMgYnkKK2RlZmF1bHQsIGJ1dCBvbiBwbGF0Zm9ybXMgdGhhdCBkb2VzIG5vdCBoYXZlIHdvcmtpbmcgc3ltbGlua3MsCitvciB0aGF0IGRvZXMgbm90IGhhdmUgdGhlIGByZWFkbGluaygxKWAgY29tbWFuZCwgdGhpcyB3YXMgYSBiaXQKK2N1bWJlcnNvbWUuICBPbiBzb21lIHBsYXRmb3JtcywgYGxuIC1zZmAgZG9lcyBub3QgZXZlbiB3b3JrIGFzCithZHZlcnRpc2VkIChob3Jyb3JzKS4KKworQSBzeW1ib2xpYyByZWYgY2FuIGJlIGEgcmVndWxhciBmaWxlIHRoYXQgc3RvcmVzIGEgc3RyaW5nIHRoYXQKK2JlZ2lucyB3aXRoIGByZWY6IHJlZnMvYC4gIEZvciBleGFtcGxlLCB5b3VyIGAuZ2l0L0hFQURgICpjYW4qCitiZSBhIHJlZ3VsYXIgZmlsZSB3aG9zZSBjb250ZW50cyBpcyBgcmVmOiByZWZzL2hlYWRzL21hc3RlcmAuCitUaGlzIGNhbiBiZSB1c2VkIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc3ltYm9saWMKK2xpbmtzLiAgSW5zdGVhZCBvZiBkb2luZyBgcmVhZGxpbmsgLmdpdC9IRUFEYCwgYGdpdC1zeW1ib2xpYy1yZWYKK0hFQURgIGNhbiBiZSB1c2VkIHRvIGZpbmQgb3V0IHdoaWNoIGJyYW5jaCB3ZSBhcmUgb24uICBUbyBwb2ludAordGhlIEhFQUQgdG8gYG5ld2JyYW5jaGAsIGluc3RlYWQgb2YgYGxuIC1zZiByZWZzL2hlYWRzL25ld2JyYW5jaAorLmdpdC9IRUFEYCwgYGdpdC1zeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL25ld2JyYW5jaGAgY2FuIGJlCit1c2VkLgorCitDdXJyZW50bHksIC5naXQvSEVBRCB1c2VzIGEgcmVndWxhciBmaWxlIHN5bWJvbGljIHJlZiBvbiBDeWd3aW4sCithbmQgZXZlcnl3aGVyZSBlbHNlIGl0IGlzIGltcGxlbWVudGVkIGFzIGEgc3ltbGluay4gIFRoaXMgY2FuIGJlCitjaGFuZ2VkIGF0IGNvbXBpbGF0aW9uIHRpbWUuCisKK0F1dGhvcgorLS0tLS0tCitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAppbmRleCAwZTFiZTcyLi4zOTg0ODEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKQEAgLTEsMjggKzEsMzQgQEAKIGdpdC10YWcoMSkKID09PT09PT09PT0KLXYwLjk5LjQsIEF1ZyAyMDA1CiAKIE5BTUUKIC0tLS0KIGdpdC10YWcgLSAgQ3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKIAogCi0KIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC10YWcnIFstcyB8IC1hXSBbLWZdIDxuYW1lPgorJ2dpdC10YWcnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+XSA8bmFtZT4gWzxoZWFkPl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1BZGRzIGEgInRhZyIgcmVmZXJlbmNlIGluIC5naXQvcmVmcy90YWdzLworQWRkcyBhICd0YWcnIHJlZmVyZW5jZSBpbiAuZ2l0L3JlZnMvdGFncy8KIAotVW5sZXNzICItZiIgaXMgZ2l2ZW4sIHRoZSB0YWcgbXVzdCBub3QgeWV0IGV4aXN0IGluICIuZ2l0L3JlZnMvdGFncyIKK1VubGVzcyBgLWZgIGlzIGdpdmVuLCB0aGUgdGFnIG11c3Qgbm90IHlldCBleGlzdCBpbgorYC5naXQvcmVmcy90YWdzL2AgZGlyZWN0b3J5LgogCi1JZiAiLXMiIG9yICItYSIgaXMgcGFzc2VkLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciBhIHRhZyBtZXNzYWdlLgotYW5kIGEgdGFnIG9iamVjdCBpcyBjcmVhdGVkLiAgT3RoZXJ3aXNlIGp1c3QgdGhlIFNIQTEgb2JqZWN0Ci1uYW1lIG9mIHRoZSBjb21taXQgb2JqZWN0IGlzIHdyaXR0ZW4uCitJZiBvbmUgb2YgYC1hYCwgYC1zYCwgb3IgYC11IDxrZXktaWQ+YCBpcyBwYXNzZWQsIHRoZSBjb21tYW5kCitjcmVhdGVzIGEgJ3RhZycgb2JqZWN0LCBhbmQgcmVxdWlyZXMgdGhlIHRhZyBtZXNzYWdlLiAgVW5sZXNzCitgLW0gPG1zZz5gIGlzIGdpdmVuLCBhbiBlZGl0b3IgaXMgc3RhcnRlZCBmb3IgdGhlIHVzZXIgdG8gdHlwZQoraW4gdGhlIHRhZyBtZXNzYWdlLgogCi1BIEdudVBHIHNpZ25lZCB0YWcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB3aGVuICItcyIgaXMgdXNlZC4KK090aGVyd2lzZSBqdXN0IHRoZSBTSEExIG9iamVjdCBuYW1lIG9mIHRoZSBjb21taXQgb2JqZWN0IGlzCit3cml0dGVuIChpLmUuIGFuIGxpZ2h0d2VpZ2h0IHRhZykuCisKK0EgR251UEcgc2lnbmVkIHRhZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdoZW4gYC1zYCBvciBgLXUKKzxrZXktaWQ+YCBpcyB1c2VkLiAgV2hlbiBgLXUgPGtleS1pZD5gIGlzIG5vdCB1c2VkLCB0aGUKK2NvbW1pdHRlciBpZGVudGl0eSBmb3IgdGhlIGN1cnJlbnQgdXNlciBpcyB1c2VkIHRvIGZpbmQgdGhlCitHbnVQRyBrZXkgZm9yIHNpZ25pbmcuCiAKIAogQXV0aG9yCkBAIC0zNiw0ICs0Miw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKaW5kZXggOTMyM2RkZC4uMjEzOWI2ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC10YXItdHJlZSgxKQogPT09PT09PT09PT09PT09Ci12MC4xLCBNYXkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zNSw1ICszNCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dAppbmRleCAyZjIxMzBkLi4yMTNkYzgxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXVucGFjay1maWxlKDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIE1heSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTMzLDUgKzMyLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0CmluZGV4IGE0MmE3NWUuLmI3MTZiYTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtdW5wYWNrLW9iamVjdHMoMSkKID09PT09PT09PT09PT09PT09PT09PQotdjAuMSwgSnVseSAyMDA1CiAKIE5BTUUKIC0tLS0KQEAgLTM1LDUgKzM0LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKaW5kZXggNTRiNWYyNC4uNThiOWU0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXVwZGF0ZS1pbmRleCgxKQogPT09PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTAsMTEgKzksMTMgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogJ2dpdC11cGRhdGUtaW5kZXgnCi0JICAgICBbLS1hZGRdIFstLXJlbW92ZV0gWy0tcmVmcmVzaF0gWy0tcmVwbGFjZV0KLQkgICAgIFstLWlnbm9yZS1taXNzaW5nXQotCSAgICAgWy0tZm9yY2UtcmVtb3ZlXQorCSAgICAgWy0tYWRkXSBbLS1yZW1vdmUgfCAtLWZvcmNlLXJlbW92ZV0gWy0tcmVwbGFjZV0gCisJICAgICBbLS1yZWZyZXNoIFstcV0gWy0tdW5tZXJnZWRdIFstLWlnbm9yZS1taXNzaW5nXV0KIAkgICAgIFstLWNhY2hlaW5mbyA8bW9kZT4gPG9iamVjdD4gPGZpbGU+XVwqCi0JICAgICBbLS1pbmZvLW9ubHldCisJICAgICBbLS1jaG1vZD0oK3wtKXhdCisJICAgICBbLS1pbmZvLW9ubHldIFstLWluZGV4LWluZm9dCisJICAgICBbLXpdIFstLXN0ZGluXQorCSAgICAgWy0tdmVyYm9zZV0KIAkgICAgIFstLV0gWzxmaWxlPl1cKgogCiBERVNDUklQVElPTgpAQCAtNDIsMTIgKzQzLDI4IEBACiAJTG9va3MgYXQgdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGNoZWNrcyB0byBzZWUgaWYgbWVyZ2VzIG9yCiAJdXBkYXRlcyBhcmUgbmVlZGVkIGJ5IGNoZWNraW5nIHN0YXQoKSBpbmZvcm1hdGlvbi4KIAorLXE6OgorICAgICAgICBRdWlldC4gIElmIC0tcmVmcmVzaCBmaW5kcyB0aGF0IHRoZSBjYWNoZSBuZWVkcyBhbiB1cGRhdGUsIHRoZQorICAgICAgICBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGVycm9yIG91dC4gIFRoaXMgb3B0aW9uIG1ha2VzCisgICAgICAgIGdpdC11cGRhdGUtaW5kZXggY29udGludWUgYW55d2F5LgorCistLXVubWVyZ2VkOjoKKyAgICAgICAgSWYgLS1yZWZyZXNoIGZpbmRzIHVubWVyZ2VkIGNoYW5nZXMgaW4gdGhlIGNhY2hlLCB0aGUgZGVmYXVsdCAKKyAgICAgICAgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMgZ2l0LXVwZGF0ZS1pbmRleCAKKyAgICAgICAgY29udGludWUgYW55d2F5LgorCiAtLWlnbm9yZS1taXNzaW5nOjoKIAlJZ25vcmVzIG1pc3NpbmcgZmlsZXMgZHVyaW5nIGEgLS1yZWZyZXNoCiAKIC0tY2FjaGVpbmZvIDxtb2RlPiA8b2JqZWN0PiA8cGF0aD46OgogCURpcmVjdGx5IGluc2VydCB0aGUgc3BlY2lmaWVkIGluZm8gaW50byB0aGUgY2FjaGUuCiAJCistLWluZGV4LWluZm86OgorICAgICAgICBSZWFkIGluZGV4IGluZm8gZnJvbSBzdGRpbi4KKworLS1jaG1vZD0oK3wtKXg6OgorICAgICAgICBTZXQgdGhlIGV4ZWN1dGUgcGVybWlzc2lvbnMgb24gdGhlIHVwZGF0ZWQgZmlsZXMuICAgICAgICAKKwogLS1pbmZvLW9ubHk6OgogCURvIG5vdCBjcmVhdGUgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIGZvciBhbGwKIAk8ZmlsZT4gYXJndW1lbnRzIHRoYXQgZm9sbG93IHRoaXMgZmxhZzsganVzdCBpbnNlcnQKQEAgLTY1LDEyICs4MiwyNCBAQAogCXRoYXQgY29uZmxpY3RzIHdpdGggdGhlIGVudHJ5IGJlaW5nIGFkZGVkIGFyZQogCWF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB3aXRoIHdhcm5pbmcgbWVzc2FnZXMuCiAKKy0tc3RkaW46OgorCUluc3RlYWQgb2YgdGFraW5nIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAorCXJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4gIFBhdGhzIGFyZQorCXNlcGFyYXRlZCBieSBMRiAoaS5lLiBvbmUgcGF0aCBwZXIgbGluZSkgYnkgZGVmYXVsdC4KKworLS12ZXJib3NlOjoKKyAgICAgICAgUmVwb3J0IHdoYXQgaXMgYmVpbmcgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSBpbmRleC4KKworLXo6OgorCU9ubHkgbWVhbmluZ2Z1bCB3aXRoIGAtLXN0ZGluYDsgcGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoCisJTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIExGLgorCiAtLTo6CiAJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KIAogPGZpbGU+OjoKIAlGaWxlcyB0byBhY3Qgb24uCi0JTm90ZSB0aGF0IGZpbGVzIGJlZ2luaW5nIHdpdGggJy4nIGFyZSBkaXNjYXJkZWQuIFRoaXMgaW5jbHVkZXMKKwlOb3RlIHRoYXQgZmlsZXMgYmVnaW5uaW5nIHdpdGggJy4nIGFyZSBkaXNjYXJkZWQuIFRoaXMgaW5jbHVkZXMKIAlgLi9maWxlYCBhbmQgYGRpci8uL2ZpbGVgLiBJZiB5b3UgZG9uJ3Qgd2FudCB0aGlzLCB0aGVuIHVzZQkKIAljbGVhbmVyIG5hbWVzLgogCVRoZSBzYW1lIGFwcGxpZXMgdG8gZGlyZWN0b3JpZXMgZW5kaW5nICcvJyBhbmQgcGF0aHMgd2l0aCAnLy8nCkBAIC05Miw3ICsxMjEsNyBAQAogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoaXMgaXMgdXNlZnVsIGZvciBtaW5pbXVtLWNoZWNrb3V0CiBtZXJnaW5nLgogCi0gIFRvIHByZXRlbmQgeW91IGhhdmUgYSBmaWxlIHdpdGggbW9kZSBhbmQgc2hhMSBhdCBwYXRoLCBzYXk6CitUbyBwcmV0ZW5kIHlvdSBoYXZlIGEgZmlsZSB3aXRoIG1vZGUgYW5kIHNoYTEgYXQgcGF0aCwgc2F5OgogCiAgICAkIGdpdC11cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gbW9kZSBzaGExIHBhdGgKIApAQCAtMTEyLDYgKzE0MSwxNyBAQAogICAgZ2l0LWNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdC11cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKIAogCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCit5b3VyIHJlcG9zaXRvcnkgaXMgb24gYW4gZmlsZXN5c3RlbSB3aG9zZSBleGVjdXRhYmxlIGJpdHMgYXJlCit1bnJlbGlhYmxlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gJ2ZhbHNlJy4gIFRoaXMgY2F1c2VzIHRoZQorY29tbWFuZCB0byBpZ25vcmUgZGlmZmVyZW5jZXMgaW4gZmlsZSBtb2RlcyByZWNvcmRlZCBpbiB0aGUKK2luZGV4IGFuZCB0aGUgZmlsZSBtb2RlIG9uIHRoZSBmaWxlc3lzdGVtIGlmIHRoZXkgZGlmZmVyIG9ubHkgb24KK2V4ZWN1dGFibGUgYml0LiAgIE9uIHN1Y2ggYW4gdW5mb3J0dW5hdGUgZmlsZXN5c3RlbSwgeW91IG1heQorbmVlZCB0byB1c2UgYGdpdC11cGRhdGUtaW5kZXggLS1jaG1vZD1gLgorCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CkBAIC0xMjIsNSArMTYyLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTcxNWFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQKQEAgLTAsMCArMSw1OCBAQAorZ2l0LXVwZGF0ZS1yZWYoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGRhdGUtcmVmIC0gdXBkYXRlIHRoZSBvYmplY3QgbmFtZSBzdG9yZWQgaW4gYSByZWYgc2FmZWx5CisKK1NZTk9QU0lTCistLS0tLS0tLQorYGdpdC11cGRhdGUtcmVmYCA8cmVmPiA8bmV3dmFsdWU+IFs8b2xkdmFsdWU+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdmVuIHR3byBhcmd1bWVudHMsIHN0b3JlcyB0aGUgPG5ld3ZhbHVlPiBpbiB0aGUgPHJlZj4sIHBvc3NpYmx5CitkZXJlZmVyZW5jaW5nIHRoZSBzeW1ib2xpYyByZWZzLiAgRS5nLiBgZ2l0LXVwZGF0ZS1yZWYgSEVBRAorPG5ld3ZhbHVlPmAgdXBkYXRlcyB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB0byB0aGUgbmV3IG9iamVjdC4KKworR2l2ZW4gdGhyZWUgYXJndW1lbnRzLCBzdG9yZXMgdGhlIDxuZXd2YWx1ZT4gaW4gdGhlIDxyZWY+LAorcG9zc2libHkgZGVyZWZlcmVuY2luZyB0aGUgc3ltYm9saWMgcmVmcywgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKK3RoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA8cmVmPiBtYXRjaGVzIDxvbGR2YWx1ZT4uCitFLmcuIGBnaXQtdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciA8bmV3dmFsdWU+IDxvbGR2YWx1ZT5gCit1cGRhdGVzIHRoZSBtYXN0ZXIgYnJhbmNoIGhlYWQgdG8gPG5ld3ZhbHVlPiBvbmx5IGlmIGl0cyBjdXJyZW50Cit2YWx1ZSBpcyA8b2xkdmFsdWU+LgorCitJdCBhbHNvIGFsbG93cyBhICJyZWYiIGZpbGUgdG8gYmUgYSBzeW1ib2xpYyBwb2ludGVyIHRvIGFub3RoZXIKK3JlZiBmaWxlIGJ5IHN0YXJ0aW5nIHdpdGggdGhlIGZvdXItYnl0ZSBoZWFkZXIgc2VxdWVuY2Ugb2YKKyJyZWY6Ii4KKworTW9yZSBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZSB1cGRhdGUgb2YgYSByZWYgZmlsZSB0byBmb2xsb3cKK3RoZXNlIHN5bWJvbGljIHBvaW50ZXJzLCB3aGV0aGVyIHRoZXkgYXJlIHN5bWxpbmtzIG9yIHRoZXNlCisicmVndWxhciBmaWxlIHN5bWJvbGljIHJlZnMiLiAgSXQgZm9sbG93cyAqcmVhbCogc3ltbGlua3Mgb25seQoraWYgdGhleSBzdGFydCB3aXRoICJyZWZzLyI6IG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgdHJ5IHRvIHJlYWQKK3RoZW0gYW5kIHVwZGF0ZSB0aGVtIGFzIGEgcmVndWxhciBmaWxlIChpLmUuIGl0IHdpbGwgYWxsb3cgdGhlCitmaWxlc3lzdGVtIHRvIGZvbGxvdyB0aGVtLCBidXQgd2lsbCBvdmVyd3JpdGUgc3VjaCBhIHN5bWxpbmsgdG8KK3NvbWV3aGVyZSBlbHNlIHdpdGggYSByZWd1bGFyIGZpbGVuYW1lKS4KKworSW4gZ2VuZXJhbCwgdXNpbmcKKworCWdpdC11cGRhdGUtcmVmIEhFQUQgIiRoZWFkIgorCitzaG91bGQgYmUgYSBfbG90XyBzYWZlciB0aGFuIGRvaW5nCisKKwllY2hvICIkaGVhZCIgPiAiJEdJVF9ESVIvSEVBRCIKKworYm90aCBmcm9tIGEgc3ltbGluayBmb2xsb3dpbmcgc3RhbmRwb2ludCAqYW5kKiBhbiBlcnJvciBjaGVja2luZworc3RhbmRwb2ludC4gIFRoZSAicmVmcy8iIHJ1bGUgZm9yIHN5bWxpbmtzIG1lYW5zIHRoYXQgc3ltbGlua3MKK3RoYXQgcG9pbnQgdG8gIm91dHNpZGUiIHRoZSB0cmVlIGFyZSBzYWZlOiB0aGV5J2xsIGJlIGZvbGxvd2VkCitmb3IgcmVhZGluZyBidXQgbm90IGZvciB3cml0aW5nIChzbyB3ZSdsbCBuZXZlciB3cml0ZSB0aHJvdWdoIGEKK3JlZiBzeW1saW5rIHRvIHNvbWUgb3RoZXIgdHJlZSwgaWYgeW91IGhhdmUgY29waWVkIGEgd2hvbGUKK2FyY2hpdmUgYnkgY3JlYXRpbmcgYSBzeW1saW5rIHRyZWUpLgorCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CmluZGV4IDM5MjIyYzMuLjNkMGRlYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC11cGRhdGUtc2VydmVyLWluZm8oMSkKID09PT09PT09PT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC01NSw1ICs1NCw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dAppbmRleCBiZTU5N2ExLi4zZDhmOGVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CkBAIC0xLDYgKzEsNSBAQAogZ2l0LXVwbG9hZC1wYWNrKDEpCiA9PT09PT09PT09PT09PT09PT0KLXYwLjEsIEp1bHkgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0zNyw0ICszNiw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dAppbmRleCBlYmU4N2Q2Li5jMjJkMzRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQKQEAgLTEsNiArMSw1IEBACiBnaXQtdmFyKDEpCiA9PT09PT09PT09Ci12MC4xLCBKdWx5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMTUsMjEgKzE0LDIzIEBACiAtLS0tLS0tLS0tLQogUHJpbnRzIGEgZ2l0IGxvZ2ljYWwgdmFyaWFibGUuCiAKLS1sIGNhdXNlcyB0aGUgbG9naWNhbCB2YXJpYWJsZXMgdG8gYmUgbGlzdGVkLgorT1BUSU9OUworLS0tLS0tLQorLWw6OgorCUNhdXNlIHRoZSBsb2dpY2FsIHZhcmlhYmxlcyB0byBiZSBsaXN0ZWQuCiAKIEVYQU1QTEUKIC0tLS0tLS0tCi0kZ2l0LXZhciBHSVRfQVVUSE9SX0lERU5UCi0KLUVyaWMgVy4gQmllZGVybWFuIDxlYmllZGVybUBsbnhpLmNvbT4gMTEyMTIyMzI3OCAtMDYwMAorCSQgZ2l0LXZhciBHSVRfQVVUSE9SX0lERU5UCisJRXJpYyBXLiBCaWVkZXJtYW4gPGViaWVkZXJtQGxueGkuY29tPiAxMTIxMjIzMjc4IC0wNjAwCiAKIAogVkFSSUFCTEVTCiAtLS0tLS0tLS0tCi1HSVRfQVVUSE9SX0lERU5UCitHSVRfQVVUSE9SX0lERU5UOjoKICAgICBUaGUgYXV0aG9yIG9mIGEgcGllY2Ugb2YgY29kZS4KIAotR0lUX0NPTU1JVFRFUl9JREVOVAorR0lUX0NPTU1JVFRFUl9JREVOVDo6CiAgICAgVGhlIHBlcnNvbiB3aG8gcHV0IGEgcGllY2Ugb2YgY29kZSBpbnRvIGdpdC4KIAogRGlhZ25vc3RpY3MKQEAgLTQzLDggKzQ0LDggQEAKIAogU2VlIEFsc28KIC0tLS0tLS0tCi1saW5rOmdpdC1jb21taXQtdHJlZS5odG1sW2dpdC1jb21taXQtdHJlZV0KLWxpbms6Z2l0LXRhZy5odG1sW2dpdC10YWddCitnaXRsaW5rOmdpdC1jb21taXQtdHJlZVsxXQorZ2l0bGluazpnaXQtdGFnWzFdCiAKIEF1dGhvcgogLS0tLS0tCkBAIC01Niw1ICs1Nyw1IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rOmdpdC5odG1sW2dpdF0gc3VpdGUKK1BhcnQgb2YgdGhlIGdpdGxpbms6Z2l0WzddIHN1aXRlCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dAppbmRleCBkMTA0M2ViLi5jZDc0ZmZkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0CkBAIC0xLDEwICsxLDkgQEAKIGdpdC12ZXJpZnktcGFjaygxKQogPT09PT09PT09PT09PT09PT09Ci12MC4xLCBKdW5lIDIwMDUKIAogTkFNRQogLS0tLQotZ2l0LXZlcmlmeS1wYWNrIC0gVmFsaWRhdGUgcGFja2VkIEdJVCBhcmNoaXZlIGZpbGVzLgorZ2l0LXZlcmlmeS1wYWNrIC0gVmFsaWRhdGUgcGFja2VkIGdpdCBhcmNoaXZlIGZpbGVzLgogCiAKIFNZTk9QU0lTCkBAIC0xNCw3ICsxMyw3IEBACiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQotUmVhZHMgZ2l2ZW4gaWR4IGZpbGUgZm9yIHBhY2tlZCBHSVQgYXJjaGl2ZSBjcmVhdGVkIHdpdGgKK1JlYWRzIGdpdmVuIGlkeCBmaWxlIGZvciBwYWNrZWQgZ2l0IGFyY2hpdmUgY3JlYXRlZCB3aXRoCiBnaXQtcGFjay1vYmplY3RzIGNvbW1hbmQgYW5kIHZlcmlmaWVzIGlkeCBmaWxlIGFuZCB0aGUKIGNvcnJlc3BvbmRpbmcgcGFjayBmaWxlLgogCkBAIC0yNSwxNSArMjQsMTkgQEAKIAogLXY6OgogCUFmdGVyIHZlcmlmeWluZyB0aGUgcGFjaywgc2hvdyBsaXN0IG9mIG9iamVjdHMgY29udGFpbmVkCi0JaW4gdGhlIHBhY2suICBUaGUgZm9ybWF0IHVzZWQgaXM6CisJaW4gdGhlIHBhY2suCiAKLQkJU0hBMSB0eXBlIHNpemUgb2Zmc2V0LWluLXBhY2tmaWxlCitPVVRQVVQgRk9STUFUCistLS0tLS0tLS0tLS0tCitXaGVuIHNwZWNpZnlpbmcgdGhlIC12IG9wdGlvbiB0aGUgZm9ybWF0IHVzZWQgaXM6CiAKLQlmb3Igb2JqZWN0cyB0aGF0IGFyZSBub3QgZGVsdGlmaWVkIGluIHRoZSBwYWNrLCBhbmQKKwlTSEExIHR5cGUgc2l6ZSBvZmZzZXQtaW4tcGFja2ZpbGUKIAotCQlTSEExIHR5cGUgc2l6ZSBvZmZzZXQtaW4tcGFja2ZpbGUgZGVwdGggYmFzZS1TSEExCitmb3Igb2JqZWN0cyB0aGF0IGFyZSBub3QgZGVsdGlmaWVkIGluIHRoZSBwYWNrLCBhbmQKIAotCWZvciBvYmplY3RzIHRoYXQgYXJlIGRlbHRpZmllZC4KKwlTSEExIHR5cGUgc2l6ZSBvZmZzZXQtaW4tcGFja2ZpbGUgZGVwdGggYmFzZS1TSEExCisKK2ZvciBvYmplY3RzIHRoYXQgYXJlIGRlbHRpZmllZC4KIAogQXV0aG9yCiAtLS0tLS0KQEAgLTQ1LDUgKzQ4LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dAppbmRleCA5OGRiMWIzLi5iOGE3M2M0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dApAQCAtMjgsNSArMjgsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKaW5kZXggNzQyMDA1My4uNmMxNTBiMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC13aGF0Y2hhbmdlZCgxKQogPT09PT09PT09PT09PT09PT09Ci12MC45OS40LCBBdWcgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC05LDcgKzgsNyBAQAogCiBTWU5PUFNJUwogLS0tLS0tLS0KLSdnaXQgd2hhdGNoYW5nZWQnIDxvcHRpb24+Li4uCisnZ2l0LXdoYXRjaGFuZ2VkJyA8b3B0aW9uPi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTQ0LDYgKzQzLDI3IEBACiAJPGZvcm1hdD4gY2FuIGJlIG9uZSBvZiAncmF3JywgJ21lZGl1bScsICdzaG9ydCcsICdmdWxsJywKIAlhbmQgJ29uZWxpbmUnLgogCistbTo6CisJQnkgZGVmYXVsdCwgZGlmZmVyZW5jZXMgZm9yIG1lcmdlIGNvbW1pdHMgYXJlIG5vdCBzaG93bi4KKwlXaXRoIHRoaXMgZmxhZywgc2hvdyBkaWZmZXJlbmNlcyB0byB0aGF0IGNvbW1pdCBmcm9tIGFsbAorCW9mIGl0cyBwYXJlbnRzLgorCisJSG93ZXZlciwgaXQgaXMgbm90IHZlcnkgdXNlZnVsIGluIGdlbmVyYWwsIGFsdGhvdWdoIGl0CisJKmlzKiB1c2VmdWwgb24gYSBmaWxlLWJ5LWZpbGUgYmFzaXMuCisKK0V4YW1wbGVzCistLS0tLS0tLQorZ2l0LXdoYXRjaGFuZ2VkIC1wIHYyLjYuMTIuLiBpbmNsdWRlL3Njc2kgZHJpdmVycy9zY3NpOjoKKworCVNob3cgYXMgcGF0Y2hlcyB0aGUgY29tbWl0cyBzaW5jZSB2ZXJzaW9uICd2Mi42LjEyJyB0aGF0IGNoYW5nZWQKKwlhbnkgZmlsZSBpbiB0aGUgaW5jbHVkZS9zY3NpIG9yIGRyaXZlcnMvc2NzaSBzdWJkaXJlY3RvcmllcworCitnaXQtd2hhdGNoYW5nZWQgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIC0tIGdpdGs6OgorCisJU2hvdyB0aGUgY2hhbmdlcyBkdXJpbmcgdGhlIGxhc3QgdHdvIHdlZWtzIHRvIHRoZSBmaWxlICdnaXRrJy4KKwlUaGUgIi0tIiBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlICpicmFuY2gqIG5hbWVkCisJJ2dpdGsnCisKIAogQXV0aG9yCiAtLS0tLS0KQEAgLTU3LDUgKzc3LDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAppbmRleCA1Y2Q1NGFiLi41MWJlNDRkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdC13cml0ZS10cmVlKDEpCiA9PT09PT09PT09PT09PT09PQotdjAuMSwgTWF5IDIwMDUKIAogTkFNRQogLS0tLQpAQCAtMzksNSArMzgsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggYmVjNTYyZS4uMmY5NjIyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtMSw2ICsxLDUgQEAKIGdpdCg3KQogPT09PT09Ci12MC45OS42LCBTZXAgMjAwNQogCiBOQU1FCiAtLS0tCkBAIC0yMSw4ICsyMCw4IEBACiAKIFRoZSA8PERpc2N1c3Npb24+PiBzZWN0aW9uIGJlbG93IGNvbnRhaW5zIG11Y2ggdXNlZnVsIGRlZmluaXRpb24gYW5kCiBjbGFyaWZpY2F0aW9uIGluZm8gLSByZWFkIHRoYXQgZmlyc3QuICBBbmQgb2YgdGhlIGNvbW1hbmRzLCBJIHN1Z2dlc3QKLXJlYWRpbmcgbGluazpnaXQtdXBkYXRlLWluZGV4Lmh0bWxbZ2l0LXVwZGF0ZS1pbmRleF0gYW5kCi1saW5rOmdpdC1yZWFkLXRyZWUuaHRtbFtnaXQtcmVhZC10cmVlXSBmaXJzdCAtIEkgd2lzaCBJIGhhZCEKK3JlYWRpbmcgZ2l0bGluazpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAorZ2l0bGluazpnaXQtcmVhZC10cmVlWzFdIGZpcnN0IC0gSSB3aXNoIEkgaGFkIQogCiBJZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIENWUywgbGluazpjdnMtbWlncmF0aW9uLmh0bWxbY3ZzIG1pZ3JhdGlvbl0KIGRvY3VtZW50IG1heSBiZSBoZWxwZnVsIGFmdGVyIHlvdSBmaW5pc2ggdGhlIHR1dG9yaWFsLgpAQCAtNTUsMTA1ICs1NCwxMDAgQEAKIAogTWFuaXB1bGF0aW9uIGNvbW1hbmRzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLWxpbms6Z2l0LWFwcGx5Lmh0bWxbZ2l0LWFwcGx5XTo6CitnaXRsaW5rOmdpdC1hcHBseVsxXTo6CiAJUmVhZHMgYSAiZGlmZiAtdXAxIiBvciBnaXQgZ2VuZXJhdGVkIHBhdGNoIGZpbGUgYW5kCiAJYXBwbGllcyBpdCB0byB0aGUgd29ya2luZyB0cmVlLgogCi1saW5rOmdpdC1jaGVja291dC1pbmRleC5odG1sW2dpdC1jaGVja291dC1pbmRleF06OgorZ2l0bGluazpnaXQtY2hlY2tvdXQtaW5kZXhbMV06OgogCUNvcHkgZmlsZXMgZnJvbSB0aGUgY2FjaGUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5Ci0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1jaGVja291dC1jYWNoZS4KIAotbGluazpnaXQtY29tbWl0LXRyZWUuaHRtbFtnaXQtY29tbWl0LXRyZWVdOjoKK2dpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdOjoKIAlDcmVhdGVzIGEgbmV3IGNvbW1pdCBvYmplY3QKIAotbGluazpnaXQtaGFzaC1vYmplY3QuaHRtbFtnaXQtaGFzaC1vYmplY3RdOjoKK2dpdGxpbms6Z2l0LWhhc2gtb2JqZWN0WzFdOjoKIAlDb21wdXRlcyB0aGUgb2JqZWN0IElEIGZyb20gYSBmaWxlLgogCi1saW5rOmdpdC1pbml0LWRiLmh0bWxbZ2l0LWluaXQtZGJdOjoKK2dpdGxpbms6Z2l0LWluZGV4LXBhY2suaHRtbFsxXTo6CisJQnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZS4KKworZ2l0bGluazpnaXQtaW5pdC1kYlsxXTo6CiAJQ3JlYXRlcyBhbiBlbXB0eSBnaXQgb2JqZWN0IGRhdGFiYXNlCiAKLWxpbms6Z2l0LW1lcmdlLWluZGV4Lmh0bWxbZ2l0LW1lcmdlLWluZGV4XTo6CitnaXRsaW5rOmdpdC1tZXJnZS1pbmRleFsxXTo6CiAJUnVucyBhIG1lcmdlIGZvciBmaWxlcyBuZWVkaW5nIG1lcmdpbmcKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LW1lcmdlLWNhY2hlLgogCi1saW5rOmdpdC1ta3RhZy5odG1sW2dpdC1ta3RhZ106OgorZ2l0bGluazpnaXQtbWt0YWdbMV06OgogCUNyZWF0ZXMgYSB0YWcgb2JqZWN0CiAKLWxpbms6Z2l0LXBhY2stb2JqZWN0cy5odG1sW2dpdC1wYWNrLW9iamVjdHNdOjoKK2dpdGxpbms6Z2l0LXBhY2stb2JqZWN0c1sxXTo6CiAJQ3JlYXRlcyBhIHBhY2tlZCBhcmNoaXZlIG9mIG9iamVjdHMuCiAKLWxpbms6Z2l0LXBydW5lLXBhY2tlZC5odG1sW2dpdC1wcnVuZS1wYWNrZWRdOjoKK2dpdGxpbms6Z2l0LXBydW5lLXBhY2tlZFsxXTo6CiAJUmVtb3ZlIGV4dHJhIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBpbiBwYWNrIGZpbGVzLgogCi1saW5rOmdpdC1yZWFkLXRyZWUuaHRtbFtnaXQtcmVhZC10cmVlXTo6CitnaXRsaW5rOmdpdC1yZWFkLXRyZWVbMV06OgogCVJlYWRzIHRyZWUgaW5mb3JtYXRpb24gaW50byB0aGUgZGlyZWN0b3J5IGNhY2hlCiAKLWxpbms6Z2l0LXVucGFjay1vYmplY3RzLmh0bWxbZ2l0LXVucGFjay1vYmplY3RzXTo6CitnaXRsaW5rOmdpdC11bnBhY2stb2JqZWN0c1sxXTo6CiAJVW5wYWNrcyBvYmplY3RzIG91dCBvZiBhIHBhY2tlZCBhcmNoaXZlLgogCi1saW5rOmdpdC11cGRhdGUtaW5kZXguaHRtbFtnaXQtdXBkYXRlLWluZGV4XTo6CitnaXRsaW5rOmdpdC11cGRhdGUtaW5kZXhbMV06OgogCU1vZGlmaWVzIHRoZSBpbmRleCBvciBkaXJlY3RvcnkgY2FjaGUKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXVwZGF0ZS1jYWNoZS4KIAotbGluazpnaXQtd3JpdGUtdHJlZS5odG1sW2dpdC13cml0ZS10cmVlXTo6CitnaXRsaW5rOmdpdC13cml0ZS10cmVlWzFdOjoKIAlDcmVhdGVzIGEgdHJlZSBmcm9tIHRoZSBjdXJyZW50IGNhY2hlCiAKIAogSW50ZXJyb2dhdGlvbiBjb21tYW5kcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1saW5rOmdpdC1jYXQtZmlsZS5odG1sW2dpdC1jYXQtZmlsZV06OgorZ2l0bGluazpnaXQtY2F0LWZpbGVbMV06OgogCVByb3ZpZGUgY29udGVudCBvciB0eXBlIGluZm9ybWF0aW9uIGZvciByZXBvc2l0b3J5IG9iamVjdHMKIAotbGluazpnaXQtZGlmZi1pbmRleC5odG1sW2dpdC1kaWZmLWluZGV4XTo6CitnaXRsaW5rOmdpdC1kaWZmLWluZGV4WzFdOjoKIAlDb21wYXJlcyBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGJldHdlZW4gdGhlIGNhY2hlIGFuZCByZXBvc2l0b3J5Ci0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1kaWZmLWNhY2hlLgogCi1saW5rOmdpdC1kaWZmLWZpbGVzLmh0bWxbZ2l0LWRpZmYtZmlsZXNdOjoKK2dpdGxpbms6Z2l0LWRpZmYtZmlsZXNbMV06OgogCUNvbXBhcmVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBjYWNoZQogCi1saW5rOmdpdC1kaWZmLXN0YWdlcy5odG1sW2dpdC1kaWZmLXN0YWdlc106OgorZ2l0bGluazpnaXQtZGlmZi1zdGFnZXNbMV06OgogCUNvbXBhcmVzIHR3byAibWVyZ2Ugc3RhZ2VzIiBpbiB0aGUgaW5kZXggZmlsZS4KIAotbGluazpnaXQtZGlmZi10cmVlLmh0bWxbZ2l0LWRpZmYtdHJlZV06OgorZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdOjoKIAlDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiBibG9icyBmb3VuZCB2aWEgdHdvIHRyZWUgb2JqZWN0cwogCi1saW5rOmdpdC1leHBvcnQuaHRtbFtnaXQtZXhwb3J0XTo6Ci0JRXhwb3J0cyBlYWNoIGNvbW1pdCBhbmQgYSBkaWZmIGFnYWluc3QgZWFjaCBvZiBpdHMgcGFyZW50cwotCi1saW5rOmdpdC1mc2NrLW9iamVjdHMuaHRtbFtnaXQtZnNjay1vYmplY3RzXTo6CitnaXRsaW5rOmdpdC1mc2NrLW9iamVjdHNbMV06OgogCVZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZQotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtZnNjay1jYWNoZS4KIAotbGluazpnaXQtbHMtZmlsZXMuaHRtbFtnaXQtbHMtZmlsZXNdOjoKK2dpdGxpbms6Z2l0LWxzLWZpbGVzWzFdOjoKIAlJbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBpbiB0aGUgY2FjaGUvd29ya2luZyBkaXJlY3RvcnkKIAotbGluazpnaXQtbHMtdHJlZS5odG1sW2dpdC1scy10cmVlXTo6CitnaXRsaW5rOmdpdC1scy10cmVlWzFdOjoKIAlEaXNwbGF5cyBhIHRyZWUgb2JqZWN0IGluIGh1bWFuIHJlYWRhYmxlIGZvcm0KIAotbGluazpnaXQtbWVyZ2UtYmFzZS5odG1sW2dpdC1tZXJnZS1iYXNlXTo6CitnaXRsaW5rOmdpdC1tZXJnZS1iYXNlWzFdOjoKIAlGaW5kcyBhcyBnb29kIGEgY29tbW9uIGFuY2VzdG9yIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlCiAKLWxpbms6Z2l0LXJldi1saXN0Lmh0bWxbZ2l0LXJldi1saXN0XTo6CitnaXRsaW5rOmdpdC1uYW1lLXJldlsxXTo6CisJRmluZCBzeW1ib2xpYyBuYW1lcyBmb3IgZ2l2ZW4gcmV2cworCitnaXRsaW5rOmdpdC1yZXYtbGlzdFsxXTo6CiAJTGlzdHMgY29tbWl0IG9iamVjdHMgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyCiAKLWxpbms6Z2l0LXJldi10cmVlLmh0bWxbZ2l0LXJldi10cmVlXTo6Ci0JUHJvdmlkZXMgdGhlIHJldmlzaW9uIHRyZWUgZm9yIG9uZSBvciBtb3JlIGNvbW1pdHMKLQotbGluazpnaXQtc2hvdy1pbmRleC5odG1sW2dpdC1zaG93LWluZGV4XTo6CitnaXRsaW5rOmdpdC1zaG93LWluZGV4WzFdOjoKIAlEaXNwbGF5cyBjb250ZW50cyBvZiBhIHBhY2sgaWR4IGZpbGUuCiAKLWxpbms6Z2l0LXRhci10cmVlLmh0bWxbZ2l0LXRhci10cmVlXTo6CitnaXRsaW5rOmdpdC10YXItdHJlZVsxXTo6CiAJQ3JlYXRlcyBhIHRhciBhcmNoaXZlIG9mIHRoZSBmaWxlcyBpbiB0aGUgbmFtZWQgdHJlZQogCi1saW5rOmdpdC11bnBhY2stZmlsZS5odG1sW2dpdC11bnBhY2stZmlsZV06OgorZ2l0bGluazpnaXQtdW5wYWNrLWZpbGVbMV06OgogCUNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSB3aXRoIGEgYmxvYidzIGNvbnRlbnRzCiAKLWxpbms6Z2l0LXZhci5odG1sW2dpdC12YXJdOjoKK2dpdGxpbms6Z2l0LXZhclsxXTo6CiAJRGlzcGxheXMgYSBnaXQgbG9naWNhbCB2YXJpYWJsZQogCi1saW5rOmdpdC12ZXJpZnktcGFjay5odG1sW2dpdC12ZXJpZnktcGFja106OgotCVZhbGlkYXRlcyBwYWNrZWQgR0lUIGFyY2hpdmUgZmlsZXMKK2dpdGxpbms6Z2l0LXZlcmlmeS1wYWNrWzFdOjoKKwlWYWxpZGF0ZXMgcGFja2VkIGdpdCBhcmNoaXZlIGZpbGVzCiAKIFRoZSBpbnRlcnJvZ2F0ZSBjb21tYW5kcyBtYXkgY3JlYXRlIGZpbGVzIC0gYW5kIHlvdSBjYW4gZm9yY2UgdGhlbSB0bwogdG91Y2ggdGhlIHdvcmtpbmcgZmlsZSBzZXQgLSBidXQgaW4gZ2VuZXJhbCB0aGV5IGRvbid0CkBAIC0xNjIsNDMgKzE1Niw0MiBAQAogU3luY2hpbmcgcmVwb3NpdG9yaWVzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotbGluazpnaXQtY2xvbmUtcGFjay5odG1sW2dpdC1jbG9uZS1wYWNrXTo6CitnaXRsaW5rOmdpdC1jbG9uZS1wYWNrWzFdOjoKIAlDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSAoZW5naW5lCiAJZm9yIHNzaCBhbmQgbG9jYWwgdHJhbnNwb3J0KQogCi1saW5rOmdpdC1mZXRjaC1wYWNrLmh0bWxbZ2l0LWZldGNoLXBhY2tdOjoKK2dpdGxpbms6Z2l0LWZldGNoLXBhY2tbMV06OgogCVVwZGF0ZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgogCi1saW5rOmdpdC1odHRwLWZldGNoLmh0bWxbZ2l0LWh0dHAtZmV0Y2hdOjoKLQlEb3dubG9hZHMgYSByZW1vdGUgR0lUIHJlcG9zaXRvcnkgdmlhIEhUVFAKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWh0dHAtcHVsbC4KK2dpdGxpbms6Z2l0LWh0dHAtZmV0Y2hbMV06OgorCURvd25sb2FkcyBhIHJlbW90ZSBnaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAogCi1saW5rOmdpdC1sb2NhbC1mZXRjaC5odG1sW2dpdC1sb2NhbC1mZXRjaF06OgotCUR1cGxpY2F0ZXMgYW5vdGhlciBHSVQgcmVwb3NpdG9yeSBvbiBhIGxvY2FsIHN5c3RlbQotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtbG9jYWwtcHVsbC4KK2dpdGxpbms6Z2l0LWxvY2FsLWZldGNoWzFdOjoKKwlEdXBsaWNhdGVzIGFub3RoZXIgZ2l0IHJlcG9zaXRvcnkgb24gYSBsb2NhbCBzeXN0ZW0KIAotbGluazpnaXQtcGVlay1yZW1vdGUuaHRtbFtnaXQtcGVlay1yZW1vdGVdOjoKK2dpdGxpbms6Z2l0LXBlZWstcmVtb3RlWzFdOjoKIAlMaXN0cyByZWZlcmVuY2VzIG9uIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmcgdXBsb2FkLXBhY2sgcHJvdG9jb2wuCiAKLWxpbms6Z2l0LXJlY2VpdmUtcGFjay5odG1sW2dpdC1yZWNlaXZlLXBhY2tdOjoKK2dpdGxpbms6Z2l0LXJlY2VpdmUtcGFja1sxXTo6CiAJSW52b2tlZCBieSAnZ2l0LXNlbmQtcGFjaycgdG8gcmVjZWl2ZSB3aGF0IGlzIHB1c2hlZCB0byBpdC4KIAotbGluazpnaXQtc2VuZC1wYWNrLmh0bWxbZ2l0LXNlbmQtcGFja106OgorZ2l0bGluazpnaXQtc2VuZC1wYWNrWzFdOjoKIAlQdXNoZXMgdG8gYSByZW1vdGUgcmVwb3NpdG9yeSwgaW50ZWxsaWdlbnRseS4KIAotbGluazpnaXQtc3NoLWZldGNoLmh0bWxbZ2l0LXNzaC1mZXRjaF06OgorZ2l0bGluazpnaXQtc2hlbGxbMV06OgorCVJlc3RyaWN0ZWQgc2hlbGwgZm9yIEdJVC1vbmx5IFNTSCBhY2Nlc3MuCisKK2dpdGxpbms6Z2l0LXNzaC1mZXRjaFsxXTo6CiAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXNzaC1wdWxsLgogCi1saW5rOmdpdC1zc2gtdXBsb2FkLmh0bWxbZ2l0LXNzaC11cGxvYWRdOjoKK2dpdGxpbms6Z2l0LXNzaC11cGxvYWRbMV06OgogCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLWZldGNoCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1zc2gtcHVzaC4KIAotbGluazpnaXQtdXBkYXRlLXNlcnZlci1pbmZvLmh0bWxbZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mb106OgorZ2l0bGluazpnaXQtdXBkYXRlLXNlcnZlci1pbmZvWzFdOjoKIAlVcGRhdGVzIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiBvbiBhIGR1bWIgc2VydmVyIHRvIGhlbHAKIAljbGllbnRzIGRpc2NvdmVyIHJlZmVyZW5jZXMgYW5kIHBhY2tzIG9uIGl0LgogCi1saW5rOmdpdC11cGxvYWQtcGFjay5odG1sW2dpdC11cGxvYWQtcGFja106OgorZ2l0bGluazpnaXQtdXBsb2FkLXBhY2tbMV06OgogCUludm9rZWQgYnkgJ2dpdC1jbG9uZS1wYWNrJyBhbmQgJ2dpdC1mZXRjaC1wYWNrJyB0byBwdXNoCiAJd2hhdCBhcmUgYXNrZWQgZm9yLgogCkBAIC0yMDYsMTE0ICsxOTksOTcgQEAKIFBvcmNlbGFpbi1pc2ggQ29tbWFuZHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotbGluazpnaXQtYWRkLmh0bWxbZ2l0LWFkZF06OgorZ2l0bGluazpnaXQtYWRkWzFdOjoKIAlBZGQgcGF0aHMgdG8gdGhlIGluZGV4IGZpbGUuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1hZGQtc2NyaXB0LgogCi1saW5rOmdpdC1hcHBseW1ib3guaHRtbFtnaXQtYXBwbHltYm94XTo6CitnaXRsaW5rOmdpdC1hbVsxXTo6CisJQXBwbHkgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveCwgYnV0IGNvb2xlci4KKworZ2l0bGluazpnaXQtYXBwbHltYm94WzFdOjoKIAlBcHBseSBwYXRjaGVzIGZyb20gYSBtYWlsYm94LgogCi1saW5rOmdpdC1iaXNlY3QuaHRtbFtnaXQtYmlzZWN0XTo6CitnaXRsaW5rOmdpdC1iaXNlY3RbMV06OgogCUZpbmQgdGhlIGNoYW5nZSB0aGF0IGludHJvZHVjZWQgYSBidWcuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1iaXNlY3Qtc2NyaXB0LgogCi1saW5rOmdpdC1icmFuY2guaHRtbFtnaXQtYnJhbmNoXTo6CitnaXRsaW5rOmdpdC1icmFuY2hbMV06OgogCUNyZWF0ZSBhbmQgU2hvdyBicmFuY2hlcy4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWJyYW5jaC1zY3JpcHQuCiAKLWxpbms6Z2l0LWNoZWNrb3V0Lmh0bWxbZ2l0LWNoZWNrb3V0XTo6CitnaXRsaW5rOmdpdC1jaGVja291dFsxXTo6CiAJQ2hlY2tvdXQgYW5kIHN3aXRjaCB0byBhIGJyYW5jaC4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWNoZWNrb3V0LXNjcmlwdC4KIAotbGluazpnaXQtY2hlcnJ5LXBpY2suaHRtbFtnaXQtY2hlcnJ5LXBpY2tdOjoKK2dpdGxpbms6Z2l0LWNoZXJyeS1waWNrWzFdOjoKIAlDaGVycnktcGljayB0aGUgZWZmZWN0IG9mIGFuIGV4aXN0aW5nIGNvbW1pdC4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWNoZXJyeS1waWNrLXNjcmlwdC4KIAotbGluazpnaXQtY2xvbmUuaHRtbFtnaXQtY2xvbmVdOjoKK2dpdGxpbms6Z2l0LWNsb25lWzFdOjoKIAlDbG9uZXMgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5LgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtY2xvbmUtc2NyaXB0LgogCi1saW5rOmdpdC1jb21taXQuaHRtbFtnaXQtY29tbWl0XTo6CitnaXRsaW5rOmdpdC1jb21taXRbMV06OgogCVJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5LgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtY29tbWl0LXNjcmlwdC4KIAotbGluazpnaXQtZGlmZi5odG1sW2dpdC1kaWZmXTo6CitnaXRsaW5rOmdpdC1kaWZmWzFdOjoKIAlTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtZGlmZi1zY3JpcHQuCiAKLWxpbms6Z2l0LWZldGNoLmh0bWxbZ2l0LWZldGNoXTo6CitnaXRsaW5rOmdpdC1mZXRjaFsxXTo6CiAJRG93bmxvYWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IHZpYSB2YXJpb3VzIHByb3RvY29scy4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWZldGNoLXNjcmlwdC4KIAotbGluazpnaXQtZm9ybWF0LXBhdGNoLmh0bWxbZ2l0LWZvcm1hdC1wYXRjaF06OgorZ2l0bGluazpnaXQtZm9ybWF0LXBhdGNoWzFdOjoKIAlQcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbCBzdWJtaXNzaW9uLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtZm9ybWF0LXBhdGNoLXNjcmlwdC4KIAotbGluazpnaXQtZ3JlcC5odG1sW2dpdC1ncmVwXTo6CitnaXRsaW5rOmdpdC1ncmVwWzFdOjoKIAlQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4KIAotbGluazpnaXQtbG9nLmh0bWxbZ2l0LWxvZ106OgorZ2l0bGluazpnaXQtbG9nWzFdOjoKIAlTaG93cyBjb21taXQgbG9ncy4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWxvZy1zY3JpcHQuCiAKLWxpbms6Z2l0LWxzLXJlbW90ZS5odG1sW2dpdC1scy1yZW1vdGVdOjoKK2dpdGxpbms6Z2l0LWxzLXJlbW90ZVsxXTo6CiAJU2hvd3MgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSBvciBsb2NhbCByZXBvc2l0b3J5LgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtbHMtcmVtb3RlLXNjcmlwdC4KIAotbGluazpnaXQtbWVyZ2UuaHRtbFtnaXQtbWVyZ2VdOjoKK2dpdGxpbms6Z2l0LW1lcmdlWzFdOjoKIAlHcmFuZCB1bmlmaWVkIG1lcmdlIGRyaXZlci4KIAotbGluazpnaXQtb2N0b3B1cy5odG1sW2dpdC1vY3RvcHVzXTo6CitnaXRsaW5rOmdpdC1tdlsxXTo6CisJTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rLgorCitnaXRsaW5rOmdpdC1vY3RvcHVzWzFdOjoKIAlNZXJnZSBtb3JlIHRoYW4gdHdvIGNvbW1pdHMuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1vY3RvcHVzLXNjcmlwdC4KIAotbGluazpnaXQtcHVsbC5odG1sW2dpdC1wdWxsXTo6CitnaXRsaW5rOmdpdC1wdWxsWzFdOjoKIAlGZXRjaCBmcm9tIGFuZCBtZXJnZSB3aXRoIGEgcmVtb3RlIHJlcG9zaXRvcnkuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1wdWxsLXNjcmlwdC4KIAotbGluazpnaXQtcHVzaC5odG1sW2dpdC1wdXNoXTo6CitnaXRsaW5rOmdpdC1wdXNoWzFdOjoKIAlVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1wdXNoLXNjcmlwdC4KIAotbGluazpnaXQtcmViYXNlLmh0bWxbZ2l0LXJlYmFzZV06OgorZ2l0bGluazpnaXQtcmViYXNlWzFdOjoKIAlSZWJhc2UgbG9jYWwgY29tbWl0cyB0byBuZXcgdXBzdHJlYW0gaGVhZC4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXJlYmFzZS1zY3JpcHQuCiAKLWxpbms6Z2l0LXJlbmFtZS5odG1sW2dpdC1yZW5hbWVdOjoKK2dpdGxpbms6Z2l0LXJlbmFtZVsxXTo6CiAJUmVuYW1lIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXJlbmFtZS1zY3JpcHQuCiAKLWxpbms6Z2l0LXJlcGFjay5odG1sW2dpdC1yZXBhY2tdOjoKK2dpdGxpbms6Z2l0LXJlcGFja1sxXTo6CiAJUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeS4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXJlcGFjay1zY3JpcHQuCiAKLWxpbms6Z2l0LXJlc2V0Lmh0bWxbZ2l0LXJlc2V0XTo6CitnaXRsaW5rOmdpdC1yZXNldFsxXTo6CiAJUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1yZXNldC1zY3JpcHQuCiAKLWxpbms6Z2l0LXJlc29sdmUuaHRtbFtnaXQtcmVzb2x2ZV06OgorZ2l0bGluazpnaXQtcmVzb2x2ZVsxXTo6CiAJTWVyZ2UgdHdvIGNvbW1pdHMuCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1yZXNvbHZlLXNjcmlwdC4KIAotbGluazpnaXQtcmV2ZXJ0Lmh0bWxbZ2l0LXJldmVydF06OgorZ2l0bGluazpnaXQtcmV2ZXJ0WzFdOjoKIAlSZXZlcnQgYW4gZXhpc3RpbmcgY29tbWl0LgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtcmV2ZXJ0LXNjcmlwdC4KIAotbGluazpnaXQtc2hvcnRsb2cuaHRtbFtnaXQtc2hvcnRsb2ddOjoKK2dpdGxpbms6Z2l0LXNob3J0bG9nWzFdOjoKIAlTdW1tYXJpemVzICdnaXQgbG9nJyBvdXRwdXQuCiAKLWxpbms6Z2l0LXNob3ctYnJhbmNoLmh0bWxbZ2l0LXNob3ctYnJhbmNoXTo6CitnaXRsaW5rOmdpdC1zaG93LWJyYW5jaFsxXTo6CiAJU2hvdyBicmFuY2hlcyBhbmQgdGhlaXIgY29tbWl0cy4KIAotbGluazpnaXQtc3RhdHVzLmh0bWxbZ2l0LXN0YXR1c106OgorZ2l0bGluazpnaXQtc3RhdHVzWzFdOjoKIAlTaG93cyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cy4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXN0YXR1cy1zY3JpcHQuCiAKLWxpbms6Z2l0LXZlcmlmeS10YWcuaHRtbFtnaXQtdmVyaWZ5LXRhZ106OgorZ2l0bGluazpnaXQtdmVyaWZ5LXRhZ1sxXTo6CiAJQ2hlY2sgdGhlIEdQRyBzaWduYXR1cmUgb2YgdGFnLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtdmVyaWZ5LXRhZy1zY3JpcHQuCiAKLWxpbms6Z2l0LXdoYXRjaGFuZ2VkLmh0bWxbZ2l0LXdoYXRjaGFuZ2VkXTo6CitnaXRsaW5rOmdpdC13aGF0Y2hhbmdlZFsxXTo6CiAJU2hvd3MgY29tbWl0IGxvZ3MgYW5kIGRpZmZlcmVuY2VzIHRoZXkgaW50cm9kdWNlLgogCiAKQEAgLTMyMSw5NSArMjk3LDEyNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tCiBNYW5pcHVsYXRvcnM6CiAKLWxpbms6Z2l0LWFwcGx5cGF0Y2guaHRtbFtnaXQtYXBwbHlwYXRjaF06OgorZ2l0bGluazpnaXQtYXBwbHlwYXRjaFsxXTo6CiAJQXBwbHkgb25lIHBhdGNoIGV4dHJhY3RlZCBmcm9tIGFuIGUtbWFpbC4KIAotbGluazpnaXQtYXJjaGltcG9ydC5odG1sW2dpdC1hcmNoaW1wb3J0XTo6CitnaXRsaW5rOmdpdC1hcmNoaW1wb3J0WzFdOjoKIAlJbXBvcnQgYW4gYXJjaCByZXBvc2l0b3J5IGludG8gZ2l0LgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtYXJjaGltcG9ydC1zY3JpcHQuCiAKLWxpbms6Z2l0LWNvbnZlcnQtb2JqZWN0cy5odG1sW2dpdC1jb252ZXJ0LW9iamVjdHNdOjoKLQlDb252ZXJ0cyBvbGQtc3R5bGUgR0lUIHJlcG9zaXRvcnkKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LWNvbnZlcnQtY2FjaGUuCitnaXRsaW5rOmdpdC1jb252ZXJ0LW9iamVjdHNbMV06OgorCUNvbnZlcnRzIG9sZC1zdHlsZSBnaXQgcmVwb3NpdG9yeQogCi1saW5rOmdpdC1jdnNpbXBvcnQuaHRtbFtnaXQtY3ZzaW1wb3J0XTo6CitnaXRsaW5rOmdpdC1jdnNpbXBvcnRbMV06OgogCVNhbHZhZ2UgeW91ciBkYXRhIG91dCBvZiBhbm90aGVyIFNDTSBwZW9wbGUgbG92ZSB0byBoYXRlLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtY3ZzaW1wb3J0LXNjcmlwdC4KIAotbGluazpnaXQtbWVyZ2Utb25lLWZpbGUuaHRtbFtnaXQtbWVyZ2Utb25lLWZpbGVdOjoKK2dpdGxpbms6Z2l0LW1lcmdlLW9uZS1maWxlWzFdOjoKIAlUaGUgc3RhbmRhcmQgaGVscGVyIHByb2dyYW0gdG8gdXNlIHdpdGggImdpdC1tZXJnZS1pbmRleCIKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LW1lcmdlLW9uZS1maWxlLXNjcmlwdC4KIAotbGluazpnaXQtcHJ1bmUuaHRtbFtnaXQtcHJ1bmVdOjoKK2dpdGxpbms6Z2l0LXBydW5lWzFdOjoKIAlQcnVuZXMgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1wcnVuZS1zY3JpcHQuCiAKLWxpbms6Z2l0LXJlbGluay5odG1sW2dpdC1yZWxpbmtdOjoKK2dpdGxpbms6Z2l0LXJlbGlua1sxXTo6CiAJSGFyZGxpbmsgY29tbW9uIG9iamVjdHMgaW4gbG9jYWwgcmVwb3NpdG9yaWVzLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtcmVsaW5rLXNjcmlwdC4KIAotbGluazpnaXQtc2gtc2V0dXAuaHRtbFtnaXQtc2gtc2V0dXBdOjoKK2dpdGxpbms6Z2l0LXN2bmltcG9ydFsxXTo6CisJSW1wb3J0IGEgU1ZOIHJlcG9zaXRvcnkgaW50byBnaXQuCisKK2dpdGxpbms6Z2l0LXNoLXNldHVwWzFdOjoKIAlDb21tb24gZ2l0IHNoZWxsIHNjcmlwdCBzZXR1cCBjb2RlLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtc2gtc2V0dXAtc2NyaXB0LgogCi1saW5rOmdpdC10YWcuaHRtbFtnaXQtdGFnXTo6CitnaXRsaW5rOmdpdC1zeW1ib2xpYy1yZWZbMV06OgorCVJlYWQgYW5kIG1vZGlmeSBzeW1ib2xpYyByZWZzCisKK2dpdGxpbms6Z2l0LXRhZ1sxXTo6CiAJQW4gZXhhbXBsZSBzY3JpcHQgdG8gY3JlYXRlIGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEcKLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXRhZy1zY3JpcHQuCisKK2dpdGxpbms6Z2l0LXVwZGF0ZS1yZWZbMV06OgorCVVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseS4KIAogCiBJbnRlcnJvZ2F0b3JzOgogCi1saW5rOmdpdC1jaGVycnkuaHRtbFtnaXQtY2hlcnJ5XTo6CitnaXRsaW5rOmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdOjoKKwlNYWtlIHN1cmUgcmVmIG5hbWUgaXMgd2VsbCBmb3JtZWQuCisKK2dpdGxpbms6Z2l0LWNoZXJyeVsxXTo6CiAJRmluZCBjb21taXRzIG5vdCBtZXJnZWQgdXBzdHJlYW0uCiAKLWxpbms6Z2l0LWNvdW50LW9iamVjdHMuaHRtbFtnaXQtY291bnQtb2JqZWN0c106OgorZ2l0bGluazpnaXQtY291bnQtb2JqZWN0c1sxXTo6CiAJQ291bnQgdW5wYWNrZWQgbnVtYmVyIG9mIG9iamVjdHMgYW5kIHRoZWlyIGRpc2sgY29uc3VtcHRpb24uCi0JUHJldmlvdXNseSB0aGlzIGNvbW1hbmQgd2FzIGtub3duIGFzIGdpdC1jb3VudC1vYmplY3RzLXNjcmlwdC4KIAotbGluazpnaXQtZGFlbW9uLmh0bWxbZ2l0LWRhZW1vbl06OgotCUEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIEdJVCByZXBvc2l0b3JpZXMuCitnaXRsaW5rOmdpdC1kYWVtb25bMV06OgorCUEgcmVhbGx5IHNpbXBsZSBzZXJ2ZXIgZm9yIGdpdCByZXBvc2l0b3JpZXMuCiAKLWxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6Ci0JR2VuZXJhdGVzIHBhdGNoIGZvcm1hdCBvdXRwdXQgZm9yIGdpdC1kaWZmLSoKLQotbGluazpnaXQtZ2V0LXRhci1jb21taXQtaWQuaHRtbFtnaXQtZ2V0LXRhci1jb21taXQtaWRdOjoKK2dpdGxpbms6Z2l0LWdldC10YXItY29tbWl0LWlkWzFdOjoKIAlFeHRyYWN0IGNvbW1pdCBJRCBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCB1c2luZyBnaXQtdGFyLXRyZWUuCiAKLWxpbms6Z2l0LW1haWxpbmZvLmh0bWxbZ2l0LW1haWxpbmZvXTo6CitnaXRsaW5rOmdpdC1tYWlsaW5mb1sxXTo6CiAJRXh0cmFjdHMgcGF0Y2ggZnJvbSBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZS4KIAotbGluazpnaXQtbWFpbHNwbGl0Lmh0bWxbZ2l0LW1haWxzcGxpdF06OgorZ2l0bGluazpnaXQtbWFpbHNwbGl0WzFdOjoKIAlnaXQtbWFpbHNwbGl0LgogCi1saW5rOmdpdC1wYXRjaC1pZC5odG1sW2dpdC1wYXRjaC1pZF06OgorZ2l0bGluazpnaXQtcGF0Y2gtaWRbMV06OgogCUNvbXB1dGUgdW5pcXVlIElEIGZvciBhIHBhdGNoLgogCi1saW5rOmdpdC1wYXJzZS1yZW1vdGUuaHRtbFtnaXQtcGFyc2UtcmVtb3RlXTo6CitnaXRsaW5rOmdpdC1wYXJzZS1yZW1vdGVbMV06OgogCVJvdXRpbmVzIHRvIGhlbHAgcGFyc2luZyAkR0lUX0RJUi9yZW1vdGVzLwotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtcGFyc2UtcmVtb3RlLXNjcmlwdC4KIAotbGluazpnaXQtcmVxdWVzdC1wdWxsLmh0bWxbZ2l0LXJlcXVlc3QtcHVsbF06OgorZ2l0bGluazpnaXQtcmVxdWVzdC1wdWxsWzFdOjoKIAlnaXQtcmVxdWVzdC1wdWxsLgotCVByZXZpb3VzbHkgdGhpcyBjb21tYW5kIHdhcyBrbm93biBhcyBnaXQtcmVxdWVzdC1wdWxsLXNjcmlwdC4KIAotbGluazpnaXQtcmV2LXBhcnNlLmh0bWxbZ2l0LXJldi1wYXJzZV06OgorZ2l0bGluazpnaXQtcmV2LXBhcnNlWzFdOjoKIAlQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzLgogCi1saW5rOmdpdC1zZW5kLWVtYWlsLmh0bWxbZ2l0LXNlbmQtZW1haWxdOjoKK2dpdGxpbms6Z2l0LXNlbmQtZW1haWxbMV06OgogCVNlbmQgcGF0Y2ggZS1tYWlscyBvdXQgb2YgImZvcm1hdC1wYXRjaCAtLW1ib3giIG91dHB1dC4KLQlQcmV2aW91c2x5IHRoaXMgY29tbWFuZCB3YXMga25vd24gYXMgZ2l0LXNlbmQtZW1haWwtc2NyaXB0LgogCi1saW5rOmdpdC1zdHJpcHNwYWNlLmh0bWxbZ2l0LXN0cmlwc3BhY2VdOjoKK2dpdGxpbms6Z2l0LXN5bWJvbGljLXJlZnNbMV06OgorCVJlYWQgYW5kIG1vZGlmeSBzeW1ib2xpYyByZWZzLgorCitnaXRsaW5rOmdpdC1zdHJpcHNwYWNlWzFdOjoKIAlGaWx0ZXIgb3V0IGVtcHR5IGxpbmVzLgogCiAKIENvbW1hbmRzIG5vdCB5ZXQgZG9jdW1lbnRlZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWxpbms6Z2l0ay5odG1sW2dpdGtdOjoKK2dpdGxpbms6Z2l0a1sxXTo6CiAJZ2l0ay4KIAogCitDb25maWd1cmF0aW9uIE1lY2hhbmlzbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RhcnRpbmcgZnJvbSAwLjk5LjkgKGFjdHVhbGx5IG1pZCAwLjk5LjguR0lUKSwgLmdpdC9jb25maWcgZmlsZQoraXMgdXNlZCB0byBob2xkIHBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIEl0IGlzIGEKK3NpbXBsZSB0ZXh0IGZpbGUgbW9kZWxsZWQgYWZ0ZXIgYC5pbmlgIGZvcm1hdCBmYW1pbGlhciB0byBzb21lCitwZW9wbGUuICBIZXJlIGlzIGFuIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorIworIyBUaGlzIGlzIHRoZSBjb25maWcgZmlsZSwgYW5kCisjIGEgJyMnIG9yICc7JyBjaGFyYWN0ZXIgaW5kaWNhdGVzCisjIGEgY29tbWVudAorIworCis7IGNvcmUgdmFyaWFibGVzCitbY29yZV0KKwk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwlmaWxlbW9kZSA9IGZhbHNlCisKKzsgdXNlciBpZGVudGl0eQorW3VzZXJdCisJbmFtZSA9ICJKdW5pbyBDIEhhbWFubyIKKwllbWFpbCA9ICJqdW5raW9AdHdpbnN1bi5jb20iCisKKy0tLS0tLS0tLS0tLQorCitWYXJpb3VzIGNvbW1hbmRzIHJlYWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBhZGp1c3QKK3RoZWlyIG9wZXJhdGlvbiBhY2NvcmRpbmdseS4KKworCiBJZGVudGlmaWVyIFRlcm1pbm9sb2d5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA8b2JqZWN0Pjo6CkBAIC01MTEsMTYgKzUxOCwxNiBAQAogJ0dJVF9BVVRIT1JfREFURSc6OgogJ0dJVF9DT01NSVRURVJfTkFNRSc6OgogJ0dJVF9DT01NSVRURVJfRU1BSUwnOjoKLQlzZWUgbGluazpnaXQtY29tbWl0LXRyZWUuaHRtbFtnaXQtY29tbWl0LXRyZWVdCisJc2VlIGdpdGxpbms6Z2l0LWNvbW1pdC10cmVlWzFdCiAKIGdpdCBEaWZmcwogfn5+fn5+fn5+CiAnR0lUX0RJRkZfT1BUUyc6OgogJ0dJVF9FWFRFUk5BTF9ESUZGJzo6CiAJc2VlIHRoZSAiZ2VuZXJhdGluZyBwYXRjaGVzIiBzZWN0aW9uIGluIDoKLQlsaW5rOmdpdC1kaWZmLWluZGV4Lmh0bWxbZ2l0LWRpZmYtaW5kZXhdOwotCWxpbms6Z2l0LWRpZmYtZmlsZXMuaHRtbFtnaXQtZGlmZi1maWxlc107Ci0JbGluazpnaXQtZGlmZi10cmVlLmh0bWxbZ2l0LWRpZmYtdHJlZV0KKwlnaXRsaW5rOmdpdC1kaWZmLWluZGV4WzFdOworCWdpdGxpbms6Z2l0LWRpZmYtZmlsZXNbMV07CisJZ2l0bGluazpnaXQtZGlmZi10cmVlWzFdCiAKIERpc2N1c3Npb25bW0Rpc2N1c3Npb25dXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MzYsNSArNTQzLDUgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorUGFydCBvZiB0aGUgZ2l0bGluazpnaXRbN10gc3VpdGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKaW5kZXggOGUyZjQ3OS4uZWIxMjZkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CkBAIC0yNCw2ICsyNCwxOSBAQAogCVNvbWUgYXJndW1lbnQgbm90IHlldCBkb2N1bWVudGVkLgogCiAKK0V4YW1wbGVzCistLS0tLS0tLQorZ2l0ayB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaTo6CisKKwlTaG93IGFzIHRoZSBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZCBhbnkKKwlmaWxlIGluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2dpdGsgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIC0tIGdpdGs6OgorCisJU2hvdyB0aGUgY2hhbmdlcyBkdXJpbmcgdGhlIGxhc3QgdHdvIHdlZWtzIHRvIHRoZSBmaWxlICdnaXRrJy4KKwlUaGUgIi0tIiBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlICpicmFuY2gqIG5hbWVkCisJJ2dpdGsnCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgpAQCAtMzQsNSArNDcsNSBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCitQYXJ0IG9mIHRoZSBnaXRsaW5rOmdpdFs3XSBzdWl0ZQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0CmluZGV4IGEwNjliN2IuLmViN2I0NzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0CkBAIC0xLDUgKzEsNSBAQAogb2JqZWN0OjoKLQlUaGUgdW5pdCBvZiBzdG9yYWdlIGluIEdJVC4gSXQgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieQorCVRoZSB1bml0IG9mIHN0b3JhZ2UgaW4gZ2l0LiBJdCBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5CiAJdGhlIFNIQTEgb2YgaXRzIGNvbnRlbnRzLiBDb25zZXF1ZW50bHksIGFuIG9iamVjdCBjYW4gbm90CiAJYmUgY2hhbmdlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2hvb2tzLnR4dAppbmRleCA1N2Y0NzIwLi43ZWUzNTcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hvb2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvb2tzLnR4dApAQCAtMSw2ICsxLDUgQEAKLUhvb2tzIHVzZWQgYnkgR0lUCitIb29rcyB1c2VkIGJ5IGdpdAogPT09PT09PT09PT09PT09PT0KLXYwLjk5LjYsIFNlcCAyMDA1CiAKIEhvb2tzIGFyZSBsaXR0bGUgc2NyaXB0cyB5b3UgY2FuIHBsYWNlIGluIGAkR0lUX0RJUi9ob29rc2AKIGRpcmVjdG9yeSB0byB0cmlnZ2VyIGFjdGlvbiBhdCBjZXJ0YWluIHBvaW50cy4gIFdoZW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctdG9waWMtYnJhbmNoZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy10b3BpYy1icmFuY2hlcy50eHQKaW5kZXggYjNiNGQyYy4uZDMwZmE4NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy10b3BpYy1icmFuY2hlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy10b3BpYy1icmFuY2hlcy50eHQKQEAgLTI0NSw3ICsyNDUsNyBAQAogcmI9JCh0cHV0IHNldGFiIDEpCiByZXN0b3JlPSQodHB1dCBzZXRhYiA5KQogCi1pZiBbIGBnaXQtcmV2LXRyZWUgcmVsZWFzZSBedGVzdCB8IHdjIC1jYCAtZ3QgMCBdCitpZiBbIGBnaXQtcmV2LWxpc3QgcmVsZWFzZSBedGVzdCB8IHdjIC1jYCAtZ3QgMCBdCiB0aGVuCiAJZWNobyAkcmIgV2FybmluZzogY29tbWl0cyBpbiByZWxlYXNlIHRoYXQgYXJlIG5vdCBpbiB0ZXN0ICRyZXN0b3JlCiAJZ2l0LXdoYXRjaGFuZ2VkIHJlbGVhc2UgXnRlc3QKQEAgLTI2Miw3ICsyNjIsNyBAQAogCXN0YXR1cz0KIAlmb3IgcmVmIGluIHRlc3QgcmVsZWFzZSBsaW51cwogCWRvCi0JCWlmIFsgYGdpdC1yZXYtdHJlZSAkYnJhbmNoIF4kcmVmIHwgd2MgLWNgIC1ndCAwIF0KKwkJaWYgWyBgZ2l0LXJldi1saXN0ICRicmFuY2ggXiRyZWYgfCB3YyAtY2AgLWd0IDAgXQogCQl0aGVuCiAJCQlzdGF0dXM9JHN0YXR1cyR7cmVmOjA6MX0KIAkJZmkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2ggYi9Eb2N1bWVudGF0aW9uL2luc3RhbGwtd2ViZG9jLnNoCmluZGV4IGQ1OTNhYjkuLjUwNjM4YzcgMTAwNzU1Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2gKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLXdlYmRvYy5zaApAQCAtMiw3ICsyLDcgQEAKIAogVD0iJDEiCiAKLWZvciBoIGluICouaHRtbCBob3d0by8qLnR4dCBob3d0by8qLmh0bWwKK2ZvciBoIGluICouaHRtbCAqLnR4dCBob3d0by8qLnR4dCBob3d0by8qLmh0bWwKIGRvCiAJZGlmZiAtdSAtSSdMYXN0IHVwZGF0ZWQgWzAtOV1bMC05XS1bQS1aXVthLXpdW2Etel0tJyAiJFQvJGgiICIkaCIgfHwgewogCQllY2hvID4mMiAiIyBpbnN0YWxsICRoICRULyRoIgpAQCAtMTIsNyArMTIsNyBAQAogCX0KIGRvbmUKIHN0cmlwX2xlYWRpbmc9YGVjaG8gIiRULyIgfCBzZWQgLWUgJ3N8LnwufGcnYAotZm9yIHRoIGluICIkVCIvKi5odG1sICIkVCIvaG93dG8vKi50eHQgIiRUIi9ob3d0by8qLmh0bWwKK2ZvciB0aCBpbiAiJFQiLyouaHRtbCAiJFQiLyoudHh0ICIkVCIvaG93dG8vKi50eHQgIiRUIi9ob3d0by8qLmh0bWwKIGRvCiAJaD1gZXhwciAiJHRoIiA6ICIkc3RyaXBfbGVhZGluZyInXCguKlwpJ2AKIAljYXNlICIkaCIgaW4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2UtcHVsbC1vcHRzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2UtcHVsbC1vcHRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTE2NGEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1wdWxsLW9wdHMudHh0CkBAIC0wLDAgKzEsMTQgQEAKKy1uLCAtLW5vLXN1bW1hcnk6OgorCURvIG5vdCBzaG93IGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlLgorCistLW5vLWNvbW1pdDo6CisJUGVyZm9ybSB0aGUgbWVyZ2UgYnV0IHByZXRlbmQgdGhlIG1lcmdlIGZhaWxlZCBhbmQgZG8KKwlub3QgYXV0b2NvbW1pdCwgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBpbnNwZWN0IGFuZAorCWZ1cnRoZXIgdHdlYWsgdGhlIG1lcmdlIHJlc3VsdCBiZWZvcmUgY29tbWl0dGluZy4KKworLXMgPHN0cmF0ZWd5Pjo6CisJdXNlIHRoYXQgbWVyZ2Ugc3RyYXRlZ3k7IGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZSB0bworCXNwZWNpZnkgdGhlbSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuICBJZgorCXRoZXJlIGlzIG5vIGAtc2Agb3B0aW9uLCBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMgaXMKKwl1c2VkIGluc3RlYWQgKGBnaXQtbWVyZ2UtcmVzb2x2ZWAgd2hlbiBtZXJnaW5nIGEgc2luZ2xlCisJaGVhZCwgYGdpdC1tZXJnZS1vY3RvcHVzYCBvdGhlcndpc2UpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjNTZkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKQEAgLTAsMCArMSwzNSBAQAorTUVSR0UgU1RSQVRFR0lFUworLS0tLS0tLS0tLS0tLS0tLQorCityZXNvbHZlOjoKKwlUaGlzIGNhbiBvbmx5IHJlc29sdmUgdHdvIGhlYWRzIChpLmUuIHRoZSBjdXJyZW50IGJyYW5jaAorCWFuZCBhbm90aGVyIGJyYW5jaCB5b3UgcHVsbGVkIGZyb20pIHVzaW5nIDMtd2F5IG1lcmdlCisJYWxnb3JpdGhtLiAgSXQgdHJpZXMgdG8gY2FyZWZ1bGx5IGRldGVjdCBjcmlzcy1jcm9zcworCW1lcmdlIGFtYmlndWl0aWVzIGFuZCBpcyBjb25zaWRlcmVkIGdlbmVyYWxseSBzYWZlIGFuZAorCWZhc3QuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4gcHVsbGluZworCW9uZSBicmFuY2guCisKK3JlY3Vyc2l2ZTo6CisJVGhpcyBjYW4gb25seSByZXNvbHZlIHR3byBoZWFkcyB1c2luZyAzLXdheSBtZXJnZQorCWFsZ29yaXRobS4gIFdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgY29tbW9uCisJYW5jZXN0b3JzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIDMtd2F5IG1lcmdlLCBpdCBjcmVhdGVzIGEKKwltZXJnZWQgdHJlZSBvZiB0aGUgY29tbW9uIGFuY2VzdG9yZXMgYW5kIHVzZXMgdGhhdCBhcworCXRoZSByZWZlcmVuY2UgdHJlZSBmb3IgdGhlIDMtd2F5IG1lcmdlLiAgVGhpcyBoYXMgYmVlbgorCXJlcG9ydGVkIHRvIHJlc3VsdCBpbiBmZXdlciBtZXJnZSBjb25mbGljdHMgd2l0aG91dAorCWNhdXNpbmcgbWlzLW1lcmdlcyBieSB0ZXN0cyBkb25lIG9uIGFjdHVhbCBtZXJnZSBjb21taXRzCisJdGFrZW4gZnJvbSBMaW51eCAyLjYga2VybmVsIGRldmVsb3BtZW50IGhpc3RvcnkuCisJQWRkaXRpb25hbGx5IHRoaXMgY2FuIGRldGVjdCBhbmQgaGFuZGxlIG1lcmdlcyBpbnZvbHZpbmcKKwlyZW5hbWVzLgorCitvY3RvcHVzOjoKKwlUaGlzIHJlc29sdmVzIG1vcmUgdGhhbiB0d28taGVhZCBjYXNlLCBidXQgcmVmdXNlcyB0byBkbworCWNvbXBsZXggbWVyZ2UgdGhhdCBuZWVkcyBtYW51YWwgcmVzb2x1dGlvbi4gIEl0IGlzCisJcHJpbWFyaWx5IG1lYW50IHRvIGJlIHVzZWQgZm9yIGJ1bmRsaW5nIHRvcGljIGJyYW5jaAorCWhlYWRzIHRvZ2V0aGVyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBtZXJnZSBzdHJhdGVneSB3aGVuCisJcHVsbGluZyBtb3JlIHRoYW4gb25lIGJyYW5jaC4KKworb3Vyczo6CisJVGhpcyByZXNvbHZlcyBhbnkgbnVtYmVyIG9mIGhlYWRzLCBidXQgdGhlIHJlc3VsdCBvZiB0aGUKKwltZXJnZSBpcyBhbHdheXMgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuICBJdCBpcyBtZWFudCB0bworCWJlIHVzZWQgdG8gc3VwZXJzZWRlIG9sZCBkZXZlbG9wbWVudCBoaXN0b3J5IG9mIHNpZGUKKwlicmFuY2hlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CmluZGV4IDg2NDIxODIuLjVjMjg4OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dApAQCAtMSw5MyArMSwxMjQgQEAKIDxyZXBvc2l0b3J5Pjo6Ci0JVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdG8gcHVsbCBmcm9tLiAgT25lIG9mIHRoZQotCWZvbGxvd2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgdG8gbmFtZSB0aGUgcmVwb3NpdG9yeQotCXRvIHB1bGwgZnJvbToKLQotCQlSc3luYyBVUkwKLQkJCXJzeW5jOi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC8KLQotCQlIVFRQKHMpIFVSTAotCQkJaHR0cDovL3JlbW90ZS5tYWNoaW5lL3BhdGgvdG8vcmVwby5naXQvCi0KLQkJR0lUIFVSTAotCQkJZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC8KLQkJCXJlbW90ZS5tYWNoaW5lOi9wYXRoL3RvL3JlcG8uZ2l0LwotCi0JCUxvY2FsIGRpcmVjdG9yeQotCQkJL3BhdGgvdG8vcmVwby5naXQvCi0KLQlJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIGFzIGEgc2hvcnQtaGFuZCwgdGhlIG5hbWUgb2YgYQotCWZpbGUgaW4gJEdJVF9ESVIvcmVtb3RlcyBkaXJlY3RvcnkgY2FuIGJlIGdpdmVuOyB0aGUKLQluYW1lZCBmaWxlIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLQotCQlVUkw6IG9uZSBvZiB0aGUgYWJvdmUgVVJMIGZvcm1hdAotCQlQdXNoOiA8cmVmc3BlYz4uLi4KLQkJUHVsbDogPHJlZnNwZWM+Li4uCi0KLQlXaGVuIHN1Y2ggYSBzaG9ydC1oYW5kIGlzIHNwZWNpZmllZCBpbiBwbGFjZSBvZgotCTxyZXBvc2l0b3J5PiB3aXRob3V0IDxyZWZzcGVjPiBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kCi0JbGluZSwgPHJlZnNwZWM+Li4uIHNwZWNpZmllZCBvbiBQdXNoIGxpbmVzIG9yIFB1bGwgbGluZXMKLQlhcmUgdXNlZCBmb3IgImdpdCBwdXNoIiBhbmQgImdpdCBmZXRjaC9wdWxsIiwKLQlyZXNwZWN0aXZlbHkuCi0KLQlUaGUgbmFtZSBvZiBhIGZpbGUgaW4gJEdJVF9ESVIvYnJhbmNoZXMgZGlyZWN0b3J5IGNhbiBiZQotCXNwZWNpZmllZCBhcyBhbiBvbGRlciBub3RhdGlvbiBzaG9ydC1oYW5kOyB0aGUgbmFtZWQKLQlmaWxlIHNob3VsZCBjb250YWluIGEgc2luZ2xlIGxpbmUsIGEgVVJMIGluIG9uZSBvZiB0aGUKLQlhYm92ZSBmb3JtYXRzLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgaGFzaCAnIycgYW5kIHRoZQotCW5hbWUgb2YgcmVtb3RlIGhlYWQgKFVSTCBmcmFnbWVudCBub3RhdGlvbikuCi0JJEdJVF9ESVIvYnJhbmNoZXMvPHJlbW90ZT4gZmlsZSB0aGF0IHN0b3JlcyBhIDx1cmw+Ci0Jd2l0aG91dCB0aGUgZnJhZ21lbnQgaXMgZXF1aXZhbGVudCB0byBoYXZlIHRoaXMgaW4gdGhlCi0JY29ycmVzcG9uZGluZyBmaWxlIGluIHRoZSAkR0lUX0RJUi9yZW1vdGVzLyBkaXJlY3RvcnkKLQotCQlVUkw6IDx1cmw+Ci0JCVB1bGw6IHJlZnMvaGVhZHMvbWFzdGVyOjxyZW1vdGU+Ci0KLQl3aGlsZSBoYXZpbmcgPHVybD4jPGhlYWQ+IGlzIGVxdWl2YWxlbnQgdG8KLQotCQlVUkw6IDx1cmw+Ci0JCVB1bGw6IHJlZnMvaGVhZHMvPGhlYWQ+OjxyZW1vdGU+CisJVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdGhhdCBpcyB0aGUgc291cmNlIG9mIGEgZmV0Y2gKKwlvciBwdWxsIG9wZXJhdGlvbiwgb3IgdGhlIGRlc3RpbmF0aW9uIG9mIGEgcHVzaCBvcGVyYXRpb24uCisJT25lIG9mIHRoZSBmb2xsb3dpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkCisJdG8gbmFtZSB0aGUgcmVtb3RlIHJlcG9zaXRvcnk6CisrCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gUnN5bmMgVVJMOgkJcnN5bmM6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0LworLSBIVFRQKHMpIFVSTDoJCWh0dHA6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0LworLSBnaXQgVVJMOgkJZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC8KKwkJCW9yIHJlbW90ZS5tYWNoaW5lOi9wYXRoL3RvL3JlcG8uZ2l0LworLSBMb2NhbCBkaXJlY3Rvcnk6CS9wYXRoL3RvL3JlcG8uZ2l0LworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCitJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIGFzIGEgc2hvcnQtaGFuZCwgdGhlIG5hbWUgb2YgYQorZmlsZSBpbiBgJEdJVF9ESVIvcmVtb3Rlc2AgZGlyZWN0b3J5IGNhbiBiZSBnaXZlbjsgdGhlCituYW1lZCBmaWxlIHNob3VsZCBiZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKysKKwlVUkw6IG9uZSBvZiB0aGUgYWJvdmUgVVJMIGZvcm1hdAorCVB1c2g6IDxyZWZzcGVjPgorCVB1bGw6IDxyZWZzcGVjPgorKworV2hlbiBzdWNoIGEgc2hvcnQtaGFuZCBpcyBzcGVjaWZpZWQgaW4gcGxhY2Ugb2YKKzxyZXBvc2l0b3J5PiB3aXRob3V0IDxyZWZzcGVjPiBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kCitsaW5lLCA8cmVmc3BlYz4gc3BlY2lmaWVkIG9uIGBQdXNoOmAgbGluZXMgb3IgYFB1bGw6YAorbGluZXMgYXJlIHVzZWQgZm9yIGBnaXQtcHVzaGAgYW5kIGBnaXQtZmV0Y2hgL2BnaXQtcHVsbGAsCityZXNwZWN0aXZlbHkuICBNdWx0aXBsZSBgUHVzaDpgIGFuZCBhbmQgYFB1bGw6YCBsaW5lcyBtYXkKK2JlIHNwZWNpZmllZCBmb3IgYWRkaXRpb25hbCBicmFuY2ggbWFwcGluZ3MuCisrCitUaGUgbmFtZSBvZiBhIGZpbGUgaW4gYCRHSVRfRElSL2JyYW5jaGVzYCBkaXJlY3RvcnkgY2FuIGJlCitzcGVjaWZpZWQgYXMgYW4gb2xkZXIgbm90YXRpb24gc2hvcnQtaGFuZDsgdGhlIG5hbWVkCitmaWxlIHNob3VsZCBjb250YWluIGEgc2luZ2xlIGxpbmUsIGEgVVJMIGluIG9uZSBvZiB0aGUKK2Fib3ZlIGZvcm1hdHMsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBoYXNoIGAjYCBhbmQgdGhlCituYW1lIG9mIHJlbW90ZSBoZWFkIChVUkwgZnJhZ21lbnQgbm90YXRpb24pLgorYCRHSVRfRElSL2JyYW5jaGVzLzxyZW1vdGU+YCBmaWxlIHRoYXQgc3RvcmVzIGEgPHVybD4KK3dpdGhvdXQgdGhlIGZyYWdtZW50IGlzIGVxdWl2YWxlbnQgdG8gaGF2ZSB0aGlzIGluIHRoZQorY29ycmVzcG9uZGluZyBmaWxlIGluIHRoZSBgJEdJVF9ESVIvcmVtb3Rlcy9gIGRpcmVjdG9yeS4KKysKKwlVUkw6IDx1cmw+CisJUHVsbDogcmVmcy9oZWFkcy9tYXN0ZXI6PHJlbW90ZT4KKysKK3doaWxlIGhhdmluZyBgPHVybD4jPGhlYWQ+YCBpcyBlcXVpdmFsZW50IHRvCisrCisJVVJMOiA8dXJsPgorCVB1bGw6IHJlZnMvaGVhZHMvPGhlYWQ+OjxyZW1vdGU+CiAKIDxyZWZzcGVjPjo6CiAJVGhlIGNhbm9uaWNhbCBmb3JtYXQgb2YgYSA8cmVmc3BlYz4gcGFyYW1ldGVyIGlzCi0JJys/PHNyYz46PGRzdD4nOyB0aGF0IGlzLCBhbiBvcHRpb25hbCBwbHVzICcrJywgZm9sbG93ZWQKLQlieSB0aGUgc291cmNlIHJlZiwgZm9sbG93ZWQgYnkgYSBjb2xvbiAnOicsIGZvbGxvd2VkIGJ5CisJYCs/PHNyYz46PGRzdD5gOyB0aGF0IGlzLCBhbiBvcHRpb25hbCBwbHVzIGArYCwgZm9sbG93ZWQKKwlieSB0aGUgc291cmNlIHJlZiwgZm9sbG93ZWQgYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5CiAJdGhlIGRlc3RpbmF0aW9uIHJlZi4KKysKK1doZW4gdXNlZCBpbiBgZ2l0LXB1c2hgLCB0aGUgPHNyYz4gc2lkZSBjYW4gYmUgYW4KK2FyYml0cmFyeSAiU0hBMSBleHByZXNzaW9uIiB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuCithcmd1bWVudCB0byBgZ2l0LWNhdC1maWxlIC10YC4gIEUuZy4gYG1hc3Rlcn40YCAocHVzaAorZm91ciBwYXJlbnRzIGJlZm9yZSB0aGUgY3VycmVudCBtYXN0ZXIgaGVhZCkuCisrCitGb3IgYGdpdC1wdXNoYCwgdGhlIGxvY2FsIHJlZiB0aGF0IG1hdGNoZXMgPHNyYz4gaXMgdXNlZAordG8gZmFzdCBmb3J3YXJkIHRoZSByZW1vdGUgcmVmIHRoYXQgbWF0Y2hlcyA8ZHN0Pi4gIElmCit0aGUgb3B0aW9uYWwgcGx1cyBgK2AgaXMgdXNlZCwgdGhlIHJlbW90ZSByZWYgaXMgdXBkYXRlZAorZXZlbiBpZiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBmYXN0IGZvcndhcmQgdXBkYXRlLgorKworRm9yIGBnaXQtZmV0Y2hgIGFuZCBgZ2l0LXB1bGxgLCB0aGUgcmVtb3RlIHJlZiB0aGF0IG1hdGNoZXMgPHNyYz4KK2lzIGZldGNoZWQsIGFuZCBpZiA8ZHN0PiBpcyBub3QgZW1wdHkgc3RyaW5nLCB0aGUgbG9jYWwKK3JlZiB0aGF0IG1hdGNoZXMgaXQgaXMgZmFzdCBmb3J3YXJkZWQgdXNpbmcgPHNyYz4uCitBZ2FpbiwgaWYgdGhlIG9wdGlvbmFsIHBsdXMgYCtgIGlzIHVzZWQsIHRoZSBsb2NhbCByZWYKK2lzIHVwZGF0ZWQgZXZlbiBpZiBpdCBkb2VzIG5vdCByZXN1bHQgaW4gYSBmYXN0IGZvcndhcmQKK3VwZGF0ZS4KKysKK1tOT1RFXQorSWYgdGhlIHJlbW90ZSBicmFuY2ggZnJvbSB3aGljaCB5b3Ugd2FudCB0byBwdWxsIGlzCittb2RpZmllZCBpbiBub24tbGluZWFyIHdheXMgc3VjaCBhcyBiZWluZyByZXdvdW5kIGFuZAorcmViYXNlZCBmcmVxdWVudGx5LCB0aGVuIGEgcHVsbCB3aWxsIGF0dGVtcHQgYSBtZXJnZSB3aXRoCithbiBvbGRlciB2ZXJzaW9uIG9mIGl0c2VsZiwgbGlrZWx5IGNvbmZsaWN0LCBhbmQgZmFpbC4KK0l0IGlzIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMgdGhhdCB5b3Ugd291bGQgd2FudCB0byB1c2UKK3RoZSBgK2Agc2lnbiB0byBpbmRpY2F0ZSBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgd2lsbAorYmUgbmVlZGVkLiAgVGhlcmUgaXMgY3VycmVudGx5IG5vIGVhc3kgd2F5IHRvIGRldGVybWluZQorb3IgZGVjbGFyZSB0aGF0IGEgYnJhbmNoIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgaW4gYQorcmVwb3NpdG9yeSB3aXRoIHRoaXMgYmVoYXZpb3I7IHRoZSBwdWxsaW5nIHVzZXIgc2ltcGx5CittdXN0IGtub3cgdGhpcyBpcyB0aGUgZXhwZWN0ZWQgdXNhZ2UgcGF0dGVybiBmb3IgYSBicmFuY2guCisrCitbTk9URV0KK1lvdSBuZXZlciBkbyB5b3VyIG93biBkZXZlbG9wbWVudCBvbiBicmFuY2hlcyB0aGF0IGFwcGVhcgorb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhIDxyZWZzcGVjPiBjb2xvbiBvbiBgUHVsbDpgIGxpbmVzOwordGhleSBhcmUgdG8gYmUgdXBkYXRlZCBieSBgZ2l0LWZldGNoYC4gIElmIHlvdSBpbnRlbmQgdG8gZG8KK2RldmVsb3BtZW50IGRlcml2ZWQgZnJvbSBhIHJlbW90ZSBicmFuY2ggYEJgLCBoYXZlIGEgYFB1bGw6YAorbGluZSB0byB0cmFjayBpdCAoaS5lLiBgUHVsbDogQjpyZW1vdGUtQmApLCBhbmQgaGF2ZSBhIHNlcGFyYXRlCiticmFuY2ggYG15LUJgIHRvIGRvIHlvdXIgZGV2ZWxvcG1lbnQgb24gdG9wIG9mIGl0LiAgVGhlIGxhdHRlcgoraXMgY3JlYXRlZCBieSBgZ2l0IGJyYW5jaCBteS1CIHJlbW90ZS1CYCAob3IgaXRzIGVxdWl2YWxlbnQgYGdpdAorY2hlY2tvdXQgLWIgbXktQiByZW1vdGUtQmApLiAgUnVuIGBnaXQgZmV0Y2hgIHRvIGtlZXAgdHJhY2sgb2YKK3RoZSBwcm9ncmVzcyBvZiB0aGUgcmVtb3RlIHNpZGUsIGFuZCB3aGVuIHlvdSBzZWUgc29tZXRoaW5nIG5ldworb24gdGhlIHJlbW90ZSBicmFuY2gsIG1lcmdlIGl0IGludG8geW91ciBkZXZlbG9wbWVudCBicmFuY2ggd2l0aAorYGdpdCBwdWxsIC4gcmVtb3RlLUJgLCB3aGlsZSB5b3UgYXJlIG9uIGBteS1CYCBicmFuY2guCitUaGUgY29tbW9uIGBQdWxsOiBtYXN0ZXI6b3JpZ2luYCBtYXBwaW5nIG9mIGEgcmVtb3RlIGBtYXN0ZXJgCiticmFuY2ggdG8gYSBsb2NhbCBgb3JpZ2luYCBicmFuY2gsIHdoaWNoIGlzIHRoZW4gbWVyZ2VkIHRvIGEKK29jYWwgZGV2ZWxvcG1lbnQgYnJhbmNoLCBhZ2FpbiB0eXBpY2FsbHkgbmFtZWQgYG1hc3RlcmAsIGlzIG1hZGUKK3doZW4geW91IHJ1biBgZ2l0IGNsb25lYCBmb3IgeW91IHRvIGZvbGxvdyB0aGlzIHBhdHRlcm4uCisrCitbTk9URV0KK1RoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGxpc3RpbmcgbXVsdGlwbGUgPHJlZnNwZWM+CitkaXJlY3RseSBvbiBgZ2l0LXB1bGxgIGNvbW1hbmQgbGluZSBhbmQgaGF2aW5nIG11bHRpcGxlCitgUHVsbDpgIDxyZWZzcGVjPiBsaW5lcyBmb3IgYSA8cmVwb3NpdG9yeT4gYW5kIHJ1bm5pbmcKK2BnaXQtcHVsbGAgY29tbWFuZCB3aXRob3V0IGFueSBleHBsaWNpdCA8cmVmc3BlYz4gcGFyYW1ldGVycy4KKzxyZWZzcGVjPiBsaXN0ZWQgZXhwbGljaXRseSBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZSBhbHdheXMKK21lcmdlZCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCBhZnRlciBmZXRjaGluZy4gIEluIG90aGVyIHdvcmRzLAoraWYgeW91IGxpc3QgbW9yZSB0aGFuIG9uZSByZW1vdGUgcmVmcywgeW91IHdvdWxkIGJlIG1ha2luZworYW4gT2N0b3B1cy4gIFdoaWxlIGBnaXQtcHVsbGAgcnVuIHdpdGhvdXQgYW55IGV4cGxpY2l0IDxyZWZzcGVjPgorcGFyYW1ldGVyIHRha2VzIGRlZmF1bHQgPHJlZnNwZWM+cyBmcm9tIGBQdWxsOmAgbGluZXMsIGl0CittZXJnZXMgb25seSB0aGUgZmlyc3QgPHJlZnNwZWM+IGZvdW5kIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLAorYWZ0ZXIgZmV0Y2hpbmcgYWxsIHRoZSByZW1vdGUgcmVmcy4gIFRoaXMgaXMgYmVjYXVzZSBtYWtpbmcgYW4KK09jdG9wdXMgZnJvbSByZW1vdGUgcmVmcyBpcyByYXJlbHkgZG9uZSwgd2hpbGUga2VlcGluZyB0cmFjaworb2YgbXVsdGlwbGUgcmVtb3RlIGhlYWRzIGluIG9uZS1nbyBieSBmZXRjaGluZyBtb3JlIHRoYW4gb25lCitpcyBvZnRlbiB1c2VmdWwuCisrCitTb21lIHNob3J0LWN1dCBub3RhdGlvbnMgYXJlIGFsc28gc3VwcG9ydGVkLgorKworKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYHRhZ2AgaXMgYWxtb3N0IGlnbm9yZWQ7CisgIGl0IGp1c3QgbWFrZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgPHRhZz4gdG8gbWVhbiBhCisgIHJlZnNwZWMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gLgorKiBBIHBhcmFtZXRlciA8cmVmPiB3aXRob3V0IGEgY29sb24gaXMgZXF1aXZhbGVudCB0bworICA8cmVmPjogd2hlbiBwdWxsaW5nL2ZldGNoaW5nLCBhbmQgPHJlZj5gOmA8cmVmPiB3aGVuCisgIHB1c2hpbmcuICBUaGF0IGlzLCBkbyBub3Qgc3RvcmUgaXQgbG9jYWxseSBpZgorICBmZXRjaGluZywgYW5kIHVwZGF0ZSB0aGUgc2FtZSBuYW1lIGlmIHB1c2hpbmcuCiAKLQlXaGVuIHVzZWQgaW4gImdpdCBwdXNoIiwgdGhlIDxzcmM+IHNpZGUgY2FuIGJlIGFuCi0JYXJiaXRyYXJ5ICJTSEExIGV4cHJlc3Npb24iIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4KLQlhcmd1bWVudCB0byAiZ2l0LWNhdC1maWxlIC10Ii4gIEUuZy4gIm1hc3Rlcn40IiAocHVzaAotCWZvdXIgcGFyZW50cyBiZWZvcmUgdGhlIGN1cnJlbnQgbWFzdGVyIGhlYWQpLgotCi0gICAgICAgIEZvciAiZ2l0IHB1c2giLCB0aGUgbG9jYWwgcmVmIHRoYXQgbWF0Y2hlcyA8c3JjPiBpcyB1c2VkCi0gICAgICAgIHRvIGZhc3QgZm9yd2FyZCB0aGUgcmVtb3RlIHJlZiB0aGF0IG1hdGNoZXMgPGRzdD4uICBJZgotICAgICAgICB0aGUgb3B0aW9uYWwgcGx1cyAnKycgaXMgdXNlZCwgdGhlIHJlbW90ZSByZWYgaXMgdXBkYXRlZAotICAgICAgICBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZCB1cGRhdGUuCi0KLQlGb3IgImdpdCBmZXRjaC9wdWxsIiwgdGhlIHJlbW90ZSByZWYgdGhhdCBtYXRjaGVzIDxzcmM+Ci0JaXMgZmV0Y2hlZCwgYW5kIGlmIDxkc3Q+IGlzIG5vdCBlbXB0eSBzdHJpbmcsIHRoZSBsb2NhbAotCXJlZiB0aGF0IG1hdGNoZXMgaXQgaXMgZmFzdCBmb3J3YXJkZWQgdXNpbmcgPHNyYz4uCi0JQWdhaW4sIGlmIHRoZSBvcHRpb25hbCBwbHVzICcrJyBpcyB1c2VkLCB0aGUgbG9jYWwgcmVmCi0JaXMgdXBkYXRlZCBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZAotCXVwZGF0ZS4KLQotCVNvbWUgc2hvcnQtY3V0IG5vdGF0aW9ucyBhcmUgYWxzbyBzdXBwb3J0ZWQuCi0KLQkqIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCAidGFnIiBpcyBhbG1vc3QgaWdub3JlZDsKLSAgICAgICAgICBpdCBqdXN0IG1ha2VzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIDx0YWc+IHRvIG1lYW4gYQotICAgICAgICAgIHJlZnNwZWMgInJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz4iLgotCi0gICAgICAgICogQSBwYXJhbWV0ZXIgPHJlZj4gd2l0aG91dCBhIGNvbG9uIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgICAgICA8cmVmPjogd2hlbiBwdWxsaW5nL2ZldGNoaW5nLCBhbmQgPHJlZj46PHJlZj4gd2hlbgotICAgICAgICAgIHB1c2hpbmcuICBUaGF0IGlzLCBkbyBub3Qgc3RvcmUgaXQgbG9jYWxseSBpZgotICAgICAgICAgIGZldGNoaW5nLCBhbmQgdXBkYXRlIHRoZSBzYW1lIG5hbWUgaWYgcHVzaGluZy4KLQotLWEsIFwtLWFwcGVuZDo6Ci0JQXBwZW5kIHJlZiBuYW1lcyBhbmQgb2JqZWN0IG5hbWVzIG9mIGZldGNoZWQgcmVmcyB0byB0aGUKLQlleGlzdGluZyBjb250ZW50cyBvZiAkR0lUX0RJUi9GRVRDSF9IRUFELiAgV2l0aG91dCB0aGlzCi0Jb3B0aW9uIG9sZCBkYXRhIGluICRHSVRfRElSL0ZFVENIX0hFQUQgd2lsbCBiZSBvdmVyd3JpdHRlbi4KLQotLWYsIFwtLWZvcmNlOjoKLQlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIGxvY2FsIHJlZiB0aGF0IGlzCi0Jbm90IGFuIGFuY2VzdG9yIG9mIHRoZSByZW1vdGUgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgotCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB0aGUKLQlsb2NhbCByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3JlcG9zaXRvcnktbGF5b3V0LnR4dCBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CmluZGV4IGQyMGZhODAuLjFiNWYyMjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcmVwb3NpdG9yeS1sYXlvdXQudHh0CkBAIC0xLDYgKzEsNSBAQAotR0lUIHJlcG9zaXRvcnkgbGF5b3V0CitnaXQgcmVwb3NpdG9yeSBsYXlvdXQKID09PT09PT09PT09PT09PT09PT09PQotdjAuOTkuNSwgU2VwIDIwMDUKIAogWW91IG1heSBmaW5kIHRoZXNlIHRoaW5ncyBpbiB5b3VyIGdpdCByZXBvc2l0b3J5IChgLmdpdGAKIGRpcmVjdG9yeSBmb3IgYSByZXBvc2l0b3J5IGFzc29jaWF0ZWQgd2l0aCB5b3VyIHdvcmtpbmcgdHJlZSwgb3IKQEAgLTEyMCw3ICsxMTksNyBAQAogaW5mby9leGNsdWRlOjoKIAlUaGlzIGZpbGUsIGJ5IGNvbnZlbnRpb24gYW1vbmcgUG9yY2VsYWlucywgc3RvcmVzIHRoZQogCWV4Y2x1ZGUgcGF0dGVybiBsaXN0LiAgYGdpdCBzdGF0dXNgIGxvb2tzIGF0IGl0LCBidXQKLQlvdGhlcndpc2UgaXQgaXMgbm90IGxvb2tlZCBhdCBieSBhbnkgb2YgdGhlIGNvcmUgR0lUCisJb3RoZXJ3aXNlIGl0IGlzIG5vdCBsb29rZWQgYXQgYnkgYW55IG9mIHRoZSBjb3JlIGdpdAogCWNvbW1hbmRzLgogCiByZW1vdGVzOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKaW5kZXggYjNhOTkxNS4uMjRjODQxMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKQEAgLTEwLDYgKzEwLDkgQEAKIGZvciBlbnRyaWVzIHRoYXQgZG9uJ3QgY2hhbmdlLCBhbmQgYWxsb3dpbmcgLXUgdG8gbWFrZSB0aGUgbWluaW11bQogcmVxdWlyZWQgY2hhbmdlcyB0byB0aGUgd29ya2luZyB0cmVlIHRvIGhhdmUgaXQgbWF0Y2guCiAKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKwogICAgaW5kZXggICB0cmVlICAgIHJlc3VsdAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICogICAgICAgKGVtcHR5KSAoZW1wdHkpCkBAIC0yMCw3ICsyMywzMCBAQAogVHdvLXdheSBtZXJnZQogLS0tLS0tLS0tLS0tLQogCitJdCBpcyBwZXJtaXR0ZWQgZm9yIHRoZSBpbmRleCB0byBsYWNrIGFuIGVudHJ5OyB0aGlzIGRvZXMgbm90IHByZXZlbnQKK2FueSBjYXNlIGZyb20gYXBwbHlpbmcuCiAKK0lmIHRoZSBpbmRleCBleGlzdHMsIGl0IGlzIGFuIGVycm9yIGZvciBpdCBub3QgdG8gbWF0Y2ggZWl0aGVyIHRoZSBvbGQKK29yIHRoZSByZXN1bHQuCisKK0lmIG11bHRpcGxlIGNhc2VzIGFwcGx5LCB0aGUgb25lIHVzZWQgaXMgbGlzdGVkIGZpcnN0LgorCitBIHJlc3VsdCB3aGljaCBjaGFuZ2VzIHRoZSBpbmRleCBpcyBhbiBlcnJvciBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5CithbmQgbm90IHVwLXRvLWRhdGUuCisKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKworIGNhc2UgIGluZGV4ICAgb2xkICAgICBuZXcgICAgIHJlc3VsdAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwLzIgICAoZW1wdHkpICogICAgICAgKGVtcHR5KSAoZW1wdHkpCisgMS8zICAgKGVtcHR5KSAqICAgICAgIG5ldyAgICAgbmV3CisgNC81ICAgaW5kZXgrICAoZW1wdHkpIChlbXB0eSkgaW5kZXgrCisgNi83ICAgaW5kZXgrICAoZW1wdHkpIGluZGV4ICAgaW5kZXgrCisgMTAgICAgaW5kZXgrICBpbmRleCAgIChlbXB0eSkgKGVtcHR5KQorIDE0LzE1IGluZGV4KyAgb2xkICAgICBvbGQgICAgIGluZGV4KworIDE4LzE5IGluZGV4KyAgb2xkICAgICBpbmRleCAgIGluZGV4KworIDIwICAgIGluZGV4KyAgaW5kZXggICBuZXcgICAgIG5ldwogCiBUaHJlZS13YXkgbWVyZ2UKIC0tLS0tLS0tLS0tLS0tLQpAQCAtNDQsMzAgKzcwLDI4IEBACiAqZW1wdHkqIG1lYW5zIHRoYXQgdGhlIHRyZWUgbXVzdCBub3QgaGF2ZSBhIGRpcmVjdG9yeS1maWxlIGNvbmZsaWN0CiAgd2l0aCB0aGUgZW50cnkuCiAKLUZvciBtdWx0aXBsZSBhbmNlc3RvcnMgb3IgcmVtb3RlcywgYSAnKycgbWVhbnMgdGhhdCB0aGlzIGNhc2UgYXBwbGllcwotZXZlbiBpZiBvbmx5IG9uZSBhbmNlc3RvciBvciByZW1vdGUgZml0czsgbm9ybWFsbHksIGFsbCBvZiB0aGUKLWFuY2VzdG9ycyBvciByZW1vdGVzIG11c3QgYmUgdGhlIHNhbWUuCitGb3IgbXVsdGlwbGUgYW5jZXN0b3JzLCBhICcrJyBtZWFucyB0aGF0IHRoaXMgY2FzZSBhcHBsaWVzIGV2ZW4gaWYKK29ubHkgb25lIGFuY2VzdG9yIG9yIHJlbW90ZSBmaXRzOyBhICdeJyBtZWFucyBhbGwgb2YgdGhlIGFuY2VzdG9ycworbXVzdCBiZSB0aGUgc2FtZS4KIAogY2FzZSAgYW5jZXN0ICAgIGhlYWQgICAgcmVtb3RlICAgIHJlc3VsdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSAgICAgKGVtcHR5KSsgIChlbXB0eSkgKGVtcHR5KSAgIChlbXB0eSkKIDJBTFQgIChlbXB0eSkrICAqZW1wdHkqIHJlbW90ZSAgICByZW1vdGUKLTJBTFQgIChlbXB0eSkrICAqZW1wdHkqIHJlbW90ZSAgICByZW1vdGUKIDIgICAgIChlbXB0eSleICAoZW1wdHkpIHJlbW90ZSAgICBubyBtZXJnZQogM0FMVCAgKGVtcHR5KSsgIGhlYWQgICAgKmVtcHR5KiAgIGhlYWQKIDMgICAgIChlbXB0eSleICBoZWFkICAgIChlbXB0eSkgICBubyBtZXJnZQogNCAgICAgKGVtcHR5KV4gIGhlYWQgICAgcmVtb3RlICAgIG5vIG1lcmdlCiA1QUxUICAqICAgICAgICAgaGVhZCAgICBoZWFkICAgICAgaGVhZAotNiAgICAgYW5jZXN0XiAgIChlbXB0eSkgKGVtcHR5KSAgIG5vIG1lcmdlCi04QUxUICBhbmNlc3QgICAgKGVtcHR5KSBhbmNlc3QgICAgKGVtcHR5KQorNiAgICAgYW5jZXN0KyAgIChlbXB0eSkgKGVtcHR5KSAgIG5vIG1lcmdlCis4ICAgICBhbmNlc3ReICAgKGVtcHR5KSBhbmNlc3QgICAgbm8gbWVyZ2UKIDcgICAgIGFuY2VzdCsgICAoZW1wdHkpIHJlbW90ZSAgICBubyBtZXJnZQorMTAgICAgYW5jZXN0XiAgIGFuY2VzdCAgKGVtcHR5KSAgIG5vIG1lcmdlCiA5ICAgICBhbmNlc3QrICAgaGVhZCAgICAoZW1wdHkpICAgbm8gbWVyZ2UKLTEwQUxUIGFuY2VzdCAgICBhbmNlc3QgIChlbXB0eSkgICAoZW1wdHkpCi0xMSAgICBhbmNlc3QrICAgaGVhZCAgICByZW1vdGUgICAgbm8gbWVyZ2UKIDE2ICAgIGFuYzEvYW5jMiBhbmMxICAgIGFuYzIgICAgICBubyBtZXJnZQogMTMgICAgYW5jZXN0KyAgIGhlYWQgICAgYW5jZXN0ICAgIGhlYWQKIDE0ICAgIGFuY2VzdCsgICBhbmNlc3QgIHJlbW90ZSAgICByZW1vdGUKLTE0QUxUIGFuY2VzdCsgICBhbmNlc3QgIHJlbW90ZSAgICByZW1vdGUKKzExICAgIGFuY2VzdCsgICBoZWFkICAgIHJlbW90ZSAgICBubyBtZXJnZQogCiBPbmx5ICMyQUxUIGFuZCAjM0FMVCB1c2UgKmVtcHR5KiwgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIG9ubHkgY2FzZXMKIHdoZXJlIHRoZXJlIGNhbiBiZSBjb25mbGljdHMgdGhhdCBkaWRuJ3QgZXhpc3QgYmVmb3JlLiBOb3RlIHRoYXQgd2UKQEAgLTg5LDQgKzExMyw5IEBACiBtdWx0aXBsZSB0aW1lcyksIGFuZCB0aGUgcmlnaHQgYW5zd2VyIGRlcGVuZHMgb24gbG9va2luZyBhdCBjcm9zc2luZ3MKIG9mIGhpc3Rvcnkgb3IgY29tbW9uIGFuY2VzdG9ycyBvZiB0aGUgYW5jZXN0b3JzLgogCi1UaGUgc3RhdHVzIGFzIG9mIFNlcCA1IGlzIHRoYXQgbXVsdGlwbGUgcmVtb3RlcyBhcmUgbm90IHN1cHBvcnRlZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK05vdGUgdGhhdCwgYmV0d2VlbiAjNiwgIzcsICM5LCBhbmQgIzExLCBhbGwgY2FzZXMgbm90IG90aGVyd2lzZQorY292ZXJlZCBhcmUgaGFuZGxlZCBpbiB0aGlzIHRhYmxlLgorCitGb3IgIzggYW5kICMxMCwgdGhlcmUgaXMgYWx0ZXJuYXRpdmUgYmVoYXZpb3IsIG5vdCBjdXJyZW50bHkKK2ltcGxlbWVudGVkLCB3aGVyZSB0aGUgcmVzdWx0IGlzIChlbXB0eSkuIEFzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwKK3RoZSBhdXRvbWF0aWMgbWVyZ2Ugd2lsbCBnZW5lcmFsbHkgZ2l2ZSB0aGlzIGVmZmVjdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKaW5kZXggOTI4YTIyYy4uMjE0NjczZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKQEAgLTEsNiArMSw1IEBACiBBIHNob3J0IGdpdCB0dXRvcmlhbAogPT09PT09PT09PT09PT09PT09PT0KLXYwLjk5LjUsIEF1ZyAyMDA1CiAKIEludHJvZHVjdGlvbgogLS0tLS0tLS0tLS0tCkBAIC01Miw3ICs1MSw5IEBACiBpbnNwZWN0IHRoYXQgd2l0aCBgbHNgLiBGb3IgeW91ciBuZXcgZW1wdHkgcHJvamVjdCwgaXQgc2hvdWxkIHNob3cgeW91CiB0aHJlZSBlbnRyaWVzLCBhbW9uZyBvdGhlciB0aGluZ3M6CiAKLSAtIGEgc3ltbGluayBjYWxsZWQgYEhFQURgLCBwb2ludGluZyB0byBgcmVmcy9oZWFkcy9tYXN0ZXJgCisgLSBhIHN5bWxpbmsgY2FsbGVkIGBIRUFEYCwgcG9pbnRpbmcgdG8gYHJlZnMvaGVhZHMvbWFzdGVyYCAoaWYgeW91cgorICAgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBuYXRpdmUgc3ltbGlua3MsIGl0IGlzIGEgZmlsZSBjb250YWluaW5nIHRoZQorICAgbGluZSAicmVmOiByZWZzL2hlYWRzL21hc3RlciIpCiArCiBEb24ndCB3b3JyeSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoZSBmaWxlIHRoYXQgdGhlIGBIRUFEYCBsaW5rIHBvaW50cyB0bwogZG9lc24ndCBldmVuIGV4aXN0IHlldCAtLSB5b3UgaGF2ZW4ndCBjcmVhdGVkIHRoZSBjb21taXQgdGhhdCB3aWxsCkBAIC0xNjEsNyArMTYyLDcgQEAKIAlnaXQtY2F0LWZpbGUgLXQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOAogCiB3aGVyZSB0aGUgYC10YCB0ZWxscyBgZ2l0LWNhdC1maWxlYCB0byB0ZWxsIHlvdSB3aGF0IHRoZSAidHlwZSIgb2YgdGhlCi1vYmplY3QgaXMuIEdpdCB3aWxsIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgYSAiYmxvYiIgb2JqZWN0IChpZSBqdXN0IGEKK29iamVjdCBpcy4gZ2l0IHdpbGwgdGVsbCB5b3UgdGhhdCB5b3UgaGF2ZSBhICJibG9iIiBvYmplY3QgKGllIGp1c3QgYQogcmVndWxhciBmaWxlKSwgYW5kIHlvdSBjYW4gc2VlIHRoZSBjb250ZW50cyB3aXRoCiAKIAlnaXQtY2F0LWZpbGUgImJsb2IiIDU1N2RiMDMKQEAgLTIyOCw2ICsyMjksNyBAQAogCiAtLS0tLS0tLS0tLS0KIGRpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAogLS0tIGEvaGVsbG8KICsrKyBiL2hlbGxvCiBAQCAtMSArMSwyIEBACkBAIC0yOTAsMTMgKzI5MiwxNiBAQAogb24gaXRzIHN0YW5kYXJkIGlucHV0LCBhbmQgaXQgd2lsbCB3cml0ZSBvdXQgdGhlIHJlc3VsdGluZyBvYmplY3QgbmFtZSBmb3IgdGhlCiBjb21taXQgdG8gaXRzIHN0YW5kYXJkIG91dHB1dC4KIAotQW5kIHRoaXMgaXMgd2hlcmUgd2Ugc3RhcnQgdXNpbmcgdGhlIGAuZ2l0L0hFQURgIGZpbGUuIFRoZSBgSEVBRGAgZmlsZSBpcwotc3VwcG9zZWQgdG8gY29udGFpbiB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0b3Atb2YtdHJlZSwgYW5kIHNpbmNlIHRoYXQncwotZXhhY3RseSB3aGF0IGBnaXQtY29tbWl0LXRyZWVgIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMgYWxsIHdpdGggYSBzaW1wbGUKLXNoZWxsIHBpcGVsaW5lOgorQW5kIHRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlIHRoZSBgLmdpdC9yZWZzL2hlYWRzL21hc3RlcmAgZmlsZQord2hpY2ggaXMgcG9pbnRlZCBhdCBieSBgSEVBRGAuIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBjb250YWluCit0aGUgcmVmZXJlbmNlIHRvIHRoZSB0b3Atb2YtdHJlZSBvZiB0aGUgbWFzdGVyIGJyYW5jaCwgYW5kIHNpbmNlCit0aGF0J3MgZXhhY3RseSB3aGF0IGBnaXQtY29tbWl0LXRyZWVgIHNwaXRzIG91dCwgd2UgY2FuIGRvIHRoaXMKK2FsbCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIHNoZWxsIGNvbW1hbmRzOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVjaG8gIkluaXRpYWwgY29tbWl0IiB8IGdpdC1jb21taXQtdHJlZSAkKGdpdC13cml0ZS10cmVlKSA+IC5naXQvSEVBRAordHJlZT0kKGdpdC13cml0ZS10cmVlKQorY29tbWl0PSQoZWNobyAnSW5pdGlhbCBjb21taXQnIHwgZ2l0LWNvbW1pdC10cmVlICR0cmVlKQorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkKGNvbW1pdCkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB3aGljaCB3aWxsIHNheToKQEAgLTM3OCw3ICszODMsNyBAQAogCiBUaGlzIGlzIG5vdCBoYXJkIHRvIHVuZGVyc3RhbmQsIGFzIHNvb24gYXMgeW91IHJlYWxpemUgdGhhdCBnaXQgc2ltcGx5CiBuZXZlciBrbm93cyAob3IgY2FyZXMpIGFib3V0IGZpbGVzIHRoYXQgaXQgaXMgbm90IHRvbGQgYWJvdXQKLWV4cGxpY2l0bHkuIEdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKK2V4cGxpY2l0bHkuIGdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKIGV4cGVjdHMgeW91IHRvIHRlbGwgaXQgd2hhdCB0aGUgZmlsZXMgYXJlLCBhbmQgdGhhdCdzIHdoYXQgdGhlIGluZGV4CiBpcyB0aGVyZSBmb3IuCiA9PT09PT09PT09PT09PT09CkBAIC00MzIsOCArNDM3LDggQEAKIGNvbW1pdCBpdHNlbGYgKGBnaXQtY29tbWl0YCkuCiAKIAotQ2hlY2tpbmcgaXQgb3V0Ci0tLS0tLS0tLS0tLS0tLS0KK0luc3BlY3RpbmcgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoaWxlIGNyZWF0aW5nIGNoYW5nZXMgaXMgdXNlZnVsLCBpdCdzIGV2ZW4gbW9yZSB1c2VmdWwgaWYgeW91IGNhbiB0ZWxsCiBsYXRlciB3aGF0IGNoYW5nZWQuIFRoZSBtb3N0IHVzZWZ1bCBjb21tYW5kIGZvciB0aGlzIGlzIGFub3RoZXIgb2YgdGhlCkBAIC00NTAsNiArNDU1LDQxIEBACiAoYWdhaW4sIGAtcGAgbWVhbnMgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBhcyBhIGh1bWFuLXJlYWRhYmxlIHBhdGNoKSwKIGFuZCBpdCB3aWxsIHNob3cgd2hhdCB0aGUgbGFzdCBjb21taXQgKGluIGBIRUFEYCkgYWN0dWFsbHkgY2hhbmdlZC4KIAorW05PVEVdCis9PT09PT09PT09PT0KK0hlcmUgaXMgYW4gQVNDSUkgYXJ0IGJ5IEpvbiBMb2VsaWdlciB0aGF0IGlsbHVzdHJhdGVzIGhvdwordmFyaW91cyBkaWZmLVwqIGNvbW1hbmRzIGNvbXBhcmUgdGhpbmdzLgorCisgICAgICAgICAgICAgICAgICAgICAgZGlmZi10cmVlCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tKworICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2JqZWN0IERCIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgQmFja2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgU3RvcmUgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICBeICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIGRpZmYtaW5kZXggLS1jYWNoZWQKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICBkaWZmLWluZGV4ICB8ICAgIFYKKyAgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgIEluZGV4ICAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgIHwgICJjYWNoZSIgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgfCAgICBeCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8ICBkaWZmLWZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCAgV29ya2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8IERpcmVjdG9yeSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKz09PT09PT09PT09PQorCiBNb3JlIGludGVyZXN0aW5nbHksIHlvdSBjYW4gYWxzbyBnaXZlIGBnaXQtZGlmZi10cmVlYCB0aGUgYC12YCBmbGFnLCB3aGljaAogdGVsbHMgaXQgdG8gYWxzbyBzaG93IHRoZSBjb21taXQgbWVzc2FnZSBhbmQgYXV0aG9yIGFuZCBkYXRlIG9mIHRoZQogY29tbWl0LCBhbmQgeW91IGNhbiB0ZWxsIGl0IHRvIHNob3cgYSB3aG9sZSBzZXJpZXMgb2YgZGlmZnMuCkBAIC01NDQsNyArNTg0LDcgQEAKIENvcHlpbmcgcmVwb3NpdG9yaWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1HaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCwgYW5kIGl0J3Mgd29ydGggbm90aW5nCitnaXQgcmVwb3NpdG9yaWVzIGFyZSBub3JtYWxseSB0b3RhbGx5IHNlbGYtc3VmZmljaWVudCwgYW5kIGl0J3Mgd29ydGggbm90aW5nCiB0aGF0IHVubGlrZSBDVlMsIGZvciBleGFtcGxlLCB0aGVyZSBpcyBubyBzZXBhcmF0ZSBub3Rpb24gb2YKICJyZXBvc2l0b3J5IiBhbmQgIndvcmtpbmcgdHJlZSIuIEEgZ2l0IHJlcG9zaXRvcnkgbm9ybWFsbHkgKmlzKiB0aGUKIHdvcmtpbmcgdHJlZSwgd2l0aCB0aGUgbG9jYWwgZ2l0IGluZm9ybWF0aW9uIGhpZGRlbiBpbiB0aGUgYC5naXRgCkBAIC02OTIsNyArNzMyLDkgQEAKIGp1c3QgdGVsbGluZyBgZ2l0IGNoZWNrb3V0YCB3aGF0IHRoZSBiYXNlIG9mIHRoZSBjaGVja291dCB3b3VsZCBiZS4KIEluIG90aGVyIHdvcmRzLCBpZiB5b3UgaGF2ZSBhbiBlYXJsaWVyIHRhZyBvciBicmFuY2gsIHlvdSdkIGp1c3QgZG8KIAotCWdpdCBjaGVja291dCAtYiBteWJyYW5jaCBlYXJsaWVyLWNvbW1pdAorLS0tLS0tLS0tLS0tCitnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggZWFybGllci1jb21taXQKKy0tLS0tLS0tLS0tLQogCiBhbmQgaXQgd291bGQgY3JlYXRlIHRoZSBuZXcgYnJhbmNoIGBteWJyYW5jaGAgYXQgdGhlIGVhcmxpZXIgY29tbWl0LAogYW5kIGNoZWNrIG91dCB0aGUgc3RhdGUgYXQgdGhhdCB0aW1lLgpAQCAtNzAwLDE3ICs3NDIsMjkgQEAKIAogWW91IGNhbiBhbHdheXMganVzdCBqdW1wIGJhY2sgdG8geW91ciBvcmlnaW5hbCBgbWFzdGVyYCBicmFuY2ggYnkgZG9pbmcKIAotCWdpdCBjaGVja291dCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tCiAKIChvciBhbnkgb3RoZXIgYnJhbmNoLW5hbWUsIGZvciB0aGF0IG1hdHRlcikgYW5kIGlmIHlvdSBmb3JnZXQgd2hpY2gKIGJyYW5jaCB5b3UgaGFwcGVuIHRvIGJlIG9uLCBhIHNpbXBsZQogCi0JbHMgLWwgLmdpdC9IRUFECistLS0tLS0tLS0tLS0KK2xzIC1sIC5naXQvSEVBRAorLS0tLS0tLS0tLS0tCiAKLXdpbGwgdGVsbCB5b3Ugd2hlcmUgaXQncyBwb2ludGluZy4gVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzCi15b3UgaGF2ZSwgeW91IGNhbiBzYXkKK3dpbGwgdGVsbCB5b3Ugd2hlcmUgaXQncyBwb2ludGluZyAoTm90ZSB0aGF0IG9uIHBsYXRmb3JtcyB3aXRoIGJhZCBvciBubworc3ltbGluayBzdXBwb3J0LCB5b3UgaGF2ZSB0byBleGVjdXRlCiAKLQlnaXQgYnJhbmNoCistLS0tLS0tLS0tLS0KK2NhdCAuZ2l0L0hFQUQKKy0tLS0tLS0tLS0tLQorCitpbnN0ZWFkKS4gVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzIHlvdSBoYXZlLCB5b3UgY2FuIHNheQorCistLS0tLS0tLS0tLS0KK2dpdCBicmFuY2gKKy0tLS0tLS0tLS0tLQogCiB3aGljaCBpcyBub3RoaW5nIG1vcmUgdGhhbiBhIHNpbXBsZSBzY3JpcHQgYXJvdW5kIGBscyAuZ2l0L3JlZnMvaGVhZHNgLgogVGhlcmUgd2lsbCBiZSBhc3RlcmlzayBpbiBmcm9udCBvZiB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uLgpAQCAtNzE4LDcgKzc3Miw5IEBACiBTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIGNyZWF0ZSBhIG5ldyBicmFuY2ggX3dpdGhvdXRfIGFjdHVhbGx5CiBjaGVja2luZyBpdCBvdXQgYW5kIHN3aXRjaGluZyB0byBpdC4gSWYgc28sIGp1c3QgdXNlIHRoZSBjb21tYW5kCiAKLQlnaXQgYnJhbmNoIDxicmFuY2huYW1lPiBbc3RhcnRpbmdwb2ludF0KKy0tLS0tLS0tLS0tLQorZ2l0IGJyYW5jaCA8YnJhbmNobmFtZT4gW3N0YXJ0aW5ncG9pbnRdCistLS0tLS0tLS0tLS0KIAogd2hpY2ggd2lsbCBzaW1wbHkgX2NyZWF0ZV8gdGhlIGJyYW5jaCwgYnV0IHdpbGwgbm90IGRvIGFueXRoaW5nIGZ1cnRoZXIuIAogWW91IGNhbiB0aGVuIGxhdGVyIC0tIG9uY2UgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIGFjdHVhbGx5IGRldmVsb3AKQEAgLTg0NCw3ICs5MDAsNiBAQAogICEgW215YnJhbmNoXSBTb21lIHdvcmsuCiAtLQogKyAgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KLSsgIFttYXN0ZXJ+MV0gU29tZSBmdW4uCiArKyBbbXlicmFuY2hdIFNvbWUgd29yay4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC04NTksMTUgKzkxNCwyMiBAQAogbWVhbnMgdGhleSBhcmUgbm93IHBhcnQgb2YgdGhlIGBtYXN0ZXJgIGJyYW5jaC4gT25seSB0aGUgIlNvbWUKIHdvcmsiIGNvbW1pdCBoYXMgdGhlIHBsdXMgYCtgIGNoYXJhY3RlciBpbiB0aGUgc2Vjb25kIGNvbHVtbiwKIGJlY2F1c2UgYG15YnJhbmNoYCBoYXMgbm90IGJlZW4gbWVyZ2VkIHRvIGluY29ycG9yYXRlIHRoZXNlCi1jb21taXRzIGZyb20gdGhlIG1hc3RlciBicmFuY2guCitjb21taXRzIGZyb20gdGhlIG1hc3RlciBicmFuY2guICBUaGUgc3RyaW5nIGluc2lkZSBicmFja2V0cworYmVmb3JlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXMgYSBzaG9ydCBuYW1lIHlvdSBjYW4gdXNlIHRvCituYW1lIHRoZSBjb21taXQuICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgJ21hc3RlcicgYW5kICdteWJyYW5jaCcKK2FyZSBicmFuY2ggaGVhZHMuICAnbWFzdGVyfjEnIGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgJ21hc3RlcicKK2JyYW5jaCBoZWFkLiAgUGxlYXNlIHNlZSAnZ2l0LXJldi1wYXJzZScgZG9jdW1lbnRhdGlvbiBpZiB5b3UKK3NlZSBtb3JlIGNvbXBsZXggY2FzZXMuCiAKIE5vdywgbGV0J3MgcHJldGVuZCB5b3UgYXJlIHRoZSBvbmUgd2hvIGRpZCBhbGwgdGhlIHdvcmsgaW4KIGBteWJyYW5jaGAsIGFuZCB0aGUgZnJ1aXQgb2YgeW91ciBoYXJkIHdvcmsgaGFzIGZpbmFsbHkgYmVlbiBtZXJnZWQKIHRvIHRoZSBgbWFzdGVyYCBicmFuY2guIExldCdzIGdvIGJhY2sgdG8gYG15YnJhbmNoYCwgYW5kIHJ1bgogcmVzb2x2ZSB0byBnZXQgdGhlICJ1cHN0cmVhbSBjaGFuZ2VzIiBiYWNrIHRvIHlvdXIgYnJhbmNoLgogCi0JZ2l0IGNoZWNrb3V0IG15YnJhbmNoCi0JZ2l0IHJlc29sdmUgSEVBRCBtYXN0ZXIgIk1lcmdlIHVwc3RyZWFtIGNoYW5nZXMuIgorLS0tLS0tLS0tLS0tCitnaXQgY2hlY2tvdXQgbXlicmFuY2gKK2dpdCByZXNvbHZlIEhFQUQgbWFzdGVyICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIKKy0tLS0tLS0tLS0tLQogCiBUaGlzIG91dHB1dHMgc29tZXRoaW5nIGxpa2UgdGhpcyAodGhlIGFjdHVhbCBjb21taXQgb2JqZWN0IG5hbWVzCiB3b3VsZCBiZSBkaWZmZXJlbnQpCkBAIC05NDYsNyArMTAwOCw3IEBACiBib3RoIGVuZHMgb24gdGhlIGxvY2FsIG1hY2hpbmUgaW5zdGVhZCBvZiBydW5uaW5nIG90aGVyIGVuZCBvbgogdGhlIHJlbW90ZSBtYWNoaW5lIHZpYSBgc3NoYC4KIAotR0lUIE5hdGl2ZTo6CitnaXQgTmF0aXZlOjoKIAlgZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCiArCiBUaGlzIHRyYW5zcG9ydCB3YXMgZGVzaWduZWQgZm9yIGFub255bW91cyBkb3dubG9hZGluZy4gIExpa2UgU1NICkBAIC05NjcsMTMgKzEwMjksMTMgQEAKIHNvbWV0aW1lcyBhbHNvIGNhbGxlZCAnY29tbWl0IHdhbGtlcnMnLgogKwogVGhlICdjb21taXQgd2Fsa2VycycgYXJlIHNvbWV0aW1lcyBhbHNvIGNhbGxlZCAnZHVtYgotdHJhbnNwb3J0cycsIGJlY2F1c2UgdGhleSBkbyBub3QgcmVxdWlyZSBhbnkgR0lUIGF3YXJlIHNtYXJ0Ci1zZXJ2ZXIgbGlrZSBHSVQgTmF0aXZlIHRyYW5zcG9ydCBkb2VzLiAgQW55IHN0b2NrIEhUVFAgc2VydmVyCit0cmFuc3BvcnRzJywgYmVjYXVzZSB0aGV5IGRvIG5vdCByZXF1aXJlIGFueSBnaXQgYXdhcmUgc21hcnQKK3NlcnZlciBsaWtlIGdpdCBOYXRpdmUgdHJhbnNwb3J0IGRvZXMuICBBbnkgc3RvY2sgSFRUUCBzZXJ2ZXIKIHdvdWxkIHN1ZmZpY2UuCiArCiBUaGVyZSBhcmUgKGNvbmZ1c2luZ2x5IGVub3VnaCkgYGdpdC1zc2gtZmV0Y2hgIGFuZCBgZ2l0LXNzaC11cGxvYWRgCiBwcm9ncmFtcywgd2hpY2ggYXJlICdjb21taXQgd2Fsa2Vycyc7IHRoZXkgb3V0bGl2ZWQgdGhlaXIKLXVzZWZ1bG5lc3Mgd2hlbiBHSVQgTmF0aXZlIGFuZCBTU0ggdHJhbnNwb3J0cyB3ZXJlIGludHJvZHVjZWQsCit1c2VmdWxuZXNzIHdoZW4gZ2l0IE5hdGl2ZSBhbmQgU1NIIHRyYW5zcG9ydHMgd2VyZSBpbnRyb2R1Y2VkLAogYW5kIG5vdCB1c2VkIGJ5IGBnaXQgcHVsbGAgb3IgYGdpdCBwdXNoYCBzY3JpcHRzLgogCiBPbmNlIHlvdSBmZXRjaCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgeW91IGByZXNvbHZlYCB0aGF0CkBAIC0xMDAxLDcgKzEwNjMsOSBAQAogCiBbTk9URV0KIFlvdSBjb3VsZCBldmVuIHB1bGwgZnJvbSB5b3VyIG93biByZXBvc2l0b3J5IGJ5Ci1naXZpbmcgJy4nIGFzIDxyZW1vdGUtcmVwb3NpdG9yeT4gcGFyYW1ldGVyIHRvIGBnaXQgcHVsbGAuCitnaXZpbmcgJy4nIGFzIDxyZW1vdGUtcmVwb3NpdG9yeT4gcGFyYW1ldGVyIHRvIGBnaXQgcHVsbGAuICBUaGlzCitpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBtZXJnZSBhIGxvY2FsIGJyYW5jaCAob3IgbW9yZSwgaWYgeW91CithcmUgbWFraW5nIGFuIE9jdG9wdXMpIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgogCiBJdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBiZSBwdWxsaW5nIGZyb20gdGhlIHNhbWUgcmVtb3RlCiByZXBvc2l0b3J5IGZyb20gdGltZSB0byB0aW1lLiBBcyBhIHNob3J0IGhhbmQsIHlvdSBjYW4gc3RvcmUKQEAgLTEwNzcsMTkgKzExNDEsMjMgQEAKIG9uIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIG92ZXIKIHRoZSBuZXR3b3JrIGludGVybmFsbHkgdXNlcyBhbiBTU0ggY29ubmVjdGlvbi4KIAotWW91ciBwcml2YXRlIHJlcG9zaXRvcnkncyBHSVQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYC5naXRgLCBidXQKK1lvdXIgcHJpdmF0ZSByZXBvc2l0b3J5J3MgZ2l0IGRpcmVjdG9yeSBpcyB1c3VhbGx5IGAuZ2l0YCwgYnV0CiB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IGlzIG9mdGVuIG5hbWVkIGFmdGVyIHRoZSBwcm9qZWN0IG5hbWUsCiBpLmUuIGA8cHJvamVjdD4uZ2l0YC4gTGV0J3MgY3JlYXRlIHN1Y2ggYSBwdWJsaWMgcmVwb3NpdG9yeSBmb3IKIHByb2plY3QgYG15LWdpdGAuIEFmdGVyIGxvZ2dpbmcgaW50byB0aGUgcmVtb3RlIG1hY2hpbmUsIGNyZWF0ZQogYW4gZW1wdHkgZGlyZWN0b3J5OgogCi0JbWtkaXIgbXktZ2l0LmdpdAorLS0tLS0tLS0tLS0tCitta2RpciBteS1naXQuZ2l0CistLS0tLS0tLS0tLS0KIAotVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgR0lUIHJlcG9zaXRvcnkgYnkgcnVubmluZworVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgZ2l0IHJlcG9zaXRvcnkgYnkgcnVubmluZwogYGdpdCBpbml0LWRiYCwgYnV0IHRoaXMgdGltZSwgc2luY2UgaXRzIG5hbWUgaXMgbm90IHRoZSB1c3VhbAogYC5naXRgLCB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHk6CiAKLQlHSVRfRElSPW15LWdpdC5naXQgZ2l0LWluaXQtZGIKKy0tLS0tLS0tLS0tLQorR0lUX0RJUj1teS1naXQuZ2l0IGdpdC1pbml0LWRiCistLS0tLS0tLS0tLS0KIAogTWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IGlzIGF2YWlsYWJsZSBmb3Igb3RoZXJzIHlvdSB3YW50IHlvdXIKIGNoYW5nZXMgdG8gYmUgcHVsbGVkIGJ5IHZpYSB0aGUgdHJhbnNwb3J0IG9mIHlvdXIgY2hvaWNlLiBBbHNvCkBAIC0xMTEzLDcgKzExODEsOSBAQAogQ29tZSBiYWNrIHRvIHRoZSBtYWNoaW5lIHlvdSBoYXZlIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LiBGcm9tCiB0aGVyZSwgcnVuIHRoaXMgY29tbWFuZDoKIAotCWdpdCBwdXNoIDxwdWJsaWMtaG9zdD46L3BhdGgvdG8vbXktZ2l0LmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorZ2l0IHB1c2ggPHB1YmxpYy1ob3N0PjovcGF0aC90by9teS1naXQuZ2l0IG1hc3RlcgorLS0tLS0tLS0tLS0tCiAKIFRoaXMgc3luY2hyb25pemVzIHlvdXIgcHVibGljIHJlcG9zaXRvcnkgdG8gbWF0Y2ggdGhlIG5hbWVkCiBicmFuY2ggaGVhZCAoaS5lLiBgbWFzdGVyYCBpbiB0aGlzIGNhc2UpIGFuZCBvYmplY3RzIHJlYWNoYWJsZQpAQCAtMTEyMyw3ICsxMTkzLDkgQEAKIHJlcG9zaXRvcnkuIEtlcm5lbC5vcmcgbWlycm9yIG5ldHdvcmsgdGFrZXMgY2FyZSBvZiB0aGUKIHByb3BhZ2F0aW9uIHRvIG90aGVyIHB1YmxpY2x5IHZpc2libGUgbWFjaGluZXM6CiAKLQlnaXQgcHVzaCBtYXN0ZXIua2VybmVsLm9yZzovcHViL3NjbS9naXQvZ2l0LmdpdC8gCistLS0tLS0tLS0tLS0KK2dpdCBwdXNoIG1hc3Rlci5rZXJuZWwub3JnOi9wdWIvc2NtL2dpdC9naXQuZ2l0LyAKKy0tLS0tLS0tLS0tLQogCiAKIFBhY2tpbmcgeW91ciByZXBvc2l0b3J5CkBAIC0xMTM2LDcgKzEyMDgsOSBAQAogaW1tdXRhYmxlIG9uY2UgdGhleSBhcmUgY3JlYXRlZCwgdGhlcmUgaXMgYSB3YXkgdG8gb3B0aW1pemUgdGhlCiBzdG9yYWdlIGJ5ICJwYWNraW5nIHRoZW0gdG9nZXRoZXIiLiBUaGUgY29tbWFuZAogCi0JZ2l0IHJlcGFjaworLS0tLS0tLS0tLS0tCitnaXQgcmVwYWNrCistLS0tLS0tLS0tLS0KIAogd2lsbCBkbyBpdCBmb3IgeW91LiBJZiB5b3UgZm9sbG93ZWQgdGhlIHR1dG9yaWFsIGV4YW1wbGVzLCB5b3UKIHdvdWxkIGhhdmUgYWNjdW11bGF0ZWQgYWJvdXQgMTcgb2JqZWN0cyBpbiBgLmdpdC9vYmplY3RzLz8/L2AKQEAgLTExNjAsNyArMTIzNCw5IEBACiBPbmNlIHlvdSBoYXZlIHBhY2tlZCBvYmplY3RzLCB5b3UgZG8gbm90IG5lZWQgdG8gbGVhdmUgdGhlCiB1bnBhY2tlZCBvYmplY3RzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBmaWxlIGFueW1vcmUuCiAKLQlnaXQgcHJ1bmUtcGFja2VkCistLS0tLS0tLS0tLS0KK2dpdCBwcnVuZS1wYWNrZWQKKy0tLS0tLS0tLS0tLQogCiB3b3VsZCByZW1vdmUgdGhlbSBmb3IgeW91LgogCkBAIC0xMzU2LDQgKzE0MzIsMTAxIEBACiBiYWNrIGJlZm9yZSB5b3UgcHVzaCB5b3VyIHdvcmsgd2hlbiBpdCBoYXBwZW5zLgogCiAKK0J1bmRsaW5nIHlvdXIgd29yayB0b2dldGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGxpa2VseSB0aGF0IHlvdSB3aWxsIGJlIHdvcmtpbmcgb24gbW9yZSB0aGFuIG9uZSB0aGluZyBhdAorYSB0aW1lLiAgSXQgaXMgZWFzeSB0byB1c2UgdGhvc2UgbW9yZS1vci1sZXNzIGluZGVwZW5kZW50IHRhc2tzCit1c2luZyBicmFuY2hlcyB3aXRoIGdpdC4KKworV2UgaGF2ZSBhbHJlYWR5IHNlZW4gaG93IGJyYW5jaGVzIHdvcmsgaW4gYSBwcmV2aW91cyBleGFtcGxlLAord2l0aCAiZnVuIGFuZCB3b3JrIiBleGFtcGxlIHVzaW5nIHR3byBicmFuY2hlcy4gIFRoZSBpZGVhIGlzIHRoZQorc2FtZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHR3byBicmFuY2hlcy4gIExldCdzIHNheSB5b3Ugc3RhcnRlZAorb3V0IGZyb20gIm1hc3RlciIgaGVhZCwgYW5kIGhhdmUgc29tZSBuZXcgY29kZSBpbiB0aGUgIm1hc3RlciIKK2JyYW5jaCwgYW5kIHR3byBpbmRlcGVuZGVudCBmaXhlcyBpbiB0aGUgImNvbW1pdC1maXgiIGFuZAorImRpZmYtZml4IiBicmFuY2hlczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCistLS0KKyArICBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsgIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisrICAgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICArIFttYXN0ZXJdIFJlbGVhc2UgY2FuZGlkYXRlICMxCisrKysgW2RpZmYtZml4fjJdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitCb3RoIGZpeGVzIGFyZSB0ZXN0ZWQgd2VsbCwgYW5kIGF0IHRoaXMgcG9pbnQsIHlvdSB3YW50IHRvIG1lcmdlCitpbiBib3RoIG9mIHRoZW0uICBZb3UgY291bGQgbWVyZ2UgaW4gJ2RpZmYtZml4JyBmaXJzdCBhbmQgdGhlbgorJ2NvbW1pdC1maXgnIG5leHQsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXNvbHZlIG1hc3RlciBkaWZmLWZpeCAnTWVyZ2UgZml4IGluIGRpZmYtZml4JworJCBnaXQgcmVzb2x2ZSBtYXN0ZXIgY29tbWl0LWZpeCAnTWVyZ2UgZml4IGluIGNvbW1pdC1maXgnCistLS0tLS0tLS0tLS0KKworV2hpY2ggd291bGQgcmVzdWx0IGluOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gTWVyZ2UgZml4IGluIGNvbW1pdC1maXgKKy0tLQorICArIFttYXN0ZXJdIE1lcmdlIGZpeCBpbiBjb21taXQtZml4CisrICsgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICArIFttYXN0ZXJ+MV0gTWVyZ2UgZml4IGluIGRpZmYtZml4CisgKysgW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyArKyBbZGlmZi1maXh+MV0gQmV0dGVyIGNvbW1vbiBzdWJzdHJpbmcgYWxnb3JpdGhtLgorICArIFttYXN0ZXJ+Ml0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKysrKyBbbWFzdGVyfjNdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGVyZSBpcyBubyBwYXJ0aWN1bGFyIHJlYXNvbiB0byBtZXJnZSBpbiBvbmUgYnJhbmNoCitmaXJzdCBhbmQgdGhlIG90aGVyIG5leHQsIHdoZW4gd2hhdCB5b3UgaGF2ZSBhcmUgYSBzZXQgb2YgdHJ1bHkKK2luZGVwZW5kZW50IGNoYW5nZXMgKGlmIHRoZSBvcmRlciBtYXR0ZXJlZCwgdGhlbiB0aGV5IGFyZSBub3QKK2luZGVwZW5kZW50IGJ5IGRlZmluaXRpb24pLiAgWW91IGNvdWxkIGluc3RlYWQgbWVyZ2UgdGhvc2UgdHdvCiticmFuY2hlcyBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCBhdCBvbmNlLiAgRmlyc3QgbGV0J3MgdW5kbyB3aGF0Cit3ZSBqdXN0IGRpZCBhbmQgc3RhcnQgb3Zlci4gIFdlIHdvdWxkIHdhbnQgdG8gZ2V0IHRoZSBtYXN0ZXIKK2JyYW5jaCBiZWZvcmUgdGhlc2UgdHdvIG1lcmdlcyBieSByZXNldHRpbmcgaXQgdG8gJ21hc3Rlcn4yJzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyfjIKKy0tLS0tLS0tLS0tLQorCitZb3UgY2FuIG1ha2Ugc3VyZSAnZ2l0IHNob3ctYnJhbmNoJyBtYXRjaGVzIHRoZSBzdGF0ZSBiZWZvcmUKK3Rob3NlIHR3byAnZ2l0IHJlc29sdmUnIHlvdSBqdXN0IGRpZC4gIFRoZW4sIGluc3RlYWQgb2YgcnVubmluZwordHdvICdnaXQgcmVzb2x2ZScgY29tbWFuZHMgaW4gYSByb3csIHlvdSB3b3VsZCBwdWxsIHRoZXNlIHR3bworYnJhbmNoIGhlYWRzICh0aGlzIGlzIGtub3duIGFzICdtYWtpbmcgYW4gT2N0b3B1cycpOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgLiBjb21taXQtZml4IGRpZmYtZml4CiskIGdpdCBzaG93LWJyYW5jaAorISBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgISBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICAqIFttYXN0ZXJdIE9jdG9wdXMgbWVyZ2Ugb2YgYnJhbmNoZXMgJ2RpZmYtZml4JyBhbmQgJ2NvbW1pdC1maXgnCistLS0KKyAgKyBbbWFzdGVyXSBPY3RvcHVzIG1lcmdlIG9mIGJyYW5jaGVzICdkaWZmLWZpeCcgYW5kICdjb21taXQtZml4JworKyArIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyArKyBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsrIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisgICsgW21hc3Rlcn4xXSBSZWxlYXNlIGNhbmRpZGF0ZSAjMQorKysrIFttYXN0ZXJ+Ml0gUHJldHR5LXByaW50IG1lc3NhZ2VzLgorLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCBkbyBPY3RvcHVzIGJlY2F1c2UgeW91IGNhbi4gIEFuIG9jdG9wdXMKK2lzIGEgdmFsaWQgdGhpbmcgdG8gZG8gYW5kIG9mdGVuIG1ha2VzIGl0IGVhc2llciB0byB2aWV3IHRoZQorY29tbWl0IGhpc3RvcnkgaWYgeW91IGFyZSBwdWxsaW5nIG1vcmUgdGhhbiB0d28gaW5kZXBlbmRlbnQKK2NoYW5nZXMgYXQgdGhlIHNhbWUgdGltZS4gIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1lcmdlIGNvbmZsaWN0cword2l0aCBhbnkgb2YgdGhlIGJyYW5jaGVzIHlvdSBhcmUgbWVyZ2luZyBpbiBhbmQgbmVlZCB0byBoYW5kCityZXNvbHZlLCB0aGF0IGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgZGV2ZWxvcG1lbnQgaGFwcGVuZWQgaW4KK3Rob3NlIGJyYW5jaGVzIHdlcmUgbm90IGluZGVwZW5kZW50IGFmdGVyIGFsbCwgYW5kIHlvdSBzaG91bGQKK21lcmdlIHR3byBhdCBhIHRpbWUsIGRvY3VtZW50aW5nIGhvdyB5b3UgcmVzb2x2ZWQgdGhlIGNvbmZsaWN0cywKK2FuZCB0aGUgcmVhc29uIHdoeSB5b3UgcHJlZmVycmVkIGNoYW5nZXMgbWFkZSBpbiBvbmUgc2lkZSBvdmVyCit0aGUgb3RoZXIuICBPdGhlcndpc2UgaXQgd291bGQgbWFrZSB0aGUgcHJvamVjdCBoaXN0b3J5IGhhcmRlcgordG8gZm9sbG93LCBub3QgZWFzaWVyLgorCiBbIHRvIGJlIGNvbnRpbnVlZC4uIGN2c2ltcG9ydHMgXQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggNmUzMzZkNy4uYmJiMTNmMyAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC00Niw2ICs0Niw5IEBACiAJICB0cmFuc2ZlciwgeW91IGFyZSBwcm9iYWJhbHkgT0sgaWYgeW91IGRvIG5vdCBoYXZlCiAJICB0aGVtLgogCisJLSBleHBhdCBsaWJyYXJ5OyBnaXQtaHR0cC1wdXNoIHVzZXMgaXQgZm9yIHJlbW90ZSBsb2NrCisJICBtYW5hZ2VtZW50IG92ZXIgREFWLiAgU2ltaWxhciB0byAiY3VybCIgYWJvdmUsIHRoaXMgaXMgb3B0aW9uYWwuCisKIAktICJHTlUgZGlmZiIgdG8gZ2VuZXJhdGUgcGF0Y2hlcy4gIE9mIGNvdXJzZSwgeW91IGRvbid0IF9oYXZlXyB0bwogCSAgZ2VuZXJhdGUgcGF0Y2hlcyBpZiB5b3UgZG9uJ3Qgd2FudCB0bywgYnV0IGxldCdzIGZhY2UgaXQsIHlvdSdsbAogCSAgYmUgd2FudGluZyB0by4gT3Igd2h5IGRpZCB5b3UgZ2V0IGdpdCBpbiB0aGUgZmlyc3QgcGxhY2U/CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGNmZGU2OWMuLjU2ZTBmYjEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC02LDE0ICs2LDI0IEBACiAjIERlZmluZSBOT19PUEVOU1NMIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdSBkbyBub3QgaGF2ZSBPcGVuU1NMLiBZb3Ugd2lsbAogIyBtaXNzIG91dCBnaXQtcmV2LWxpc3QgLS1tZXJnZS1vcmRlci4gVGhpcyBhbHNvIGltcGxpZXMgTU9aSUxMQV9TSEExLgogIwotIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGlzIG5vdAotIyBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vIHRyYW5zcG9ydHMuCisjIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMuCisjCisjIERlZmluZSBDVVJMRElSPS9mb28vYmFyIGlmIHlvdXIgY3VybCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzLgogIwogIyBEZWZpbmUgTk9fU1RSQ0FTRVNUUiBpZiB5b3UgZG9uJ3QgaGF2ZSBzdHJjYXNlc3RyLgogIwogIyBEZWZpbmUgUFBDX1NIQTEgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBydW5uaW5nIG1ha2UgdG8gbWFrZSB1c2Ugb2YKICMgYSBidW5kbGVkIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgZm9yIFBvd2VyUEMuCiAjCisjIERlZmluZSBBUk1fU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgQVJNLgorIwogIyBEZWZpbmUgTkVFRFNfU1NMX1dJVEhfQ1JZUFRPIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdpdGggLWxzc2wgKERhcndpbikuCiAjCiAjIERlZmluZSBORUVEU19MSUJJQ09OViBpZiBsaW5raW5nIHdpdGggbGliYyBpcyBub3QgZW5vdWdoIChEYXJ3aW4pLgpAQCAtMjEsMzMgKzMxLDMwIEBACiAjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCiAjIFBhdHJpY2sgTWF1cml0eikuCiAjCi0jIERlZmluZSBOT19HRVRET01BSU5OQU1FIGlmIHlvdXIgbGlicmFyeSBsYWNrIGl0IChTdW5PUywgUGF0cmljayBNYXVyaXR6KS4KKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KICMKICMgRGVmaW5lIFdJVEhfT1dOX1NVQlBST0NFU1NfUFkgaWYgeW91IHdhbnQgdG8gdXNlIHdpdGggcHl0aG9uIDIuMy4KICMKKyMgRGVmaW5lIE5PX0lQVjYgaWYgeW91IGxhY2sgSVB2NiBzdXBwb3J0IGFuZCBnZXRhZGRyaW5mbygpLgorIwogIyBEZWZpbmUgQ09MTElTSU9OX0NIRUNLIGJlbG93IGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCiAjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQogIyBzdWZmaWNpZW50IGd1YXJhbnRlZSB0aGF0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIHdpbGwgZXZlciBoYXBwZW4uCiAKLSMgREVGSU5FUyArPSAtRENPTExJU0lPTl9DSEVDSwotCiAjIERlZmluZSBVU0VfTlNFQyBiZWxvdyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzCiAjIGFuZCBjdGltZXMuIE5vdGUgdGhhdCB5b3UgbmVlZCByZWNlbnQgZ2xpYmMgKGF0IGxlYXN0IDIuMi40KSBmb3IgdGhpcywgYW5kCiAjIGl0IHdpbGwgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseQogIyByYW5kb21seSBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZAogIyB0aW1lcyAobXkgZXh0MyBkb2Vzbid0KS4KIAotIyBERUZJTkVTICs9IC1EVVNFX05TRUMKLQogIyBEZWZpbmUgVVNFX1NUREVWIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRldmljZQogIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWNhY2hlIHBlcnNwZWN0aXZlLgogCi0jIERFRklORVMgKz0gLURVU0VfU1RERVYKK0dJVF9WRVJTSU9OID0gMC45OS45ZQogCi1HSVRfVkVSU0lPTiA9IDAuOTkuN2QKLQorIyBDRkxBR1MgaXMgZm9yIHRoZSB1c2VycyB0byBvdmVycmlkZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiBDRkxBR1MgPSAtZyAtTzIgLVdhbGwKLUFMTF9DRkxBR1MgPSAkKENGTEFHUykgJChQTEFURk9STV9ERUZJTkVTKSAkKERFRklORVMpCitBTExfQ0ZMQUdTID0gJChDRkxBR1MpCiAKIHByZWZpeCA9ICQoSE9NRSkKIGJpbmRpciA9ICQocHJlZml4KS9iaW4KQEAgLTU3LDYgKzY0LDcgQEAKIAogQ0MgPSBnY2MKIEFSID0gYXIKK1RBUiA9IHRhcgogSU5TVEFMTCA9IGluc3RhbGwKIFJQTUJVSUxEID0gcnBtYnVpbGQKIApAQCAtNzgsNDMgKzg2LDQ3IEBACiAJZ2l0LXJlcGFjay5zaCBnaXQtcmVxdWVzdC1wdWxsLnNoIGdpdC1yZXNldC5zaCBcCiAJZ2l0LXJlc29sdmUuc2ggZ2l0LXJldmVydC5zaCBnaXQtc2gtc2V0dXAuc2ggZ2l0LXN0YXR1cy5zaCBcCiAJZ2l0LXRhZy5zaCBnaXQtdmVyaWZ5LXRhZy5zaCBnaXQtd2hhdGNoYW5nZWQuc2ggZ2l0LnNoIFwKLQlnaXQtYXBwbHltYm94LnNoIGdpdC1hcHBseXBhdGNoLnNoIFwKKwlnaXQtYXBwbHltYm94LnNoIGdpdC1hcHBseXBhdGNoLnNoIGdpdC1hbS5zaCBcCiAJZ2l0LW1lcmdlLnNoIGdpdC1tZXJnZS1zdHVwaWQuc2ggZ2l0LW1lcmdlLW9jdG9wdXMuc2ggXAotCWdpdC1tZXJnZS1yZXNvbHZlLnNoIGdpdC1ncmVwLnNoCisJZ2l0LW1lcmdlLXJlc29sdmUuc2ggZ2l0LW1lcmdlLW91cnMuc2ggZ2l0LWdyZXAuc2gKIAogU0NSSVBUX1BFUkwgPSBcCiAJZ2l0LWFyY2hpbXBvcnQucGVybCBnaXQtY3ZzaW1wb3J0LnBlcmwgZ2l0LXJlbGluay5wZXJsIFwKLQlnaXQtcmVuYW1lLnBlcmwgZ2l0LXNob3J0bG9nLnBlcmwKKwlnaXQtcmVuYW1lLnBlcmwgZ2l0LXNob3J0bG9nLnBlcmwgZ2l0LWZtdC1tZXJnZS1tc2cucGVybCBcCisJZ2l0LXN2bmltcG9ydC5wZXJsIGdpdC1tdi5wZXJsCiAKIFNDUklQVF9QWVRIT04gPSBcCiAJZ2l0LW1lcmdlLXJlY3Vyc2l2ZS5weQogCiAjIFRoZSBvbmVzIHRoYXQgZG8gbm90IGhhdmUgdG8gbGluayB3aXRoIGxjcnlwdG8gbm9yIGx6LgogU0lNUExFX1BST0dSQU1TID0gXAotCWdpdC1nZXQtdGFyLWNvbW1pdC1pZCBnaXQtbWFpbGluZm8gZ2l0LW1haWxzcGxpdCBnaXQtc3RyaXBzcGFjZSBcCi0JZ2l0LWRhZW1vbiBnaXQtdmFyCisJZ2l0LWdldC10YXItY29tbWl0LWlkJFggZ2l0LW1haWxpbmZvJFggZ2l0LW1haWxzcGxpdCRYIFwKKwlnaXQtc3RyaXBzcGFjZSRYIGdpdC12YXIkWCBnaXQtZGFlbW9uJFgKIAogIyAuLi4gYW5kIGFsbCB0aGUgcmVzdAogUFJPR1JBTVMgPSBcCi0JZ2l0LWFwcGx5IGdpdC1jYXQtZmlsZSBcCi0JZ2l0LWNoZWNrb3V0LWluZGV4IGdpdC1jbG9uZS1wYWNrIGdpdC1jb21taXQtdHJlZSBcCi0JZ2l0LWNvbnZlcnQtb2JqZWN0cyBnaXQtZGlmZi1maWxlcyBcCi0JZ2l0LWRpZmYtaGVscGVyIGdpdC1kaWZmLWluZGV4IGdpdC1kaWZmLXN0YWdlcyBcCi0JZ2l0LWRpZmYtdHJlZSBnaXQtZXhwb3J0IGdpdC1mZXRjaC1wYWNrIGdpdC1mc2NrLW9iamVjdHMgXAotCWdpdC1oYXNoLW9iamVjdCBnaXQtaW5pdC1kYiBcCi0JZ2l0LWxvY2FsLWZldGNoIGdpdC1scy1maWxlcyBnaXQtbHMtdHJlZSBnaXQtbWVyZ2UtYmFzZSBcCi0JZ2l0LW1lcmdlLWluZGV4IGdpdC1ta3RhZyBnaXQtcGFjay1vYmplY3RzIGdpdC1wYXRjaC1pZCBcCi0JZ2l0LXBlZWstcmVtb3RlIGdpdC1wcnVuZS1wYWNrZWQgZ2l0LXJlYWQtdHJlZSBcCi0JZ2l0LXJlY2VpdmUtcGFjayBnaXQtcmV2LWxpc3QgZ2l0LXJldi1wYXJzZSBcCi0JZ2l0LXJldi10cmVlIGdpdC1zZW5kLXBhY2sgZ2l0LXNob3ctYnJhbmNoIFwKLQlnaXQtc2hvdy1pbmRleCBnaXQtc3NoLWZldGNoIFwKLQlnaXQtc3NoLXVwbG9hZCBnaXQtdGFyLXRyZWUgZ2l0LXVucGFjay1maWxlIFwKLQlnaXQtdW5wYWNrLW9iamVjdHMgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIFwKLQlnaXQtdXBsb2FkLXBhY2sgZ2l0LXZlcmlmeS1wYWNrIGdpdC13cml0ZS10cmVlIFwKLQkkKFNJTVBMRV9QUk9HUkFNUykKKwlnaXQtYXBwbHkkWCBnaXQtY2F0LWZpbGUkWCBcCisJZ2l0LWNoZWNrb3V0LWluZGV4JFggZ2l0LWNsb25lLXBhY2skWCBnaXQtY29tbWl0LXRyZWUkWCBcCisJZ2l0LWNvbnZlcnQtb2JqZWN0cyRYIGdpdC1kaWZmLWZpbGVzJFggXAorCWdpdC1kaWZmLWluZGV4JFggZ2l0LWRpZmYtc3RhZ2VzJFggXAorCWdpdC1kaWZmLXRyZWUkWCBnaXQtZmV0Y2gtcGFjayRYIGdpdC1mc2NrLW9iamVjdHMkWCBcCisJZ2l0LWhhc2gtb2JqZWN0JFggZ2l0LWluZGV4LXBhY2skWCBnaXQtaW5pdC1kYiRYIFwKKwlnaXQtbG9jYWwtZmV0Y2gkWCBnaXQtbHMtZmlsZXMkWCBnaXQtbHMtdHJlZSRYIGdpdC1tZXJnZS1iYXNlJFggXAorCWdpdC1tZXJnZS1pbmRleCRYIGdpdC1ta3RhZyRYIGdpdC1wYWNrLW9iamVjdHMkWCBnaXQtcGF0Y2gtaWQkWCBcCisJZ2l0LXBlZWstcmVtb3RlJFggZ2l0LXBydW5lLXBhY2tlZCRYIGdpdC1yZWFkLXRyZWUkWCBcCisJZ2l0LXJlY2VpdmUtcGFjayRYIGdpdC1yZXYtbGlzdCRYIGdpdC1yZXYtcGFyc2UkWCBcCisJZ2l0LXNlbmQtcGFjayRYIGdpdC1zaG93LWJyYW5jaCRYIGdpdC1zaGVsbCRYIFwKKwlnaXQtc2hvdy1pbmRleCRYIGdpdC1zc2gtZmV0Y2gkWCBcCisJZ2l0LXNzaC11cGxvYWQkWCBnaXQtdGFyLXRyZWUkWCBnaXQtdW5wYWNrLWZpbGUkWCBcCisJZ2l0LXVucGFjay1vYmplY3RzJFggZ2l0LXVwZGF0ZS1pbmRleCRYIGdpdC11cGRhdGUtc2VydmVyLWluZm8kWCBcCisJZ2l0LXVwbG9hZC1wYWNrJFggZ2l0LXZlcmlmeS1wYWNrJFggZ2l0LXdyaXRlLXRyZWUkWCBcCisJZ2l0LXVwZGF0ZS1yZWYkWCBnaXQtc3ltYm9saWMtcmVmJFggZ2l0LWNoZWNrLXJlZi1mb3JtYXQkWCBcCisJZ2l0LW5hbWUtcmV2JFggJChTSU1QTEVfUFJPR1JBTVMpCiAKLSMgQmFja3dhcmQgY29tcGF0aWJpbGl0eSAtLSB0byBiZSByZW1vdmVkIGluIDAuOTkuOAotUFJPR1JBTVMgKz0gZ2l0LXNzaC1wdWxsIGdpdC1zc2gtcHVzaAorIyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IC0tIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMS4wCitQUk9HUkFNUyArPSBnaXQtc3NoLXB1bGwkWCBnaXQtc3NoLXB1c2gkWAorCitHSVRfTElTVF9UV0VBSyA9CiAKIFBZTU9EVUxFUyA9IFwKIAlnaXRNZXJnZUNvbW1vbi5weQpAQCAtMTI1LDEwICsxMzcsOCBAQAogCiBpZmRlZiBXSVRIX1NFTkRfRU1BSUwKIAlTQ1JJUFRfUEVSTCArPSBnaXQtc2VuZC1lbWFpbC5wZXJsCi1lbmRpZgotCi1pZm5kZWYgTk9fQ1VSTAotCVBST0dSQU1TICs9IGdpdC1odHRwLWZldGNoCitlbHNlCisJR0lUX0xJU1RfVFdFQUsgKz0gLWUgJy9ec2VuZC1lbWFpbCQkL2QnCiBlbmRpZgogCiBMSUJfRklMRT1saWJnaXQuYQpAQCAtMTQwLDcgKzE1MCw3IEBACiAKIERJRkZfT0JKUyA9IFwKIAlkaWZmLm8gZGlmZmNvcmUtYnJlYWsubyBkaWZmY29yZS1vcmRlci5vIGRpZmZjb3JlLXBhdGhzcGVjLm8gXAotCWRpZmZjb3JlLXBpY2theGUubyBkaWZmY29yZS1yZW5hbWUubworCWRpZmZjb3JlLXBpY2theGUubyBkaWZmY29yZS1yZW5hbWUubyB0cmVlLWRpZmYubwogCiBMSUJfT0JKUyA9IFwKIAlibG9iLm8gY29tbWl0Lm8gY29ubmVjdC5vIGNvdW50LWRlbHRhLm8gY3N1bS1maWxlLm8gXApAQCAtMTQ4LDE5ICsxNTgsNzggQEAKIAlvYmplY3QubyBwYWNrLWNoZWNrLm8gcGF0Y2gtZGVsdGEubyBwYXRoLm8gcGt0LWxpbmUubyBcCiAJcXVvdGUubyByZWFkLWNhY2hlLm8gcmVmcy5vIHJ1bi1jb21tYW5kLm8gXAogCXNlcnZlci1pbmZvLm8gc2V0dXAubyBzaGExX2ZpbGUubyBzaGExX25hbWUubyBzdHJidWYubyBcCi0JdGFnLm8gdHJlZS5vIHVzYWdlLm8gJChESUZGX09CSlMpCisJdGFnLm8gdHJlZS5vIHVzYWdlLm8gY29uZmlnLm8gZW52aXJvbm1lbnQubyBjdHlwZS5vIGNvcHkubyBcCisJJChESUZGX09CSlMpCiAKIExJQlMgPSAkKExJQl9GSUxFKQogTElCUyArPSAtbHoKIAotaWZlcSAoJChzaGVsbCB1bmFtZSAtcyksRGFyd2luKQorIyBTaGVsbCBxdW90ZTsKKyMgUmVzdWx0IG9mIHRoaXMgbmVlZHMgdG8gYmUgcGxhY2VkIGluc2lkZSAnJworc2hxID0gJChzdWJzdCAnLCdcJycsJCgxKSkKKyMgVGhpcyBoYXMgc3Vycm91bmRpbmcgJycKK3NoZWxscXVvdGUgPSAnJChjYWxsIHNocSwkKDEpKScKKworIworIyBQbGF0Zm9ybSBzcGVjaWZpYyB0d2Vha3MKKyMKKworIyBXZSBjaG9vc2UgdG8gYXZvaWQgImlmIC4uIGVsc2UgaWYgLi4gZWxzZSAuLiBlbmRpZiBlbmRpZiIKKyMgYmVjYXVzZSBtYWludGFpbmluZyB0aGUgbmVzdGluZyB0byBtYXRjaCBpcyBhIHBhaW4uICBJZgorIyB3ZSBoYWQgImVsaWYiIHRoaW5ncyB3b3VsZCBoYXZlIGJlZW4gbXVjaCBuaWNlci4uLgordW5hbWVfUyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9NIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1tIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX08gOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLW8gMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQorCitpZmVxICgkKHVuYW1lX1MpLERhcndpbikKIAlORUVEU19TU0xfV0lUSF9DUllQVE8gPSBZZXNQbGVhc2UKIAlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCSMjIGZpbmsKKwlBTExfQ0ZMQUdTICs9IC1JL3N3L2luY2x1ZGUgLUwvc3cvbGliCisJIyMgZGFyd2lucG9ydHMKKwlBTExfQ0ZMQUdTICs9IC1JL29wdC9sb2NhbC9pbmNsdWRlIC1ML29wdC9sb2NhbC9saWIKIGVuZGlmCi1pZmVxICgkKHNoZWxsIHVuYW1lIC1zKSxTdW5PUykKK2lmZXEgKCQodW5hbWVfUyksU3VuT1MpCiAJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCiAJTkVFRFNfTlNMID0gWWVzUGxlYXNlCi0JUExBVEZPUk1fREVGSU5FUyArPSAtRF9fRVhURU5TSU9OU19fCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL2Jpbi9iYXNoCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCUlOU1RBTEwgPSBnaW5zdGFsbAorCVRBUiA9IGd0YXIKKwlBTExfQ0ZMQUdTICs9IC1EX19FWFRFTlNJT05TX18KK2VuZGlmCitpZmVxICgkKHVuYW1lX08pLEN5Z3dpbikKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJWCA9IC5leGUKKwlBTExfQ0ZMQUdTICs9IC1EVVNFX1NZTUxJTktfSEVBRD0wCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxPcGVuQlNEKQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCUFMTF9DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYgorZW5kaWYKK2lmbmVxICgsJChmaW5kc3RyaW5nIGFybSwkKHVuYW1lX00pKSkKKwlBUk1fU0hBMSA9IFllc1BsZWFzZQorZW5kaWYKKworLWluY2x1ZGUgY29uZmlnLm1haworCitpZm5kZWYgTk9fQ1VSTAorCWlmZGVmIENVUkxESVIKKwkJIyBUaGlzIGlzIHN0aWxsIHByb2JsZW1hdGljIC0tIGdjYyBkb2VzIG5vdCB3YW50IC1SLgorCQlBTExfQ0ZMQUdTICs9IC1JJChDVVJMRElSKS9pbmNsdWRlCisJCUNVUkxfTElCQ1VSTCA9IC1MJChDVVJMRElSKS9saWIgLVIkKENVUkxESVIpL2xpYiAtbGN1cmwKKwllbHNlCisJCUNVUkxfTElCQ1VSTCA9IC1sY3VybAorCWVuZGlmCisJUFJPR1JBTVMgKz0gZ2l0LWh0dHAtZmV0Y2gkWAorCWlmbmRlZiBOT19FWFBBVAorCQlFWFBBVF9MSUJFWFBBVCA9IC1sZXhwYXQKKwkJUFJPR1JBTVMgKz0gZ2l0LWh0dHAtcHVzaCRYCisJZW5kaWYKIGVuZGlmCiAKIGlmbmRlZiBTSEVMTF9QQVRICkBAIC0xNzYsMzMgKzI0NSwzNSBAQAogaWZuZGVmIE5PX09QRU5TU0wKIAlMSUJfT0JKUyArPSBlcG9jaC5vCiAJT1BFTlNTTF9MSUJTU0wgPSAtbHNzbAorCWlmZGVmIE9QRU5TU0xESVIKKwkJIyBBZ2FpbiB0aGlzIG1heSBiZSBwcm9ibGVtYXRpYyAtLSBnY2MgZG9lcyBub3QgYWx3YXlzIHdhbnQgLVIuCisJCUFMTF9DRkxBR1MgKz0gLUkkKE9QRU5TU0xESVIpL2luY2x1ZGUKKwkJT1BFTlNTTF9MSU5LID0gLUwkKE9QRU5TU0xESVIpL2xpYiAtUiQoT1BFTlNTTERJUikvbGliCisJZWxzZQorCQlPUEVOU1NMX0xJTksgPQorCWVuZGlmCiBlbHNlCi0JREVGSU5FUyArPSAnLUROT19PUEVOU1NMJworCUFMTF9DRkxBR1MgKz0gLUROT19PUEVOU1NMCiAJTU9aSUxMQV9TSEExID0gMQogCU9QRU5TU0xfTElCU1NMID0KIGVuZGlmCiBpZmRlZiBORUVEU19TU0xfV0lUSF9DUllQVE8KLQlMSUJfNF9DUllQVE8gPSAtbGNyeXB0byAtbHNzbAorCUxJQl80X0NSWVBUTyA9ICQoT1BFTlNTTF9MSU5LKSAtbGNyeXB0byAtbHNzbAogZWxzZQotCUxJQl80X0NSWVBUTyA9IC1sY3J5cHRvCisJTElCXzRfQ1JZUFRPID0gJChPUEVOU1NMX0xJTkspIC1sY3J5cHRvCiBlbmRpZgogaWZkZWYgTkVFRFNfTElCSUNPTlYKLQlMSUJfNF9JQ09OViA9IC1saWNvbnYKKwlpZmRlZiBJQ09OVkRJUgorCQkjIEFnYWluIHRoaXMgbWF5IGJlIHByb2JsZW1hdGljIC0tIGdjYyBkb2VzIG5vdCBhbHdheXMgd2FudCAtUi4KKwkJQUxMX0NGTEFHUyArPSAtSSQoSUNPTlZESVIpL2luY2x1ZGUKKwkJSUNPTlZfTElOSyA9IC1MJChJQ09OVkRJUikvbGliIC1SJChJQ09OVkRJUikvbGliCisJZWxzZQorCQlJQ09OVl9MSU5LID0KKwllbmRpZgorCUxJQl80X0lDT05WID0gJChJQ09OVl9MSU5LKSAtbGljb252CiBlbHNlCiAJTElCXzRfSUNPTlYgPQogZW5kaWYKLWlmZGVmIE1PWklMTEFfU0hBMQotCVNIQTFfSEVBREVSID0gIm1vemlsbGEtc2hhMS9zaGExLmgiCi0JTElCX09CSlMgKz0gbW96aWxsYS1zaGExL3NoYTEubwotZWxzZQotCWlmZGVmIFBQQ19TSEExCi0JCVNIQTFfSEVBREVSID0gInBwYy9zaGExLmgiCi0JCUxJQl9PQkpTICs9IHBwYy9zaGExLm8gcHBjL3NoYTFwcGMubwotCWVsc2UKLQkJU0hBMV9IRUFERVIgPSA8b3BlbnNzbC9zaGEuaD4KLQkJTElCUyArPSAkKExJQl80X0NSWVBUTykKLQllbmRpZgotZW5kaWYKIGlmZGVmIE5FRURTX1NPQ0tFVAogCUxJQlMgKz0gLWxzb2NrZXQKIAlTSU1QTEVfTElCICs9IC1sc29ja2V0CkBAIC0yMTIsMTcgKzI4Myw0MyBAQAogCVNJTVBMRV9MSUIgKz0gLWxuc2wKIGVuZGlmCiBpZmRlZiBOT19TVFJDQVNFU1RSCi0JREVGSU5FUyArPSAtRHN0cmNhc2VzdHI9Z2l0c3RyY2FzZXN0cgorCUFMTF9DRkxBR1MgKz0gLURzdHJjYXNlc3RyPWdpdHN0cmNhc2VzdHIgLUROT19TVFJDQVNFU1RSPTEKIAlMSUJfT0JKUyArPSBjb21wYXQvc3RyY2FzZXN0ci5vCiBlbmRpZgoraWZkZWYgTk9fTU1BUAorCUFMTF9DRkxBR1MgKz0gLURtbWFwPWdpdGZha2VtbWFwIC1EbXVubWFwPWdpdGZha2VtdW5tYXAgLUROT19NTUFQCisJTElCX09CSlMgKz0gY29tcGF0L21tYXAubworZW5kaWYKK2lmZGVmIE5PX0lQVjYKKwlBTExfQ0ZMQUdTICs9IC1ETk9fSVBWNiAtRHNvY2thZGRyX3N0b3JhZ2U9c29ja2FkZHJfaW4KK2VuZGlmCiAKLURFRklORVMgKz0gJy1EU0hBMV9IRUFERVI9JChTSEExX0hFQURFUiknCitpZmRlZiBQUENfU0hBMQorCVNIQTFfSEVBREVSID0gInBwYy9zaGExLmgiCisJTElCX09CSlMgKz0gcHBjL3NoYTEubyBwcGMvc2hhMXBwYy5vCitlbHNlCitpZmRlZiBBUk1fU0hBMQorCVNIQTFfSEVBREVSID0gImFybS9zaGExLmgiCisJTElCX09CSlMgKz0gYXJtL3NoYTEubyBhcm0vc2hhMV9hcm0ubworZWxzZQoraWZkZWYgTU9aSUxMQV9TSEExCisJU0hBMV9IRUFERVIgPSAibW96aWxsYS1zaGExL3NoYTEuaCIKKwlMSUJfT0JKUyArPSBtb3ppbGxhLXNoYTEvc2hhMS5vCitlbHNlCisJU0hBMV9IRUFERVIgPSA8b3BlbnNzbC9zaGEuaD4KKwlMSUJTICs9ICQoTElCXzRfQ1JZUFRPKQorZW5kaWYKK2VuZGlmCitlbmRpZgorCitBTExfQ0ZMQUdTICs9IC1EU0hBMV9IRUFERVI9JChjYWxsIHNoZWxscXVvdGUsJChTSEExX0hFQURFUikpCiAKIFNDUklQVFMgPSAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpIFwKIAkgICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpIFwKIAkgICQocGF0c3Vic3QgJS5weSwlLCQoU0NSSVBUX1BZVEhPTikpIFwKLQkgIGdpdGsKKwkgIGdpdGsgZ2l0LWNoZXJyeS1waWNrCiAKK2V4cG9ydCBwcmVmaXggVEFSIElOU1RBTEwgREVTVERJUiBTSEVMTF9QQVRIIHRlbXBsYXRlX2RpcgogIyMjIEJ1aWxkIHJ1bGVzCiAKIGFsbDogJChQUk9HUkFNUykgJChTQ1JJUFRTKQpAQCAtMjMyLDU2ICszMjksNjggQEAKIAogZ2l0OiBnaXQuc2ggTWFrZWZpbGUKIAlybSAtZiAkQCsgJEAKLQlzZWQgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIDwkQC5zaCA+JEArCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChjYWxsIHNocSwkKFNIRUxMX1BBVEgpKXwnIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgLWUgJ3MvQEBYQEAvJChYKS9nJyBcCisJICAgICQoR0lUX0xJU1RfVFdFQUspIDwkQC5zaCA+JEArCiAJY2htb2QgK3ggJEArCiAJbXYgJEArICRACiAKICQoZmlsdGVyLW91dCBnaXQsJChwYXRzdWJzdCAlLnNoLCUsJChTQ1JJUFRfU0gpKSkgOiAlIDogJS5zaAogCXJtIC1mICRACi0Jc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIKXwnICRALnNoID4kQAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoY2FsbCBzaHEsJChTSEVMTF9QQVRIKSl8JyBcCisJICAgIC1lICdzL0BAR0lUX1ZFUlNJT05AQC8kKEdJVF9WRVJTSU9OKS9nJyBcCisJICAgICRALnNoID4kQAogCWNobW9kICt4ICRACiAKICQocGF0c3Vic3QgJS5wZXJsLCUsJChTQ1JJUFRfUEVSTCkpIDogJSA6ICUucGVybAogCXJtIC1mICRACi0Jc2VkIC1lICcxc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIKXwnICRALnBlcmwgPiRACisJc2VkIC1lICcxc3wjIS4qcGVybHwjISQoY2FsbCBzaHEsJChQRVJMX1BBVEgpKXwnIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJEAucGVybCA+JEAKIAljaG1vZCAreCAkQAogCiAkKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKSA6ICUgOiAlLnB5CiAJcm0gLWYgJEAKLQlzZWQgLWUgJzFzfCMhLipweXRob258IyEkKFBZVEhPTl9QQVRIKXwnIFwKLQkgICAgLWUgJ3N8QEBHSVRfUFlUSE9OX1BBVEhAQHwkKEdJVF9QWVRIT05fRElSKXxnJyBcCi0JCSRALnB5ID4kQAorCXNlZCAtZSAnMXN8IyEuKnB5dGhvbnwjISQoY2FsbCBzaHEsJChQWVRIT05fUEFUSCkpfCcgXAorCSAgICAtZSAnc3xAQEdJVF9QWVRIT05fUEFUSEBAfCQoY2FsbCBzaHEsJChHSVRfUFlUSE9OX0RJUikpfGcnIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJEAucHkgPiRACiAJY2htb2QgK3ggJEAKIAorZ2l0LWNoZXJyeS1waWNrOiBnaXQtcmV2ZXJ0CisJY3AgJDwgJEAKKwogJS5vOiAlLmMKIAkkKENDKSAtbyAkKi5vIC1jICQoQUxMX0NGTEFHUykgJDwKICUubzogJS5TCiAJJChDQykgLW8gJCoubyAtYyAkKEFMTF9DRkxBR1MpICQ8CiAKLWdpdC0lOiAlLm8gJChMSUJfRklMRSkKK2dpdC0lJFg6ICUubyAkKExJQl9GSUxFKQogCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpCiAKLWdpdC1tYWlsaW5mbyA6IFNJTVBMRV9MSUIgKz0gJChMSUJfNF9JQ09OVikKK2dpdC1tYWlsaW5mbyRYIDogU0lNUExFX0xJQiArPSAkKExJQl80X0lDT05WKQogJChTSU1QTEVfUFJPR1JBTVMpIDogJChMSUJfRklMRSkKLSQoU0lNUExFX1BST0dSQU1TKSA6IGdpdC0lIDogJS5vCiskKFNJTVBMRV9QUk9HUkFNUykgOiBnaXQtJSRYIDogJS5vCiAJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCX0ZJTEUpICQoU0lNUExFX0xJQikKIAotZ2l0LWh0dHAtZmV0Y2g6IGZldGNoLm8KLWdpdC1sb2NhbC1mZXRjaDogZmV0Y2gubwotZ2l0LXNzaC1mZXRjaDogcnNoLm8gZmV0Y2gubwotZ2l0LXNzaC11cGxvYWQ6IHJzaC5vCi1naXQtc3NoLXB1bGw6IHJzaC5vIGZldGNoLm8KLWdpdC1zc2gtcHVzaDogcnNoLm8KK2dpdC1odHRwLWZldGNoJFg6IGZldGNoLm8KK2dpdC1sb2NhbC1mZXRjaCRYOiBmZXRjaC5vCitnaXQtc3NoLWZldGNoJFg6IHJzaC5vIGZldGNoLm8KK2dpdC1zc2gtdXBsb2FkJFg6IHJzaC5vCitnaXQtc3NoLXB1bGwkWDogcnNoLm8gZmV0Y2gubworZ2l0LXNzaC1wdXNoJFg6IHJzaC5vCiAKLWdpdC1odHRwLWZldGNoOiBMSUJTICs9IC1sY3VybAotZ2l0LXJldi1saXN0OiBMSUJTICs9ICQoT1BFTlNTTF9MSUJTU0wpCitnaXQtaHR0cC1mZXRjaCRYOiBMSUJTICs9ICQoQ1VSTF9MSUJDVVJMKQorZ2l0LWh0dHAtcHVzaCRYOiBMSUJTICs9ICQoQ1VSTF9MSUJDVVJMKSAkKEVYUEFUX0xJQkVYUEFUKQorZ2l0LXJldi1saXN0JFg6IExJQlMgKz0gJChPUEVOU1NMX0xJQlNTTCkKIAogaW5pdC1kYi5vOiBpbml0LWRiLmMKIAkkKENDKSAtYyAkKEFMTF9DRkxBR1MpIFwKLQkJLURERUZBVUxUX0dJVF9URU1QTEFURV9ESVI9JyIkKHRlbXBsYXRlX2RpcikiJyAkKi5jCisJCS1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSQoY2FsbCBzaGVsbHF1b3RlLCIkKHRlbXBsYXRlX2RpcikiKSAkKi5jCiAKICQoTElCX09CSlMpOiAkKExJQl9IKQotJChwYXRzdWJzdCBnaXQtJSwlLm8sJChQUk9HUkFNUykpOiAkKExJQl9IKQorJChwYXRzdWJzdCBnaXQtJSRYLCUubywkKFBST0dSQU1TKSk6ICQoTElCX0gpCiAkKERJRkZfT0JKUyk6IGRpZmZjb3JlLmgKIAogJChMSUJfRklMRSk6ICQoTElCX09CSlMpCkBAIC0yOTYsMTAgKzQwNSwxMCBAQAogdGVzdDogYWxsCiAJJChNQUtFKSAtQyB0LyBhbGwKIAotdGVzdC1kYXRlOiB0ZXN0LWRhdGUuYyBkYXRlLm8KLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAIHRlc3QtZGF0ZS5jIGRhdGUubwordGVzdC1kYXRlJFg6IHRlc3QtZGF0ZS5jIGRhdGUubyBjdHlwZS5vCisJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCB0ZXN0LWRhdGUuYyBkYXRlLm8gY3R5cGUubwogCi10ZXN0LWRlbHRhOiB0ZXN0LWRlbHRhLmMgZGlmZi1kZWx0YS5vIHBhdGNoLWRlbHRhLm8KK3Rlc3QtZGVsdGEkWDogdGVzdC1kZWx0YS5jIGRpZmYtZGVsdGEubyBwYXRjaC1kZWx0YS5vCiAJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkXgogCiBjaGVjazoKQEAgLTMxMCwxMyArNDE5LDExIEBACiAjIyMgSW5zdGFsbGF0aW9uIHJ1bGVzCiAKIGluc3RhbGw6ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKLQkkKElOU1RBTEwpIC1kIC1tNzU1ICQoREVTVERJUikkKGJpbmRpcikKLQkkKElOU1RBTEwpICQoUFJPR1JBTVMpICQoU0NSSVBUUykgJChERVNURElSKSQoYmluZGlyKQotCSQoSU5TVEFMTCkgZ2l0LXJldmVydCAkKERFU1RESVIpJChiaW5kaXIpL2dpdC1jaGVycnktcGljawotCXNoIC4vY21kLXJlbmFtZS5zaCAkKERFU1RESVIpJChiaW5kaXIpCisJJChJTlNUQUxMKSAtZCAtbTc1NSAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJChiaW5kaXIpKQorCSQoSU5TVEFMTCkgJChQUk9HUkFNUykgJChTQ1JJUFRTKSAkKGNhbGwgc2hlbGxxdW90ZSwkKERFU1RESVIpJChiaW5kaXIpKQogCSQoTUFLRSkgLUMgdGVtcGxhdGVzIGluc3RhbGwKLQkkKElOU1RBTEwpIC1kIC1tNzU1ICQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKQotCSQoSU5TVEFMTCkgJChQWU1PRFVMRVMpICQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKQorCSQoSU5TVEFMTCkgLWQgLW03NTUgJChjYWxsIHNoZWxscXVvdGUsJChERVNURElSKSQoR0lUX1BZVEhPTl9ESVIpKQorCSQoSU5TVEFMTCkgJChQWU1PRFVMRVMpICQoY2FsbCBzaGVsbHF1b3RlLCQoREVTVERJUikkKEdJVF9QWVRIT05fRElSKSkKIAogaW5zdGFsbC1kb2M6CiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwKQEAgLTMzNCw3ICs0NDEsNyBAQAogCS4vZ2l0LXRhci10cmVlIEhFQUQgJChHSVRfVEFSTkFNRSkgPiAkKEdJVF9UQVJOQU1FKS50YXIKIAlAbWtkaXIgLXAgJChHSVRfVEFSTkFNRSkKIAlAY3AgZ2l0LWNvcmUuc3BlYyAkKEdJVF9UQVJOQU1FKQotCXRhciByZiAkKEdJVF9UQVJOQU1FKS50YXIgJChHSVRfVEFSTkFNRSkvZ2l0LWNvcmUuc3BlYworCSQoVEFSKSByZiAkKEdJVF9UQVJOQU1FKS50YXIgJChHSVRfVEFSTkFNRSkvZ2l0LWNvcmUuc3BlYwogCUBybSAtcmYgJChHSVRfVEFSTkFNRSkKIAlnemlwIC1mIC05ICQoR0lUX1RBUk5BTUUpLnRhcgogCkBAIC0zNDMsMjAgKzQ1MCwyMCBAQAogCiBkZWI6IGRpc3QKIAlybSAtcmYgJChHSVRfVEFSTkFNRSkKLQl0YXIgenhmICQoR0lUX1RBUk5BTUUpLnRhci5negorCSQoVEFSKSB6eGYgJChHSVRfVEFSTkFNRSkudGFyLmd6CiAJZHBrZy1zb3VyY2UgLWIgJChHSVRfVEFSTkFNRSkKIAljZCAkKEdJVF9UQVJOQU1FKSAmJiBmYWtlcm9vdCBkZWJpYW4vcnVsZXMgYmluYXJ5CiAKICMjIyBDbGVhbmluZyBydWxlcwogCiBjbGVhbjoKLQlybSAtZiAqLm8gbW96aWxsYS1zaGExLyoubyBwcGMvKi5vICQoUFJPR1JBTVMpICQoTElCX0ZJTEUpCisJcm0gLWYgKi5vIG1vemlsbGEtc2hhMS8qLm8gcHBjLyoubyBjb21wYXQvKi5vICQoUFJPR1JBTVMpICQoTElCX0ZJTEUpCiAJcm0gLWYgJChmaWx0ZXItb3V0IGdpdGssJChTQ1JJUFRTKSkKLQlybSAtZiBnaXQtY29yZS5zcGVjCisJcm0gLWYgZ2l0LWNvcmUuc3BlYyAqLnB5YyAqLnB5bwogCXJtIC1yZiAkKEdJVF9UQVJOQU1FKQogCXJtIC1mICQoR0lUX1RBUk5BTUUpLnRhci5neiBnaXQtY29yZV8kKEdJVF9WRVJTSU9OKS0qLnRhci5negotCXJtIC1mIGdpdC1jb3JlXyQoR0lUX1ZFUlNJT04pLSouZGViIGdpdC1jb3JlXyQoR0lUX1ZFUlNJT04pLSouZHNjCi0Jcm0gLWYgZ2l0LXRrXyQoR0lUX1ZFUlNJT04pLSouZGViCisJcm0gLWYgZ2l0LWNvcmVfJChHSVRfVkVSU0lPTiktKi5kc2MKKwlybSAtZiBnaXQtKl8kKEdJVF9WRVJTSU9OKS0qLmRlYgogCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbi8gY2xlYW4KLQkkKE1BS0UpIC1DIHRlbXBsYXRlcy8gY2xlYW4KKwkkKE1BS0UpIC1DIHRlbXBsYXRlcyBjbGVhbgogCSQoTUFLRSkgLUMgdC8gY2xlYW4KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA2YjM4YTdhLi40YTI2MTZiIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xMDQsOCArMTA0LDggQEAKIGRpcmVjdG9yeSB0cmVlLCBhbmQgcmVuYW1pbmcgYSBmaWxlIGRvZXMgbm90IGNoYW5nZSB0aGUgb2JqZWN0IHRoYXQKIGZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoIGluIGFueSB3YXkuCiAKLUEgYmxvYiBpcyB0eXBpY2FsbHkgY3JlYXRlZCB3aGVuIGxpbms6Z2l0LXVwZGF0ZS1pbmRleC5odG1sW2dpdC11cGRhdGUtaW5kZXhdCi1pcyBydW4sIGFuZCBpdHMgZGF0YSBjYW4gYmUgYWNjZXNzZWQgYnkgbGluazpnaXQtY2F0LWZpbGUuaHRtbFtnaXQtY2F0LWZpbGVdLgorQSBibG9iIGlzIHR5cGljYWxseSBjcmVhdGVkIHdoZW4gZ2l0bGluazpnaXQtdXBkYXRlLWluZGV4WzFdCitpcyBydW4sIGFuZCBpdHMgZGF0YSBjYW4gYmUgYWNjZXNzZWQgYnkgZ2l0bGluazpnaXQtY2F0LWZpbGVbMV0uCiAKIFRyZWUgT2JqZWN0CiB+fn5+fn5+fn5+fgpAQCAtMTQzLDkgKzE0Myw5IEBACiBub3RpY2luZyB0aGF0IHRoZSBibG9iIHN0YXllZCB0aGUgc2FtZS4gIEhvd2V2ZXIsIHJlbmFtZXMgd2l0aCBkYXRhCiBjaGFuZ2VzIG5lZWQgYSBzbWFydGVyICJkaWZmIiBpbXBsZW1lbnRhdGlvbi4KIAotQSB0cmVlIGlzIGNyZWF0ZWQgd2l0aCBsaW5rOmdpdC13cml0ZS10cmVlLmh0bWxbZ2l0LXdyaXRlLXRyZWVdIGFuZAotaXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGxpbms6Z2l0LWxzLXRyZWUuaHRtbFtnaXQtbHMtdHJlZV0uCi1Ud28gdHJlZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggbGluazpnaXQtZGlmZi10cmVlLmh0bWxbZ2l0LWRpZmYtdHJlZV0uCitBIHRyZWUgaXMgY3JlYXRlZCB3aXRoIGdpdGxpbms6Z2l0LXdyaXRlLXRyZWVbMV0gYW5kCitpdHMgZGF0YSBjYW4gYmUgYWNjZXNzZWQgYnkgZ2l0bGluazpnaXQtbHMtdHJlZVsxXS4KK1R3byB0cmVlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBnaXRsaW5rOmdpdC1kaWZmLXRyZWVbMV0uCiAKIENvbW1pdCBPYmplY3QKIH5+fn5+fn5+fn5+fn4KQEAgLTE2OSw4ICsxNjksOCBAQAogb2YgdGhlIHBhcmVudHMpLCBhbmQgZGVzY3JpYmluZyB0aGF0IG1ha2VzIG5vIHNlbnNlIGluIHRoaXMgaWRpb3RpYwogZmlsZSBtYW5hZ2VyLgogCi1BIGNvbW1pdCBpcyBjcmVhdGVkIHdpdGggbGluazpnaXQtY29tbWl0LXRyZWUuaHRtbFtnaXQtY29tbWl0LXRyZWVdIGFuZAotaXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGxpbms6Z2l0LWNhdC1maWxlLmh0bWxbZ2l0LWNhdC1maWxlXS4KK0EgY29tbWl0IGlzIGNyZWF0ZWQgd2l0aCBnaXRsaW5rOmdpdC1jb21taXQtdHJlZVsxXSBhbmQKK2l0cyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBieSBnaXRsaW5rOmdpdC1jYXQtZmlsZVsxXS4KIAogVHJ1c3QKIH5+fn5+CkBAIC0yMTUsMTAgKzIxNSwxMCBAQAogaW50ZWdyaXR5OyB0aGUgdHJ1c3QgZnJhbWV3b3JrIChhbmQgc2lnbmF0dXJlIHByb3Zpc2lvbiBhbmQKIHZlcmlmaWNhdGlvbikgaGFzIHRvIGNvbWUgZnJvbSBvdXRzaWRlLgogCi1BIHRhZyBpcyBjcmVhdGVkIHdpdGggbGluazpnaXQtbWt0YWcuaHRtbFtnaXQtbWt0YWddLAotaXRzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGJ5IGxpbms6Z2l0LWNhdC1maWxlLmh0bWxbZ2l0LWNhdC1maWxlXSwKK0EgdGFnIGlzIGNyZWF0ZWQgd2l0aCBnaXRsaW5rOmdpdC1ta3RhZ1sxXSwKK2l0cyBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBieSBnaXRsaW5rOmdpdC1jYXQtZmlsZVsxXSwKIGFuZCB0aGUgc2lnbmF0dXJlIGNhbiBiZSB2ZXJpZmllZCBieQotbGluazpnaXQtdmVyaWZ5LXRhZy5odG1sW2dpdC12ZXJpZnktdGFnXS4KK2dpdGxpbms6Z2l0LXZlcmlmeS10YWdbMV0uCiAKIAogVGhlICJpbmRleCIgYWthICJDdXJyZW50IERpcmVjdG9yeSBDYWNoZSIKQEAgLTI4Niw3ICsyODYsNyBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogWW91IHVwZGF0ZSB0aGUgaW5kZXggd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aXRoCi10aGUgbGluazpnaXQtdXBkYXRlLWluZGV4Lmh0bWxbZ2l0LXVwZGF0ZS1pbmRleF0gY29tbWFuZC4gIFlvdQordGhlIGdpdGxpbms6Z2l0LXVwZGF0ZS1pbmRleFsxXSBjb21tYW5kLiAgWW91CiBnZW5lcmFsbHkgdXBkYXRlIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBieSBqdXN0IHNwZWNpZnlpbmcgdGhlIGZpbGVuYW1lCiB5b3Ugd2FudCB0byB1cGRhdGUsIGxpa2Ugc286CiAKQEAgLTM5OSwxMiArMzk5LDUyIEBACiByZXN1bHQgdG8gdGhlIGZpbGUgYC5naXQvSEVBRGAsIHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzZWUgd2hhdCB0aGUKIGxhc3QgY29tbWl0dGVkIHN0YXRlIHdhcy4KIAorSGVyZSBpcyBhbiBBU0NJSSBhcnQgYnkgSm9uIExvZWxpZ2VyIHRoYXQgaWxsdXN0cmF0ZXMgaG93Cit2YXJpb3VzIHBpZWNlcyBmaXQgdG9nZXRoZXIuCisKKy0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICBjb21taXQtdHJlZQorICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBvYmoKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCBPYmplY3QgREIgfAorICAgICAgICAgICAgICAgICAgICB8ICBCYWNraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgICBTdG9yZSAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgIHdyaXRlLXRyZWUgIHwgICAgIHwKKyAgICAgICAgICAgICB0cmVlIG9iaiAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICByZWFkLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgdHJlZSBvYmoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgICBJbmRleCAgIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgImNhY2hlIiAgfAorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICB1cGRhdGUtaW5kZXggIF4KKyAgICAgICAgICAgICBibG9iIG9iaiAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgY2hlY2tvdXQtaW5kZXggLXUgIHwgICAgIHwgIGNoZWNrb3V0LWluZGV4CisgICAgICAgICAgICAgc3RhdCAgICAgIHwgICAgIHwgIGJsb2Igb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICBXb3JraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgRGlyZWN0b3J5IHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworCistLS0tLS0tLS0tLS0KKworCiA2KSBFeGFtaW5pbmcgdGhlIGRhdGEKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBZb3UgY2FuIGV4YW1pbmUgdGhlIGRhdGEgcmVwcmVzZW50ZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSBhbmQgdGhlCiBpbmRleCB3aXRoIHZhcmlvdXMgaGVscGVyIHRvb2xzLiBGb3IgZXZlcnkgb2JqZWN0LCB5b3UgY2FuIHVzZQotbGluazpnaXQtY2F0LWZpbGUuaHRtbFtnaXQtY2F0LWZpbGVdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKK2dpdGxpbms6Z2l0LWNhdC1maWxlWzFdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKIG9iamVjdDoKIAogCQlnaXQtY2F0LWZpbGUgLXQgPG9iamVjdG5hbWU+CmRpZmYgLS1naXQgYS9hcHBseS5jIGIvYXBwbHkuYwppbmRleCA5NjRkZjJkLi4zZTUzYjM0IDEwMDY0NAotLS0gYS9hcHBseS5jCisrKyBiL2FwcGx5LmMKQEAgLTUsMzUgKzUsMjggQEAKICAqCiAgKiBUaGlzIGFwcGxpZXMgcGF0Y2hlcyBvbiB0b3Agb2Ygc29tZSAoYXJiaXRyYXJ5KSB2ZXJzaW9uIG9mIHRoZSBTQ00uCiAgKgotICogTk9URSEgSXQgZG9lcyBhbGwgaXRzIHdvcmsgaW4gdGhlIGluZGV4IGZpbGUsIGFuZCBvbmx5IGNhcmVzIGFib3V0Ci0gKiB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGlmIHlvdSB0ZWxsIGl0IHRvICJtZXJnZSIgdGhlCi0gKiBwYXRjaCBhcHBseS4KLSAqCi0gKiBFdmVuIHdoZW4gbWVyZ2luZyBpdCBhbHdheXMgdGFrZXMgdGhlIHNvdXJjZSBmcm9tIHRoZSBpbmRleCwgYW5kCi0gKiB1c2VzIHRoZSB3b3JraW5nIHRyZWUgYXMgYSAiYnJhbmNoIiBmb3IgYSAzLXdheSBtZXJnZS4KICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8Zm5tYXRjaC5oPgogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAotLy8gV2UgZGVmYXVsdCB0byB0aGUgbWVyZ2UgYmVoYXZpb3VyLCBzaW5jZSB0aGF0J3Mgd2hhdCBtb3N0IHBlb3BsZSB3b3VsZAotLy8gZXhwZWN0LgotLy8KIC8vICAtLWNoZWNrIHR1cm5zIG9uIGNoZWNraW5nIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBtYXRjaGVzIHRoZQogLy8gICAgZmlsZXMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQsIGJ1dCBkb2Vzbid0IGFwcGx5IHRoZSBwYXRjaAogLy8gIC0tc3RhdCBkb2VzIGp1c3QgYSBkaWZmc3RhdCwgYW5kIGRvZXNuJ3QgYWN0dWFsbHkgYXBwbHkKLS8vICAtLXNob3ctZmlsZXMgc2hvd3MgdGhlIGRpcmVjdG9yeSBjaGFuZ2VzCisvLyAgLS1udW1zdGF0IGRvZXMgbnVtZXJpYyBkaWZmc3RhdCwgYW5kIGRvZXNuJ3QgYWN0dWFsbHkgYXBwbHkKKy8vICAtLWluZGV4LWluZm8gc2hvd3MgdGhlIG9sZCBhbmQgbmV3IGluZGV4IGluZm8gZm9yIHBhdGhzIGlmIGF2YWlsYWJsZS4KIC8vCi1zdGF0aWMgaW50IG1lcmdlX3BhdGNoID0gMTsKIHN0YXRpYyBpbnQgY2hlY2tfaW5kZXggPSAwOwogc3RhdGljIGludCB3cml0ZV9pbmRleCA9IDA7CiBzdGF0aWMgaW50IGRpZmZzdGF0ID0gMDsKK3N0YXRpYyBpbnQgbnVtc3RhdCA9IDA7CiBzdGF0aWMgaW50IHN1bW1hcnkgPSAwOwogc3RhdGljIGludCBjaGVjayA9IDA7CiBzdGF0aWMgaW50IGFwcGx5ID0gMTsKLXN0YXRpYyBpbnQgc2hvd19maWxlcyA9IDA7CitzdGF0aWMgaW50IHNob3dfaW5kZXhfaW5mbyA9IDA7CitzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwogc3RhdGljIGNvbnN0IGNoYXIgYXBwbHlfdXNhZ2VbXSA9Ci0iZ2l0LWFwcGx5IFstLW5vLW1lcmdlXSBbLS1zdGF0XSBbLS1zdW1tYXJ5XSBbLS1jaGVja10gWy0taW5kZXhdIFstLWFwcGx5XSBbLS1zaG93LWZpbGVzXSA8cGF0Y2g+Li4uIjsKKyJnaXQtYXBwbHkgWy0tc3RhdF0gWy0tbnVtc3RhdF0gWy0tc3VtbWFyeV0gWy0tY2hlY2tdIFstLWluZGV4XSBbLS1hcHBseV0gWy0taW5kZXgtaW5mb10gWy16XSA8cGF0Y2g+Li4uIjsKIAogLyoKICAqIEZvciAiZGlmZi1zdGF0IiBsaWtlIGJlaGF2aW91ciwgd2Uga2VlcCB0cmFjayBvZiB0aGUgYmlnZ2VzdCBjaGFuZ2UKQEAgLTY2LDYgKzU5LDggQEAKIAlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50czsKIAljaGFyICpyZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyByZXN1bHRzaXplOworCWNoYXIgb2xkX3NoYTFfcHJlZml4WzQxXTsKKwljaGFyIG5ld19zaGExX3ByZWZpeFs0MV07CiAJc3RydWN0IHBhdGNoICpuZXh0OwogfTsKIApAQCAtMTQyLDYgKzEzNywzNSBAQAogCWNvbnN0IGNoYXIgKnN0YXJ0ID0gbGluZTsKIAljaGFyICpuYW1lOwogCisJaWYgKCpsaW5lID09ICciJykgeworCQkvKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQorCQkgKiBodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWdpdCZtPTExMjkyNzMxNjQwODY5MCZ3PTIKKwkJICovCisJCW5hbWUgPSB1bnF1b3RlX2Nfc3R5bGUobGluZSwgTlVMTCk7CisJCWlmIChuYW1lKSB7CisJCQljaGFyICpjcCA9IG5hbWU7CisJCQl3aGlsZSAocF92YWx1ZSkgeworCQkJCWNwID0gc3RyY2hyKG5hbWUsICcvJyk7CisJCQkJaWYgKCFjcCkKKwkJCQkJYnJlYWs7CisJCQkJY3ArKzsKKwkJCQlwX3ZhbHVlLS07CisJCQl9CisJCQlpZiAoY3ApIHsKKwkJCQkvKiBuYW1lIGNhbiBsYXRlciBiZSBmcmVlZCwgc28gd2UgbmVlZAorCQkJCSAqIHRvIG1lbW1vdmUsIG5vdCBqdXN0IHJldHVybiBjcAorCQkJCSAqLworCQkJCW1lbW1vdmUobmFtZSwgY3AsIHN0cmxlbihjcCkgKyAxKTsKKwkJCQlmcmVlKGRlZik7CisJCQkJcmV0dXJuIG5hbWU7CisJCQl9CisJCQllbHNlIHsKKwkJCQlmcmVlKG5hbWUpOworCQkJCW5hbWUgPSBOVUxMOworCQkJfQorCQl9CisJfQorCiAJZm9yICg7OykgewogCQljaGFyIGMgPSAqbGluZTsKIApAQCAtMjMxLDM3ICsyNTUsMjkgQEAKICAqLwogc3RhdGljIGNoYXIgKmdpdGRpZmZfdmVyaWZ5X25hbWUoY29uc3QgY2hhciAqbGluZSwgaW50IGlzbnVsbCwgY2hhciAqb3JpZ19uYW1lLCBjb25zdCBjaGFyICpvbGRuZXcpCiB7Ci0JaW50IGxlbjsKLQljb25zdCBjaGFyICpuYW1lOwotCiAJaWYgKCFvcmlnX25hbWUgJiYgIWlzbnVsbCkKIAkJcmV0dXJuIGZpbmRfbmFtZShsaW5lLCBOVUxMLCAxLCAwKTsKIAotCW5hbWUgPSAiL2Rldi9udWxsIjsKLQlsZW4gPSA5OwogCWlmIChvcmlnX25hbWUpIHsKKwkJaW50IGxlbjsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJY2hhciAqYW5vdGhlcjsKIAkJbmFtZSA9IG9yaWdfbmFtZTsKIAkJbGVuID0gc3RybGVuKG5hbWUpOwogCQlpZiAoaXNudWxsKQogCQkJZGllKCJnaXQtYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiLCBuYW1lLCBsaW5lbnIpOwotCX0KLQotCWlmICgqbmFtZSA9PSAnLycpCi0JCWdvdG8gYWJzb2x1dGVfcGF0aDsKLQotCWZvciAoOzspIHsKLQkJY2hhciBjID0gKmxpbmUrKzsKLQkJaWYgKGMgPT0gJ1xuJykKLQkJCWJyZWFrOwotCQlpZiAoYyAhPSAnLycpCi0JCQljb250aW51ZTsKLWFic29sdXRlX3BhdGg6Ci0JCWlmIChtZW1jbXAobGluZSwgbmFtZSwgbGVuKSB8fCBsaW5lW2xlbl0gIT0gJ1xuJykKLQkJCWJyZWFrOworCQlhbm90aGVyID0gZmluZF9uYW1lKGxpbmUsIE5VTEwsIDEsIDApOworCQlpZiAoIWFub3RoZXIgfHwgbWVtY21wKGFub3RoZXIsIG5hbWUsIGxlbikpCisJCQlkaWUoImdpdC1hcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50ICVzIGZpbGVuYW1lIG9uIGxpbmUgJWQiLCBvbGRuZXcsIGxpbmVucik7CisJCWZyZWUoYW5vdGhlcik7CiAJCXJldHVybiBvcmlnX25hbWU7CiAJfQotCWRpZSgiZ2l0LWFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgJXMgZmlsZW5hbWUgb24gbGluZSAlZCIsIG9sZG5ldywgbGluZW5yKTsKLQlyZXR1cm4gTlVMTDsKKwllbHNlIHsKKwkJLyogZXhwZWN0ICIvZGV2L251bGwiICovCisJCWlmIChtZW1jbXAoIi9kZXYvbnVsbCIsIGxpbmUsIDkpIHx8IGxpbmVbOV0gIT0gJ1xuJykKKwkJCWRpZSgiZ2l0LWFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIsIGxpbmVucik7CisJCXJldHVybiBOVUxMOworCX0KIH0KIAogc3RhdGljIGludCBnaXRkaWZmX29sZG5hbWUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKQEAgLTM0NCw2ICszNjAsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnaXRkaWZmX2luZGV4KGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJLyogaW5kZXggbGluZSBpcyBOIGhleGFkZWNpbWFsLCAiLi4iLCBOIGhleGFkZWNpbWFsLAorCSAqIGFuZCBvcHRpb25hbCBzcGFjZSB3aXRoIG9jdGFsIG1vZGUuCisJICovCisJY29uc3QgY2hhciAqcHRyLCAqZW9sOworCWludCBsZW47CisKKwlwdHIgPSBzdHJjaHIobGluZSwgJy4nKTsKKwlpZiAoIXB0ciB8fCBwdHJbMV0gIT0gJy4nIHx8IDQwIDw9IHB0ciAtIGxpbmUpCisJCXJldHVybiAwOworCWxlbiA9IHB0ciAtIGxpbmU7CisJbWVtY3B5KHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgsIGxpbmUsIGxlbik7CisJcGF0Y2gtPm9sZF9zaGExX3ByZWZpeFtsZW5dID0gMDsKKworCWxpbmUgPSBwdHIgKyAyOworCXB0ciA9IHN0cmNocihsaW5lLCAnICcpOworCWVvbCA9IHN0cmNocihsaW5lLCAnXG4nKTsKKworCWlmICghcHRyIHx8IGVvbCA8IHB0cikKKwkJcHRyID0gZW9sOworCWxlbiA9IHB0ciAtIGxpbmU7CisKKwlpZiAoNDAgPD0gbGVuKQorCQlyZXR1cm4gMDsKKwltZW1jcHkocGF0Y2gtPm5ld19zaGExX3ByZWZpeCwgbGluZSwgbGVuKTsKKwlwYXRjaC0+bmV3X3NoYTFfcHJlZml4W2xlbl0gPSAwOworCWlmICgqcHRyID09ICcgJykKKwkJcGF0Y2gtPm5ld19tb2RlID0gcGF0Y2gtPm9sZF9tb2RlID0gc3RydG91bChwdHIrMSwgTlVMTCwgOCk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIGlzIG5vcm1hbCBmb3IgYSBkaWZmIHRoYXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmc6IHdlJ2xsIGZhbGwgdGhyb3VnaAogICogaW50byB0aGUgbmV4dCBkaWZmLiBUZWxsIHRoZSBwYXJzZXIgdG8gYnJlYWsgb3V0LgpAQCAtMzUzLDI5ICs0MDEsMTI0IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgY2hhciAqZ2l0X2hlYWRlcl9uYW1lKGNoYXIgKmxpbmUpCitzdGF0aWMgY29uc3QgY2hhciAqc3RvcF9hdF9zbGFzaChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsbGVuOyBpKyspIHsKKwkJaW50IGNoID0gbGluZVtpXTsKKwkJaWYgKGNoID09ICcvJykKKwkJCXJldHVybiBsaW5lICsgaTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRoaXMgaXMgdG8gZXh0cmFjdCB0aGUgc2FtZSBuYW1lIHRoYXQgYXBwZWFycyBvbiAiZGlmZiAtLWdpdCIKKyAqIGxpbmUuICBXZSBkbyBub3QgZmluZCBhbmQgcmV0dXJuIGFueXRoaW5nIGlmIGl0IGlzIGEgcmVuYW1lCisgKiBwYXRjaCwgYW5kIGl0IGlzIE9LIGJlY2F1c2Ugd2Ugd2lsbCBmaW5kIHRoZSBuYW1lIGVsc2V3aGVyZS4KKyAqIFdlIG5lZWQgdG8gcmVsaWFibHkgZmluZCBuYW1lIG9ubHkgd2hlbiBpdCBpcyBtb2RlLWNoYW5nZSBvbmx5LAorICogY3JlYXRpb24gb3IgZGVsZXRpb24gb2YgYW4gZW1wdHkgZmlsZS4gIEluIGFueSBvZiB0aGVzZSBjYXNlcywKKyAqIGJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIG5hbWUgdW5kZXIgYS8gYW5kIGIvIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShjaGFyICpsaW5lLCBpbnQgbGxlbikKIHsKIAlpbnQgbGVuOwotCWNoYXIgKm5hbWUsICpzZWNvbmQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpzZWNvbmQgPSBOVUxMOwogCi0JLyoKLQkgKiBGaW5kIHRoZSBmaXJzdCAnLycKLQkgKi8KLQluYW1lID0gbGluZTsKLQlmb3IgKDs7KSB7Ci0JCWNoYXIgYyA9ICpuYW1lKys7Ci0JCWlmIChjID09ICdcbicpCisJbGluZSArPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisJbGxlbiAtPSBzdHJsZW4oImRpZmYgLS1naXQgIik7CisKKwlpZiAoKmxpbmUgPT0gJyInKSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQljaGFyICpmaXJzdCA9IHVucXVvdGVfY19zdHlsZShsaW5lLCAmc2Vjb25kKTsKKwkJaWYgKCFmaXJzdCkKIAkJCXJldHVybiBOVUxMOwotCQlpZiAoYyA9PSAnLycpCi0JCQlicmVhazsKKworCQkvKiBhZHZhbmNlIHRvIHRoZSBmaXJzdCBzbGFzaCAqLworCQljcCA9IHN0b3BfYXRfc2xhc2goZmlyc3QsIHN0cmxlbihmaXJzdCkpOworCQlpZiAoIWNwIHx8IGNwID09IGZpcnN0KSB7CisJCQkvKiB3ZSBkbyBub3QgYWNjZXB0IGFic29sdXRlIHBhdGhzICovCisJCWZyZWVfZmlyc3RfYW5kX2ZhaWw6CisJCQlmcmVlKGZpcnN0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWxlbiA9IHN0cmxlbihjcCsxKTsKKwkJbWVtbW92ZShmaXJzdCwgY3ArMSwgbGVuKzEpOyAvKiBpbmNsdWRpbmcgTlVMICovCisKKwkJLyogc2Vjb25kIHBvaW50cyBhdCBvbmUgcGFzdCBjbG9zaW5nIGRxIG9mIG5hbWUuCisJCSAqIGZpbmQgdGhlIHNlY29uZCBuYW1lLgorCQkgKi8KKwkJd2hpbGUgKChzZWNvbmQgPCBsaW5lICsgbGxlbikgJiYgaXNzcGFjZSgqc2Vjb25kKSkKKwkJCXNlY29uZCsrOworCisJCWlmIChsaW5lICsgbGxlbiA8PSBzZWNvbmQpCisJCQlnb3RvIGZyZWVfZmlyc3RfYW5kX2ZhaWw7CisJCWlmICgqc2Vjb25kID09ICciJykgeworCQkJY2hhciAqc3AgPSB1bnF1b3RlX2Nfc3R5bGUoc2Vjb25kLCBOVUxMKTsKKwkJCWlmICghc3ApCisJCQkJZ290byBmcmVlX2ZpcnN0X2FuZF9mYWlsOworCQkJY3AgPSBzdG9wX2F0X3NsYXNoKHNwLCBzdHJsZW4oc3ApKTsKKwkJCWlmICghY3AgfHwgY3AgPT0gc3ApIHsKKwkJCWZyZWVfYm90aF9hbmRfZmFpbDoKKwkJCQlmcmVlKHNwKTsKKwkJCQlnb3RvIGZyZWVfZmlyc3RfYW5kX2ZhaWw7CisJCQl9CisJCQkvKiBUaGV5IG11c3QgbWF0Y2gsIG90aGVyd2lzZSBpZ25vcmUgKi8KKwkJCWlmIChzdHJjbXAoY3ArMSwgZmlyc3QpKQorCQkJCWdvdG8gZnJlZV9ib3RoX2FuZF9mYWlsOworCQkJZnJlZShzcCk7CisJCQlyZXR1cm4gZmlyc3Q7CisJCX0KKworCQkvKiB1bnF1b3RlZCBzZWNvbmQgKi8KKwkJY3AgPSBzdG9wX2F0X3NsYXNoKHNlY29uZCwgbGluZSArIGxsZW4gLSBzZWNvbmQpOworCQlpZiAoIWNwIHx8IGNwID09IHNlY29uZCkKKwkJCWdvdG8gZnJlZV9maXJzdF9hbmRfZmFpbDsKKwkJY3ArKzsKKwkJaWYgKGxpbmUgKyBsbGVuIC0gY3AgIT0gbGVuICsgMSB8fAorCQkgICAgbWVtY21wKGZpcnN0LCBjcCwgbGVuKSkKKwkJCWdvdG8gZnJlZV9maXJzdF9hbmRfZmFpbDsKKwkJcmV0dXJuIGZpcnN0OwogCX0KIAotCS8qCi0JICogV2UgZG9uJ3QgYWNjZXB0IGFic29sdXRlIHBhdGhzICgvZGV2L251bGwpIGFzIHBvc3NpYmx5IHZhbGlkCi0JICovCi0JaWYgKG5hbWUgPT0gbGluZSsxKQorCS8qIHVucXVvdGVkIGZpcnN0IG5hbWUgKi8KKwluYW1lID0gc3RvcF9hdF9zbGFzaChsaW5lLCBsbGVuKTsKKwlpZiAoIW5hbWUgfHwgbmFtZSA9PSBsaW5lKQogCQlyZXR1cm4gTlVMTDsKIAorCW5hbWUrKzsKKworCS8qIHNpbmNlIHRoZSBmaXJzdCBuYW1lIGlzIHVucXVvdGVkLCBhIGRxIGlmIGV4aXN0cyBtdXN0IGJlCisJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIG5hbWUuCisJICovCisJZm9yIChzZWNvbmQgPSBuYW1lOyBzZWNvbmQgPCBsaW5lICsgbGxlbjsgc2Vjb25kKyspIHsKKwkJaWYgKCpzZWNvbmQgPT0gJyInKSB7CisJCQljb25zdCBjaGFyICpjcCA9IHNlY29uZDsKKwkJCWNvbnN0IGNoYXIgKm5wOworCQkJY2hhciAqc3AgPSB1bnF1b3RlX2Nfc3R5bGUoc2Vjb25kLCBOVUxMKTsKKworCQkJaWYgKCFzcCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCW5wID0gc3RvcF9hdF9zbGFzaChzcCwgc3RybGVuKHNwKSk7CisJCQlpZiAoIW5wIHx8IG5wID09IHNwKSB7CisJCQlmcmVlX3NlY29uZF9hbmRfZmFpbDoKKwkJCQlmcmVlKHNwKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCW5wKys7CisJCQlsZW4gPSBzdHJsZW4obnApOworCQkJaWYgKGxlbiA8IGNwIC0gbmFtZSAmJgorCQkJICAgICFzdHJuY21wKG5wLCBuYW1lLCBsZW4pICYmCisJCQkgICAgaXNzcGFjZShuYW1lW2xlbl0pKSB7CisJCQkJLyogR29vZCAqLworCQkJCW1lbW1vdmUoc3AsIG5wLCBsZW4gKyAxKTsKKwkJCQlyZXR1cm4gc3A7CisJCQl9CisJCQlnb3RvIGZyZWVfc2Vjb25kX2FuZF9mYWlsOworCQl9CisJfQorCiAJLyoKIAkgKiBBY2NlcHQgYSBuYW1lIG9ubHkgaWYgaXQgc2hvd3MgdXAgdHdpY2UsIGV4YWN0bHkgdGhlIHNhbWUKIAkgKiBmb3JtLgpAQCAtNDIzLDcgKzU2Niw3IEBACiAJICogb3IgcmVtb3Zpbmcgb3IgYWRkaW5nIGVtcHR5IGZpbGVzKSwgc28gd2UgZ2V0CiAJICogdGhlIGRlZmF1bHQgbmFtZSBmcm9tIHRoZSBoZWFkZXIuCiAJICovCi0JcGF0Y2gtPmRlZl9uYW1lID0gZ2l0X2hlYWRlcl9uYW1lKGxpbmUgKyBzdHJsZW4oImRpZmYgLS1naXQgIikpOworCXBhdGNoLT5kZWZfbmFtZSA9IGdpdF9oZWFkZXJfbmFtZShsaW5lLCBsZW4pOwogCiAJbGluZSArPSBsZW47CiAJc2l6ZSAtPSBsZW47CkBAIC00NDgsNiArNTkxLDcgQEAKIAkJCXsgInJlbmFtZSB0byAiLCBnaXRkaWZmX3JlbmFtZWRzdCB9LAogCQkJeyAic2ltaWxhcml0eSBpbmRleCAiLCBnaXRkaWZmX3NpbWlsYXJpdHkgfSwKIAkJCXsgImRpc3NpbWlsYXJpdHkgaW5kZXggIiwgZ2l0ZGlmZl9kaXNzaW1pbGFyaXR5IH0sCisJCQl7ICJpbmRleCAiLCBnaXRkaWZmX2luZGV4IH0sCiAJCQl7ICIiLCBnaXRkaWZmX3VucmVjb2duaXplZCB9LAogCQl9OwogCQlpbnQgaTsKQEAgLTY3Niw3ICs4MjAsMTAgQEAKICAgICAgICAgICAgICAgICAvKiBXZSBhbGxvdyAiXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIi4gRGVwZW5kaW5nCiAgICAgICAgICAgICAgICAgICogb24gbG9jYWxlIHNldHRpbmdzIHdoZW4gdGhlIHBhdGNoIHdhcyBwcm9kdWNlZCB3ZQogICAgICAgICAgICAgICAgICAqIGRvbid0IGtub3cgd2hhdCB0aGlzIGxpbmUgbG9va3MgbGlrZS4gVGhlIG9ubHkKLSAgICAgICAgICAgICAgICAgKiB0aGluZyB3ZSBkbyBrbm93IGlzIHRoYXQgaXQgYmVnaW5zIHdpdGggIlwgIi4gKi8KKyAgICAgICAgICAgICAgICAgKiB0aGluZyB3ZSBkbyBrbm93IGlzIHRoYXQgaXQgYmVnaW5zIHdpdGggIlwgIi4KKwkJICogQ2hlY2tpbmcgZm9yIDEyIGlzIGp1c3QgZm9yIHNhbml0eSBjaGVjayAtLSBhbnkKKwkJICogbDEwbiBvZiAiXCBObyBuZXdsaW5lLi4uIiBpcyBhdCBsZWFzdCB0aGF0IGxvbmcuCisJCSAqLwogCQljYXNlICdcXCc6CiAJCQlpZiAobGVuIDwgMTIgfHwgbWVtY21wKGxpbmUsICJcXCAiLCAyKSkKIAkJCQlyZXR1cm4gLTE7CkBAIC03MjMsNiArODcwLDE2IEBACiAJcmV0dXJuIG9mZnNldDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbWV0YWRhdGFfY2hhbmdlcyhzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybglwYXRjaC0+aXNfcmVuYW1lID4gMCB8fAorCQlwYXRjaC0+aXNfY29weSA+IDAgfHwKKwkJcGF0Y2gtPmlzX25ldyA+IDAgfHwKKwkJcGF0Y2gtPmlzX2RlbGV0ZSB8fAorCQkocGF0Y2gtPm9sZF9tb2RlICYmIHBhdGNoLT5uZXdfbW9kZSAmJgorCQkgcGF0Y2gtPm9sZF9tb2RlICE9IHBhdGNoLT5uZXdfbW9kZSk7Cit9CisKIHN0YXRpYyBpbnQgcGFyc2VfY2h1bmsoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCiB7CiAJaW50IGhkcnNpemUsIHBhdGNoc2l6ZTsKQEAgLTczMyw2ICs4OTAsOSBAQAogCiAJcGF0Y2hzaXplID0gcGFyc2Vfc2luZ2xlX3BhdGNoKGJ1ZmZlciArIG9mZnNldCArIGhkcnNpemUsIHNpemUgLSBvZmZzZXQgLSBoZHJzaXplLCBwYXRjaCk7CiAKKwlpZiAoIXBhdGNoc2l6ZSAmJiAhbWV0YWRhdGFfY2hhbmdlcyhwYXRjaCkpCisJCWRpZSgicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIsIGxpbmVucik7CisKIAlyZXR1cm4gb2Zmc2V0ICsgaGRyc2l6ZSArIHBhdGNoc2l6ZTsKIH0KIApAQCAtNzQzLDExICs5MDMsMTggQEAKIHsKIAljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKIAljaGFyICpuYW1lID0gcGF0Y2gtPm5ld19uYW1lOworCWNoYXIgKnFuYW1lID0gTlVMTDsKIAlpbnQgbGVuLCBtYXgsIGFkZCwgZGVsLCB0b3RhbDsKIAogCWlmICghbmFtZSkKIAkJbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKIAorCWlmICgwIDwgKGxlbiA9IHF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgTlVMTCwgMCkpKSB7CisJCXFuYW1lID0geG1hbGxvYyhsZW4gKyAxKTsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBxbmFtZSwgTlVMTCwgMCk7CisJCW5hbWUgPSBxbmFtZTsKKwl9CisKIAkvKgogCSAqICJzY2FsZSIgdGhlIGZpbGVuYW1lCiAJICovCkBAIC03ODUsNiArOTUyLDggQEAKIAlwcmludGYoIiAlcyUtKnMgfCU1ZCAlLipzJS4qc1xuIiwgcHJlZml4LAogCQlsZW4sIG5hbWUsIHBhdGNoLT5saW5lc19hZGRlZCArIHBhdGNoLT5saW5lc19kZWxldGVkLAogCQlhZGQsIHBsdXNlcywgZGVsLCBtaW51c2VzKTsKKwlpZiAocW5hbWUpCisJCWZyZWUocW5hbWUpOwogfQogCiBzdGF0aWMgaW50IHJlYWRfb2xkX2RhdGEoc3RydWN0IHN0YXQgKnN0LCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTEwMTcsMTcgKzExODYsMzkgQEAKIAogCWlmIChvbGRfbmFtZSkgewogCQlpbnQgY2hhbmdlZDsKKwkJaW50IHN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsICZzdCk7CiAKLQkJaWYgKGxzdGF0KG9sZF9uYW1lLCAmc3QpIDwgMCkKLQkJCXJldHVybiBlcnJvcigiJXM6ICVzIiwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJCWlmIChjaGVja19pbmRleCkgewogCQkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG9sZF9uYW1lLCBzdHJsZW4ob2xkX25hbWUpKTsKIAkJCWlmIChwb3MgPCAwKQotCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4Iiwgb2xkX25hbWUpOworCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IiwKKwkJCQkJICAgICBvbGRfbmFtZSk7CisJCQlpZiAoc3RhdF9yZXQgPCAwKSB7CisJCQkJc3RydWN0IGNoZWNrb3V0IGNvc3RhdGU7CisJCQkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCQkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBvbGRfbmFtZSwKKwkJCQkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQkvKiBjaGVja291dCAqLworCQkJCWNvc3RhdGUuYmFzZV9kaXIgPSAiIjsKKwkJCQljb3N0YXRlLmJhc2VfZGlyX2xlbiA9IDA7CisJCQkJY29zdGF0ZS5mb3JjZSA9IDA7CisJCQkJY29zdGF0ZS5xdWlldCA9IDA7CisJCQkJY29zdGF0ZS5ub3RfbmV3ID0gMDsKKwkJCQljb3N0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOworCQkJCWlmIChjaGVja291dF9lbnRyeShhY3RpdmVfY2FjaGVbcG9zXSwKKwkJCQkJCSAgICZjb3N0YXRlKSB8fAorCQkJCSAgICBsc3RhdChvbGRfbmFtZSwgJnN0KSkKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCiAJCQljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChhY3RpdmVfY2FjaGVbcG9zXSwgJnN0KTsKIAkJCWlmIChjaGFuZ2VkKQotCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4Iiwgb2xkX25hbWUpOworCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IiwKKwkJCQkJICAgICBvbGRfbmFtZSk7CiAJCX0KKwkJZWxzZSBpZiAoc3RhdF9yZXQgPCAwKQorCQkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBvbGRfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwogCQlpZiAocGF0Y2gtPmlzX25ldyA8IDApCiAJCQlwYXRjaC0+aXNfbmV3ID0gMDsKIAkJc3Quc3RfbW9kZSA9IG50b2hsKGNyZWF0ZV9jZV9tb2RlKHN0LnN0X21vZGUpKTsKQEAgLTEwNzksMzIgKzEyNzAsMzggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfZmlsZShpbnQgYywgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW5saW5lIGludCBpc19udWxsX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlwcmludGYoIiVjICVvICVzXG4iLCBjLCBtb2RlLCBuYW1lKTsKKwlyZXR1cm4gIW1lbWNtcChzaGExLCBudWxsX3NoYTEsIDIwKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19maWxlX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhfbGlzdChzdHJ1Y3QgcGF0Y2ggKmxpc3QpCiB7Ci0JZm9yICg7cGF0Y2ggOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7Ci0JCWlmIChwYXRjaC0+aXNfcmVuYW1lKSB7Ci0JCQlzaG93X2ZpbGUoJy0nLCBwYXRjaC0+b2xkX21vZGUsIHBhdGNoLT5vbGRfbmFtZSk7Ci0JCQlzaG93X2ZpbGUoJysnLCBwYXRjaC0+bmV3X21vZGUsIHBhdGNoLT5uZXdfbmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAocGF0Y2gtPmlzX2NvcHkgfHwgcGF0Y2gtPmlzX25ldykgewotCQkJc2hvd19maWxlKCcrJywgcGF0Y2gtPm5ld19tb2RlLCBwYXRjaC0+bmV3X25hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHBhdGNoLT5pc19kZWxldGUpIHsKLQkJCXNob3dfZmlsZSgnLScsIHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChwYXRjaC0+b2xkX21vZGUgJiYgcGF0Y2gtPm5ld19tb2RlICYmIHBhdGNoLT5vbGRfbW9kZSAhPSBwYXRjaC0+bmV3X21vZGUpIHsKLQkJCXByaW50ZigiTSAlbzolbyAlc1xuIiwgcGF0Y2gtPm9sZF9tb2RlLCBwYXRjaC0+bmV3X21vZGUsIHBhdGNoLT5vbGRfbmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcmludGYoIk0gJW8gJXNcbiIsIHBhdGNoLT5vbGRfbW9kZSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwlzdHJ1Y3QgcGF0Y2ggKnBhdGNoOworCisJLyogT25jZSB3ZSBzdGFydCBzdXBwb3J0aW5nIHRoZSByZXZlcnNlIHBhdGNoLCBpdCBtYXkgYmUKKwkgKiB3b3J0aCBzaG93aW5nIHRoZSBuZXcgc2hhMSBwcmVmaXgsIGJ1dCB1bnRpbCB0aGVuLi4uCisJICovCisJZm9yIChwYXRjaCA9IGxpc3Q7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfcHRyOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpuYW1lOworCisJCW5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJCWlmIChwYXRjaC0+aXNfbmV3KQorCQkJc2hhMV9wdHIgPSBudWxsX3NoYTE7CisJCWVsc2UgaWYgKGdldF9zaGExKHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgsIHNoYTEpKQorCQkJZGllKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAoJXMpLiIsCisJCQkgICAgbmFtZSk7CisJCWVsc2UKKwkJCXNoYTFfcHRyID0gc2hhMTsKKworCQlwcmludGYoIiUwNm8gJXMJIixwYXRjaC0+b2xkX21vZGUsIHNoYTFfdG9faGV4KHNoYTFfcHRyKSk7CisJCWlmIChsaW5lX3Rlcm1pbmF0aW9uICYmIHF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgTlVMTCwgMCkpCisJCQlxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIHN0ZG91dCwgMCk7CisJCWVsc2UKKwkJCWZwdXRzKG5hbWUsIHN0ZG91dCk7CisJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CiAJfQogfQogCkBAIC0xMTIyLDYgKzEzMTksMjAgQEAKIAlwcmludGYoIiAlZCBmaWxlcyBjaGFuZ2VkLCAlZCBpbnNlcnRpb25zKCspLCAlZCBkZWxldGlvbnMoLSlcbiIsIGZpbGVzLCBhZGRzLCBkZWxzKTsKIH0KIAorc3RhdGljIHZvaWQgbnVtc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJZm9yICggOyBwYXRjaDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQljb25zdCBjaGFyICpuYW1lOworCQluYW1lID0gcGF0Y2gtPm9sZF9uYW1lID8gcGF0Y2gtPm9sZF9uYW1lIDogcGF0Y2gtPm5ld19uYW1lOworCQlwcmludGYoIiVkXHQlZFx0IiwgcGF0Y2gtPmxpbmVzX2FkZGVkLCBwYXRjaC0+bGluZXNfZGVsZXRlZCk7CisJCWlmIChsaW5lX3Rlcm1pbmF0aW9uICYmIHF1b3RlX2Nfc3R5bGUobmFtZSwgTlVMTCwgTlVMTCwgMCkpCisJCQlxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIHN0ZG91dCwgMCk7CisJCWVsc2UKKwkJCWZwdXRzKG5hbWUsIHN0ZG91dCk7CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBzaG93X2ZpbGVfbW9kZV9uYW1lKGNvbnN0IGNoYXIgKm5ld2RlbGV0ZSwgdW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaWYgKG1vZGUpCkBAIC0xMjA3LDEyICsxNDE4LDE2IEBACiAJaWYgKGxpbmVzID4gbWF4X2NoYW5nZSkKIAkJbWF4X2NoYW5nZSA9IGxpbmVzOwogCWlmIChwYXRjaC0+b2xkX25hbWUpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOwogCQlpZiAobGVuID4gbWF4X2xlbikKIAkJCW1heF9sZW4gPSBsZW47CiAJfQogCWlmIChwYXRjaC0+bmV3X25hbWUpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+bmV3X25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOwogCQlpZiAobGVuID4gbWF4X2xlbikKIAkJCW1heF9sZW4gPSBsZW47CiAJfQpAQCAtMTQ0NSwxMiArMTY2MCwxNSBAQAogCQkJZGllKCJVbmFibGUgdG8gd3JpdGUgbmV3IGNhY2hlZmlsZSIpOwogCX0KIAotCWlmIChzaG93X2ZpbGVzKQotCQlzaG93X2ZpbGVfbGlzdChsaXN0KTsKKwlpZiAoc2hvd19pbmRleF9pbmZvKQorCQlzaG93X2luZGV4X2xpc3QobGlzdCk7CiAKIAlpZiAoZGlmZnN0YXQpCiAJCXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKIAorCWlmIChudW1zdGF0KQorCQludW1zdGF0X3BhdGNoX2xpc3QobGlzdCk7CisKIAlpZiAoc3VtbWFyeSkKIAkJc3VtbWFyeV9wYXRjaF9saXN0KGxpc3QpOwogCkBAIC0xNDc5LDE2ICsxNjk3LDE2IEBACiAJCQlleGNsdWRlcyA9IHg7CiAJCQljb250aW51ZTsKIAkJfQotCQkvKiBORUVEU1dPUks6IHRoaXMgZG9lcyBub3QgZG8gYW55dGhpbmcgYXQgdGhpcyBtb21lbnQuICovCi0JCWlmICghc3RyY21wKGFyZywgIi0tbm8tbWVyZ2UiKSkgewotCQkJbWVyZ2VfcGF0Y2ggPSAwOwotCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0IikpIHsKIAkJCWFwcGx5ID0gMDsKIAkJCWRpZmZzdGF0ID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tbnVtc3RhdCIpKSB7CisJCQlhcHBseSA9IDA7CisJCQludW1zdGF0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi0tc3VtbWFyeSIpKSB7CiAJCQlhcHBseSA9IDA7CiAJCQlzdW1tYXJ5ID0gMTsKQEAgLTE1MDcsOCArMTcyNSwxMyBAQAogCQkJYXBwbHkgPSAxOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LWZpbGVzIikpIHsKLQkJCXNob3dfZmlsZXMgPSAxOworCQlpZiAoIXN0cmNtcChhcmcsICItLWluZGV4LWluZm8iKSkgeworCQkJYXBwbHkgPSAwOworCQkJc2hvd19pbmRleF9pbmZvID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi16IikpIHsKKwkJCWxpbmVfdGVybWluYXRpb24gPSAwOwogCQkJY29udGludWU7CiAJCX0KIAkJZmQgPSBvcGVuKGFyZywgT19SRE9OTFkpOwpkaWZmIC0tZ2l0IGEvYXJtL3NoYTEuYyBiL2FybS9zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiMWEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FybS9zaGExLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIFNIQS0xIGltcGxlbWVudGF0aW9uIG9wdGltaXplZCBmb3IgQVJNCisgKgorICogQ29weXJpZ2h0OiAgIChDKSAyMDA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENyZWF0ZWQ6ICAgICBTZXB0ZW1iZXIgMTcsIDIwMDUKKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAic2hhMS5oIgorCitleHRlcm4gdm9pZCBzaGFfdHJhbnNmb3JtKHVpbnQzMl90ICpoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1aW50MzJfdCAqVyk7CisKK3ZvaWQgU0hBMV9Jbml0KFNIQV9DVFggKmMpCit7CisJYy0+bGVuID0gMDsKKwljLT5oYXNoWzBdID0gMHg2NzQ1MjMwMTsKKwljLT5oYXNoWzFdID0gMHhlZmNkYWI4OTsKKwljLT5oYXNoWzJdID0gMHg5OGJhZGNmZTsKKwljLT5oYXNoWzNdID0gMHgxMDMyNTQ3NjsKKwljLT5oYXNoWzRdID0gMHhjM2QyZTFmMDsKK30KKwordm9pZCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdWludDMyX3Qgd29ya3NwYWNlWzgwXTsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKwl1bnNpZ25lZCBsb25nIGRvbmU7CisKKwlwYXJ0aWFsID0gYy0+bGVuICYgMHgzZjsKKwljLT5sZW4gKz0gbjsKKwlpZiAoKHBhcnRpYWwgKyBuKSA+PSA2NCkgeworCQlpZiAocGFydGlhbCkgeworCQkJZG9uZSA9IDY0IC0gcGFydGlhbDsKKwkJCW1lbWNweShjLT5idWZmZXIgKyBwYXJ0aWFsLCBwLCBkb25lKTsKKwkJCXNoYV90cmFuc2Zvcm0oYy0+aGFzaCwgYy0+YnVmZmVyLCB3b3Jrc3BhY2UpOworCQkJcGFydGlhbCA9IDA7CisJCX0gZWxzZQorCQkJZG9uZSA9IDA7CisJCXdoaWxlIChuID49IGRvbmUgKyA2NCkgeworCQkJc2hhX3RyYW5zZm9ybShjLT5oYXNoLCBwICsgZG9uZSwgd29ya3NwYWNlKTsKKwkJCWRvbmUgKz0gNjQ7CisJCX0KKwl9IGVsc2UKKwkJZG9uZSA9IDA7CisJaWYgKG4gLSBkb25lKQorCQltZW1jcHkoYy0+YnVmZmVyICsgcGFydGlhbCwgcCArIGRvbmUsIG4gLSBkb25lKTsKK30KKwordm9pZCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIFNIQV9DVFggKmMpCit7CisJdWludDY0X3QgYml0bGVuOworCXVpbnQzMl90IGJpdGxlbl9oaSwgYml0bGVuX2xvOyAKKwl1bnNpZ25lZCBpbnQgaSwgb2Zmc2V0LCBwYWRsZW47CisJdW5zaWduZWQgY2hhciBiaXRzWzhdOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbNjRdID0geyAweDgwLCB9OworCisJYml0bGVuID0gYy0+bGVuIDw8IDM7CisJb2Zmc2V0ID0gYy0+bGVuICYgMHgzZjsKKwlwYWRsZW4gPSAoKG9mZnNldCA8IDU2KSA/IDU2IDogKDY0ICsgNTYpKSAtIG9mZnNldDsKKwlTSEExX1VwZGF0ZShjLCBwYWRkaW5nLCBwYWRsZW4pOworCisJYml0bGVuX2hpID0gYml0bGVuID4+IDMyOworCWJpdGxlbl9sbyA9IGJpdGxlbiAmIDB4ZmZmZmZmZmY7CisJYml0c1swXSA9IGJpdGxlbl9oaSA+PiAyNDsKKwliaXRzWzFdID0gYml0bGVuX2hpID4+IDE2OworCWJpdHNbMl0gPSBiaXRsZW5faGkgPj4gODsKKwliaXRzWzNdID0gYml0bGVuX2hpOworCWJpdHNbNF0gPSBiaXRsZW5fbG8gPj4gMjQ7CisJYml0c1s1XSA9IGJpdGxlbl9sbyA+PiAxNjsKKwliaXRzWzZdID0gYml0bGVuX2xvID4+IDg7CisJYml0c1s3XSA9IGJpdGxlbl9sbzsKKwlTSEExX1VwZGF0ZShjLCBiaXRzLCA4KTsgCisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXVpbnQzMl90IHYgPSBjLT5oYXNoW2ldOworCQloYXNoWzBdID0gdiA+PiAyNDsKKwkJaGFzaFsxXSA9IHYgPj4gMTY7CisJCWhhc2hbMl0gPSB2ID4+IDg7CisJCWhhc2hbM10gPSB2OworCQloYXNoICs9IDQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJtL3NoYTEuaCBiL2FybS9zaGExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1MjY0NgotLS0gL2Rldi9udWxsCisrKyBiL2FybS9zaGExLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIFNIQS0xIGltcGxlbWVudGF0aW9uIG9wdGltaXplZCBmb3IgQVJNCisgKgorICogQ29weXJpZ2h0OgkoQykgMjAwNSBieSBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKiBDcmVhdGVkOglTZXB0ZW1iZXIgMTcsIDIwMDUKKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgc3RydWN0IHNoYV9jb250ZXh0IHsKKwl1aW50NjRfdCBsZW47CisJdWludDMyX3QgaGFzaFs1XTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07Cit9IFNIQV9DVFg7CisKK3ZvaWQgU0hBMV9Jbml0KFNIQV9DVFggKmMpOwordm9pZCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pOwordm9pZCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIFNIQV9DVFggKmMpOwpkaWZmIC0tZ2l0IGEvYXJtL3NoYTFfYXJtLlMgYi9hcm0vc2hhMV9hcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTkyZDIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJtL3NoYTFfYXJtLlMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiAgU0hBIHRyYW5zZm9ybSBvcHRpbWl6ZWQgZm9yIEFSTQorICoKKyAqICBDb3B5cmlnaHQ6CShDKSAyMDA1IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqICBDcmVhdGVkOglTZXB0ZW1iZXIgMTcsIDIwMDUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKwkudGV4dAorCS5nbG9ibAlzaGFfdHJhbnNmb3JtCisKKy8qCisgKiB2b2lkIHNoYV90cmFuc2Zvcm0odWludDMyX3QgKmhhc2gsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVpbnQzMl90ICpXKTsKKyAqCisgKiBub3RlOiB0aGUgImRhdGEiIHBvaW50ZXIgbWF5IGJlIHVuYWxpZ25lZC4KKyAqLworCitzaGFfdHJhbnNmb3JtOgorCisJc3RtZmQJc3AhLCB7cjQgLSByOCwgbHJ9CisKKwlAIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCUAgICAgICAgICBXW2ldID0gbnRvaGwoKCh1aW50MzJfdCAqKWRhdGEpW2ldKTsgKi8KKworI2lmZGVmIF9fQVJNRUJfXworCW1vdglyNCwgcjAKKwltb3YJcjAsIHIyCisJbW92CXIyLCAjNjQKKwlibAltZW1jcHkKKwltb3YJcjIsIHIwCisJbW92CXIwLCByNAorI2Vsc2UKKwltb3YJcjMsIHIyCisJbW92CWxyLCAjMTYKKzE6CWxkcmIJcjQsIFtyMV0sICMxCisJbGRyYglyNSwgW3IxXSwgIzEKKwlsZHJiCXI2LCBbcjFdLCAjMQorCWxkcmIJcjcsIFtyMV0sICMxCisJc3VicwlsciwgbHIsICMxCisJb3JyCXI1LCByNSwgcjQsIGxzbCAjOAorCW9ycglyNiwgcjYsIHI1LCBsc2wgIzgKKwlvcnIJcjcsIHI3LCByNiwgbHNsICM4CisJc3RyCXI3LCBbcjNdLCAjNAorCWJuZQkxYgorI2VuZGlmCisKKwlAIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCUAgICAgICAgICBXW2krMTZdID0gcm9yKFdbaSsxM10gXiBXW2krOF0gXiBXW2krMl0gXiBXW2ldLCAzMSk7CisKKwlzdWIJcjMsIHIyLCAjNAorCW1vdglsciwgIzY0CisyOglsZHIJcjQsIFtyMywgIzRdIQorCXN1YnMJbHIsIGxyLCAjMQorCWxkcglyNSwgW3IzLCAjOF0KKwlsZHIJcjYsIFtyMywgIzMyXQorCWxkcglyNywgW3IzLCAjNTJdCisJZW9yCXI0LCByNCwgcjUKKwllb3IJcjQsIHI0LCByNgorCWVvcglyNCwgcjQsIHI3CisJbW92CXI0LCByNCwgcm9yICMzMQorCXN0cglyNCwgW3IzLCAjNjRdCisJYm5lCTJiCisKKwkvKgorCSAqIFRoZSBTSEEgZnVuY3Rpb25zIGFyZToKKwkgKgorCSAqIGYxKEIsQyxEKSA9IChEIF4gKEIgJiAoQyBeIEQpKSkKKwkgKiBmMihCLEMsRCkgPSAoQiBeIEMgXiBEKQorCSAqIGYzKEIsQyxEKSA9ICgoQiAmIEMpIHwgKEQgJiAoQiB8IEMpKSkKKwkgKgorCSAqIFRoZW4gdGhlIHN1Yi1ibG9ja3MgYXJlIHByb2Nlc3NlZCBhcyBmb2xsb3dzOgorCSAqCisJICogQScgPSByb3IoQSwgMjcpICsgZihCLEMsRCkgKyBFICsgSyArICpXKysKKwkgKiBCJyA9IEEKKwkgKiBDJyA9IHJvcihCLCAyKQorCSAqIEQnID0gQworCSAqIEUnID0gRAorCSAqCisJICogV2UgdGhlcmVmb3JlIHVucm9sbCBlYWNoIGxvb3AgNSB0aW1lcyB0byBhdm9pZCByZWdpc3RlciBzaHVmZmxpbmcuCisJICogQWxzbyB0aGUgcm9yIGZvciBDIChhbmQgYWxzbyBEIGFuZCBFIHdoaWNoIGFyZSBzdWNjZXNzaXZlbHlkZXJpdmVkCisJICogZnJvbSBpdCkgaXMgYXBwbGllZCBpbiBwbGFjZSB0byBjdXQgb24gYW4gYWRkaXRpb25hbCBtb3YgaW5zbiBmb3IKKwkgKiBlYWNoIHJvdW5kLgorCSAqLworCisJLm1hY3JvCXNoYV9mMSwgQSwgQiwgQywgRCwgRQorCWxkcglyMywgW3IyXSwgIzQKKwllb3IJaXAsIFxDLCBcRAorCWFkZAlcRSwgcjEsIFxFLCByb3IgIzIKKwlhbmQJaXAsIFxCLCBpcCwgcm9yICMyCisJYWRkCVxFLCBcRSwgXEEsIHJvciAjMjcKKwllb3IJaXAsIGlwLCBcRCwgcm9yICMyCisJYWRkCVxFLCBcRSwgcjMKKwlhZGQJXEUsIFxFLCBpcAorCS5lbmRtCisKKwkubWFjcm8Jc2hhX2YyLCBBLCBCLCBDLCBELCBFCisJbGRyCXIzLCBbcjJdLCAjNAorCWFkZAlcRSwgcjEsIFxFLCByb3IgIzIKKwllb3IJaXAsIFxCLCBcQywgcm9yICMyCisJYWRkCVxFLCBcRSwgXEEsIHJvciAjMjcKKwllb3IJaXAsIGlwLCBcRCwgcm9yICMyCisJYWRkCVxFLCBcRSwgcjMKKwlhZGQJXEUsIFxFLCBpcAorCS5lbmRtCisKKwkubWFjcm8Jc2hhX2YzLCBBLCBCLCBDLCBELCBFCisJbGRyCXIzLCBbcjJdLCAjNAorCWFkZAlcRSwgcjEsIFxFLCByb3IgIzIKKwlvcnIJaXAsIFxCLCBcQywgcm9yICMyCisJYWRkCVxFLCBcRSwgXEEsIHJvciAjMjcKKwlhbmQJaXAsIGlwLCBcRCwgcm9yICMyCisJYWRkCVxFLCBcRSwgcjMKKwlhbmQJcjMsIFxCLCBcQywgcm9yICMyCisJb3JyCWlwLCBpcCwgcjMKKwlhZGQJXEUsIFxFLCBpcAorCS5lbmRtCisKKwlsZG1pYQlyMCwge3I0IC0gcjh9CisKKwltb3YJbHIsICM0CisJbGRyCXIxLCAuTF9zaGFfSyArIDAKKworCS8qIGFkanVzdCBpbml0aWFsIHZhbHVlcyAqLworCW1vdglyNiwgcjYsIHJvciAjMzAKKwltb3YJcjcsIHI3LCByb3IgIzMwCisJbW92CXI4LCByOCwgcm9yICMzMAorCiszOglzdWJzCWxyLCBsciwgIzEKKwlzaGFfZjEJcjQsIHI1LCByNiwgcjcsIHI4CisJc2hhX2YxCXI4LCByNCwgcjUsIHI2LCByNworCXNoYV9mMQlyNywgcjgsIHI0LCByNSwgcjYKKwlzaGFfZjEJcjYsIHI3LCByOCwgcjQsIHI1CisJc2hhX2YxCXI1LCByNiwgcjcsIHI4LCByNAorCWJuZQkzYgorCisJbGRyCXIxLCAuTF9zaGFfSyArIDQKKwltb3YJbHIsICM0CisKKzQ6CXN1YnMJbHIsIGxyLCAjMQorCXNoYV9mMglyNCwgcjUsIHI2LCByNywgcjgKKwlzaGFfZjIJcjgsIHI0LCByNSwgcjYsIHI3CisJc2hhX2YyCXI3LCByOCwgcjQsIHI1LCByNgorCXNoYV9mMglyNiwgcjcsIHI4LCByNCwgcjUKKwlzaGFfZjIJcjUsIHI2LCByNywgcjgsIHI0CisJYm5lCTRiCisKKwlsZHIJcjEsIC5MX3NoYV9LICsgOAorCW1vdglsciwgIzQKKworNToJc3VicwlsciwgbHIsICMxCisJc2hhX2YzCXI0LCByNSwgcjYsIHI3LCByOAorCXNoYV9mMwlyOCwgcjQsIHI1LCByNiwgcjcKKwlzaGFfZjMJcjcsIHI4LCByNCwgcjUsIHI2CisJc2hhX2YzCXI2LCByNywgcjgsIHI0LCByNQorCXNoYV9mMwlyNSwgcjYsIHI3LCByOCwgcjQKKwlibmUJNWIKKworCWxkcglyMSwgLkxfc2hhX0sgKyAxMgorCW1vdglsciwgIzQKKworNjoJc3VicwlsciwgbHIsICMxCisJc2hhX2YyCXI0LCByNSwgcjYsIHI3LCByOAorCXNoYV9mMglyOCwgcjQsIHI1LCByNiwgcjcKKwlzaGFfZjIJcjcsIHI4LCByNCwgcjUsIHI2CisJc2hhX2YyCXI2LCByNywgcjgsIHI0LCByNQorCXNoYV9mMglyNSwgcjYsIHI3LCByOCwgcjQKKwlibmUJNmIKKworCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgaXAsIGxyfQorCWFkZAlyNCwgcjEsIHI0CisJYWRkCXI1LCByMiwgcjUKKwlhZGQJcjYsIHIzLCByNiwgcm9yICMyCisJYWRkCXI3LCBpcCwgcjcsIHJvciAjMgorCWFkZAlyOCwgbHIsIHI4LCByb3IgIzIKKwlzdG1pYQlyMCwge3I0IC0gcjh9CisKKwlsZG1mZAlzcCEsIHtyNCAtIHI4LCBwY30KKworLkxfc2hhX0s6CisJLndvcmQJMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNgorCmRpZmYgLS1naXQgYS9jYWNoZS5oIGIvY2FjaGUuaAppbmRleCAxZDk5ZDY4Li42NzdjNmFjIDEwMDY0NAotLS0gYS9jYWNoZS5oCisrKyBiL2NhY2hlLmgKQEAgLTExLDcgKzExLDkgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmbmRlZiBOT19NTUFQCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbmRpZgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTEzNiw2ICsxMzgsNyBAQAogI2RlZmluZSBJTkRFWF9FTlZJUk9OTUVOVCAiR0lUX0lOREVYX0ZJTEUiCiAjZGVmaW5lIEdSQUZUX0VOVklST05NRU5UICJHSVRfR1JBRlRfRklMRSIKIAorZXh0ZXJuIGNoYXIgKmdldF9naXRfZGlyKHZvaWQpOwogZXh0ZXJuIGNoYXIgKmdldF9vYmplY3RfZGlyZWN0b3J5KHZvaWQpOwogZXh0ZXJuIGNoYXIgKmdldF9yZWZzX2RpcmVjdG9yeSh2b2lkKTsKIGV4dGVybiBjaGFyICpnZXRfaW5kZXhfZmlsZSh2b2lkKTsKQEAgLTE0Myw5ICsxNDYsOSBAQAogCiAjZGVmaW5lIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCAiR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMiCiAKLWV4dGVybiBjb25zdCBjaGFyICoqZ2V0X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwgY2hhciAqKnBhdGhzcGVjKTsKK2V4dGVybiBjb25zdCBjaGFyICoqZ2V0X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKTsKIGV4dGVybiBjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5KHZvaWQpOwotZXh0ZXJuIGNoYXIgKnByZWZpeF9wYXRoKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGxlbiwgY2hhciAqcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqcHJlZml4X3BhdGgoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLCBjb25zdCBjaGFyICpwYXRoKTsKIAogI2RlZmluZSBhbGxvY19ucih4KSAoKCh4KSsxNikqMy8yKQogCkBAIC0xNTgsMTEgKzE2MSwxMyBAQAogI2RlZmluZSBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLIDQJLyogT2sgdG8gc2tpcCBERiBjb25mbGljdCBjaGVja3MgKi8KIGV4dGVybiBpbnQgYWRkX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBvcHRpb24pOwogZXh0ZXJuIGludCByZW1vdmVfY2FjaGVfZW50cnlfYXQoaW50IHBvcyk7Ci1leHRlcm4gaW50IHJlbW92ZV9maWxlX2Zyb21fY2FjaGUoY2hhciAqcGF0aCk7CitleHRlcm4gaW50IHJlbW92ZV9maWxlX2Zyb21fY2FjaGUoY29uc3QgY2hhciAqcGF0aCk7CiBleHRlcm4gaW50IGNlX3NhbWVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYik7CiBleHRlcm4gaW50IGNlX21hdGNoX3N0YXQoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KTsKK2V4dGVybiBpbnQgY2VfbW9kaWZpZWQoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KTsKIGV4dGVybiBpbnQgY2VfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOwogZXh0ZXJuIGludCBpbmRleF9mZCh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIHN0cnVjdCBzdGF0ICpzdCwgaW50IHdyaXRlX29iamVjdCwgY29uc3QgY2hhciAqdHlwZSk7CitleHRlcm4gaW50IGluZGV4X3BhdGgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgd3JpdGVfb2JqZWN0KTsKIGV4dGVybiB2b2lkIGZpbGxfc3RhdF9jYWNoZV9pbmZvKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCk7CiAKIHN0cnVjdCBjYWNoZV9maWxlIHsKQEAgLTE3Myw2ICsxNzgsOCBAQAogZXh0ZXJuIGludCBjb21taXRfaW5kZXhfZmlsZShzdHJ1Y3QgY2FjaGVfZmlsZSAqKTsKIGV4dGVybiB2b2lkIHJvbGxiYWNrX2luZGV4X2ZpbGUoc3RydWN0IGNhY2hlX2ZpbGUgKik7CiAKK2V4dGVybiBpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQ7CisKICNkZWZpbmUgTVRJTUVfQ0hBTkdFRAkweDAwMDEKICNkZWZpbmUgQ1RJTUVfQ0hBTkdFRAkweDAwMDIKICNkZWZpbmUgT1dORVJfQ0hBTkdFRAkweDAwMDQKQEAgLTE4Nyw2ICsxOTQsOCBAQAogZXh0ZXJuIGNoYXIgKnNoYTFfZmlsZV9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGNoYXIgKnNoYTFfcGFja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogZXh0ZXJuIGNoYXIgKnNoYTFfcGFja19pbmRleF9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZpbmRfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQpOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKIAogaW50IGdpdF9ta3N0ZW1wKGNoYXIgKnBhdGgsIHNpemVfdCBuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSk7CiAKQEAgLTIxNSw2ICsyMjQsNyBAQAogZXh0ZXJuIGludCB3cml0ZV9zaGExX2Zyb21fZmQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBjaGFyICpidWZmZXIsCiAJCQkgICAgICBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpidWZwb3NuKTsKIGV4dGVybiBpbnQgd3JpdGVfc2hhMV90b19mZChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBtb3ZlX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjaGFyICpmaWxlbmFtZSk7CiAKIGV4dGVybiBpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgaGFzX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKQEAgLTIyNiw2ICsyMzYsMTAgQEAKIGV4dGVybiBpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CS8qIHN0YXRpYyBidWZmZXIgcmVzdWx0ISAqLworZXh0ZXJuIGludCByZWFkX3JlZihjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gY29uc3QgY2hhciAqcmVzb2x2ZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50KTsKK2V4dGVybiBpbnQgY3JlYXRlX3N5bXJlZihjb25zdCBjaGFyICpnaXRfSEVBRCwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIpOworZXh0ZXJuIGludCB2YWxpZGF0ZV9zeW1yZWYoY29uc3QgY2hhciAqZ2l0X0hFQUQpOwogCiAvKiBHZW5lcmFsIGhlbHBlciBmdW5jdGlvbnMgKi8KIGV4dGVybiB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKmVycikgTk9SRVRVUk47CkBAIC0yNDEsNyArMjU1LDcgQEAKIAkJCQkJdW5zaWduZWQgY2hhciAqc2hhMV9yZXQpOwogCiBjb25zdCBjaGFyICpzaG93X2RhdGUodW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdGltZXpvbmUpOwotdm9pZCBwYXJzZV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpOworaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSk7CiB2b2lkIGRhdGVzdGFtcChjaGFyICpidWYsIGludCBidWZzaXplKTsKIAogZXh0ZXJuIGludCBzZXR1cF9pZGVudCh2b2lkKTsKQEAgLTI5OSw2ICszMTMsNyBAQAogCXZvaWQgKnBhY2tfYmFzZTsKIAl1bnNpZ25lZCBpbnQgcGFja19sYXN0X3VzZWQ7CiAJdW5zaWduZWQgaW50IHBhY2tfdXNlX2NudDsKKwlpbnQgcGFja19sb2NhbDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNoYXIgcGFja19uYW1lWzBdOyAvKiBzb21ldGhpbmcgbGlrZSAiLmdpdC9vYmplY3RzL3BhY2sveHh4eHgucGFjayIgKi8KIH0gKnBhY2tlZF9naXQ7CkBAIC0zMjQsNyArMzM5LDggQEAKIGV4dGVybiBpbnQgbWF0Y2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKmRzdCwgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwKIAkJICAgICAgaW50IG5yX3JlZnNwZWMsIGNoYXIgKipyZWZzcGVjLCBpbnQgYWxsKTsKIGV4dGVybiBpbnQgZ2V0X2FjayhpbnQgZmQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKTsKLWV4dGVybiBzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhpbnQgaW4sIHN0cnVjdCByZWYgKipsaXN0LCBpbnQgbnJfbWF0Y2gsIGNoYXIgKiptYXRjaCk7CitleHRlcm4gc3RydWN0IHJlZiAqKmdldF9yZW1vdGVfaGVhZHMoaW50IGluLCBzdHJ1Y3QgcmVmICoqbGlzdCwgaW50IG5yX21hdGNoLCBjaGFyICoqbWF0Y2gsIGludCBpZ25vcmVfZnVubnkpOworZXh0ZXJuIGludCBzZXJ2ZXJfc3VwcG9ydHMoY29uc3QgY2hhciAqZmVhdHVyZSk7CiAKIGV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleF9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCkBAIC0zMzgsNyArMzU0LDcgQEAKIAogZXh0ZXJuIGludCB1c2VfcGFja2VkX2dpdChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKIGV4dGVybiB2b2lkIHVudXNlX3BhY2tlZF9naXQoc3RydWN0IHBhY2tlZF9naXQgKik7Ci1leHRlcm4gc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNoYXIgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY2hhciAqLCBpbnQsIGludCk7CiBleHRlcm4gaW50IG51bV9wYWNrZWRfb2JqZWN0cyhjb25zdCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCk7CiBleHRlcm4gaW50IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKiwgaW50LCB1bnNpZ25lZCBjaGFyKik7CiBleHRlcm4gaW50IGZpbmRfcGFja19lbnRyeV9vbmUoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgcGFja19lbnRyeSAqLCBzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKQEAgLTM0OCw0ICszNjQsNTUgQEAKIC8qIER1bWIgc2VydmVycyBzdXBwb3J0ICovCiBleHRlcm4gaW50IHVwZGF0ZV9zZXJ2ZXJfaW5mbyhpbnQpOwogCisjaWZkZWYgTk9fTU1BUAorCisjaWZuZGVmIFBST1RfUkVBRAorI2RlZmluZSBQUk9UX1JFQUQgMQorI2RlZmluZSBQUk9UX1dSSVRFIDIKKyNkZWZpbmUgTUFQX1BSSVZBVEUgMQorI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCopLTEpCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgKmdpdGZha2VtbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCAsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpOworZXh0ZXJuIGludCBnaXRmYWtlbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKTsKKworI2VuZGlmCisKK3R5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbik7CitleHRlcm4gaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworI2RlZmluZSBNQVhfR0lUTkFNRSAoMTAwMCkKK2V4dGVybiBjaGFyIGdpdF9kZWZhdWx0X2VtYWlsW01BWF9HSVROQU1FXTsKK2V4dGVybiBjaGFyIGdpdF9kZWZhdWx0X25hbWVbTUFYX0dJVE5BTUVdOworCisvKiBTYW5lIGN0eXBlIC0gbm8gbG9jYWxlLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgY2hhcnMgKi8KKyN1bmRlZiBpc3NwYWNlCisjdW5kZWYgaXNkaWdpdAorI3VuZGVmIGlzYWxwaGEKKyN1bmRlZiBpc2FsbnVtCisjdW5kZWYgdG9sb3dlcgorI3VuZGVmIHRvdXBwZXIKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XTsKKyNkZWZpbmUgR0lUX1NQQUNFIDB4MDEKKyNkZWZpbmUgR0lUX0RJR0lUIDB4MDIKKyNkZWZpbmUgR0lUX0FMUEhBIDB4MDQKKyNkZWZpbmUgc2FuZV9pc3Rlc3QoeCxtYXNrKSAoKHNhbmVfY3R5cGVbKHVuc2lnbmVkIGNoYXIpKHgpXSAmIChtYXNrKSkgIT0gMCkKKyNkZWZpbmUgaXNzcGFjZSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9TUEFDRSkKKyNkZWZpbmUgaXNkaWdpdCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9ESUdJVCkKKyNkZWZpbmUgaXNhbHBoYSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9BTFBIQSkKKyNkZWZpbmUgaXNhbG51bSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9BTFBIQSB8IEdJVF9ESUdJVCkKKyNkZWZpbmUgdG9sb3dlcih4KSBzYW5lX2Nhc2UoKHVuc2lnbmVkIGNoYXIpKHgpLCAweDIwKQorI2RlZmluZSB0b3VwcGVyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHNhbmVfY2FzZShpbnQgeCwgaW50IGhpZ2gpCit7CisJaWYgKHNhbmVfaXN0ZXN0KHgsIEdJVF9BTFBIQSkpCisJCXggPSAoeCAmIH4weDIwKSB8IGhpZ2g7CisJcmV0dXJuIHg7Cit9CisKK2V4dGVybiBpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKTsKICNlbmRpZiAvKiBDQUNIRV9IICovCmRpZmYgLS1naXQgYS9jaGVjay1yZWYtZm9ybWF0LmMgYi9jaGVjay1yZWYtZm9ybWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhZGIzZAotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrLXJlZi1mb3JtYXQuYwpAQCAtMCwwICsxLDE3IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJaWYgKGFjICE9IDIpCisJCXVzYWdlKCJnaXQtY2hlY2stcmVmLWZvcm1hdCByZWZuYW1lIik7CisJaWYgKGNoZWNrX3JlZl9mb3JtYXQoYXZbMV0pKQorCQlleGl0KDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY2hlY2tvdXQtaW5kZXguYyBiL2NoZWNrb3V0LWluZGV4LmMKaW5kZXggZjMyNTEzYy4uZGFiMzc3OCAxMDA2NDQKLS0tIGEvY2hlY2tvdXQtaW5kZXguYworKysgYi9jaGVja291dC1pbmRleC5jCkBAIC02MywxNSArNjMsMjAgQEAKIAogc3RhdGljIGludCBjaGVja291dF9hbGwodm9pZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZXJycyA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yIDsgaSsrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCWlmIChjZV9zdGFnZShjZSkpCiAJCQljb250aW51ZTsKIAkJaWYgKGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUpIDwgMCkKLQkJCXJldHVybiAtMTsKKwkJCWVycnMrKzsKIAl9CisJaWYgKGVycnMpCisJCS8qIHdlIGhhdmUgYWxyZWFkeSBkb25lIG91ciBlcnJvciByZXBvcnRpbmcuCisJCSAqIGV4aXQgd2l0aCB0aGUgc2FtZSBjb2RlIGFzIGRpZSgpLgorCQkgKi8KKwkJZXhpdCgxMjgpOwogCXJldHVybiAwOwogfQogCkBAIC04Miw4ICs4Nyw5IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKLQlpbnQgaSwgZm9yY2VfZmlsZW5hbWUgPSAwOworCWludCBpOwogCWludCBuZXdmZCA9IC0xOworCWludCBhbGwgPSAwOwogCiAJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKIAkJZGllKCJpbnZhbGlkIGNhY2hlIik7CkBAIC05MSw1OCArOTcsNzAgQEAKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKLQkJaWYgKCFmb3JjZV9maWxlbmFtZSkgewotCQkJaWYgKCFzdHJjbXAoYXJnLCAiLWEiKSkgewotCQkJCWNoZWNrb3V0X2FsbCgpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewotCQkJCWZvcmNlX2ZpbGVuYW1lID0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICghc3RyY21wKGFyZywgIi1mIikpIHsKLQkJCQlzdGF0ZS5mb3JjZSA9IDE7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoIXN0cmNtcChhcmcsICItcSIpKSB7Ci0JCQkJc3RhdGUucXVpZXQgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSkgewotCQkJCXN0YXRlLm5vdF9uZXcgPSAxOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCFzdHJjbXAoYXJnLCAiLXUiKSkgewotCQkJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOwotCQkJCWlmIChuZXdmZCA8IDApCi0JCQkJCW5ld2ZkID0gaG9sZF9pbmRleF9maWxlX2Zvcl91cGRhdGUKLQkJCQkJCSgmY2FjaGVfZmlsZSwKLQkJCQkJCSBnZXRfaW5kZXhfZmlsZSgpKTsKLQkJCQlpZiAobmV3ZmQgPCAwKQotCQkJCQlkaWUoImNhbm5vdCBvcGVuIGluZGV4LmxvY2sgZmlsZS4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmICghbWVtY21wKGFyZywgIi0tcHJlZml4PSIsIDkpKSB7Ci0JCQkJc3RhdGUuYmFzZV9kaXIgPSBhcmcrOTsKLQkJCQlzdGF0ZS5iYXNlX2Rpcl9sZW4gPSBzdHJsZW4oc3RhdGUuYmFzZV9kaXIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGFyZ1swXSA9PSAnLScpCi0JCQkJdXNhZ2UoY2hlY2tvdXRfY2FjaGVfdXNhZ2UpOworCisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOwogCQl9Ci0JCWlmIChzdGF0ZS5iYXNlX2Rpcl9sZW4pIHsKLQkJCS8qIHdoZW4gLS1wcmVmaXggaXMgc3BlY2lmaWVkIHdlIGRvIG5vdAotCQkJICogd2FudCB0byB1cGRhdGUgY2FjaGUuCi0JCQkgKi8KLQkJCWlmIChzdGF0ZS5yZWZyZXNoX2NhY2hlKSB7Ci0JCQkJY2xvc2UobmV3ZmQpOyBuZXdmZCA9IC0xOwotCQkJCXJvbGxiYWNrX2luZGV4X2ZpbGUoJmNhY2hlX2ZpbGUpOwotCQkJfQotCQkJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDA7CisJCWlmICghc3RyY21wKGFyZywgIi1hIikgfHwgIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQlhbGwgPSAxOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLWYiKSB8fCAhc3RyY21wKGFyZywgIi0tZm9yY2UiKSkgeworCQkJc3RhdGUuZm9yY2UgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLXEiKSB8fCAhc3RyY21wKGFyZywgIi0tcXVpZXQiKSkgeworCQkJc3RhdGUucXVpZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSB8fCAhc3RyY21wKGFyZywgIi0tbm8tY3JlYXRlIikpIHsKKwkJCXN0YXRlLm5vdF9uZXcgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLXUiKSB8fCAhc3RyY21wKGFyZywgIi0taW5kZXgiKSkgeworCQkJc3RhdGUucmVmcmVzaF9jYWNoZSA9IDE7CisJCQlpZiAobmV3ZmQgPCAwKQorCQkJCW5ld2ZkID0gaG9sZF9pbmRleF9maWxlX2Zvcl91cGRhdGUKKwkJCQkJKCZjYWNoZV9maWxlLAorCQkJCQkgZ2V0X2luZGV4X2ZpbGUoKSk7CisJCQlpZiAobmV3ZmQgPCAwKQorCQkJCWRpZSgiY2Fubm90IG9wZW4gaW5kZXgubG9jayBmaWxlLiIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFtZW1jbXAoYXJnLCAiLS1wcmVmaXg9IiwgOSkpIHsKKwkJCXN0YXRlLmJhc2VfZGlyID0gYXJnKzk7CisJCQlzdGF0ZS5iYXNlX2Rpcl9sZW4gPSBzdHJsZW4oc3RhdGUuYmFzZV9kaXIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFyZ1swXSA9PSAnLScpCisJCQl1c2FnZShjaGVja291dF9jYWNoZV91c2FnZSk7CisJCWJyZWFrOworCX0KKworCWlmIChzdGF0ZS5iYXNlX2Rpcl9sZW4pIHsKKwkJLyogd2hlbiAtLXByZWZpeCBpcyBzcGVjaWZpZWQgd2UgZG8gbm90CisJCSAqIHdhbnQgdG8gdXBkYXRlIGNhY2hlLgorCQkgKi8KKwkJaWYgKHN0YXRlLnJlZnJlc2hfY2FjaGUpIHsKKwkJCWNsb3NlKG5ld2ZkKTsgbmV3ZmQgPSAtMTsKKwkJCXJvbGxiYWNrX2luZGV4X2ZpbGUoJmNhY2hlX2ZpbGUpOworCQl9CisJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAwOworCX0KKworCS8qIENoZWNrIG91dCBuYW1lZCBmaWxlcyBmaXJzdCAqLworCWZvciAoIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmIChhbGwpCisJCQlkaWUoImdpdC1jaGVja291dC1pbmRleDogZG9uJ3QgbWl4ICctLWFsbCcgYW5kIGV4cGxpY2l0IGZpbGVuYW1lcyIpOwogCQljaGVja291dF9maWxlKGFyZyk7CiAJfQogCisJaWYgKGFsbCkKKwkJY2hlY2tvdXRfYWxsKCk7CisKIAlpZiAoMCA8PSBuZXdmZCAmJgogCSAgICAod3JpdGVfY2FjaGUobmV3ZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAogCSAgICAgY29tbWl0X2luZGV4X2ZpbGUoJmNhY2hlX2ZpbGUpKSkKZGlmZiAtLWdpdCBhL2Nsb25lLXBhY2suYyBiL2Nsb25lLXBhY2suYwppbmRleCA0OTgyMGM2Li45NjA5MjE5IDEwMDY0NAotLS0gYS9jbG9uZS1wYWNrLmMKKysrIGIvY2xvbmUtcGFjay5jCkBAIC0zLDggKzMsOCBAQAogI2luY2x1ZGUgInBrdC1saW5lLmgiCiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KIAotc3RhdGljIGludCBxdWlldDsKLXN0YXRpYyBjb25zdCBjaGFyIGNsb25lX3BhY2tfdXNhZ2VbXSA9ICJnaXQtY2xvbmUtcGFjayBbLXFdIFstLWV4ZWM9PGdpdC11cGxvYWQtcGFjaz5dIFs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8aGVhZHM+XSoiOworc3RhdGljIGNvbnN0IGNoYXIgY2xvbmVfcGFja191c2FnZVtdID0KKyJnaXQtY2xvbmUtcGFjayBbLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+XSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPGhlYWRzPl0qIjsKIHN0YXRpYyBjb25zdCBjaGFyICpleGVjID0gImdpdC11cGxvYWQtcGFjayI7CiAKIHN0YXRpYyB2b2lkIGNsb25lX2hhbmRzaGFrZShpbnQgZmRbMl0sIHN0cnVjdCByZWYgKnJlZikKQEAgLTM0LDYgKzM0LDEyIEBACiAJaW50IGZkOwogCWNoYXIgKmhleDsKIAorCWlmICghc3RybmNtcChyZWYtPm5hbWUsICJyZWZzLyIsIDUpICYmCisJICAgIGNoZWNrX3JlZl9mb3JtYXQocmVmLT5uYW1lICsgNSkpIHsKKwkJZXJyb3IoInJlZnVzaW5nIHRvIGNyZWF0ZSBmdW5ueSByZWYgJyVzJyBsb2NhbGx5IiwgcmVmLT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKHBhdGgpKQogCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcnkgZm9yICVzIiwgcmVmLT5uYW1lKTsKIAlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKQEAgLTUxLDYgKzU3LDcgQEAKIAlzdHJ1Y3QgcmVmICpoZWFkID0gTlVMTCwgKmhlYWRfcHRyLCAqbWFzdGVyX3JlZjsKIAljaGFyICpoZWFkX3BhdGg7CiAKKwkvKiBVcGxvYWQtcGFjayBtdXN0IHJlcG9ydCBIRUFEIGZpcnN0ICovCiAJaWYgKCFzdHJjbXAocmVmLT5uYW1lLCAiSEVBRCIpKSB7CiAJCWhlYWQgPSByZWY7CiAJCXJlZiA9IHJlZi0+bmV4dDsKQEAgLTYwLDE3ICs2NywyMSBAQAogCXdoaWxlIChyZWYpIHsKIAkJaWYgKGlzX21hc3RlcihyZWYpKQogCQkJbWFzdGVyX3JlZiA9IHJlZjsKLQkJaWYgKGhlYWQgJiYgIW1lbWNtcChyZWYtPm9sZF9zaGExLCBoZWFkLT5vbGRfc2hhMSwgMjApKSB7Ci0JCQlpZiAoIWhlYWRfcHRyIHx8IHJlZiA9PSBtYXN0ZXJfcmVmKQotCQkJCWhlYWRfcHRyID0gcmVmOwotCQl9CisJCWlmIChoZWFkICYmCisJCSAgICAhbWVtY21wKHJlZi0+b2xkX3NoYTEsIGhlYWQtPm9sZF9zaGExLCAyMCkgJiYKKwkJICAgICFzdHJuY21wKHJlZi0+bmFtZSwgInJlZnMvaGVhZHMvIiwxMSkgJiYKKwkJICAgICghaGVhZF9wdHIgfHwgcmVmID09IG1hc3Rlcl9yZWYpKQorCQkJaGVhZF9wdHIgPSByZWY7CisKIAkJd3JpdGVfb25lX3JlZihyZWYpOwogCQlyZWYgPSByZWYtPm5leHQ7CiAJfQotCWlmICghaGVhZCkKKwlpZiAoIWhlYWQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyBIRUFEIGluIHJlbW90ZS5cbiIpOwogCQlyZXR1cm47CisJfQogCi0JaGVhZF9wYXRoID0gZ2l0X3BhdGgoIkhFQUQiKTsKKwloZWFkX3BhdGggPSBzdHJkdXAoZ2l0X3BhdGgoIkhFQUQiKSk7CiAJaWYgKCFoZWFkX3B0cikgewogCQkvKgogCQkgKiBJZiB3ZSBoYWQgYSBtYXN0ZXIgcmVmLCBhbmQgaXQgd2Fzbid0IEhFQUQsIHdlIG5lZWQgdG8gdW5kbyB0aGUKQEAgLTgyLDYgKzkzLDcgQEAKIAkJCXVubGluayhoZWFkX3BhdGgpOwogCQl9CiAJCXdyaXRlX29uZV9yZWYoaGVhZCk7CisJCWZyZWUoaGVhZF9wYXRoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODksNTYgKzEwMSwxNjcgQEAKIAlpZiAobWFzdGVyX3JlZikKIAkJcmV0dXJuOwogCisJZnByaW50ZihzdGRlcnIsICJTZXR0aW5nIEhFQUQgdG8gJXNcbiIsIGhlYWRfcHRyLT5uYW1lKTsKKwogCS8qCiAJICogVWhodWguIE90aGVyIGVuZCBkaWRuJ3QgaGF2ZSBtYXN0ZXIuIFdlIHN0YXJ0IEhFQUQgb2ZmIHdpdGgKIAkgKiB0aGUgZmlyc3QgYnJhbmNoIHdpdGggdGhlIHNhbWUgdmFsdWUuCiAJICovCi0JdW5saW5rKGhlYWRfcGF0aCk7Ci0JaWYgKHN5bWxpbmsoaGVhZF9wdHItPm5hbWUsIGhlYWRfcGF0aCkgPCAwKQorCWlmIChjcmVhdGVfc3ltcmVmKGhlYWRfcGF0aCwgaGVhZF9wdHItPm5hbWUpIDwgMCkKIAkJZGllKCJ1bmFibGUgdG8gbGluayBIRUFEIHRvICVzIiwgaGVhZF9wdHItPm5hbWUpOworCWZyZWUoaGVhZF9wYXRoKTsKK30KKworc3RhdGljIGludCBmaW5pc2hfcGFjayhjb25zdCBjaGFyICpwYWNrX3RtcF9uYW1lKQoreworCWludCBwaXBlX2ZkWzJdOworCXBpZF90IHBpZDsKKwljaGFyIGlkeFtQQVRIX01BWF07CisJY2hhciBmaW5hbFtQQVRIX01BWF07CisJY2hhciBoYXNoWzQxXTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKmNwOworCWludCBlcnIgPSAwOworCisJaWYgKHBpcGUocGlwZV9mZCkgPCAwKQorCQlkaWUoImdpdC1jbG9uZS1wYWNrOiB1bmFibGUgdG8gc2V0IHVwIHBpcGUiKTsKKworCXN0cmNweShpZHgsIHBhY2tfdG1wX25hbWUpOyAvKiAiLmdpdC9vYmplY3RzL3BhY2stWFhYWFhYIiAqLworCWNwID0gc3RycmNocihpZHgsICcvJyk7CisJbWVtY3B5KGNwLCAiL3BpZHgiLCA1KTsKKworCXBpZCA9IGZvcmsoKTsKKwlpZiAocGlkIDwgMCkKKwkJZGllKCJnaXQtY2xvbmUtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIGdpdC1pbmRleC1wYWNrIik7CisJaWYgKCFwaWQpIHsKKwkJY2xvc2UoMCk7CisJCWR1cDIocGlwZV9mZFsxXSwgMSk7CisJCWNsb3NlKHBpcGVfZmRbMF0pOworCQljbG9zZShwaXBlX2ZkWzFdKTsKKwkJZXhlY2xwKCJnaXQtaW5kZXgtcGFjayIsImdpdC1pbmRleC1wYWNrIiwKKwkJICAgICAgICItbyIsIGlkeCwgcGFja190bXBfbmFtZSwgTlVMTCk7CisJCWVycm9yKCJjYW5ub3QgZXhlYyBnaXQtaW5kZXgtcGFjayA8JXM+IDwlcz4iLAorCQkgICAgICBpZHgsIHBhY2tfdG1wX25hbWUpOworCQlleGl0KDEpOworCX0KKwljbG9zZShwaXBlX2ZkWzFdKTsKKwlpZiAocmVhZChwaXBlX2ZkWzBdLCBoYXNoLCA0MCkgIT0gNDApIHsKKwkJZXJyb3IoImdpdC1jbG9uZS1wYWNrOiB1bmFibGUgdG8gcmVhZCBmcm9tIGdpdC1pbmRleC1wYWNrIik7CisJCWVyciA9IDE7CisJfQorCWNsb3NlKHBpcGVfZmRbMF0pOworCisJZm9yICg7OykgeworCQlpbnQgc3RhdHVzLCBjb2RlOworCQlpbnQgcmV0dmFsID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIDApOworCisJCWlmIChyZXR2YWwgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQllcnJvcigid2FpdHBpZCBmYWlsZWQgKCVzKSIsIHN0cmVycm9yKHJldHZhbCkpOworCQkJZ290byBlcnJvcl9kaWU7CisJCX0KKwkJaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKwkJCWludCBzaWcgPSBXVEVSTVNJRyhzdGF0dXMpOworCQkJZXJyb3IoImdpdC1pbmRleC1wYWNrIGRpZWQgb2Ygc2lnbmFsICVkIiwgc2lnKTsKKwkJCWdvdG8gZXJyb3JfZGllOworCQl9CisJCWlmICghV0lGRVhJVEVEKHN0YXR1cykpIHsKKwkJCWVycm9yKCJnaXQtaW5kZXgtcGFjayBkaWVkIG9mIHVubmF0dXJhbCBjYXVzZXMgJWQiLAorCQkJICAgICAgc3RhdHVzKTsKKwkJCWdvdG8gZXJyb3JfZGllOworCQl9CisJCWNvZGUgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworCQlpZiAoY29kZSkgeworCQkJZXJyb3IoImdpdC1pbmRleC1wYWNrIGRpZWQgd2l0aCBlcnJvciBjb2RlICVkIiwgY29kZSk7CisJCQlnb3RvIGVycm9yX2RpZTsKKwkJfQorCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcl9kaWU7CisJCWJyZWFrOworCX0KKwloYXNoWzQwXSA9IDA7CisJaWYgKGdldF9zaGExX2hleChoYXNoLCBzaGExKSkgeworCQllcnJvcigiZ2l0LWluZGV4LXBhY2sgcmVwb3J0ZWQgbm9uc2Vuc2UgJyVzJyIsIGhhc2gpOworCQlnb3RvIGVycm9yX2RpZTsKKwl9CisJLyogTm93IHdlIGhhdmUgcGFjayBpbiBwYWNrX3RtcF9uYW1lW10sIGFuZAorCSAqIGlkeCBpbiBpZHhbXTsgcmVuYW1lIHRoZW0gdG8gdGhlaXIgZmluYWwgbmFtZXMuCisJICovCisJc25wcmludGYoZmluYWwsIHNpemVvZihmaW5hbCksCisJCSAiJXMvcGFjay9wYWNrLSVzLnBhY2siLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBoYXNoKTsKKwltb3ZlX3RlbXBfdG9fZmlsZShwYWNrX3RtcF9uYW1lLCBmaW5hbCk7CisJY2htb2QoZmluYWwsIDA0NDQpOworCXNucHJpbnRmKGZpbmFsLCBzaXplb2YoZmluYWwpLAorCQkgIiVzL3BhY2svcGFjay0lcy5pZHgiLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBoYXNoKTsKKwltb3ZlX3RlbXBfdG9fZmlsZShpZHgsIGZpbmFsKTsKKwljaG1vZChmaW5hbCwgMDQ0NCk7CisJcmV0dXJuIDA7CisKKyBlcnJvcl9kaWU6CisJdW5saW5rKGlkeCk7CisJdW5saW5rKHBhY2tfdG1wX25hbWUpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBpbnQgY2xvbmVfd2l0aG91dF91bnBhY2soaW50IGZkWzJdKQoreworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJaW50IG9mZCwgaWZkOworCisJaWZkID0gZmRbMF07CisJc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLAorCQkgIiVzL3BhY2svdG1wLVhYWFhYWCIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCW9mZCA9IG1rc3RlbXAodG1wZmlsZSk7CisJaWYgKG9mZCA8IDApCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyIsIHRtcGZpbGUpOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBidWZbODE5Ml07CisJCXNzaXplX3Qgc3osIHdzeiwgcG9zOworCQlzeiA9IHJlYWQoaWZkLCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKHN6ID09IDApCisJCQlicmVhazsKKwkJaWYgKHN6IDwgMCkgeworCQkJZXJyb3IoImVycm9yIHJlYWRpbmcgcGFjayAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKG9mZCk7CisJCQl1bmxpbmsodG1wZmlsZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcG9zID0gMDsKKwkJd2hpbGUgKHBvcyA8IHN6KSB7CisJCQl3c3ogPSB3cml0ZShvZmQsIGJ1ZiArIHBvcywgc3ogLSBwb3MpOworCQkJaWYgKHdzeiA8IDApIHsKKwkJCQllcnJvcigiZXJyb3Igd3JpdGluZyBwYWNrICglcykiLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJY2xvc2Uob2ZkKTsKKwkJCQl1bmxpbmsodG1wZmlsZSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcG9zICs9IHdzejsKKwkJfQorCX0KKwljbG9zZShvZmQpOworCXJldHVybiBmaW5pc2hfcGFjayh0bXBmaWxlKTsKIH0KIAogc3RhdGljIGludCBjbG9uZV9wYWNrKGludCBmZFsyXSwgaW50IG5yX21hdGNoLCBjaGFyICoqbWF0Y2gpCiB7CiAJc3RydWN0IHJlZiAqcmVmczsKIAlpbnQgc3RhdHVzOwotCXBpZF90IHBpZDsKIAotCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZWZzLCBucl9tYXRjaCwgbWF0Y2gpOworCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZWZzLCBucl9tYXRjaCwgbWF0Y2gsIDEpOwogCWlmICghcmVmcykgewogCQlwYWNrZXRfZmx1c2goZmRbMV0pOwogCQlkaWUoIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIik7CiAJfQogCWNsb25lX2hhbmRzaGFrZShmZCwgcmVmcyk7Ci0JcGlkID0gZm9yaygpOwotCWlmIChwaWQgPCAwKQotCQlkaWUoImdpdC1jbG9uZS1wYWNrOiB1bmFibGUgdG8gZm9yayBvZmYgZ2l0LXVucGFjay1vYmplY3RzIik7Ci0JaWYgKCFwaWQpIHsKLQkJZHVwMihmZFswXSwgMCk7Ci0JCWNsb3NlKGZkWzBdKTsKLQkJY2xvc2UoZmRbMV0pOwotCQlleGVjbHAoImdpdC11bnBhY2stb2JqZWN0cyIsICJnaXQtdW5wYWNrLW9iamVjdHMiLAotCQkJcXVpZXQgPyAiLXEiIDogTlVMTCwgTlVMTCk7Ci0JCWRpZSgiZ2l0LXVucGFjay1vYmplY3RzIGV4ZWMgZmFpbGVkIik7Ci0JfQotCWNsb3NlKGZkWzBdKTsKLQljbG9zZShmZFsxXSk7Ci0Jd2hpbGUgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApIHsKLQkJaWYgKGVycm5vICE9IEVJTlRSKQotCQkJZGllKCJ3YWl0aW5nIGZvciBnaXQtdW5wYWNrLW9iamVjdHM6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0JaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7Ci0JCWludCBjb2RlID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKLQkJaWYgKGNvZGUpCi0JCQlkaWUoImdpdC11bnBhY2stb2JqZWN0cyBkaWVkIHdpdGggZXJyb3IgY29kZSAlZCIsIGNvZGUpOworCisJc3RhdHVzID0gY2xvbmVfd2l0aG91dF91bnBhY2soZmQpOworCisJaWYgKCFzdGF0dXMpCiAJCXdyaXRlX3JlZnMocmVmcyk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgewotCQlpbnQgc2lnID0gV1RFUk1TSUcoc3RhdHVzKTsKLQkJZGllKCJnaXQtdW5wYWNrLW9iamVjdHMgZGllZCBvZiBzaWduYWwgJWQiLCBzaWcpOwotCX0KLQlkaWUoIlNoZXJsb2NrIEhvbG1lcyEgZ2l0LXVucGFjay1vYmplY3RzIGRpZWQgb2YgdW5uYXR1cmFsIGNhdXNlcyAlZCEiLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTE1NCwxNCArMjc3LDE0IEBACiAJCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKIAkJaWYgKCphcmcgPT0gJy0nKSB7Ci0JCQlpZiAoIXN0cmNtcCgiLXEiLCBhcmcpKSB7Ci0JCQkJcXVpZXQgPSAxOworCQkJaWYgKCFzdHJjbXAoIi1xIiwgYXJnKSkKIAkJCQljb250aW51ZTsKLQkJCX0KIAkJCWlmICghc3RybmNtcCgiLS1leGVjPSIsIGFyZywgNykpIHsKIAkJCQlleGVjID0gYXJnICsgNzsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKCItLWtlZXAiLCBhcmcpKQorCQkJCWNvbnRpbnVlOwogCQkJdXNhZ2UoY2xvbmVfcGFja191c2FnZSk7CiAJCX0KIAkJZGVzdCA9IGFyZzsKZGlmZiAtLWdpdCBhL2NtZC1yZW5hbWUuc2ggYi9jbWQtcmVuYW1lLnNoCmluZGV4IGFkMzI4NWIuLjk5MjQ5M2QgMTAwNzU1Ci0tLSBhL2NtZC1yZW5hbWUuc2gKKysrIGIvY21kLXJlbmFtZS5zaApAQCAtMSwxMiArMSwyMSBAQAogIyEvYmluL3NoCisjCisjIElmIHlvdSBpbnN0YWxsZWQgZ2l0IGJ5IGhhbmQgcHJldmlvdXNseSwgeW91IG1heSBmaW5kIHRoaXMKKyMgc2NyaXB0IHVzZWZ1bCB0byByZW1vdmUgdGhlIHN5bWJvbGljIGxpbmtzIHRoYXQgd2Ugc2hpcHBlZAorIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyMKKyMgUnVubmluZyB0aGlzIHNjcmlwdCB3aXRoIHRoZSBwcmV2aW91cyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisjIGxpa2UgdGhpczoKKyMKKyMgJCBjbWQtcmVuYW1lLnNoIC91c3IvbG9jYWwvYmluLworIworIyB3b3VsZCBjbGVhbiB0aGVtLgorCiBkPSIkMSIKIHRlc3QgLWQgIiRkIiB8fCBleGl0CiB3aGlsZSByZWFkIG9sZCBuZXcKIGRvCiAJcm0gLWYgIiRkLyRvbGQiCi0JaWYgWyAteCAiJGQvJG5ldyIgXTsgdGhlbgotCWxuIC1zICIkbmV3IiAiJGQvJG9sZCIKLQlmaQogZG9uZSA8PFxFT0YKIGdpdC1hZGQtc2NyaXB0CWdpdC1hZGQKIGdpdC1hcmNoaW1wb3J0LXNjcmlwdAlnaXQtYXJjaGltcG9ydApAQCAtNTEsNyArNjAsMyBAQAogZ2l0LWNvbnZlcnQtY2FjaGUJZ2l0LWNvbnZlcnQtb2JqZWN0cwogZ2l0LWZzY2stY2FjaGUJZ2l0LWZzY2stb2JqZWN0cwogRU9GCi0KLSMgVGhlc2UgdHdvIGFyZSBhIGJpdCBtb3JlIHRoYW4gc3ltbGlua3Mgbm93LgotIyBnaXQtc3NoLXB1c2gJZ2l0LXNzaC11cGxvYWQKLSMgZ2l0LXNzaC1wdWxsCWdpdC1zc2gtZmV0Y2gKZGlmZiAtLWdpdCBhL2NvbW1pdC10cmVlLmMgYi9jb21taXQtdHJlZS5jCmluZGV4IGIxZWYwYjUuLmI2MDI5OWYgMTAwNjQ0Ci0tLSBhL2NvbW1pdC10cmVlLmMKKysrIGIvY29tbWl0LXRyZWUuYwpAQCAtNSwxMCArNSw2IEBACiAgKi8KICNpbmNsdWRlICJjYWNoZS5oIgogCi0jaW5jbHVkZSA8cHdkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KICNkZWZpbmUgQkxPQ0tJTkcgKDF1bCA8PCAxNCkKIAogLyoKQEAgLTg5LDYgKzg1LDkgQEAKIAljaGFyICpidWZmZXI7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKKwlzZXR1cF9pZGVudCgpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwogCWlmIChhcmdjIDwgMiB8fCBnZXRfc2hhMV9oZXgoYXJndlsxXSwgdHJlZV9zaGExKSA8IDApCiAJCXVzYWdlKGNvbW1pdF90cmVlX3VzYWdlKTsKIApAQCAtMTA0LDcgKzEwMyw2IEBACiAJfQogCWlmICghcGFyZW50cykKIAkJZnByaW50ZihzdGRlcnIsICJDb21taXR0aW5nIGluaXRpYWwgdHJlZSAlc1xuIiwgYXJndlsxXSk7Ci0Jc2V0dXBfaWRlbnQoKTsKIAogCWluaXRfYnVmZmVyKCZidWZmZXIsICZzaXplKTsKIAlhZGRfYnVmZmVyKCZidWZmZXIsICZzaXplLCAidHJlZSAlc1xuIiwgc2hhMV90b19oZXgodHJlZV9zaGExKSk7CmRpZmYgLS1naXQgYS9jb21taXQuYyBiL2NvbW1pdC5jCmluZGV4IGY3MzVmOTguLmE4YzliZmMgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5jCisrKyBiL2NvbW1pdC5jCkBAIC0xLDQgKzEsMyBAQAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKQEAgLTU2LDcgKzU1LDcgQEAKIHN0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAogCQkJCQkgICAgICBpbnQgcXVpZXQpCiB7Ci0Jc3RydWN0IG9iamVjdCAqb2JqID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSk7CisJc3RydWN0IG9iamVjdCAqb2JqID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSwgTlVMTCwgMCk7CiAKIAlpZiAoIW9iaikKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9jb21wYXQvbW1hcC5jIGIvY29tcGF0L21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDUxYzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21tYXAuYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgIi4uL2NhY2hlLmgiCisKK3ZvaWQgKmdpdGZha2VtbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCAsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJaW50IG4gPSAwOworCisJaWYgKHN0YXJ0ICE9IE5VTEwgfHwgIShmbGFncyAmIE1BUF9QUklWQVRFKSkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIGdpdGZha2VtbWFwLiIpOworCisJaWYgKGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiBNQVBfRkFJTEVEOworCX0KKworCXN0YXJ0ID0geG1hbGxvYyhsZW5ndGgpOworCWlmIChzdGFydCA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKwl9CisKKwl3aGlsZSAobiA8IGxlbmd0aCkgeworCQlpbnQgY291bnQgPSByZWFkKGZkLCBzdGFydCtuLCBsZW5ndGgtbik7CisKKwkJaWYgKGNvdW50ID09IDApIHsKKwkJCW1lbXNldChzdGFydCtuLCAwLCBsZW5ndGgtbik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjb3VudCA8IDApIHsKKwkJCWZyZWUoc3RhcnQpOworCQkJZXJybm8gPSBFQUNDRVM7CisJCQlyZXR1cm4gTUFQX0ZBSUxFRDsKKwkJfQorCisJCW4gKz0gY291bnQ7CisJfQorCisJcmV0dXJuIHN0YXJ0OworfQorCitpbnQgZ2l0ZmFrZW11bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKwlmcmVlKHN0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODliYWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmMKQEAgLTAsMCArMSwyNDQgQEAKKworI2luY2x1ZGUgImNhY2hlLmgiCisKKyNkZWZpbmUgTUFYTkFNRSAoMjU2KQorCitzdGF0aWMgRklMRSAqY29uZmlnX2ZpbGU7CitzdGF0aWMgaW50IGNvbmZpZ19saW5lbnI7CitzdGF0aWMgaW50IGdldF9uZXh0X2NoYXIodm9pZCkKK3sKKwlpbnQgYzsKKwlGSUxFICpmOworCisJYyA9ICdcbic7CisJaWYgKChmID0gY29uZmlnX2ZpbGUpICE9IE5VTEwpIHsKKwkJYyA9IGZnZXRjKGYpOworCQlpZiAoYyA9PSAnXHInKSB7CisJCQkvKiBET1MgbGlrZSBzeXN0ZW1zICovCisJCQljID0gZmdldGMoZik7CisJCQlpZiAoYyAhPSAnXG4nKSB7CisJCQkJdW5nZXRjKGMsIGYpOworCQkJCWMgPSAnXHInOworCQkJfQorCQl9CisJCWlmIChjID09ICdcbicpCisJCQljb25maWdfbGluZW5yKys7CisJCWlmIChjID09IEVPRikgeworCQkJY29uZmlnX2ZpbGUgPSBOVUxMOworCQkJYyA9ICdcbic7CisJCX0KKwl9CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBjaGFyICpwYXJzZV92YWx1ZSh2b2lkKQoreworCXN0YXRpYyBjaGFyIHZhbHVlWzEwMjRdOworCWludCBxdW90ZSA9IDAsIGNvbW1lbnQgPSAwLCBsZW4gPSAwLCBzcGFjZSA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAobGVuID49IHNpemVvZih2YWx1ZSkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgPT0gJ1xuJykgeworCQkJaWYgKHF1b3RlKQorCQkJCXJldHVybiBOVUxMOworCQkJdmFsdWVbbGVuXSA9IDA7CisJCQlyZXR1cm4gdmFsdWU7CisJCX0KKwkJaWYgKGNvbW1lbnQpCisJCQljb250aW51ZTsKKwkJaWYgKGlzc3BhY2UoYykgJiYgIXF1b3RlKSB7CisJCQlzcGFjZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3BhY2UpIHsKKwkJCWlmIChsZW4pCisJCQkJdmFsdWVbbGVuKytdID0gJyAnOworCQkJc3BhY2UgPSAwOworCQl9CisJCWlmIChjID09ICdcXCcpIHsKKwkJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1xuJzoKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3QnOgorCQkJCWMgPSAnXHQnOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJCQkJYyA9ICdcYic7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQljID0gJ1xuJzsKKwkJCQlicmVhazsKKwkJCS8qIFNvbWUgY2hhcmFjdGVycyBlc2NhcGUgYXMgdGhlbXNlbHZlcyAqLworCQkJY2FzZSAnXFwnOiBjYXNlICciJzoKKwkJCQlicmVhazsKKwkJCS8qIFJlamVjdCB1bmtub3duIGVzY2FwZSBzZXF1ZW5jZXMgKi8KKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQl2YWx1ZVtsZW4rK10gPSBjOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgPT0gJyInKSB7CisJCQlxdW90ZSA9IDEtcXVvdGU7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXF1b3RlKSB7CisJCQlpZiAoYyA9PSAnOycgfHwgYyA9PSAnIycpIHsKKwkJCQljb21tZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQl2YWx1ZVtsZW4rK10gPSBjOworCX0KK30KKworc3RhdGljIGludCBnZXRfdmFsdWUoY29uZmlnX2ZuX3QgZm4sIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGM7CisJY2hhciAqdmFsdWU7CisKKwkvKiBHZXQgdGhlIGZ1bGwgbmFtZSAqLworCWZvciAoOzspIHsKKwkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGMgPT0gRU9GKQorCQkJYnJlYWs7CisJCWlmICghaXNhbG51bShjKSkKKwkJCWJyZWFrOworCQluYW1lW2xlbisrXSA9IHRvbG93ZXIoYyk7CisJCWlmIChsZW4gPj0gTUFYTkFNRSkKKwkJCXJldHVybiAtMTsKKwl9CisJbmFtZVtsZW5dID0gMDsKKwl3aGlsZSAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljID0gZ2V0X25leHRfY2hhcigpOworCisJdmFsdWUgPSBOVUxMOworCWlmIChjICE9ICdcbicpIHsKKwkJaWYgKGMgIT0gJz0nKQorCQkJcmV0dXJuIC0xOworCQl2YWx1ZSA9IHBhcnNlX3ZhbHVlKCk7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmbihuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Jhc2VfdmFyKGNoYXIgKm5hbWUpCit7CisJaW50IGJhc2VsZW4gPSAwOworCisJZm9yICg7OykgeworCQlpbnQgYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJaWYgKGMgPT0gRU9GKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYyA9PSAnXScpCisJCQlyZXR1cm4gYmFzZWxlbjsKKwkJaWYgKCFpc2FsbnVtKGMpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYmFzZWxlbiA+IE1BWE5BTUUgLyAyKQorCQkJcmV0dXJuIC0xOworCQluYW1lW2Jhc2VsZW4rK10gPSB0b2xvd2VyKGMpOworCX0KK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfZmlsZShjb25maWdfZm5fdCBmbikKK3sKKwlpbnQgY29tbWVudCA9IDA7CisJaW50IGJhc2VsZW4gPSAwOworCXN0YXRpYyBjaGFyIHZhcltNQVhOQU1FXTsKKworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjID09ICdcbicpIHsKKwkJCS8qIEVPRj8gKi8KKwkJCWlmICghY29uZmlnX2ZpbGUpCisJCQkJcmV0dXJuIDA7CisJCQljb21tZW50ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjb21tZW50IHx8IGlzc3BhY2UoYykpCisJCQljb250aW51ZTsKKwkJaWYgKGMgPT0gJyMnIHx8IGMgPT0gJzsnKSB7CisJCQljb21tZW50ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICdbJykgeworCQkJYmFzZWxlbiA9IGdldF9iYXNlX3Zhcih2YXIpOworCQkJaWYgKGJhc2VsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCXZhcltiYXNlbGVuKytdID0gJy4nOworCQkJdmFyW2Jhc2VsZW5dID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghaXNhbHBoYShjKSkKKwkJCWJyZWFrOworCQl2YXJbYmFzZWxlbl0gPSB0b2xvd2VyKGMpOworCQlpZiAoZ2V0X3ZhbHVlKGZuLCB2YXIsIGJhc2VsZW4rMSkgPCAwKQorCQkJYnJlYWs7CisJfQorCWRpZSgiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQiLCBjb25maWdfbGluZW5yKTsKK30KKworaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSAmJiAqdmFsdWUpIHsKKwkJY2hhciAqZW5kOworCQlpbnQgdmFsID0gc3RydG9sKHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKCEqZW5kKQorCQkJcmV0dXJuIHZhbDsKKwl9CisJZGllKCJiYWQgY29uZmlnIHZhbHVlIGZvciAnJXMnIiwgbmFtZSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIDE7CisJaWYgKCEqdmFsdWUpCisJCXJldHVybiAwOworCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInRydWUiKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGdpdF9jb25maWdfaW50KG5hbWUsIHZhbHVlKSAhPSAwOworfQorCitpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJLyogVGhpcyBuZWVkcyBhIGJldHRlciBuYW1lICovCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5maWxlbW9kZSIpKSB7CisJCXRydXN0X2V4ZWN1dGFibGVfYml0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLm5hbWUiKSkgeworCQlzdHJuY3B5KGdpdF9kZWZhdWx0X25hbWUsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfbmFtZSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLmVtYWlsIikpIHsKKwkJc3RybmNweShnaXRfZGVmYXVsdF9lbWFpbCwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlLi4gKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4pCit7CisJaW50IHJldDsKKwlGSUxFICpmID0gZm9wZW4oZ2l0X3BhdGgoImNvbmZpZyIpLCAiciIpOworCisJcmV0ID0gLTE7CisJaWYgKGYpIHsKKwkJY29uZmlnX2ZpbGUgPSBmOworCQljb25maWdfbGluZW5yID0gMTsKKwkJcmV0ID0gZ2l0X3BhcnNlX2ZpbGUoZm4pOworCQlmY2xvc2UoZik7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggODI1YzQzOS4uYzJiYWRjNyAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtMSwxNiArMSwyMCBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAorc3RhdGljIGNoYXIgKnNlcnZlcl9jYXBhYmlsaXRpZXMgPSBOVUxMOworCiAvKgogICogUmVhZCBhbGwgdGhlIHJlZnMgZnJvbSB0aGUgb3RoZXIgZW5kCiAgKi8KLXN0cnVjdCByZWYgKipnZXRfcmVtb3RlX2hlYWRzKGludCBpbiwgc3RydWN0IHJlZiAqKmxpc3QsIGludCBucl9tYXRjaCwgY2hhciAqKm1hdGNoKQorc3RydWN0IHJlZiAqKmdldF9yZW1vdGVfaGVhZHMoaW50IGluLCBzdHJ1Y3QgcmVmICoqbGlzdCwKKwkJCSAgICAgIGludCBucl9tYXRjaCwgY2hhciAqKm1hdGNoLCBpbnQgaWdub3JlX2Z1bm55KQogewogCSpsaXN0ID0gTlVMTDsKIAlmb3IgKDs7KSB7CkBAIC0xOCw3ICsyMiw3IEBACiAJCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOwogCQlzdGF0aWMgY2hhciBidWZmZXJbMTAwMF07CiAJCWNoYXIgKm5hbWU7Ci0JCWludCBsZW47CisJCWludCBsZW4sIG5hbWVfbGVuOwogCiAJCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoaW4sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwogCQlpZiAoIWxlbikKQEAgLTI5LDYgKzMzLDE4IEBACiAJCWlmIChsZW4gPCA0MiB8fCBnZXRfc2hhMV9oZXgoYnVmZmVyLCBvbGRfc2hhMSkgfHwgYnVmZmVyWzQwXSAhPSAnICcpCiAJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIsIGJ1ZmZlcik7CiAJCW5hbWUgPSBidWZmZXIgKyA0MTsKKworCQlpZiAoaWdub3JlX2Z1bm55ICYmIDQ1IDwgbGVuICYmICFtZW1jbXAobmFtZSwgInJlZnMvIiwgNSkgJiYKKwkJICAgIGNoZWNrX3JlZl9mb3JtYXQobmFtZSArIDUpKQorCQkJY29udGludWU7CisKKwkJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChsZW4gIT0gbmFtZV9sZW4gKyA0MSkgeworCQkJaWYgKHNlcnZlcl9jYXBhYmlsaXRpZXMpCisJCQkJZnJlZShzZXJ2ZXJfY2FwYWJpbGl0aWVzKTsKKwkJCXNlcnZlcl9jYXBhYmlsaXRpZXMgPSBzdHJkdXAobmFtZSArIG5hbWVfbGVuICsgMSk7CisJCX0KKwogCQlpZiAobnJfbWF0Y2ggJiYgIXBhdGhfbWF0Y2gobmFtZSwgbnJfbWF0Y2gsIG1hdGNoKSkKIAkJCWNvbnRpbnVlOwogCQlyZWYgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmKSArIGxlbiAtIDQwKTsKQEAgLTQwLDYgKzU2LDEyIEBACiAJcmV0dXJuIGxpc3Q7CiB9CiAKK2ludCBzZXJ2ZXJfc3VwcG9ydHMoY29uc3QgY2hhciAqZmVhdHVyZSkKK3sKKwlyZXR1cm4gc2VydmVyX2NhcGFiaWxpdGllcyAmJgorCQlzdHJzdHIoc2VydmVyX2NhcGFiaWxpdGllcywgZmVhdHVyZSkgIT0gTlVMTDsKK30KKwogaW50IGdldF9hY2soaW50IGZkLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKIHsKIAlzdGF0aWMgY2hhciBsaW5lWzEwMDBdOwpAQCAtNTIsOCArNzQsMTEgQEAKIAlpZiAoIXN0cmNtcChsaW5lLCAiTkFLIikpCiAJCXJldHVybiAwOwogCWlmICghc3RybmNtcChsaW5lLCAiQUNLICIsIDMpKSB7Ci0JCWlmICghZ2V0X3NoYTFfaGV4KGxpbmUrNCwgcmVzdWx0X3NoYTEpKQorCQlpZiAoIWdldF9zaGExX2hleChsaW5lKzQsIHJlc3VsdF9zaGExKSkgeworCQkJaWYgKHN0cnN0cihsaW5lKzQ1LCAiY29udGludWUiKSkKKwkJCQlyZXR1cm4gMjsKIAkJCXJldHVybiAxOworCQl9CiAJfQogCWRpZSgiZ2l0LWZldGNoX3BhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIiwgbGluZSk7CiB9CkBAIC0yODQsMTIgKzMwOSwxOCBAQAogCQlyZXR1cm4gUFJPVE9fU1NIOwogCWlmICghc3RyY21wKG5hbWUsICJnaXQiKSkKIAkJcmV0dXJuIFBST1RPX0dJVDsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZ2l0K3NzaCIpKQorCQlyZXR1cm4gUFJPVE9fU1NIOworCWlmICghc3RyY21wKG5hbWUsICJzc2grZ2l0IikpCisJCXJldHVybiBQUk9UT19TU0g7CiAJZGllKCJJIGRvbid0IGhhbmRsZSBwcm90b2NvbCAnJXMnIiwgbmFtZSk7CiB9CiAKICNkZWZpbmUgU1RSXyhzKQkjIHMKICNkZWZpbmUgU1RSKHMpCVNUUl8ocykKIAorI2lmbmRlZiBOT19JUFY2CisKIHN0YXRpYyBpbnQgZ2l0X3RjcF9jb25uZWN0KGludCBmZFsyXSwgY29uc3QgY2hhciAqcHJvZywgY2hhciAqaG9zdCwgY2hhciAqcGF0aCkKIHsKIAlpbnQgc29ja2ZkID0gLTE7CkBAIC0zNDYsNiArMzc3LDc3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNlbHNlIC8qIE5PX0lQVjYgKi8KKworc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQoreworCWludCBzb2NrZmQgPSAtMTsKKwljaGFyICpjb2xvbiwgKmVuZDsKKwljaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpLCAqZXA7CisJc3RydWN0IGhvc3RlbnQgKmhlOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzYTsKKwljaGFyICoqYXA7CisJdW5zaWduZWQgaW50IG5wb3J0OworCisJaWYgKGhvc3RbMF0gPT0gJ1snKSB7CisJCWVuZCA9IHN0cmNocihob3N0ICsgMSwgJ10nKTsKKwkJaWYgKGVuZCkgeworCQkJKmVuZCA9IDA7CisJCQllbmQrKzsKKwkJCWhvc3QrKzsKKwkJfSBlbHNlCisJCQllbmQgPSBob3N0OworCX0gZWxzZQorCQllbmQgPSBob3N0OworCWNvbG9uID0gc3RyY2hyKGVuZCwgJzonKTsKKworCWlmIChjb2xvbikgeworCQkqY29sb24gPSAwOworCQlwb3J0ID0gY29sb24gKyAxOworCX0KKworCisJaGUgPSBnZXRob3N0YnluYW1lKGhvc3QpOworCWlmICghaGUpCisJCWRpZSgiVW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIsIGhvc3QsIGhzdHJlcnJvcihoX2Vycm5vKSk7CisJbnBvcnQgPSBzdHJ0b3VsKHBvcnQsICZlcCwgMTApOworCWlmICggZXAgPT0gcG9ydCB8fCAqZXAgKSB7CisJCS8qIE5vdCBudW1lcmljICovCisJCXN0cnVjdCBzZXJ2ZW50ICpzZSA9IGdldHNlcnZieW5hbWUocG9ydCwidGNwIik7CisJCWlmICggIXNlICkKKwkJCWRpZSgiVW5rbm93biBwb3J0ICVzXG4iLCBwb3J0KTsKKwkJbnBvcnQgPSBzZS0+c19wb3J0OworCX0KKworCWZvciAoYXAgPSBoZS0+aF9hZGRyX2xpc3Q7ICphcDsgYXArKykgeworCQlzb2NrZmQgPSBzb2NrZXQoaGUtPmhfYWRkcnR5cGUsIFNPQ0tfU1RSRUFNLCAwKTsKKwkJaWYgKHNvY2tmZCA8IDApCisJCQljb250aW51ZTsKKworCQltZW1zZXQoJnNhLCAwLCBzaXplb2Ygc2EpOworCQlzYS5zaW5fZmFtaWx5ID0gaGUtPmhfYWRkcnR5cGU7CisJCXNhLnNpbl9wb3J0ID0gaHRvbnMobnBvcnQpOworCQltZW1jcHkoJnNhLnNpbl9hZGRyLCBhcCwgaGUtPmhfbGVuZ3RoKTsKKworCQlpZiAoY29ubmVjdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZiBzYSkgPCAwKSB7CisJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAoc29ja2ZkIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCBhIHNvY2tldCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCWZkWzBdID0gc29ja2ZkOworCWZkWzFdID0gc29ja2ZkOworCXBhY2tldF93cml0ZShzb2NrZmQsICIlcyAlc1xuIiwgcHJvZywgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBOT19JUFY2ICovCisKIC8qCiAgKiBZZWFoLCB5ZWFoLCBmaXhtZS4gTmVlZCB0byBwYXNzIGluIHRoZSBoZWFkcyBldGMuCiAgKi8KZGlmZiAtLWdpdCBhL2NvbnZlcnQtb2JqZWN0cy5jIGIvY29udmVydC1vYmplY3RzLmMKaW5kZXggOWFkMGM3Ny4uYTg5MjAxMyAxMDA2NDQKLS0tIGEvY29udmVydC1vYmplY3RzLmMKKysrIGIvY29udmVydC1vYmplY3RzLmMKQEAgLTEsNiArMSw1IEBACiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgLyogZ2xpYmMyIG5lZWRzIHRoaXMgKi8KICNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJjYWNoZS5oIgogCiBzdHJ1Y3QgZW50cnkgewpkaWZmIC0tZ2l0IGEvY29weS5jIGIvY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxY2Q1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3B5LmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBjb3B5X2ZkKGludCBpZmQsIGludCBvZmQpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50IGxlbjsKKwkJY2hhciBidWZmZXJbODE5Ml07CisJCWNoYXIgKmJ1ZiA9IGJ1ZmZlcjsKKwkJbGVuID0gcmVhZChpZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCQlpZiAobGVuIDwgMCkgeworCQkJaW50IHJlYWRfZXJyb3I7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKQorCQkJCWNvbnRpbnVlOworCQkJcmVhZF9lcnJvciA9IGVycm5vOworCQkJY2xvc2UoaWZkKTsKKwkJCXJldHVybiBlcnJvcigiY29weS1mZDogcmVhZCByZXR1cm5lZCAlcyIsCisJCQkJICAgICBzdHJlcnJvcihyZWFkX2Vycm9yKSk7CisJCX0KKwkJd2hpbGUgKDEpIHsKKwkJCWludCB3cml0dGVuID0gd3JpdGUob2ZkLCBidWYsIGxlbik7CisJCQlpZiAod3JpdHRlbiA+IDApIHsKKwkJCQlidWYgKz0gd3JpdHRlbjsKKwkJCQlsZW4gLT0gd3JpdHRlbjsKKwkJCQlpZiAoIWxlbikKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXdyaXR0ZW4pCisJCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiB3cml0ZSByZXR1cm5lZCAwIik7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIGVycm9yKCJjb3B5LWZkOiB3cml0ZSByZXR1cm5lZCAlcyIsCisJCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCQl9CisJfQorCWNsb3NlKGlmZCk7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2N0eXBlLmMgYi9jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YmRmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jdHlwZS5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBTYW5lIGxvY2FsZS1pbmRlcGVuZGVudCwgQVNDSUkgY3R5cGUuCisgKgorICogTm8gc3VycHJpc2VzLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJzLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2RlZmluZSBTUyBHSVRfU1BBQ0UKKyNkZWZpbmUgQUEgR0lUX0FMUEhBCisjZGVmaW5lIEREIEdJVF9ESUdJVAorCit1bnNpZ25lZCBjaGFyIHNhbmVfY3R5cGVbMjU2XSA9IHsKKwkgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCBTUywgU1MsICAwLCAgMCwgU1MsICAwLCAgMCwJCS8qIDAtMTUgKi8KKwkgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwJCS8qIDE2LTE1ICovCisJU1MsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiAzMi0xNSAqLworCURELCBERCwgREQsIERELCBERCwgREQsIERELCBERCwgREQsIERELCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLAkJLyogNDgtMTUgKi8KKwkgMCwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwJCS8qIDY0LTE1ICovCisJQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCAgMCwgIDAsICAwLCAgMCwgIDAsCQkvKiA4MC0xNSAqLworCSAwLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLAkJLyogOTYtMTUgKi8KKwlBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsIEFBLCBBQSwgQUEsICAwLCAgMCwgIDAsICAwLCAgMCwJCS8qIDExMi0xNSAqLworCS8qIE5vdGhpbmcgaW4gdGhlIDEyOC4uIHJhbmdlICovCit9OworCmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCmluZGV4IDUxMDBjZjIuLmMzZjg2NDEgMTAwNjQ0Ci0tLSBhL2RhZW1vbi5jCisrKyBiL2RhZW1vbi5jCkBAIC0xLDMxICsxLDE5NSBAQAotI2luY2x1ZGUgImNhY2hlLmgiCi0jaW5jbHVkZSAicGt0LWxpbmUuaCIKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgogCi1zdGF0aWMgY29uc3QgY2hhciBkYWVtb25fdXNhZ2VbXSA9ICJnaXQtZGFlbW9uIFstLWluZXRkIHwgLS1wb3J0PW5dIjsKK3N0YXRpYyBpbnQgbG9nX3N5c2xvZzsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKIAotc3RhdGljIGludCB1cGxvYWQoY2hhciAqZGlyLCBpbnQgZGlybGVuKQorc3RhdGljIGNvbnN0IGNoYXIgZGFlbW9uX3VzYWdlW10gPQorImdpdC1kYWVtb24gWy0tdmVyYm9zZV0gWy0tc3lzbG9nXSBbLS1pbmV0ZCB8IC0tcG9ydD1uXSBbLS1leHBvcnQtYWxsXVxuIgorIiAgICAgICAgICAgWy0tdGltZW91dD1uXSBbLS1pbml0LXRpbWVvdXQ9bl0gW2RpcmVjdG9yeS4uLl0iOworCisvKiBMaXN0IG9mIGFjY2VwdGFibGUgcGF0aG5hbWUgcHJlZml4ZXMgKi8KK3N0YXRpYyBjaGFyICoqb2tfcGF0aHMgPSBOVUxMOworCisvKiBJZiB0aGlzIGlzIHNldCwgZ2l0LWRhZW1vbi1leHBvcnQtb2sgaXMgbm90IHJlcXVpcmVkICovCitzdGF0aWMgaW50IGV4cG9ydF9hbGxfdHJlZXMgPSAwOworCisvKiBUaW1lb3V0LCBhbmQgaW5pdGlhbCB0aW1lb3V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X3RpbWVvdXQgPSAwOworCitzdGF0aWMgdm9pZCBsb2dyZXBvcnQoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQogewotCWlmIChjaGRpcihkaXIpIDwgMCkKKwkvKiBXZSBzaG91bGQgZG8gYSBzaW5nbGUgd3JpdGUgc28gdGhhdCBpdCBpcyBhdG9taWMgYW5kIG91dHB1dAorCSAqIG9mIHNldmVyYWwgcHJvY2Vzc2VzIGRvIG5vdCBnZXQgaW50ZXJtaW5nbGVkLiAqLworCWNoYXIgYnVmWzEwMjRdOworCWludCBidWZsZW47CisJaW50IG1heGxlbiwgbXNnbGVuOworCisJLyogc2l6ZW9mKGJ1Zikgc2hvdWxkIGJlIGJpZyBlbm91Z2ggZm9yICJbcGlkXSBcbiIgKi8KKwlidWZsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiWyVsZF0gIiwgKGxvbmcpIGdldHBpZCgpKTsKKworCW1heGxlbiA9IHNpemVvZihidWYpIC0gYnVmbGVuIC0gMTsgLyogLTEgZm9yIG91ciBvd24gTEYgKi8KKwltc2dsZW4gPSB2c25wcmludGYoYnVmICsgYnVmbGVuLCBtYXhsZW4sIGVyciwgcGFyYW1zKTsKKworCWlmIChsb2dfc3lzbG9nKSB7CisJCXN5c2xvZyhwcmlvcml0eSwgIiVzIiwgYnVmKTsKKwkJcmV0dXJuOworCX0KKworCS8qIG1heGxlbiBjb3VudGVkIG91ciBvd24gTEYgYnV0IGFsc28gY291bnRzIHNwYWNlIGdpdmVuIHRvCisJICogdnNucHJpbnRmIGZvciB0aGUgdGVybWluYXRpbmcgTlVMLiAgV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorCSAqIHdlIGhhdmUgc3BhY2UgZm9yIG91ciBvd24gTEYgYW5kIE5VTCBhZnRlciB0aGUgIm1lYXQiIG9mIHRoZQorCSAqIG1lc3NhZ2UsIHNvIHRydW5jYXRlIGl0IGF0IG1heGxlbiAtIDEuCisJICovCisJaWYgKG1zZ2xlbiA+IG1heGxlbiAtIDEpCisJCW1zZ2xlbiA9IG1heGxlbiAtIDE7CisJZWxzZSBpZiAobXNnbGVuIDwgMCkKKwkJbXNnbGVuID0gMDsgLyogUHJvdGVjdCBhZ2FpbnN0IHdlaXJkIHJldHVybiB2YWx1ZXMuICovCisJYnVmbGVuICs9IG1zZ2xlbjsKKworCWJ1ZltidWZsZW4rK10gPSAnXG4nOworCWJ1ZltidWZsZW5dID0gJ1wwJzsKKworCXdyaXRlKDIsIGJ1ZiwgYnVmbGVuKTsKK30KKworc3RhdGljIHZvaWQgbG9nZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWxvZ3JlcG9ydChMT0dfRVJSLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2luZm8oY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWxvZ3JlcG9ydChMT0dfSU5GTywgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgaW50IHBhdGhfb2soY29uc3QgY2hhciAqZGlyKQoreworCWNvbnN0IGNoYXIgKnAgPSBkaXI7CisJY2hhciAqKnBwOworCWludCBzbCwgbmRvdDsKKworCS8qIFRoZSBwYXRobmFtZSBoZXJlIHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiAqLworCWlmICggKnArKyAhPSAnLycgKQorCQlyZXR1cm4gMDsKKworCXNsID0gMTsgIG5kb3QgPSAwOworCisJZm9yICg7OykgeworCQlpZiAoICpwID09ICcuJyApIHsKKwkJCW5kb3QrKzsKKwkJfSBlbHNlIGlmICggKnAgPT0gJ1wwJyApIHsKKwkJCS8qIFJlamVjdCAiLiIgYW5kICIuLiIgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCAqLworCQkJaWYgKCBzbCAmJiBuZG90ID4gMCAmJiBuZG90IDwgMyApCisJCQkJcmV0dXJuIDA7CisKKwkJCS8qIE90aGVyd2lzZSBPSyAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoICpwID09ICcvJyApIHsKKwkJCS8qIFJlZnVzZSAiIiwgIi4iIG9yICIuLiIgKi8KKwkJCWlmICggc2wgJiYgbmRvdCA8IDMgKQorCQkJCXJldHVybiAwOworCQkJc2wgPSAxOworCQkJbmRvdCA9IDA7CisJCX0gZWxzZSB7CisJCQlzbCA9IG5kb3QgPSAwOworCQl9CisJCXArKzsKKwl9CisKKwlpZiAoIG9rX3BhdGhzICYmICpva19wYXRocyApIHsKKwkJaW50IG9rID0gMDsKKwkJaW50IGRpcmxlbiA9IHN0cmxlbihkaXIpOworCisJCWZvciAoIHBwID0gb2tfcGF0aHMgOyAqcHAgOyBwcCsrICkgeworCQkJaW50IGxlbiA9IHN0cmxlbigqcHApOworCQkJaWYgKCBsZW4gPD0gZGlybGVuICYmCisJCQkgICAgICFzdHJuY21wKCpwcCwgZGlyLCBsZW4pICYmCisJCQkgICAgIChkaXJbbGVuXSA9PSAnLycgfHwgZGlyW2xlbl0gPT0gJ1wwJykgKSB7CisJCQkJb2sgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCAhb2sgKQorCQkJcmV0dXJuIDA7IC8qIFBhdGggbm90IGluIHdoaXRlbGlzdCAqLworCX0KKworCXJldHVybiAxOwkJLyogUGF0aCBhY2NlcHRhYmxlICovCit9CisKK3N0YXRpYyBpbnQgc2V0X2Rpcihjb25zdCBjaGFyICpkaXIpCit7CisJaWYgKCFwYXRoX29rKGRpcikpIHsKKwkJZXJybm8gPSBFQUNDRVM7CiAJCXJldHVybiAtMTsKLQljaGRpcigiLmdpdCIpOworCX0KKworCWlmICggY2hkaXIoZGlyKSApCisJCXJldHVybiAtMTsKIAogCS8qCiAJICogU2VjdXJpdHkgb24gdGhlIGNoZWFwLgogCSAqCi0JICogV2Ugd2FudCBhIHJlYWRhYmxlIEhFQUQsIHVzYWJsZSAib2JqZWN0cyIgZGlyZWN0b3J5LCBhbmQgCisJICogV2Ugd2FudCBhIHJlYWRhYmxlIEhFQUQsIHVzYWJsZSAib2JqZWN0cyIgZGlyZWN0b3J5LCBhbmQKIAkgKiBhICJnaXQtZGFlbW9uLWV4cG9ydC1vayIgZmxhZyB0aGF0IHNheXMgdGhhdCB0aGUgb3RoZXIgc2lkZQogCSAqIGlzIG9rIHdpdGggdXMgZG9pbmcgdGhpcy4KIAkgKi8KLQlpZiAoYWNjZXNzKCJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIEZfT0spIHx8Ci0JICAgIGFjY2Vzcygib2JqZWN0cy8wMCIsIFhfT0spIHx8Ci0JICAgIGFjY2VzcygiSEVBRCIsIFJfT0spKQorCWlmICghZXhwb3J0X2FsbF90cmVlcyAmJiBhY2Nlc3MoImdpdC1kYWVtb24tZXhwb3J0LW9rIiwgRl9PSykpIHsKKwkJZXJybm8gPSBFQUNDRVM7CiAJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWNjZXNzKCJvYmplY3RzLyIsIFhfT0spIHx8IGFjY2VzcygiSEVBRCIsIFJfT0spKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogSWYgYWxsIHRoaXMgcGFzc2VkLCB3ZSdyZSBPSyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwbG9hZChjaGFyICpkaXIpCit7CisJLyogVHJ5IHBhdGhzIGluIHRoaXMgb3JkZXIgKi8KKwlzdGF0aWMgY29uc3QgY2hhciAqcGF0aHNbXSA9IHsgIiVzIiwgIiVzLy5naXQiLCAiJXMuZ2l0IiwgIiVzLmdpdC8uZ2l0IiwgTlVMTCB9OworCWNvbnN0IGNoYXIgKipwcDsKKwkvKiBFbm91Z2ggZm9yIHRoZSBsb25nZXN0IHBhdGggYWJvdmUgaW5jbHVkaW5nIGZpbmFsIG51bGwgKi8KKwlpbnQgYnVmbGVuID0gc3RybGVuKGRpcikrMTA7CisJY2hhciAqZGlyYnVmID0geG1hbGxvYyhidWZsZW4pOworCS8qIFRpbWVvdXQgYXMgc3RyaW5nICovCisJY2hhciB0aW1lb3V0X2J1Zls2NF07CisKKwlsb2dpbmZvKCJSZXF1ZXN0IGZvciAnJXMnIiwgZGlyKTsKKworCWZvciAoIHBwID0gcGF0aHMgOyAqcHAgOyBwcCsrICkgeworCQlzbnByaW50ZihkaXJidWYsIGJ1ZmxlbiwgKnBwLCBkaXIpOworCQlpZiAoICFzZXRfZGlyKGRpcmJ1ZikgKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCAhKnBwICkgeworCQlsb2dlcnJvcigiQ2Fubm90IHNldCBkaXJlY3RvcnkgJyVzJzogJXMiLCBkaXIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAtMTsKKwl9CiAKIAkvKgogCSAqIFdlJ2xsIGlnbm9yZSBTSUdURVJNIGZyb20gbm93IG9uLCB3ZSBoYXZlIGEKQEAgLTMzLDggKzE5NywxMCBAQAogCSAqLwogCXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKIAorCXNucHJpbnRmKHRpbWVvdXRfYnVmLCBzaXplb2YgdGltZW91dF9idWYsICItLXRpbWVvdXQ9JXUiLCB0aW1lb3V0KTsKKwogCS8qIGdpdC11cGxvYWQtcGFjayBvbmx5IGV2ZXIgcmVhZHMgc3R1ZmYsIHNvIHRoaXMgaXMgc2FmZSAqLwotCWV4ZWNscCgiZ2l0LXVwbG9hZC1wYWNrIiwgImdpdC11cGxvYWQtcGFjayIsICIuIiwgTlVMTCk7CisJZXhlY2xwKCJnaXQtdXBsb2FkLXBhY2siLCAiZ2l0LXVwbG9hZC1wYWNrIiwgIi0tc3RyaWN0IiwgdGltZW91dF9idWYsICIuIiwgTlVMTCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC00MywxNSArMjA5LDE3IEBACiAJc3RhdGljIGNoYXIgbGluZVsxMDAwXTsKIAlpbnQgbGVuOwogCisJYWxhcm0oaW5pdF90aW1lb3V0ID8gaW5pdF90aW1lb3V0IDogdGltZW91dCk7CiAJbGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOworCWFsYXJtKDApOwogCiAJaWYgKGxlbiAmJiBsaW5lW2xlbi0xXSA9PSAnXG4nKQogCQlsaW5lWy0tbGVuXSA9IDA7CiAKIAlpZiAoIXN0cm5jbXAoImdpdC11cGxvYWQtcGFjayAvIiwgbGluZSwgMTcpKQotCQlyZXR1cm4gdXBsb2FkKGxpbmUgKyAxNiwgbGVuIC0gMTYpOworCQlyZXR1cm4gdXBsb2FkKGxpbmUrMTYpOwogCi0JZnByaW50ZihzdGRlcnIsICJnb3QgYmFkIGNvbm5lY3Rpb24gJyVzJ1xuIiwgbGluZSk7CisJbG9nZXJyb3IoIlByb3RvY29sIGVycm9yOiAnJXMnIiwgbGluZSk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xODEsNiArMzQ5LDggQEAKIHN0YXRpYyB2b2lkIGhhbmRsZShpbnQgaW5jb21pbmcsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJsZW4pCiB7CiAJcGlkX3QgcGlkID0gZm9yaygpOworCWNoYXIgYWRkcmJ1ZlsyNTZdID0gIiI7CisJaW50IHBvcnQgPSAtMTsKIAogCWlmIChwaWQpIHsKIAkJdW5zaWduZWQgaWR4OwpAQCAtMjAwLDM0ICszNzAsNjUgQEAKIAlkdXAyKGluY29taW5nLCAwKTsKIAlkdXAyKGluY29taW5nLCAxKTsKIAljbG9zZShpbmNvbWluZyk7CisKKwlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopIGFkZHI7CisJCWluZXRfbnRvcChBRl9JTkVULCAmc2luX2FkZHItPnNpbl9hZGRyLCBhZGRyYnVmLCBzaXplb2YoYWRkcmJ1ZikpOworCQlwb3J0ID0gc2luX2FkZHItPnNpbl9wb3J0OworCisjaWZuZGVmIE5PX0lQVjYKKwl9IGVsc2UgaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X2FkZHIgPSAodm9pZCAqKSBhZGRyOworCisJCWNoYXIgKmJ1ZiA9IGFkZHJidWY7CisJCSpidWYrKyA9ICdbJzsgKmJ1ZiA9ICdcMCc7IC8qIHN0cGNweSgpIGlzIGNvb2wgKi8KKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNl9hZGRyLT5zaW42X2FkZHIsIGJ1Ziwgc2l6ZW9mKGFkZHJidWYpIC0gMSk7CisJCXN0cmNhdChidWYsICJdIik7CisKKwkJcG9ydCA9IHNpbjZfYWRkci0+c2luNl9wb3J0OworI2VuZGlmCisJfQorCWxvZ2luZm8oIkNvbm5lY3Rpb24gZnJvbSAlczolZCIsIGFkZHJidWYsIHBvcnQpOworCiAJZXhpdChleGVjdXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBjaGlsZF9oYW5kbGVyKGludCBzaWdubykKIHsKIAlmb3IgKDs7KSB7Ci0JCXBpZF90IHBpZCA9IHdhaXRwaWQoLTEsIE5VTEwsIFdOT0hBTkcpOworCQlpbnQgc3RhdHVzOworCQlwaWRfdCBwaWQgPSB3YWl0cGlkKC0xLCAmc3RhdHVzLCBXTk9IQU5HKTsKIAogCQlpZiAocGlkID4gMCkgewogCQkJdW5zaWduZWQgcmVhcGVkID0gY2hpbGRyZW5fcmVhcGVkOwogCQkJZGVhZF9jaGlsZFtyZWFwZWQgJSBNQVhfQ0hJTERSRU5dID0gcGlkOwogCQkJY2hpbGRyZW5fcmVhcGVkID0gcmVhcGVkICsgMTsKKwkJCS8qIFhYWDogQ3VzdG9tIGxvZ2dpbmcsIHNpbmNlIHdlIGRvbid0IHdhbm5hIGdldHBpZCgpICovCisJCQlpZiAodmVyYm9zZSkgeworCQkJCWNoYXIgKmRlYWQgPSAiIjsKKwkJCQlpZiAoIVdJRkVYSVRFRChzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHN0YXR1cykgPiAwKQorCQkJCQlkZWFkID0gIiAod2l0aCBlcnJvcikiOworCQkJCWlmIChsb2dfc3lzbG9nKQorCQkJCQlzeXNsb2coTE9HX0lORk8sICJbJWRdIERpc2Nvbm5lY3RlZCVzIiwgcGlkLCBkZWFkKTsKKwkJCQllbHNlCisJCQkJCWZwcmludGYoc3RkZXJyLCAiWyVkXSBEaXNjb25uZWN0ZWQlc1xuIiwgcGlkLCBkZWFkKTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBzZXJ2ZShpbnQgcG9ydCkKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgaW50IHNvY2tzZXR1cChpbnQgcG9ydCwgaW50ICoqc29ja2xpc3RfcCkKIHsKLQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKLQlpbnQgZ2FpOwogCWludCBzb2NrbnVtID0gMCwgKnNvY2tsaXN0ID0gTlVMTDsKIAlpbnQgbWF4ZmQgPSAtMTsKLQlmZF9zZXQgZmRzX2luaXQsIGZkczsKIAljaGFyIHBidWZbTklfTUFYU0VSVl07CiAKLQlzaWduYWwoU0lHQ0hMRCwgY2hpbGRfaGFuZGxlcik7CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJaW50IGdhaTsKIAogCXNwcmludGYocGJ1ZiwgIiVkIiwgcG9ydCk7CiAJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CkBAIC0yNDAsOCArNDQxLDYgQEAKIAlpZiAoZ2FpKQogCQlkaWUoImdldGFkZHJpbmZvKCkgZmFpbGVkOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGdhaSkpOwogCi0JRkRfWkVSTygmZmRzX2luaXQpOwotCiAJZm9yIChhaSA9IGFpMDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKIAkJaW50IHNvY2tmZDsKIAkJaW50ICpuZXdsaXN0OwpAQCAtMjgwLDIzICs0NzksNjMgQEAKIAkJc29ja2xpc3QgPSBuZXdsaXN0OwogCQlzb2NrbGlzdFtzb2NrbnVtKytdID0gc29ja2ZkOwogCi0JCUZEX1NFVChzb2NrZmQsICZmZHNfaW5pdCk7CiAJCWlmIChtYXhmZCA8IHNvY2tmZCkKIAkJCW1heGZkID0gc29ja2ZkOwogCX0KIAogCWZyZWVhZGRyaW5mbyhhaTApOwogCi0JaWYgKHNvY2tudW0gPT0gMCkKLQkJZGllKCJ1bmFibGUgdG8gYWxsb2NhdGUgYW55IGxpc3RlbiBzb2NrZXRzIG9uIHBvcnQgJXUiLCBwb3J0KTsKKwkqc29ja2xpc3RfcCA9IHNvY2tsaXN0OworCXJldHVybiBzb2NrbnVtOworfQorCisjZWxzZSAvKiBOT19JUFY2ICovCisKK3N0YXRpYyBpbnQgc29ja3NldHVwKGludCBwb3J0LCBpbnQgKipzb2NrbGlzdF9wKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHNvY2tmZDsKKworCXNvY2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisJaWYgKHNvY2tmZCA8IDApCisJCXJldHVybiAwOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZiBzaW4pOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisJc2luLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisKKwlpZiAoIGJpbmQoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mIHNpbikgPCAwICkgeworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwkqc29ja2xpc3RfcCA9IHhtYWxsb2Moc2l6ZW9mKGludCkpOworCSoqc29ja2xpc3RfcCA9IHNvY2tmZDsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgc2VydmljZV9sb29wKGludCBzb2NrbnVtLCBpbnQgKnNvY2tsaXN0KQoreworCXN0cnVjdCBwb2xsZmQgKnBmZDsKKwlpbnQgaTsKKworCXBmZCA9IHhjYWxsb2Moc29ja251bSwgc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2NrbnVtOyBpKyspIHsKKwkJcGZkW2ldLmZkID0gc29ja2xpc3RbaV07CisJCXBmZFtpXS5ldmVudHMgPSBQT0xMSU47CisJfQorCisJc2lnbmFsKFNJR0NITEQsIGNoaWxkX2hhbmRsZXIpOwogCiAJZm9yICg7OykgewogCQlpbnQgaTsKLQkJZmRzID0gZmRzX2luaXQ7Ci0JCQotCQlpZiAoc2VsZWN0KG1heGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKSB7CisKKwkJaWYgKHBvbGwocGZkLCBzb2NrbnVtLCAtMSkgPCAwKSB7CiAJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKLQkJCQllcnJvcigic2VsZWN0IGZhaWxlZCwgcmVzdW1pbmc6ICVzIiwKKwkJCQllcnJvcigicG9sbCBmYWlsZWQsIHJlc3VtaW5nOiAlcyIsCiAJCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsKIAkJCQlzbGVlcCgxKTsKIAkJCX0KQEAgLTMwNCwxMiArNTQzLDEwIEBACiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgc29ja251bTsgaSsrKSB7Ci0JCQlpbnQgc29ja2ZkID0gc29ja2xpc3RbaV07Ci0KLQkJCWlmIChGRF9JU1NFVChzb2NrZmQsICZmZHMpKSB7CisJCQlpZiAocGZkW2ldLnJldmVudHMgJiBQT0xMSU4pIHsKIAkJCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKLQkJCQlpbnQgc3NsZW4gPSBzaXplb2Yoc3MpOwotCQkJCWludCBpbmNvbWluZyA9IGFjY2VwdChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsICZzc2xlbik7CisJCQkJdW5zaWduZWQgaW50IHNzbGVuID0gc2l6ZW9mKHNzKTsKKwkJCQlpbnQgaW5jb21pbmcgPSBhY2NlcHQocGZkW2ldLmZkLCAoc3RydWN0IHNvY2thZGRyICopJnNzLCAmc3NsZW4pOwogCQkJCWlmIChpbmNvbWluZyA8IDApIHsKIAkJCQkJc3dpdGNoIChlcnJubykgewogCQkJCQljYXNlIEVBR0FJTjoKQEAgLTMyNiw2ICs1NjMsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc2VydmUoaW50IHBvcnQpCit7CisJaW50IHNvY2tudW0sICpzb2NrbGlzdDsKKworCXNvY2tudW0gPSBzb2Nrc2V0dXAocG9ydCwgJnNvY2tsaXN0KTsKKwlpZiAoc29ja251bSA9PSAwKQorCQlkaWUoInVuYWJsZSB0byBhbGxvY2F0ZSBhbnkgbGlzdGVuIHNvY2tldHMgb24gcG9ydCAldSIsIHBvcnQpOworCisJcmV0dXJuIHNlcnZpY2VfbG9vcChzb2NrbnVtLCBzb2NrbGlzdCk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlpbnQgcG9ydCA9IERFRkFVTFRfR0lUX1BPUlQ7CkBAIC0zNDQsMTEgKzU5MiwzNiBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9Ci0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1pbmV0ZCIpKSB7CiAJCQlpbmV0ZF9tb2RlID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQl2ZXJib3NlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc3lzbG9nIikpIHsKKwkJCWxvZ19zeXNsb2cgPSAxOworCQkJb3BlbmxvZygiZ2l0LWRhZW1vbiIsIDAsIExPR19EQUVNT04pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1leHBvcnQtYWxsIikpIHsKKwkJCWV4cG9ydF9hbGxfdHJlZXMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJuY21wKGFyZywgIi0tdGltZW91dD0iLCAxMCkpIHsKKwkJCXRpbWVvdXQgPSBhdG9pKGFyZysxMCk7CisJCX0KKwkJaWYgKCFzdHJuY21wKGFyZywgIi0taW5pdC10aW1lb3V0PSIsIDE1KSkgeworCQkJaW5pdF90aW1lb3V0ID0gYXRvaShhcmcrMTUpOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCW9rX3BhdGhzID0gJmFyZ3ZbaSsxXTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGFyZ1swXSAhPSAnLScpIHsKKwkJCW9rX3BhdGhzID0gJmFyZ3ZbaV07CisJCQlicmVhazsKKwkJfQogCiAJCXVzYWdlKGRhZW1vbl91c2FnZSk7CiAJfQpAQCAtMzU2LDcgKzYyOSw3IEBACiAJaWYgKGluZXRkX21vZGUpIHsKIAkJZmNsb3NlKHN0ZGVycik7IC8vRklYTUU6IHdvcmthcm91bmQKIAkJcmV0dXJuIGV4ZWN1dGUoKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc2VydmUocG9ydCk7CiAJfQotCi0JcmV0dXJuIHNlcnZlKHBvcnQpOwogfQpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IGI0NmYyY2UuLjYzZjVhMDkgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CiAgKi8KIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSAiY2FjaGUuaCIKQEAgLTM4NiwxMiArMzg1LDIzIEBACiAJcmV0dXJuIGVuZCAtIGRhdGU7CiB9CiAKK3N0YXRpYyBpbnQgZGF0ZV9zdHJpbmcodW5zaWduZWQgbG9uZyBkYXRlLCBpbnQgb2Zmc2V0LCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHNpZ24gPSAnKyc7CisKKwlpZiAob2Zmc2V0IDwgMCkgeworCQlvZmZzZXQgPSAtb2Zmc2V0OworCQlzaWduID0gJy0nOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBsZW4sICIlbHUgJWMlMDJkJTAyZCIsIGRhdGUsIHNpZ24sIG9mZnNldCAvIDYwLCBvZmZzZXQgJSA2MCk7Cit9CisKIC8qIEdyLiBzdHJwdGltZSBpcyBjcmFwIGZvciB0aGlzOyBpdCBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gcmVxdWlyZSBSRkMyODIyCiAgICAoaS5lLiBFbmdsaXNoKSBkYXkvbW9udGggbmFtZXMsIGFuZCBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggJXouICovCi12b2lkIHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgY2hhciAqcmVzdWx0LCBpbnQgbWF4bGVuKQoraW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgY2hhciAqcmVzdWx0LCBpbnQgbWF4bGVuKQogewogCXN0cnVjdCB0bSB0bTsKLQlpbnQgb2Zmc2V0LCBzaWduLCB0bV9nbXQ7CisJaW50IG9mZnNldCwgdG1fZ210OwogCXRpbWVfdCB0aGVuOwogCiAJbWVtc2V0KCZ0bSwgMCwgc2l6ZW9mKHRtKSk7CkBAIC00MzEsMTggKzQ0MSwxMSBAQAogCQlvZmZzZXQgPSAodGhlbiAtIG1rdGltZSgmdG0pKSAvIDYwOwogCiAJaWYgKHRoZW4gPT0gLTEpCi0JCXJldHVybjsKKwkJcmV0dXJuIC0xOwogCiAJaWYgKCF0bV9nbXQpCiAJCXRoZW4gLT0gb2Zmc2V0ICogNjA7Ci0KLQlzaWduID0gJysnOwotCWlmIChvZmZzZXQgPCAwKSB7Ci0JCW9mZnNldCA9IC1vZmZzZXQ7Ci0JCXNpZ24gPSAnLSc7Ci0JfQotCi0Jc25wcmludGYocmVzdWx0LCBtYXhsZW4sICIlbHUgJWMlMDJkJTAyZCIsIHRoZW4sIHNpZ24sIG9mZnNldC82MCwgb2Zmc2V0ICUgNjApOworCXJldHVybiBkYXRlX3N0cmluZyh0aGVuLCBvZmZzZXQsIHJlc3VsdCwgbWF4bGVuKTsKIH0KIAogdm9pZCBkYXRlc3RhbXAoY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKQEAgLTQ1NSw1ICs0NTgsNSBAQAogCW9mZnNldCA9IG15X21rdGltZShsb2NhbHRpbWUoJm5vdykpIC0gbm93OwogCW9mZnNldCAvPSA2MDsKIAotCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiVsdSAlKzA1ZCIsIG5vdywgb2Zmc2V0LzYwKjEwMCArIG9mZnNldCU2MCk7CisJZGF0ZV9zdHJpbmcobm93LCBvZmZzZXQsIGJ1ZiwgYnVmc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9kZWJpYW4vY2hhbmdlbG9nIGIvZGViaWFuL2NoYW5nZWxvZwppbmRleCBhNDhjODg5Li45Y2Y5MDBmIDEwMDY0NAotLS0gYS9kZWJpYW4vY2hhbmdlbG9nCisrKyBiL2RlYmlhbi9jaGFuZ2Vsb2cKQEAgLTEsMjYgKzEsNTcgQEAKLWdpdC1jb3JlICgwLjk5LjdkLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworZ2l0LWNvcmUgKDAuOTkuOWUtMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CiAKLSAgKiBHSVQgMC45OS43ZAorICAqIEdJVCAwLjk5LjllCiAKLSAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBTdW4sIDI1IFNlcCAyMDA1IDAwOjQwOjQ2IC0wNzAwCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU3VuLCAgNiBOb3YgMjAwNSAxODozNzoxOCAtMDgwMAogCi1naXQtY29yZSAoMC45OS43Yy0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKK2dpdC1jb3JlICgwLjk5LjlkLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwogCi0gICogR0lUIDAuOTkuN2MKKyAgKiBHSVQgMC45OS45ZAogCi0gLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU2F0LCAyNCBTZXAgMjAwNSAxMTozMzozNiAtMDcwMAorIC0tIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gIFNhdCwgIDUgTm92IDIwMDUgMTE6NDY6MzcgLTA4MDAKIAotZ2l0LWNvcmUgKDAuOTkuN2ItMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CitnaXQtY29yZSAoMC45OS45Yy0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKIAotICAqIEdJVCAwLjk5LjdiCisgICogR0lUIDAuOTkuOWMKIAotIC0tIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gIFRodSwgMjIgU2VwIDIwMDUgMjE6NDY6NDQgLTA3MDAKKyAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBUaHUsICAzIE5vdiAyMDA1IDE1OjQ0OjU0IC0wODAwCiAKLWdpdC1jb3JlICgwLjk5LjdhLTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworZ2l0LWNvcmUgKDAuOTkuOWItMCkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CiAKLSAgKiBHSVQgMC45OS43YQorICAqIEdJVCAwLjk5LjliCiAKLSAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBNb24sIDE5IFNlcCAyMDA1IDE5OjI5OjA3IC0wNzAwCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgVHVlLCAgMSBOb3YgMjAwNSAyMTozOTozOSAtMDgwMAorCitnaXQtY29yZSAoMC45OS45YS0wKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEdJVCAwLjk5LjlhCisKKyAtLSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+ICBTdW4sIDMwIE9jdCAyMDA1IDE1OjAzOjMyIC0wODAwCisKK2dpdC1jb3JlICgwLjk5LjkuR0lULTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVGVzdCBCdWlsZC4KKworIC0tIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gIFNhdCwgIDUgTm92IDIwMDUgMTE6MTg6MTMgLTA4MDAKKworZ2l0LWNvcmUgKDAuOTkuOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIFNwbGl0IHRoZSBnaXQtY29yZSBiaW5hcnkgcGFja2FnZSBpbnRvIGNvcmUsIGRvYywgYW5kIGZvcmVpZ24gU0NNCisgICAgaW50ZXJvcGVyYWJpbGl0eSBtb2R1bGVzLgorCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU2F0LCAgNSBOb3YgMjAwNSAxMToxODoxMyAtMDgwMAorCitnaXQtY29yZSAoMC45OS45LTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogR0lUIDAuOTkuOQorCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU2F0LCAyOSBPY3QgMjAwNSAxNDozNDozMCAtMDcwMAorCitnaXQtY29yZSAoMC45OS44LTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogR0lUIDAuOTkuOAorCisgLS0gSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiAgU3VuLCAgMiBPY3QgMjAwNSAxMjo1NDoyNiAtMDcwMAogCiBnaXQtY29yZSAoMC45OS43LTApIHVuc3RhYmxlOyB1cmdlbmN5PWxvdwogCmRpZmYgLS1naXQgYS9kZWJpYW4vY29udHJvbCBiL2RlYmlhbi9jb250cm9sCmluZGV4IDVkNzVjMzIuLjhjYzUyN2UgMTAwNjQ0Ci0tLSBhL2RlYmlhbi9jb250cm9sCisrKyBiL2RlYmlhbi9jb250cm9sCkBAIC0yLDE0ICsyLDE0IEBACiBTZWN0aW9uOiBkZXZlbAogUHJpb3JpdHk6IG9wdGlvbmFsCiBNYWludGFpbmVyOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+Ci1CdWlsZC1EZXBlbmRzLUluZGVwOiBsaWJ6LWRldiwgbGlic3NsLWRldiwgbGliY3VybDMtZGV2LCBhc2NpaWRvYyAoPj0gNi4wLjMpLCB4bWx0bywgZGViaGVscGVyICg+PSA0LjAuMCksIGJjCitCdWlsZC1EZXBlbmRzLUluZGVwOiBsaWJ6LWRldiwgbGlic3NsLWRldiwgbGliY3VybDMtZGV2fGxpYmN1cmwzLWdudXRscy1kZXZ8bGliY3VybDMtb3BlbnNzbC1kZXYsIGFzY2lpZG9jICg+PSA2LjAuMyksIHhtbHRvLCBkZWJoZWxwZXIgKD49IDQuMC4wKSwgYmMKIFN0YW5kYXJkcy1WZXJzaW9uOiAzLjYuMQogCiBQYWNrYWdlOiBnaXQtY29yZQogQXJjaGl0ZWN0dXJlOiBhbnkKLURlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke3Blcmw6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfSwgcGF0Y2gsIHJjcwotUmVjb21tZW5kczogcnN5bmMsIGN1cmwsIHNzaCwgbGlibWFpbC1zZW5kbWFpbC1wZXJsLCBsaWJlbWFpbC12YWxpZC1wZXJsLCBweXRob24gKD49IDIuNC4wKSwgbGVzcwotU3VnZ2VzdHM6IGNvZ2l0bworRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7cGVybDpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9LCByY3MKK1JlY29tbWVuZHM6IHJzeW5jLCBjdXJsLCBzc2gsIHB5dGhvbiAoPj0gMi40LjApLCBsZXNzCitTdWdnZXN0czogY29naXRvLCBwYXRjaAogQ29uZmxpY3RzOiBnaXQsIGNvZ2l0byAoPDwgMC4xMykKIERlc2NyaXB0aW9uOiBUaGUgZ2l0IGNvbnRlbnQgYWRkcmVzc2FibGUgZmlsZXN5c3RlbQogIEdJVCBjb21lcyBpbiB0d28gbGF5ZXJzLiBUaGUgYm90dG9tIGxheWVyIGlzIG1lcmVseSBhbiBleHRyZW1lbHkgZmFzdApAQCAtMTgsOSArMTgsNDYgQEAKICBlbmFibGVzIGh1bWFuIGJlaW5ncyB0byB3b3JrIHdpdGggdGhlIGRhdGFiYXNlIGluIGEgbWFubmVyIHRvIGEgZGVncmVlCiAgc2ltaWxhciB0byBvdGhlciBTQ00gdG9vbHMuCiAKK1BhY2thZ2U6IGdpdC1kb2MKK0FyY2hpdGVjdHVyZTogYWxsCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9LCBnaXQtY29yZQorRGVzY3JpcHRpb246IFRoZSBnaXQgY29udGVudCBhZGRyZXNzYWJsZSBmaWxlc3lzdGVtLCBEb2N1bWVudGF0aW9uCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24gZm9yIEdJVC4KKwogUGFja2FnZTogZ2l0LXRrCiBBcmNoaXRlY3R1cmU6IGFsbAogRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfSwgZ2l0LWNvcmUsIHRrOC40CiBEZXNjcmlwdGlvbjogVGhlIGdpdCBjb250ZW50IGFkZHJlc3NhYmxlIGZpbGVzeXN0ZW0sIEdVSSBhZGQtb24KICBUaGlzIHBhY2thZ2UgY29udGFpbnMgJ2dpdGsnLCB0aGUgZ2l0IHJldmlzaW9uIHRyZWUgdmlzdWFsaXplci4KIAorUGFja2FnZTogZ2l0LXN2bgorQXJjaGl0ZWN0dXJlOiBhbGwKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30sICR7cGVybDpEZXBlbmRzfSwgZ2l0LWNvcmUsIGxpYnN2bi1jb3JlLXBlcmwgKD49IDEuMi4xKQorU3VnZ2VzdHM6IHN1YnZlcnNpb24KK0Rlc2NyaXB0aW9uOiBUaGUgZ2l0IGNvbnRlbnQgYWRkcmVzc2FibGUgZmlsZXN5c3RlbSwgU1ZOIGludGVyb3BlcmFiaWxpdHkKKyBUaGlzIHBhY2thZ2UgY29udGFpbnMgJ2dpdC1zdm5pbXBvcnQnLCB0byBpbXBvcnQgZGV2ZWxvcG1lbnQgaGlzdG9yeSBmcm9tCisgU1ZOIHJlcG9zaXRvcmllcy4KKworUGFja2FnZTogZ2l0LWFyY2gKK0FyY2hpdGVjdHVyZTogYWxsCitEZXBlbmRzOiAke3NobGliczpEZXBlbmRzfSwgJHttaXNjOkRlcGVuZHN9LCAke3Blcmw6RGVwZW5kc30sIGdpdC1jb3JlCitTdWdnZXN0czogdGxhLCBiYXphYXIKK0Rlc2NyaXB0aW9uOiBUaGUgZ2l0IGNvbnRlbnQgYWRkcmVzc2FibGUgZmlsZXN5c3RlbSwgR05VQXJjaCBpbnRlcm9wZXJhYmlsaXR5CisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zICdnaXQtYXJjaGltcG9ydCcsIHRvIGltcG9ydCBkZXZlbG9wbWVudCBoaXN0b3J5IGZyb20KKyBHTlVBcmNoIHJlcG9zaXRvcmllcy4KKworUGFja2FnZTogZ2l0LWN2cworQXJjaGl0ZWN0dXJlOiBhbGwKK0RlcGVuZHM6ICR7c2hsaWJzOkRlcGVuZHN9LCAke21pc2M6RGVwZW5kc30sICR7cGVybDpEZXBlbmRzfSwgZ2l0LWNvcmUKK1N1Z2dlc3RzOiBjdnMKK0Rlc2NyaXB0aW9uOiBUaGUgZ2l0IGNvbnRlbnQgYWRkcmVzc2FibGUgZmlsZXN5c3RlbSwgQ1ZTIGludGVyb3BlcmFiaWxpdHkKKyBUaGlzIHBhY2thZ2UgY29udGFpbnMgJ2dpdC1jdnNpbXBvcnQnLCB0byBpbXBvcnQgZGV2ZWxvcG1lbnQgaGlzdG9yeSBmcm9tCisgQ1ZTIHJlcG9zaXRvcmllcy4KKworUGFja2FnZTogZ2l0LWVtYWlsCitBcmNoaXRlY3R1cmU6IGFsbAorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30sICR7bWlzYzpEZXBlbmRzfSwgZ2l0LWNvcmUsIGxpYm1haWwtc2VuZG1haWwtcGVybCwgbGliZW1haWwtdmFsaWQtcGVybAorRGVzY3JpcHRpb246IFRoZSBnaXQgY29udGVudCBhZGRyZXNzYWJsZSBmaWxlc3lzdGVtLCBlLW1haWwgYWRkLW9uCisgVGhpcyBwYWNrYWdlIGNvbnRhaW5zICdnaXQtc2VuZC1lbWFpbCcsIHRvIHNlbmQgYSBzZXJpZXMgb2YgcGF0Y2ggZS1tYWlscy4KKworCmRpZmYgLS1naXQgYS9kZWJpYW4vZ2l0LWFyY2guZmlsZXMgYi9kZWJpYW4vZ2l0LWFyY2guZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkNDY1NgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9naXQtYXJjaC5maWxlcwpAQCAtMCwwICsxLDIgQEAKKy91c3IvYmluL2dpdC1hcmNoaW1wb3J0CisvdXNyL3NoYXJlL2RvYy9naXQtY29yZS9naXQtYXJjaGltcG9ydC4qCmRpZmYgLS1naXQgYS9kZWJpYW4vZ2l0LWN2cy5maWxlcyBiL2RlYmlhbi9naXQtY3ZzLmZpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZjUwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZ2l0LWN2cy5maWxlcwpAQCAtMCwwICsxLDIgQEAKKy91c3IvYmluL2dpdC1jdnNpbXBvcnQKKy91c3Ivc2hhcmUvZG9jL2dpdC1jb3JlL2dpdC1jdnNpbXBvcnQuKgpkaWZmIC0tZ2l0IGEvZGViaWFuL2dpdC1kb2MuZmlsZXMgYi9kZWJpYW4vZ2l0LWRvYy5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjdmNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2dpdC1kb2MuZmlsZXMKQEAgLTAsMCArMSw3IEBACisvdXNyL3NoYXJlL2RvYy9naXQtY29yZS8qLnR4dAorL3Vzci9zaGFyZS9kb2MvZ2l0LWNvcmUvKi5odG1sCisvdXNyL3NoYXJlL2RvYy9naXQtY29yZS8qLyouaHRtbAorL3Vzci9zaGFyZS9kb2MvZ2l0LWNvcmUvKi8qLnR4dAorCisKKwpkaWZmIC0tZ2l0IGEvZGViaWFuL2dpdC1lbWFpbC5maWxlcyBiL2RlYmlhbi9naXQtZW1haWwuZmlsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM2NzU0YwotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9naXQtZW1haWwuZmlsZXMKQEAgLTAsMCArMSwyIEBACisvdXNyL2Jpbi9naXQtc2VuZC1lbWFpbAorL3Vzci9zaGFyZS9kb2MvZ2l0LWNvcmUvZ2l0LXNlbmQtZW1haWwuKgpkaWZmIC0tZ2l0IGEvZGViaWFuL2dpdC1zdm4uZmlsZXMgYi9kZWJpYW4vZ2l0LXN2bi5maWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTdiMTJhCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2dpdC1zdm4uZmlsZXMKQEAgLTAsMCArMSwyIEBACisvdXNyL2Jpbi9naXQtc3ZuaW1wb3J0CisvdXNyL3NoYXJlL2RvYy9naXQtY29yZS9naXQtc3ZuaW1wb3J0LioKZGlmZiAtLWdpdCBhL2RlYmlhbi9ydWxlcyBiL2RlYmlhbi9ydWxlcwppbmRleCA1NjhkNDMwLi40YWIyMjFjIDEwMDc1NQotLS0gYS9kZWJpYW4vcnVsZXMKKysrIGIvZGViaWFuL3J1bGVzCkBAIC00MSw3ICs0MSw3IEBACiBidWlsZDogZGViaWFuL2J1aWxkLXN0YW1wCiBkZWJpYW4vYnVpbGQtc3RhbXA6CiAJZGhfdGVzdGRpcgotCSQoTUFLRSkgcHJlZml4PSQoUFJFRklYKSBQWVRIT05fUEFUSD0vdXNyL2Jpbi9weXRob24yLjQgYWxsIGRvYyB0ZXN0CisJJChNQUtFKSBwcmVmaXg9JChQUkVGSVgpIFBZVEhPTl9QQVRIPS91c3IvYmluL3B5dGhvbjIuNCBhbGwgdGVzdCBkb2MKIAl0b3VjaCBkZWJpYW4vYnVpbGQtc3RhbXAKIAogZGViaWFuLWNsZWFuOgpAQCAtNjIsMTAgKzYyLDE1IEBACiAJbWFrZSBERVNURElSPSQoREVTVERJUikgcHJlZml4PSQoUFJFRklYKSBtYW5kaXI9JChNQU5ESVIpIFwKIAkJaW5zdGFsbCBpbnN0YWxsLWRvYwogCi0JbWtkaXIgLXAgJChET0NfREVTVERJUikKLQlmaW5kICQoRE9DKSAnKCcgLW5hbWUgJyoudHh0JyAtbyAtbmFtZSAnKi5odG1sJyAnKScgLWV4ZWMgaW5zdGFsbCB7fSAkKERPQ19ERVNURElSKSAnOycKKwltYWtlIC1DIERvY3VtZW50YXRpb24gREVTVERJUj0kKERFU1RESVIpIHByZWZpeD0kKFBSRUZJWCkgXAorCQlXRUJET0NfREVTVD0kKERPQ19ERVNURElSKSBpbnN0YWxsLXdlYmRvYwogCisJZGhfbW92ZWZpbGVzIC1wIGdpdC1hcmNoCisJZGhfbW92ZWZpbGVzIC1wIGdpdC1jdnMKKwlkaF9tb3ZlZmlsZXMgLXAgZ2l0LXN2bgogCWRoX21vdmVmaWxlcyAtcCBnaXQtdGsKKwlkaF9tb3ZlZmlsZXMgLXAgZ2l0LWVtYWlsCisJZGhfbW92ZWZpbGVzIC1wIGdpdC1kb2MKIAlkaF9tb3ZlZmlsZXMgLXAgZ2l0LWNvcmUKIAlmaW5kIGRlYmlhbi90bXAgLXR5cGUgZCAtbyAtcHJpbnQgfCBzZWQgLWUgJ3MvXi8/IC8nCiAKZGlmZiAtLWdpdCBhL2RpZmYtZmlsZXMuYyBiL2RpZmYtZmlsZXMuYwppbmRleCA4OWViMjliLi4xNzg5OTM5IDEwMDY0NAotLS0gYS9kaWZmLWZpbGVzLmMKKysrIGIvZGlmZi1maWxlcy5jCkBAIC0xMSw4NyArMTEsNjEgQEAKICJbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSBbPHBhdGg+Li4uXSIKIENPTU1PTl9ESUZGX09QVElPTlNfSEVMUDsKIAotc3RhdGljIGludCBkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7Ci1zdGF0aWMgaW50IGRpZmZfbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Ci1zdGF0aWMgaW50IGRldGVjdF9yZW5hbWUgPSAwOwotc3RhdGljIGludCBmaW5kX2NvcGllc19oYXJkZXIgPSAwOwotc3RhdGljIGludCBkaWZmX3NldHVwX29wdCA9IDA7Ci1zdGF0aWMgaW50IGRpZmZfc2NvcmVfb3B0ID0gMDsKLXN0YXRpYyBjb25zdCBjaGFyICpwaWNrYXhlID0gTlVMTDsKLXN0YXRpYyBpbnQgcGlja2F4ZV9vcHRzID0gMDsKLXN0YXRpYyBpbnQgZGlmZl9icmVha19vcHQgPSAtMTsKLXN0YXRpYyBjb25zdCBjaGFyICpvcmRlcmZpbGUgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfZmlsdGVyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0aW9uczsKIHN0YXRpYyBpbnQgc2lsZW50ID0gMDsKIAogc3RhdGljIHZvaWQgc2hvd191bm1lcmdlKGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JZGlmZl91bm1lcmdlKHBhdGgpOworCWRpZmZfdW5tZXJnZSgmZGlmZl9vcHRpb25zLCBwYXRoKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19maWxlKGludCBwZngsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7Ci0JZGlmZl9hZGRyZW1vdmUocGZ4LCBudG9obChjZS0+Y2VfbW9kZSksIGNlLT5zaGExLCBjZS0+bmFtZSwgTlVMTCk7CisJZGlmZl9hZGRyZW1vdmUoJmRpZmZfb3B0aW9ucywgcGZ4LCBudG9obChjZS0+Y2VfbW9kZSksCisJCSAgICAgICBjZS0+c2hhMSwgY2UtPm5hbWUsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X21vZGlmaWVkKGludCBvbGRtb2RlLCBpbnQgbW9kZSwKIAkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQkgIGNoYXIgKnBhdGgpCiB7Ci0JZGlmZl9jaGFuZ2Uob2xkbW9kZSwgbW9kZSwgb2xkX3NoYTEsIHNoYTEsIHBhdGgsIE5VTEwpOworCWRpZmZfY2hhbmdlKCZkaWZmX29wdGlvbnMsIG9sZG1vZGUsIG1vZGUsIG9sZF9zaGExLCBzaGExLCBwYXRoLCBOVUxMKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoraW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQogewotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG51bGxfc2hhMVsyMF0gPSB7IDAsIH07CiAJY29uc3QgY2hhciAqKnBhdGhzcGVjOwogCWNvbnN0IGNoYXIgKnByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIAlpbnQgZW50cmllcywgaTsKIAorCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlkaWZmX3NldHVwKCZkaWZmX29wdGlvbnMpOwogCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgewotCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXAiKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICItdSIpKQotCQkJZGlmZl9vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLSIpKSB7CisJCQlhcmd2Kys7CisJCQlhcmdjLS07CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXEiKSkKIAkJCXNpbGVudCA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1yIikpCiAJCQk7IC8qIG5vLW9wICovCiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1zIikpCiAJCQk7IC8qIG5vLW9wICovCi0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi16IikpCi0JCQlkaWZmX2xpbmVfdGVybWluYXRpb24gPSAwOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW5hbWUtb25seSIpKQotCQkJZGlmZl9vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTkFNRTsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLVIiKSkKLQkJCWRpZmZfc2V0dXBfb3B0IHw9IERJRkZfU0VUVVBfUkVWRVJTRTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndlsxXSwgIi1TIiwgMikpCi0JCQlwaWNrYXhlID0gYXJndlsxXSArIDI7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMV0sICItTyIsIDIpKQotCQkJb3JkZXJmaWxlID0gYXJndlsxXSArIDI7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGFyZ3ZbMV0sICItLWRpZmYtZmlsdGVyPSIsIDE0KSkKLQkJCWRpZmZfZmlsdGVyID0gYXJndlsxXSArIDE0OwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLXBpY2theGUtYWxsIikpCi0JCQlwaWNrYXhlX29wdHMgPSBESUZGX1BJQ0tBWEVfQUxMOwotCQllbHNlIGlmICghc3RybmNtcChhcmd2WzFdLCAiLUIiLCAyKSkgewotCQkJaWYgKChkaWZmX2JyZWFrX29wdCA9Ci0JCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJndlsxXSkpID09IC0xKQorCQllbHNlIHsKKwkJCWludCBkaWZmX29wdF9jbnQ7CisJCQlkaWZmX29wdF9jbnQgPSBkaWZmX29wdF9wYXJzZSgmZGlmZl9vcHRpb25zLAorCQkJCQkJICAgICAgYXJndisxLCBhcmdjLTEpOworCQkJaWYgKGRpZmZfb3B0X2NudCA8IDApCisJCQkJdXNhZ2UoZGlmZl9maWxlc191c2FnZSk7CisJCQllbHNlIGlmIChkaWZmX29wdF9jbnQpIHsKKwkJCQlhcmd2ICs9IGRpZmZfb3B0X2NudDsKKwkJCQlhcmdjIC09IGRpZmZfb3B0X2NudDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UKIAkJCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKIAkJfQotCQllbHNlIGlmICghc3RybmNtcChhcmd2WzFdLCAiLU0iLCAyKSkgewotCQkJaWYgKChkaWZmX3Njb3JlX29wdCA9Ci0JCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJndlsxXSkpID09IC0xKQotCQkJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOwotCQkJZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKLQkJfQotCQllbHNlIGlmICghc3RybmNtcChhcmd2WzFdLCAiLUMiLCAyKSkgewotCQkJaWYgKChkaWZmX3Njb3JlX29wdCA9Ci0JCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJndlsxXSkpID09IC0xKQotCQkJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOwotCQkJZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX0NPUFk7Ci0JCX0KLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1maW5kLWNvcGllcy1oYXJkZXIiKSkKLQkJCWZpbmRfY29waWVzX2hhcmRlciA9IDE7Ci0JCWVsc2UKLQkJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOwogCQlhcmd2Kys7IGFyZ2MtLTsKIAl9CiAKQEAgLTk5LDcgKzczLDcgQEAKIAlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyAxKTsKIAllbnRyaWVzID0gcmVhZF9jYWNoZSgpOwogCi0JaWYgKGZpbmRfY29waWVzX2hhcmRlciAmJiBkZXRlY3RfcmVuYW1lICE9IERJRkZfREVURUNUX0NPUFkpCisJaWYgKGRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRpb25zKSA8IDApCiAJCXVzYWdlKGRpZmZfZmlsZXNfdXNhZ2UpOwogCiAJLyogQXQgdGhpcyBwb2ludCwgaWYgYXJnYyA9PSAxLCB0aGVuIHdlIGFyZSBkb2luZyBldmVyeXRoaW5nLgpAQCAtMTEwLDExICs4NCw5IEBACiAJCWV4aXQoMSk7CiAJfQogCi0JZGlmZl9zZXR1cChkaWZmX3NldHVwX29wdCk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CiAJCXN0cnVjdCBzdGF0IHN0OwotCQl1bnNpZ25lZCBpbnQgb2xkbW9kZTsKKwkJdW5zaWduZWQgaW50IG9sZG1vZGUsIG5ld21vZGU7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CiAJCWludCBjaGFuZ2VkOwogCkBAIC0xNDEsMTggKzExMywyMCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCk7Ci0JCWlmICghY2hhbmdlZCAmJiAhZmluZF9jb3BpZXNfaGFyZGVyKQorCQlpZiAoIWNoYW5nZWQgJiYgIWRpZmZfb3B0aW9ucy5maW5kX2NvcGllc19oYXJkZXIpCiAJCQljb250aW51ZTsKIAkJb2xkbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKLQkJc2hvd19tb2RpZmllZChvbGRtb2RlLCBESUZGX0ZJTEVfQ0FOT05fTU9ERShzdC5zdF9tb2RlKSwKKworCQluZXdtb2RlID0gRElGRl9GSUxFX0NBTk9OX01PREUoc3Quc3RfbW9kZSk7CisJCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYKKwkJICAgIFNfSVNSRUcobmV3bW9kZSkgJiYgU19JU1JFRyhvbGRtb2RlKSAmJgorCQkgICAgKChuZXdtb2RlIF4gb2xkbW9kZSkgPT0gMDExMSkpCisJCQluZXdtb2RlID0gb2xkbW9kZTsKKwkJc2hvd19tb2RpZmllZChvbGRtb2RlLCBuZXdtb2RlLAogCQkJICAgICAgY2UtPnNoYTEsIChjaGFuZ2VkID8gbnVsbF9zaGExIDogY2UtPnNoYTEpLAogCQkJICAgICAgY2UtPm5hbWUpOwogCX0KLQlkaWZmY29yZV9zdGQocGF0aHNwZWMsIAotCQkgICAgIGRldGVjdF9yZW5hbWUsIGRpZmZfc2NvcmVfb3B0LAotCQkgICAgIHBpY2theGUsIHBpY2theGVfb3B0cywKLQkJICAgICBkaWZmX2JyZWFrX29wdCwKLQkJICAgICBvcmRlcmZpbGUsIGRpZmZfZmlsdGVyKTsKLQlkaWZmX2ZsdXNoKGRpZmZfb3V0cHV0X2Zvcm1hdCwgZGlmZl9saW5lX3Rlcm1pbmF0aW9uKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0aW9ucyk7CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRpb25zKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RpZmYtaGVscGVyLmMgYi9kaWZmLWhlbHBlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzQ5NTZlLi4wMDAwMDAwCi0tLSBhL2RpZmYtaGVscGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubwotICovCi0jaW5jbHVkZSAiY2FjaGUuaCIKLSNpbmNsdWRlICJzdHJidWYuaCIKLSNpbmNsdWRlICJkaWZmLmgiCi0KLXN0YXRpYyBjb25zdCBjaGFyICpwaWNrYXhlID0gTlVMTDsKLXN0YXRpYyBpbnQgcGlja2F4ZV9vcHRzID0gMDsKLXN0YXRpYyBjb25zdCBjaGFyICpvcmRlcmZpbGUgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfZmlsdGVyID0gTlVMTDsKLXN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Ci1zdGF0aWMgaW50IGludGVyX25hbWVfdGVybWluYXRpb24gPSAnXHQnOwotCi1zdGF0aWMgdm9pZCBmbHVzaF90aGVtKGludCBhYywgY29uc3QgY2hhciAqKmF2KQotewotCWRpZmZjb3JlX3N0ZF9ub19yZXNvbHZlKGF2ICsgMSwKLQkJCQlwaWNrYXhlLCBwaWNrYXhlX29wdHMsCi0JCQkJb3JkZXJmaWxlLCBkaWZmX2ZpbHRlcik7Ci0JZGlmZl9mbHVzaChESUZGX0ZPUk1BVF9QQVRDSCwgJ1xuJyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGRpZmZfaGVscGVyX3VzYWdlW10gPQotImdpdC1kaWZmLWhlbHBlciBbLXpdIFstTzxvcmRlcmZpbGU+XSBbLVM8c3RyaW5nPl0gWy0tcGlja2F4ZS1hbGxdIFs8cGF0aD4uLi5dIjsKLQotaW50IG1haW4oaW50IGFjLCBjb25zdCBjaGFyICoqYXYpIHsKLQlzdHJ1Y3Qgc3RyYnVmIHNiOwotCWNvbnN0IGNoYXIgKmdhcmJhZ2VfZmx1c2hfZm9ybWF0OwotCi0Jc3RyYnVmX2luaXQoJnNiKTsKLQotCXdoaWxlICgxIDwgYWMgJiYgYXZbMV1bMF0gPT0gJy0nKSB7Ci0JCWlmIChhdlsxXVsxXSA9PSAneicpCi0JCQlsaW5lX3Rlcm1pbmF0aW9uID0gaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiA9IDA7Ci0JCWVsc2UgaWYgKGF2WzFdWzFdID09ICdTJykgewotCQkJcGlja2F4ZSA9IGF2WzFdICsgMjsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGF2WzFdLCAiLS1waWNrYXhlLWFsbCIpKQotCQkJcGlja2F4ZV9vcHRzID0gRElGRl9QSUNLQVhFX0FMTDsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXZbMV0sICItLWRpZmYtZmlsdGVyPSIsIDE0KSkKLQkJCWRpZmZfZmlsdGVyID0gYXZbMV0gKyAxNDsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXZbMV0sICItTyIsIDIpKQotCQkJb3JkZXJmaWxlID0gYXZbMV0gKyAyOwotCQllbHNlCi0JCQl1c2FnZShkaWZmX2hlbHBlcl91c2FnZSk7Ci0JCWFjLS07IGF2Kys7Ci0JfQotCWdhcmJhZ2VfZmx1c2hfZm9ybWF0ID0gKGxpbmVfdGVybWluYXRpb24gPT0gMCkgPyAiJXMiIDogIiVzXG4iOwotCi0JLyogdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIGFyZSBwYXRocyBwYXR0ZXJucyAqLwotCi0JZGlmZl9zZXR1cCgwKTsKLQl3aGlsZSAoMSkgewotCQl1bnNpZ25lZCBvbGRfbW9kZSwgbmV3X21vZGU7Ci0JCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdLCBuZXdfc2hhMVsyMF07Ci0JCWNoYXIgb2xkX3BhdGhbUEFUSF9NQVhdOwotCQlpbnQgc3RhdHVzLCBzY29yZSwgdHdvX3BhdGhzOwotCQljaGFyIG5ld19wYXRoW1BBVEhfTUFYXTsKLQotCQlpbnQgY2g7Ci0JCWNoYXIgKmNwLCAqZXA7Ci0KLQkJcmVhZF9saW5lKCZzYiwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pOwotCQlpZiAoc2IuZW9mKQotCQkJYnJlYWs7Ci0JCXN3aXRjaCAoc2IuYnVmWzBdKSB7Ci0JCWNhc2UgJzonOgotCQkJLyogcGFyc2UgdGhlIGZpcnN0IHBhcnQgdXAgdG8gdGhlIHN0YXR1cyAqLwotCQkJY3AgPSBzYi5idWYgKyAxOwotCQkJb2xkX21vZGUgPSBuZXdfbW9kZSA9IDA7Ci0JCQl3aGlsZSAoKGNoID0gKmNwKSAmJiAoJzAnIDw9IGNoICYmIGNoIDw9ICc3JykpIHsKLQkJCQlvbGRfbW9kZSA9IChvbGRfbW9kZSA8PCAzKSB8IChjaCAtICcwJyk7Ci0JCQkJY3ArKzsKLQkJCX0KLQkJCWlmICgqY3ArKyAhPSAnICcpCi0JCQkJYnJlYWs7Ci0JCQl3aGlsZSAoKGNoID0gKmNwKSAmJiAoJzAnIDw9IGNoICYmIGNoIDw9ICc3JykpIHsKLQkJCQluZXdfbW9kZSA9IChuZXdfbW9kZSA8PCAzKSB8IChjaCAtICcwJyk7Ci0JCQkJY3ArKzsKLQkJCX0KLQkJCWlmICgqY3ArKyAhPSAnICcpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZ2V0X3NoYTFfaGV4KGNwLCBvbGRfc2hhMSkpCi0JCQkJYnJlYWs7Ci0JCQljcCArPSA0MDsKLQkJCWlmICgqY3ArKyAhPSAnICcpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZ2V0X3NoYTFfaGV4KGNwLCBuZXdfc2hhMSkpCi0JCQkJYnJlYWs7Ci0JCQljcCArPSA0MDsKLQkJCWlmICgqY3ArKyAhPSAnICcpCi0JCQkJYnJlYWs7Ci0JCQlzdGF0dXMgPSAqY3ArKzsKLQkJCWlmICghc3RyY2hyKCJBTUNSRFUiLCBzdGF0dXMpKQotCQkJCWJyZWFrOwotCQkJdHdvX3BhdGhzID0gc2NvcmUgPSAwOwotCQkJaWYgKHN0YXR1cyA9PSBESUZGX1NUQVRVU19SRU5BTUVEIHx8Ci0JCQkgICAgc3RhdHVzID09IERJRkZfU1RBVFVTX0NPUElFRCkKLQkJCQl0d29fcGF0aHMgPSAxOwotCi0JCQkvKiBwaWNrIHVwIHNjb3JlIGlmIGV4aXN0cyAqLwotCQkJaWYgKHNzY2FuZihjcCwgIiVkIiwgJnNjb3JlKSAhPSAxKQotCQkJCXNjb3JlID0gMDsKLQkJCWNwID0gc3RyY2hyKGNwLAotCQkJCSAgICBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKLQkJCWlmICghY3ApCi0JCQkJYnJlYWs7Ci0JCQlpZiAoKmNwKysgIT0gaW50ZXJfbmFtZV90ZXJtaW5hdGlvbikKLQkJCQlicmVhazsKLQotCQkJLyogZmlyc3QgcGF0aG5hbWUgKi8KLQkJCWlmICghbGluZV90ZXJtaW5hdGlvbikgewotCQkJCXJlYWRfbGluZSgmc2IsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKTsKLQkJCQlpZiAoc2IuZW9mKQotCQkJCQlicmVhazsKLQkJCQlzdHJjcHkob2xkX3BhdGgsIHNiLmJ1Zik7Ci0JCQl9Ci0JCQllbHNlIGlmICghdHdvX3BhdGhzKQotCQkJCXN0cmNweShvbGRfcGF0aCwgY3ApOwotCQkJZWxzZSB7Ci0JCQkJZXAgPSBzdHJjaHIoY3AsIGludGVyX25hbWVfdGVybWluYXRpb24pOwotCQkJCWlmICghZXApCi0JCQkJCWJyZWFrOwotCQkJCXN0cm5jcHkob2xkX3BhdGgsIGNwLCBlcC1jcCk7Ci0JCQkJb2xkX3BhdGhbZXAtY3BdID0gMDsKLQkJCQljcCA9IGVwICsgMTsKLQkJCX0KLQotCQkJLyogc2Vjb25kIHBhdGhuYW1lICovCi0JCQlpZiAoIXR3b19wYXRocykKLQkJCQlzdHJjcHkobmV3X3BhdGgsIG9sZF9wYXRoKTsKLQkJCWVsc2UgewotCQkJCWlmICghbGluZV90ZXJtaW5hdGlvbikgewotCQkJCQlyZWFkX2xpbmUoJnNiLCBzdGRpbiwKLQkJCQkJCSAgbGluZV90ZXJtaW5hdGlvbik7Ci0JCQkJCWlmIChzYi5lb2YpCi0JCQkJCQlicmVhazsKLQkJCQkJc3RyY3B5KG5ld19wYXRoLCBzYi5idWYpOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXN0cmNweShuZXdfcGF0aCwgY3ApOwotCQkJfQotCQkJZGlmZl9oZWxwZXJfaW5wdXQob2xkX21vZGUsIG5ld19tb2RlLAotCQkJCQkgIG9sZF9zaGExLCBuZXdfc2hhMSwKLQkJCQkJICBvbGRfcGF0aCwgc3RhdHVzLCBzY29yZSwKLQkJCQkJICBuZXdfcGF0aCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlmbHVzaF90aGVtKGFjLCBhdik7Ci0JCXByaW50ZihnYXJiYWdlX2ZsdXNoX2Zvcm1hdCwgc2IuYnVmKTsKLQl9Ci0JZmx1c2hfdGhlbShhYywgYXYpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZGlmZi1pbmRleC5jIGIvZGlmZi1pbmRleC5jCmluZGV4IGJjNDFkNTQuLmM5YTlmNGMgMTAwNjQ0Ci0tLSBhL2RpZmYtaW5kZXguYworKysgYi9kaWZmLWluZGV4LmMKQEAgLTIsMjYgKzIsMjAgQEAKICNpbmNsdWRlICJkaWZmLmgiCiAKIHN0YXRpYyBpbnQgY2FjaGVkX29ubHkgPSAwOwotc3RhdGljIGludCBkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7Ci1zdGF0aWMgaW50IGRpZmZfbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CiBzdGF0aWMgaW50IG1hdGNoX25vbmV4aXN0aW5nID0gMDsKLXN0YXRpYyBpbnQgZGV0ZWN0X3JlbmFtZSA9IDA7Ci1zdGF0aWMgaW50IGZpbmRfY29waWVzX2hhcmRlciA9IDA7Ci1zdGF0aWMgaW50IGRpZmZfc2V0dXBfb3B0ID0gMDsKLXN0YXRpYyBpbnQgZGlmZl9zY29yZV9vcHQgPSAwOwotc3RhdGljIGNvbnN0IGNoYXIgKnBpY2theGUgPSBOVUxMOwotc3RhdGljIGludCBwaWNrYXhlX29wdHMgPSAwOwotc3RhdGljIGludCBkaWZmX2JyZWFrX29wdCA9IC0xOwotc3RhdGljIGNvbnN0IGNoYXIgKm9yZGVyZmlsZSA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgY2hhciAqZGlmZl9maWx0ZXIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRpb25zOwogCiAvKiBBIGZpbGUgZW50cnkgd2VudCBhd2F5IG9yIGFwcGVhcmVkICovCi1zdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyB2b2lkIHNob3dfZmlsZShjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBtb2RlKQogewotCWRpZmZfYWRkcmVtb3ZlKHByZWZpeFswXSwgbnRvaGwobW9kZSksIHNoYTEsIGNlLT5uYW1lLCBOVUxMKTsKKwlkaWZmX2FkZHJlbW92ZSgmZGlmZl9vcHRpb25zLCBwcmVmaXhbMF0sIG50b2hsKG1vZGUpLAorCQkgICAgICAgc2hhMSwgY2UtPm5hbWUsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGdldF9zdGF0X2RhdGEoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgY2hhciAqKnNoYTFwLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQorc3RhdGljIGludCBnZXRfc3RhdF9kYXRhKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgdW5zaWduZWQgY2hhciAqKiBzaGExcCwgdW5zaWduZWQgaW50ICptb2RlcCkKIHsKIAl1bnNpZ25lZCBjaGFyICpzaGExID0gY2UtPnNoYTE7CiAJdW5zaWduZWQgaW50IG1vZGUgPSBjZS0+Y2VfbW9kZTsKQEAgLTQxLDYgKzM1LDEwIEBACiAJCWNoYW5nZWQgPSBjZV9tYXRjaF9zdGF0KGNlLCAmc3QpOwogCQlpZiAoY2hhbmdlZCkgewogCQkJbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKHN0LnN0X21vZGUpOworCQkJaWYgKCF0cnVzdF9leGVjdXRhYmxlX2JpdCAmJgorCQkJICAgIFNfSVNSRUcobW9kZSkgJiYgU19JU1JFRyhjZS0+Y2VfbW9kZSkgJiYKKwkJCSAgICAoKG1vZGUgXiBjZS0+Y2VfbW9kZSkgPT0gMDExMSkpCisJCQkJbW9kZSA9IGNlLT5jZV9tb2RlOwogCQkJc2hhMSA9IG5vX3NoYTE7CiAJCX0KIAl9CkBAIC01NSw3ICs1Myw5IEBACiAJdW5zaWduZWQgY2hhciAqc2hhMTsKIAl1bnNpZ25lZCBpbnQgbW9kZTsKIAotCS8qIE5ldyBmaWxlIGluIHRoZSBpbmRleDogaXQgbWlnaHQgYWN0dWFsbHkgYmUgZGlmZmVyZW50IGluIHRoZSB3b3JraW5nIGNvcHkgKi8KKwkvKiBOZXcgZmlsZSBpbiB0aGUgaW5kZXg6IGl0IG1pZ2h0IGFjdHVhbGx5IGJlIGRpZmZlcmVudCBpbgorCSAqIHRoZSB3b3JraW5nIGNvcHkuCisJICovCiAJaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUpIDwgMCkKIAkJcmV0dXJuOwogCkBAIC03NywxMyArNzcsMTMgQEAKIAogCW9sZG1vZGUgPSBvbGQtPmNlX21vZGU7CiAJaWYgKG1vZGUgPT0gb2xkbW9kZSAmJiAhbWVtY21wKHNoYTEsIG9sZC0+c2hhMSwgMjApICYmCi0JICAgICFmaW5kX2NvcGllc19oYXJkZXIpCisJICAgICFkaWZmX29wdGlvbnMuZmluZF9jb3BpZXNfaGFyZGVyKQogCQlyZXR1cm4gMDsKIAogCW1vZGUgPSBudG9obChtb2RlKTsKIAlvbGRtb2RlID0gbnRvaGwob2xkbW9kZSk7CiAKLQlkaWZmX2NoYW5nZShvbGRtb2RlLCBtb2RlLAorCWRpZmZfY2hhbmdlKCZkaWZmX29wdGlvbnMsIG9sZG1vZGUsIG1vZGUsCiAJCSAgICBvbGQtPnNoYTEsIHNoYTEsIG9sZC0+bmFtZSwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAkJCQlicmVhazsKIAkJCS8qIGZhbGx0aHJ1ICovCiAJCWNhc2UgMzoKLQkJCWRpZmZfdW5tZXJnZShjZS0+bmFtZSk7CisJCQlkaWZmX3VubWVyZ2UoJmRpZmZfb3B0aW9ucywgY2UtPm5hbWUpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTE2OCw3ICsxNjgsNyBAQAogIls8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCiBDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICp0cmVlX25hbWUgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CkBAIC0xODAsOCArMTgwLDExIEBACiAJaW50IGFsbG93X29wdGlvbnMgPSAxOwogCWludCBpOwogCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWRpZmZfc2V0dXAoJmRpZmZfb3B0aW9ucyk7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpbnQgZGlmZl9vcHRfY250OwogCiAJCWlmICghYWxsb3dfb3B0aW9ucyB8fCAqYXJnICE9ICctJykgewogCQkJaWYgKHRyZWVfbmFtZSkKQEAgLTE5OCw2MCArMjAxLDE1IEBACiAJCQkvKiBXZSBhY2NlcHQgdGhlIC1yIGZsYWcganVzdCB0byBsb29rIGxpa2UgZ2l0LWRpZmYtdHJlZSAqLwogCQkJY29udGludWU7CiAJCX0KLQkJLyogV2UgYWNjZXB0IHRoZSAtdSBmbGFnIGFzIGEgc3lub255bSBmb3IgIi1wIiAqLwotCQlpZiAoIXN0cmNtcChhcmcsICItcCIpIHx8ICFzdHJjbXAoYXJnLCAiLXUiKSkgewotCQkJZGlmZl9vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWRpZmZfb3B0X2NudCA9IGRpZmZfb3B0X3BhcnNlKCZkaWZmX29wdGlvbnMsIGFyZ3YgKyBpLAorCQkJCQkgICAgICBhcmdjIC0gaSk7CisJCWlmIChkaWZmX29wdF9jbnQgPCAwKQorCQkJdXNhZ2UoZGlmZl9jYWNoZV91c2FnZSk7CisJCWVsc2UgaWYgKGRpZmZfb3B0X2NudCkgeworCQkJaSArPSBkaWZmX29wdF9jbnQgLSAxOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFzdHJuY21wKGFyZywgIi1CIiwgMikpIHsKLQkJCWlmICgoZGlmZl9icmVha19vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQotCQkJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJuY21wKGFyZywgIi1NIiwgMikpIHsKLQkJCWRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7Ci0JCQlpZiAoKGRpZmZfc2NvcmVfb3B0ID0gZGlmZl9zY29yZW9wdF9wYXJzZShhcmcpKSA9PSAtMSkKLQkJCQl1c2FnZShkaWZmX2NhY2hlX3VzYWdlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RybmNtcChhcmcsICItQyIsIDIpKSB7Ci0JCQlkZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfQ09QWTsKLQkJCWlmICgoZGlmZl9zY29yZV9vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQotCQkJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1maW5kLWNvcGllcy1oYXJkZXIiKSkgewotCQkJZmluZF9jb3BpZXNfaGFyZGVyID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi16IikpIHsKLQkJCWRpZmZfbGluZV90ZXJtaW5hdGlvbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtb25seSIpKSB7Ci0JCQlkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OQU1FOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLVIiKSkgewotCQkJZGlmZl9zZXR1cF9vcHQgfD0gRElGRl9TRVRVUF9SRVZFUlNFOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJuY21wKGFyZywgIi1TIiwgMikpIHsKLQkJCXBpY2theGUgPSBhcmcgKyAyOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJuY21wKGFyZywgIi0tZGlmZi1maWx0ZXI9IiwgMTQpKSB7Ci0JCQlkaWZmX2ZpbHRlciA9IGFyZyArIDE0OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJuY21wKGFyZywgIi1PIiwgMikpIHsKLQkJCW9yZGVyZmlsZSA9IGFyZyArIDI7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXBpY2theGUtYWxsIikpIHsKLQkJCXBpY2theGVfb3B0cyA9IERJRkZfUElDS0FYRV9BTEw7Ci0JCQljb250aW51ZTsKLQkJfQorCiAJCWlmICghc3RyY21wKGFyZywgIi1tIikpIHsKIAkJCW1hdGNoX25vbmV4aXN0aW5nID0gMTsKIAkJCWNvbnRpbnVlOwpAQCAtMjY1LDcgKzIyMyw3IEBACiAKIAlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YgKyBpKTsKIAotCWlmIChmaW5kX2NvcGllc19oYXJkZXIgJiYgZGV0ZWN0X3JlbmFtZSAhPSBESUZGX0RFVEVDVF9DT1BZKQorCWlmIChkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0aW9ucykgPCAwKQogCQl1c2FnZShkaWZmX2NhY2hlX3VzYWdlKTsKIAogCWlmICghdHJlZV9uYW1lIHx8IGdldF9zaGExKHRyZWVfbmFtZSwgc2hhMSkpCkBAIC0yNzMsOSArMjMxLDYgQEAKIAogCXJlYWRfY2FjaGUoKTsKIAotCS8qIFRoZSByZXN0IGlzIGZvciBwYXRocyByZXN0cmljdGlvbi4gKi8KLQlkaWZmX3NldHVwKGRpZmZfc2V0dXBfb3B0KTsKLQogCW1hcmtfbWVyZ2VfZW50cmllcygpOwogCiAJdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIE5VTEwpOwpAQCAtMjg2LDExICsyNDEsNyBAQAogCiAJcmV0ID0gZGlmZl9jYWNoZShhY3RpdmVfY2FjaGUsIGFjdGl2ZV9uciwgcGF0aHNwZWMpOwogCi0JZGlmZmNvcmVfc3RkKHBhdGhzcGVjLAotCQkgICAgIGRldGVjdF9yZW5hbWUsIGRpZmZfc2NvcmVfb3B0LAotCQkgICAgIHBpY2theGUsIHBpY2theGVfb3B0cywKLQkJICAgICBkaWZmX2JyZWFrX29wdCwKLQkJICAgICBvcmRlcmZpbGUsIGRpZmZfZmlsdGVyKTsKLQlkaWZmX2ZsdXNoKGRpZmZfb3V0cHV0X2Zvcm1hdCwgZGlmZl9saW5lX3Rlcm1pbmF0aW9uKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0aW9ucyk7CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRpb25zKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZGlmZi1zdGFnZXMuYyBiL2RpZmYtc3RhZ2VzLmMKaW5kZXggMmU5YzBiYy4uODUxNzBiMiAxMDA2NDQKLS0tIGEvZGlmZi1zdGFnZXMuYworKysgYi9kaWZmLXN0YWdlcy5jCkBAIC01LDE3ICs1LDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImRpZmYuaCIKIAotc3RhdGljIGludCBkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7Ci1zdGF0aWMgaW50IGRpZmZfbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Ci1zdGF0aWMgaW50IGRldGVjdF9yZW5hbWUgPSAwOwotc3RhdGljIGludCBmaW5kX2NvcGllc19oYXJkZXIgPSAwOwotc3RhdGljIGludCBkaWZmX3NldHVwX29wdCA9IDA7Ci1zdGF0aWMgaW50IGRpZmZfc2NvcmVfb3B0ID0gMDsKLXN0YXRpYyBjb25zdCBjaGFyICpwaWNrYXhlID0gTlVMTDsKLXN0YXRpYyBpbnQgcGlja2F4ZV9vcHRzID0gMDsKLXN0YXRpYyBpbnQgZGlmZl9icmVha19vcHQgPSAtMTsKLXN0YXRpYyBjb25zdCBjaGFyICpvcmRlcmZpbGUgPSBOVUxMOwotc3RhdGljIGNvbnN0IGNoYXIgKmRpZmZfZmlsdGVyID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0aW9uczsKIAogc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9zdGFnZXNfdXNhZ2VbXSA9CiAiZ2l0LWRpZmYtc3RhZ2VzIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDxzdGFnZTE+IDxzdGFnZTI+IFs8cGF0aD4uLi5dIgpAQCAtNDcsMTUgKzM3LDE2IEBACiAJCWlmICghb25lICYmICF0d28pCiAJCQljb250aW51ZTsKIAkJaWYgKCFvbmUpCi0JCQlkaWZmX2FkZHJlbW92ZSgnKycsIG50b2hsKHR3by0+Y2VfbW9kZSksCisJCQlkaWZmX2FkZHJlbW92ZSgmZGlmZl9vcHRpb25zLCAnKycsIG50b2hsKHR3by0+Y2VfbW9kZSksCiAJCQkJICAgICAgIHR3by0+c2hhMSwgbmFtZSwgTlVMTCk7CiAJCWVsc2UgaWYgKCF0d28pCi0JCQlkaWZmX2FkZHJlbW92ZSgnLScsIG50b2hsKG9uZS0+Y2VfbW9kZSksCisJCQlkaWZmX2FkZHJlbW92ZSgmZGlmZl9vcHRpb25zLCAnLScsIG50b2hsKG9uZS0+Y2VfbW9kZSksCiAJCQkJICAgICAgIG9uZS0+c2hhMSwgbmFtZSwgTlVMTCk7CiAJCWVsc2UgaWYgKG1lbWNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSwgMjApIHx8CiAJCQkgKG9uZS0+Y2VfbW9kZSAhPSB0d28tPmNlX21vZGUpIHx8Ci0JCQkgZmluZF9jb3BpZXNfaGFyZGVyKQotCQkJZGlmZl9jaGFuZ2UobnRvaGwob25lLT5jZV9tb2RlKSwgbnRvaGwodHdvLT5jZV9tb2RlKSwKKwkJCSBkaWZmX29wdGlvbnMuZmluZF9jb3BpZXNfaGFyZGVyKQorCQkJZGlmZl9jaGFuZ2UoJmRpZmZfb3B0aW9ucywKKwkJCQkgICAgbnRvaGwob25lLT5jZV9tb2RlKSwgbnRvaGwodHdvLT5jZV9tb2RlKSwKIAkJCQkgICAgb25lLT5zaGExLCB0d28tPnNoYTEsIG5hbWUsIE5VTEwpOwogCX0KIH0KQEAgLTY1LDQ0ICs1NiwyNSBAQAogCWludCBzdGFnZTEsIHN0YWdlMjsKIAogCXJlYWRfY2FjaGUoKTsKKwlkaWZmX3NldHVwKCZkaWZmX29wdGlvbnMpOwogCXdoaWxlICgxIDwgYWMgJiYgYXZbMV1bMF0gPT0gJy0nKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGF2WzFdOwogCQlpZiAoIXN0cmNtcChhcmcsICItciIpKQogCQkJOyAvKiBhcyB1c3VhbCAqLwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi1wIikgfHwgIXN0cmNtcChhcmcsICItdSIpKQotCQkJZGlmZl9vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1CIiwgMikpIHsKLQkJCWlmICgoZGlmZl9icmVha19vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQorCQllbHNlIHsKKwkJCWludCBkaWZmX29wdF9jbnQ7CisJCQlkaWZmX29wdF9jbnQgPSBkaWZmX29wdF9wYXJzZSgmZGlmZl9vcHRpb25zLAorCQkJCQkJICAgICAgYXYrMSwgYWMtMSk7CisJCQlpZiAoZGlmZl9vcHRfY250IDwgMCkKKwkJCQl1c2FnZShkaWZmX3N0YWdlc191c2FnZSk7CisJCQllbHNlIGlmIChkaWZmX29wdF9jbnQpIHsKKwkJCQlhdiArPSBkaWZmX29wdF9jbnQ7CisJCQkJYWMgLT0gZGlmZl9vcHRfY250OworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZWxzZQogCQkJCXVzYWdlKGRpZmZfc3RhZ2VzX3VzYWdlKTsKIAkJfQotCQllbHNlIGlmICghc3RybmNtcChhcmcsICItTSIsIDIpKSB7Ci0JCQlkZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOwotCQkJaWYgKChkaWZmX3Njb3JlX29wdCA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCi0JCQkJdXNhZ2UoZGlmZl9zdGFnZXNfdXNhZ2UpOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1DIiwgMikpIHsKLQkJCWRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9DT1BZOwotCQkJaWYgKChkaWZmX3Njb3JlX29wdCA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCi0JCQkJdXNhZ2UoZGlmZl9zdGFnZXNfdXNhZ2UpOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1maW5kLWNvcGllcy1oYXJkZXIiKSkKLQkJCWZpbmRfY29waWVzX2hhcmRlciA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkKLQkJCWRpZmZfbGluZV90ZXJtaW5hdGlvbiA9IDA7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uYW1lLW9ubHkiKSkKLQkJCWRpZmZfb3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05BTUU7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLVIiKSkKLQkJCWRpZmZfc2V0dXBfb3B0IHw9IERJRkZfU0VUVVBfUkVWRVJTRTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLVMiLCAyKSkKLQkJCXBpY2theGUgPSBhcmcgKyAyOwotCQllbHNlIGlmICghc3RybmNtcChhcmcsICItTyIsIDIpKQotCQkJb3JkZXJmaWxlID0gYXJnICsgMjsKLQkJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLS1kaWZmLWZpbHRlcj0iLCAxNCkpCi0JCQlkaWZmX2ZpbHRlciA9IGFyZyArIDE0OwotCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGlja2F4ZS1hbGwiKSkKLQkJCXBpY2theGVfb3B0cyA9IERJRkZfUElDS0FYRV9BTEw7Ci0JCWVsc2UKLQkJCXVzYWdlKGRpZmZfc3RhZ2VzX3VzYWdlKTsKIAkJYWMtLTsgYXYrKzsKIAl9CiAKQEAgLTExMCwyMSArODIsMTcgQEAKIAkgICAgc3NjYW5mKGF2WzFdLCAiJWQiLCAmc3RhZ2UxKSAhPSAxIHx8CiAJICAgICEgKDAgPD0gc3RhZ2UxICYmIHN0YWdlMSA8PSAzKSB8fAogCSAgICBzc2NhbmYoYXZbMl0sICIlZCIsICZzdGFnZTIpICE9IDEgfHwKLQkgICAgISAoMCA8PSBzdGFnZTIgJiYgc3RhZ2UyIDw9IDMpIHx8Ci0JICAgIChmaW5kX2NvcGllc19oYXJkZXIgJiYgZGV0ZWN0X3JlbmFtZSAhPSBESUZGX0RFVEVDVF9DT1BZKSkKKwkgICAgISAoMCA8PSBzdGFnZTIgJiYgc3RhZ2UyIDw9IDMpKQogCQl1c2FnZShkaWZmX3N0YWdlc191c2FnZSk7CiAKIAlhdiArPSAzOyAvKiBUaGUgcmVzdCBmcm9tIGF2WzBdIGFyZSBmb3IgcGF0aHMgcmVzdHJpY3Rpb24uICovCi0JZGlmZl9zZXR1cChkaWZmX3NldHVwX29wdCk7CisJZGlmZl9vcHRpb25zLnBhdGhzID0gYXY7CisKKwlpZiAoZGlmZl9zZXR1cF9kb25lKCZkaWZmX29wdGlvbnMpIDwgMCkKKwkJdXNhZ2UoZGlmZl9zdGFnZXNfdXNhZ2UpOwogCiAJZGlmZl9zdGFnZXMoc3RhZ2UxLCBzdGFnZTIpOwotCi0JZGlmZmNvcmVfc3RkKGF2LAotCQkgICAgIGRldGVjdF9yZW5hbWUsIGRpZmZfc2NvcmVfb3B0LAotCQkgICAgIHBpY2theGUsIHBpY2theGVfb3B0cywKLQkJICAgICBkaWZmX2JyZWFrX29wdCwKLQkJICAgICBvcmRlcmZpbGUsCi0JCSAgICAgZGlmZl9maWx0ZXIpOwotCWRpZmZfZmx1c2goZGlmZl9vdXRwdXRfZm9ybWF0LCBkaWZmX2xpbmVfdGVybWluYXRpb24pOworCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRpb25zKTsKKwlkaWZmX2ZsdXNoKCZkaWZmX29wdGlvbnMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZGlmZi10cmVlLmMgYi9kaWZmLXRyZWUuYwppbmRleCBlOGY1ZDFiLi5lZDMyM2Q4IDEwMDY0NAotLS0gYS9kaWZmLXRyZWUuYworKysgYi9kaWZmLXRyZWUuYwpAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgpAQCAtNiwyODUgKzUsMzQgQEAKIHN0YXRpYyBpbnQgc2hvd19yb290X2RpZmYgPSAwOwogc3RhdGljIGludCB2ZXJib3NlX2hlYWRlciA9IDA7CiBzdGF0aWMgaW50IGlnbm9yZV9tZXJnZXMgPSAxOwotc3RhdGljIGludCByZWN1cnNpdmUgPSAwOwotc3RhdGljIGludCBzaG93X3RyZWVfZW50cnlfaW5fcmVjdXJzaXZlID0gMDsKIHN0YXRpYyBpbnQgcmVhZF9zdGRpbiA9IDA7Ci1zdGF0aWMgaW50IGRpZmZfb3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKLXN0YXRpYyBpbnQgZGlmZl9saW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKLXN0YXRpYyBpbnQgZGV0ZWN0X3JlbmFtZSA9IDA7Ci1zdGF0aWMgaW50IGZpbmRfY29waWVzX2hhcmRlciA9IDA7Ci1zdGF0aWMgaW50IGRpZmZfc2V0dXBfb3B0ID0gMDsKLXN0YXRpYyBpbnQgZGlmZl9zY29yZV9vcHQgPSAwOwotc3RhdGljIGNvbnN0IGNoYXIgKnBpY2theGUgPSBOVUxMOwotc3RhdGljIGludCBwaWNrYXhlX29wdHMgPSAwOwotc3RhdGljIGludCBkaWZmX2JyZWFrX29wdCA9IC0xOwotc3RhdGljIGNvbnN0IGNoYXIgKm9yZGVyZmlsZSA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgY2hhciAqZGlmZl9maWx0ZXIgPSBOVUxMOworCiBzdGF0aWMgY29uc3QgY2hhciAqaGVhZGVyID0gTlVMTDsKIHN0YXRpYyBjb25zdCBjaGFyICpoZWFkZXJfcHJlZml4ID0gIiI7CiBzdGF0aWMgZW51bSBjbWl0X2ZtdCBjb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfUkFXOwogCi0vLyBXaGF0IHBhdGhzIGFyZSB3ZSBpbnRlcmVzdGVkIGluPwotc3RhdGljIGludCBucl9wYXRocyA9IDA7Ci1zdGF0aWMgY29uc3QgY2hhciAqKnBhdGhzID0gTlVMTDsKLXN0YXRpYyBpbnQgKnBhdGhsZW5zID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0aW9uczsKIAotc3RhdGljIGludCBkaWZmX3RyZWVfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpvbGQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgY29uc3QgY2hhciAqYmFzZSk7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHZvaWQgKipidWZwLCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3N0YXRpYyB2b2lkIGNhbGxfZGlmZl9zZXR1cF9kb25lKHZvaWQpCiB7Ci0Jdm9pZCAqYnVmID0gKmJ1ZnA7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gKnNpemVwOwotCWludCBsZW4gPSBzdHJsZW4oYnVmKSArIDEgKyAyMDsKLQotCWlmIChzaXplIDwgbGVuKQotCQlkaWUoImNvcnJ1cHQgdHJlZSBmaWxlIik7Ci0JKmJ1ZnAgPSBidWYgKyBsZW47Ci0JKnNpemVwID0gc2l6ZSAtIGxlbjsKLX0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhY3Qodm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICoqcGF0aHAsIHVuc2lnbmVkIGludCAqbW9kZXApCi17Ci0JaW50IGxlbiA9IHN0cmxlbih0cmVlKSsxOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSB0cmVlICsgbGVuOwotCWNvbnN0IGNoYXIgKnBhdGggPSBzdHJjaHIodHJlZSwgJyAnKTsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQotCWlmICghcGF0aCB8fCBzaXplIDwgbGVuICsgMjAgfHwgc3NjYW5mKHRyZWUsICIlbyIsICZtb2RlKSAhPSAxKQotCQlkaWUoImNvcnJ1cHQgdHJlZSBmaWxlIik7Ci0JKnBhdGhwID0gcGF0aCsxOwotCSptb2RlcCA9IERJRkZfRklMRV9DQU5PTl9NT0RFKG1vZGUpOwotCXJldHVybiBzaGExOwotfQotCi1zdGF0aWMgY2hhciAqbWFsbG9jX2Jhc2UoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4pCi17Ci0JaW50IGJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7Ci0JY2hhciAqbmV3YmFzZSA9IHhtYWxsb2MoYmFzZWxlbiArIHBhdGhsZW4gKyAyKTsKLQltZW1jcHkobmV3YmFzZSwgYmFzZSwgYmFzZWxlbik7Ci0JbWVtY3B5KG5ld2Jhc2UgKyBiYXNlbGVuLCBwYXRoLCBwYXRobGVuKTsKLQltZW1jcHkobmV3YmFzZSArIGJhc2VsZW4gKyBwYXRobGVuLCAiLyIsIDIpOwotCXJldHVybiBuZXdiYXNlOwotfQotCi1zdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqcHJlZml4LCB2b2lkICp0cmVlLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKmJhc2UpOwotc3RhdGljIHZvaWQgc2hvd190cmVlKGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpiYXNlKTsKLQotLyogQSBmaWxlIGVudHJ5IHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLwotc3RhdGljIHZvaWQgc2hvd19maWxlKGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqdHJlZSwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpiYXNlKQotewotCXVuc2lnbmVkIG1vZGU7Ci0JY29uc3QgY2hhciAqcGF0aDsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gZXh0cmFjdCh0cmVlLCBzaXplLCAmcGF0aCwgJm1vZGUpOwotCi0JaWYgKHJlY3Vyc2l2ZSAmJiBTX0lTRElSKG1vZGUpKSB7Ci0JCWNoYXIgdHlwZVsyMF07Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIHBhdGgsIHN0cmxlbihwYXRoKSk7Ci0JCXZvaWQgKnRyZWU7Ci0KLQkJdHJlZSA9IHJlYWRfc2hhMV9maWxlKHNoYTEsIHR5cGUsICZzaXplKTsKLQkJaWYgKCF0cmVlIHx8IHN0cmNtcCh0eXBlLCAidHJlZSIpKQotCQkJZGllKCJjb3JydXB0IHRyZWUgc2hhICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCi0JCXNob3dfdHJlZShwcmVmaXgsIHRyZWUsIHNpemUsIG5ld2Jhc2UpOwotCi0JCWZyZWUodHJlZSk7Ci0JCWZyZWUobmV3YmFzZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkaWZmX2FkZHJlbW92ZShwcmVmaXhbMF0sIG1vZGUsIHNoYTEsIGJhc2UsIHBhdGgpOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVfdHJlZV9lbnRyeSh2b2lkICp0cmVlMSwgdW5zaWduZWQgbG9uZyBzaXplMSwgdm9pZCAqdHJlZTIsIHVuc2lnbmVkIGxvbmcgc2l6ZTIsIGNvbnN0IGNoYXIgKmJhc2UpCi17Ci0JdW5zaWduZWQgbW9kZTEsIG1vZGUyOwotCWNvbnN0IGNoYXIgKnBhdGgxLCAqcGF0aDI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgKnNoYTI7Ci0JaW50IGNtcCwgcGF0aGxlbjEsIHBhdGhsZW4yOwotCi0Jc2hhMSA9IGV4dHJhY3QodHJlZTEsIHNpemUxLCAmcGF0aDEsICZtb2RlMSk7Ci0Jc2hhMiA9IGV4dHJhY3QodHJlZTIsIHNpemUyLCAmcGF0aDIsICZtb2RlMik7Ci0KLQlwYXRobGVuMSA9IHN0cmxlbihwYXRoMSk7Ci0JcGF0aGxlbjIgPSBzdHJsZW4ocGF0aDIpOwotCWNtcCA9IGJhc2VfbmFtZV9jb21wYXJlKHBhdGgxLCBwYXRobGVuMSwgbW9kZTEsIHBhdGgyLCBwYXRobGVuMiwgbW9kZTIpOwotCWlmIChjbXAgPCAwKSB7Ci0JCXNob3dfZmlsZSgiLSIsIHRyZWUxLCBzaXplMSwgYmFzZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKGNtcCA+IDApIHsKLQkJc2hvd19maWxlKCIrIiwgdHJlZTIsIHNpemUyLCBiYXNlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmICghZmluZF9jb3BpZXNfaGFyZGVyICYmICFtZW1jbXAoc2hhMSwgc2hhMiwgMjApICYmIG1vZGUxID09IG1vZGUyKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgdGhlIGZpbGVtb2RlIGhhcyBjaGFuZ2VkIHRvL2Zyb20gYSBkaXJlY3RvcnkgZnJvbS90byBhIHJlZ3VsYXIKLQkgKiBmaWxlLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGl0IGEgcmVtb3ZlIGFuZCBhbiBhZGQuCi0JICovCi0JaWYgKFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKSB7Ci0JCXNob3dfZmlsZSgiLSIsIHRyZWUxLCBzaXplMSwgYmFzZSk7Ci0JCXNob3dfZmlsZSgiKyIsIHRyZWUyLCBzaXplMiwgYmFzZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChyZWN1cnNpdmUgJiYgU19JU0RJUihtb2RlMSkpIHsKLQkJaW50IHJldHZhbDsKLQkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIHBhdGgxLCBwYXRobGVuMSk7Ci0JCWlmIChzaG93X3RyZWVfZW50cnlfaW5fcmVjdXJzaXZlKQotCQkJZGlmZl9jaGFuZ2UobW9kZTEsIG1vZGUyLCBzaGExLCBzaGEyLCBiYXNlLCBwYXRoMSk7Ci0JCXJldHZhbCA9IGRpZmZfdHJlZV9zaGExKHNoYTEsIHNoYTIsIG5ld2Jhc2UpOwotCQlmcmVlKG5ld2Jhc2UpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWRpZmZfY2hhbmdlKG1vZGUxLCBtb2RlMiwgc2hhMSwgc2hhMiwgYmFzZSwgcGF0aDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGludGVyZXN0aW5nKHZvaWQgKnRyZWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqYmFzZSkKLXsKLQljb25zdCBjaGFyICpwYXRoOwotCXVuc2lnbmVkIG1vZGU7Ci0JaW50IGk7Ci0JaW50IGJhc2VsZW4sIHBhdGhsZW47Ci0KLQlpZiAoIW5yX3BhdGhzKQotCQlyZXR1cm4gMTsKLQotCSh2b2lkKWV4dHJhY3QodHJlZSwgc2l6ZSwgJnBhdGgsICZtb2RlKTsKLQotCXBhdGhsZW4gPSBzdHJsZW4ocGF0aCk7Ci0JYmFzZWxlbiA9IHN0cmxlbihiYXNlKTsKLQotCWZvciAoaT0wOyBpIDwgbnJfcGF0aHM7IGkrKykgewotCQljb25zdCBjaGFyICptYXRjaCA9IHBhdGhzW2ldOwotCQlpbnQgbWF0Y2hsZW4gPSBwYXRobGVuc1tpXTsKLQotCQlpZiAoYmFzZWxlbiA+PSBtYXRjaGxlbikgewotCQkJLyogSWYgaXQgZG9lc24ndCBtYXRjaCwgbW92ZSBhbG9uZy4uLiAqLwotCQkJaWYgKHN0cm5jbXAoYmFzZSwgbWF0Y2gsIG1hdGNobGVuKSkKLQkJCQljb250aW51ZTsKLQotCQkJLyogVGhlIGJhc2UgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgYSBwYXRoIHdoaWNoIHdhcyBzcGVjaWZpZWQuICovCi0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCS8qIERvZXMgdGhlIGJhc2UgbWF0Y2g/ICovCi0JCWlmIChzdHJuY21wKGJhc2UsIG1hdGNoLCBiYXNlbGVuKSkKLQkJCWNvbnRpbnVlOwotCi0JCW1hdGNoICs9IGJhc2VsZW47Ci0JCW1hdGNobGVuIC09IGJhc2VsZW47Ci0KLQkJaWYgKHBhdGhsZW4gPiBtYXRjaGxlbikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChtYXRjaGxlbiA+IHBhdGhsZW4pIHsKLQkJCWlmIChtYXRjaFtwYXRobGVuXSAhPSAnLycpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIVNfSVNESVIobW9kZSkpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RybmNtcChwYXRoLCBtYXRjaCwgcGF0aGxlbikpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7IC8qIE5vIG1hdGNoZXMgKi8KLX0KLQotLyogQSB3aG9sZSBzdWItdHJlZSB3ZW50IGF3YXkgb3IgYXBwZWFyZWQgKi8KLXN0YXRpYyB2b2lkIHNob3dfdHJlZShjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKnRyZWUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqYmFzZSkKLXsKLQl3aGlsZSAoc2l6ZSkgewotCQlpZiAoaW50ZXJlc3RpbmcodHJlZSwgc2l6ZSwgYmFzZSkpCi0JCQlzaG93X2ZpbGUocHJlZml4LCB0cmVlLCBzaXplLCBiYXNlKTsKLQkJdXBkYXRlX3RyZWVfZW50cnkoJnRyZWUsICZzaXplKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgZGlmZl90cmVlKHZvaWQgKnRyZWUxLCB1bnNpZ25lZCBsb25nIHNpemUxLCB2b2lkICp0cmVlMiwgdW5zaWduZWQgbG9uZyBzaXplMiwgY29uc3QgY2hhciAqYmFzZSkKLXsKLQl3aGlsZSAoc2l6ZTEgfCBzaXplMikgewotCQlpZiAobnJfcGF0aHMgJiYgc2l6ZTEgJiYgIWludGVyZXN0aW5nKHRyZWUxLCBzaXplMSwgYmFzZSkpIHsKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMSwgJnNpemUxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChucl9wYXRocyAmJiBzaXplMiAmJiAhaW50ZXJlc3RpbmcodHJlZTIsIHNpemUyLCBiYXNlKSkgewotCQkJdXBkYXRlX3RyZWVfZW50cnkoJnRyZWUyLCAmc2l6ZTIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzaXplMSkgewotCQkJc2hvd19maWxlKCIrIiwgdHJlZTIsIHNpemUyLCBiYXNlKTsKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMiwgJnNpemUyKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc2l6ZTIpIHsKLQkJCXNob3dfZmlsZSgiLSIsIHRyZWUxLCBzaXplMSwgYmFzZSk7Ci0JCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHJlZTEsICZzaXplMSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzd2l0Y2ggKGNvbXBhcmVfdHJlZV9lbnRyeSh0cmVlMSwgc2l6ZTEsIHRyZWUyLCBzaXplMiwgYmFzZSkpIHsKLQkJY2FzZSAtMToKLQkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0cmVlMSwgJnNpemUxKTsKLQkJCWNvbnRpbnVlOwotCQljYXNlIDA6Ci0JCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHJlZTEsICZzaXplMSk7Ci0JCQkvKiBGYWxsdGhyb3VnaCAqLwotCQljYXNlIDE6Ci0JCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHJlZTIsICZzaXplMik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkaWUoImdpdC1kaWZmLXRyZWU6IGludGVybmFsIGVycm9yIik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCBjb25zdCBjaGFyICpiYXNlKQotewotCXZvaWQgKnRyZWUxLCAqdHJlZTI7Ci0JdW5zaWduZWQgbG9uZyBzaXplMSwgc2l6ZTI7Ci0JaW50IHJldHZhbDsKLQotCXRyZWUxID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob2xkLCAidHJlZSIsICZzaXplMSwgTlVMTCk7Ci0JaWYgKCF0cmVlMSkKLQkJZGllKCJ1bmFibGUgdG8gcmVhZCBzb3VyY2UgdHJlZSAoJXMpIiwgc2hhMV90b19oZXgob2xkKSk7Ci0JdHJlZTIgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShuZXcsICJ0cmVlIiwgJnNpemUyLCBOVUxMKTsKLQlpZiAoIXRyZWUyKQotCQlkaWUoInVuYWJsZSB0byByZWFkIGRlc3RpbmF0aW9uIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG5ldykpOwotCXJldHZhbCA9IGRpZmZfdHJlZSh0cmVlMSwgc2l6ZTEsIHRyZWUyLCBzaXplMiwgYmFzZSk7Ci0JZnJlZSh0cmVlMSk7Ci0JZnJlZSh0cmVlMik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIHZvaWQgY2FsbF9kaWZmX3NldHVwKHZvaWQpCi17Ci0JZGlmZl9zZXR1cChkaWZmX3NldHVwX29wdCk7CisJZGlmZl9zZXR1cF9kb25lKCZkaWZmX29wdGlvbnMpOwogfQogCiBzdGF0aWMgaW50IGNhbGxfZGlmZl9mbHVzaCh2b2lkKQogewotCWRpZmZjb3JlX3N0ZChOVUxMLAotCQkgICAgIGRldGVjdF9yZW5hbWUsIGRpZmZfc2NvcmVfb3B0LAotCQkgICAgIHBpY2theGUsIHBpY2theGVfb3B0cywKLQkJICAgICBkaWZmX2JyZWFrX29wdCwKLQkJICAgICBvcmRlcmZpbGUsCi0JCSAgICAgZGlmZl9maWx0ZXIpOworCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRpb25zKTsKIAlpZiAoZGlmZl9xdWV1ZV9pc19lbXB0eSgpKSB7Ci0JCWRpZmZfZmx1c2goRElGRl9GT1JNQVRfTk9fT1VUUFVULCBkaWZmX2xpbmVfdGVybWluYXRpb24pOworCQlpbnQgc2F2ZWRfZm10ID0gZGlmZl9vcHRpb25zLm91dHB1dF9mb3JtYXQ7CisJCWRpZmZfb3B0aW9ucy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlkaWZmX2ZsdXNoKCZkaWZmX29wdGlvbnMpOworCQlkaWZmX29wdGlvbnMub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX2ZtdDsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChoZWFkZXIpIHsKLQkJcHJpbnRmKCIlcyVjIiwgaGVhZGVyLCBkaWZmX2xpbmVfdGVybWluYXRpb24pOworCQlwcmludGYoIiVzJWMiLCBoZWFkZXIsIGRpZmZfb3B0aW9ucy5saW5lX3Rlcm1pbmF0aW9uKTsKIAkJaGVhZGVyID0gTlVMTDsKIAl9Ci0JZGlmZl9mbHVzaChkaWZmX291dHB1dF9mb3JtYXQsIGRpZmZfbGluZV90ZXJtaW5hdGlvbik7CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRpb25zKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjkzLDggKzQxLDggQEAKIHsKIAlpbnQgcmV0OwogCi0JY2FsbF9kaWZmX3NldHVwKCk7Ci0JcmV0ID0gZGlmZl90cmVlX3NoYTEob2xkLCBuZXcsIGJhc2UpOworCWNhbGxfZGlmZl9zZXR1cF9kb25lKCk7CisJcmV0ID0gZGlmZl90cmVlX3NoYTEob2xkLCBuZXcsIGJhc2UsICZkaWZmX29wdGlvbnMpOwogCWNhbGxfZGlmZl9mbHVzaCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zMDMsMTMgKzUxLDE3IEBACiB7CiAJaW50IHJldHZhbDsKIAl2b2lkICp0cmVlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGVtcHR5LCByZWFsOwogCi0JY2FsbF9kaWZmX3NldHVwKCk7Ci0JdHJlZSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKG5ldywgInRyZWUiLCAmc2l6ZSwgTlVMTCk7CisJY2FsbF9kaWZmX3NldHVwX2RvbmUoKTsKKwl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UobmV3LCAidHJlZSIsICZyZWFsLnNpemUsIE5VTEwpOwogCWlmICghdHJlZSkKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCByb290IHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG5ldykpOwotCXJldHZhbCA9IGRpZmZfdHJlZSgiIiwgMCwgdHJlZSwgc2l6ZSwgYmFzZSk7CisJcmVhbC5idWYgPSB0cmVlOworCisJZW1wdHkuYnVmID0gIiI7CisJZW1wdHkuc2l6ZSA9IDA7CisJcmV0dmFsID0gZGlmZl90cmVlKCZlbXB0eSwgJnJlYWwsIGJhc2UsICZkaWZmX29wdGlvbnMpOwogCWZyZWUodHJlZSk7CiAJY2FsbF9kaWZmX2ZsdXNoKCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTM5NiwyOCArMTQ4LDI2IEBACiAJcmV0dXJuIGRpZmZfdHJlZV9jb21taXQoY29tbWl0LCBsaW5lKTsKIH0KIAotc3RhdGljIGludCBjb3VudF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMpCi17Ci0JaW50IGkgPSAwOwotCXdoaWxlICgqcGF0aHMrKykKLQkJaSsrOwotCXJldHVybiBpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciBkaWZmX3RyZWVfdXNhZ2VbXSA9Ci0iZ2l0LWRpZmYtdHJlZSBbLS1zdGRpbl0gWy1tXSBbLXNdIFstdl0gWy0tcHJldHR5XSBbLXRdICIKLSJbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XSA8dHJlZS1pc2g+IDx0cmVlLWlzaD4iCisiZ2l0LWRpZmYtdHJlZSBbLS1zdGRpbl0gWy1tXSBbLXNdIFstdl0gWy0tcHJldHR5XSBbLXRdIFstcl0gWy0tcm9vdF0gIgorIls8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzx0cmVlLWlzaD5dIFs8cGF0aD4uLi5dXG4iCisiICAtciAgICAgICAgICAgIGRpZmYgcmVjdXJzaXZlbHlcbiIKKyIgIC0tcm9vdCAgICAgICAgaW5jbHVkZSB0aGUgaW5pdGlhbCBjb21taXQgYXMgZGlmZiBhZ2FpbnN0IC9kZXYvbnVsbFxuIgogQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQOwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJaW50IG5yX3NoYTE7CiAJY2hhciBsaW5lWzEwMDBdOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyXVsyMF07CiAJY29uc3QgY2hhciAqcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwogCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCW5yX3NoYTEgPSAwOworCWRpZmZfc2V0dXAoJmRpZmZfb3B0aW9ucyk7CisKIAlmb3IgKDs7KSB7CisJCWludCBkaWZmX29wdF9jbnQ7CiAJCWNvbnN0IGNoYXIgKmFyZzsKIAogCQlhcmd2Kys7CkBAIC00MzQsODEgKzE4NCwzNCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQlkaWZmX29wdF9jbnQgPSBkaWZmX29wdF9wYXJzZSgmZGlmZl9vcHRpb25zLCBhcmd2LCBhcmdjKTsKKwkJaWYgKGRpZmZfb3B0X2NudCA8IDApCisJCQl1c2FnZShkaWZmX3RyZWVfdXNhZ2UpOworCQllbHNlIGlmIChkaWZmX29wdF9jbnQpIHsKKwkJCWFyZ3YgKz0gZGlmZl9vcHRfY250IC0gMTsKKwkJCWFyZ2MgLT0gZGlmZl9vcHRfY250IC0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwogCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CiAJCQlhcmd2Kys7CiAJCQlhcmdjLS07CiAJCQlicmVhazsKIAkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItciIpKSB7Ci0JCQlyZWN1cnNpdmUgPSAxOworCQkJZGlmZl9vcHRpb25zLnJlY3Vyc2l2ZSA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItdCIpKSB7Ci0JCQlyZWN1cnNpdmUgPSBzaG93X3RyZWVfZW50cnlfaW5fcmVjdXJzaXZlID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1SIikpIHsKLQkJCWRpZmZfc2V0dXBfb3B0IHw9IERJRkZfU0VUVVBfUkVWRVJTRTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi1wIikgfHwgIXN0cmNtcChhcmcsICItdSIpKSB7Ci0JCQlkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKLQkJCXJlY3Vyc2l2ZSA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cm5jbXAoYXJnLCAiLVMiLCAyKSkgewotCQkJcGlja2F4ZSA9IGFyZyArIDI7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cm5jbXAoYXJnLCAiLU8iLCAyKSkgewotCQkJb3JkZXJmaWxlID0gYXJnICsgMjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RybmNtcChhcmcsICItLWRpZmYtZmlsdGVyPSIsIDE0KSkgewotCQkJZGlmZl9maWx0ZXIgPSBhcmcgKyAxNDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tcGlja2F4ZS1hbGwiKSkgewotCQkJcGlja2F4ZV9vcHRzID0gRElGRl9QSUNLQVhFX0FMTDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RybmNtcChhcmcsICItTSIsIDIpKSB7Ci0JCQlkZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOwotCQkJaWYgKChkaWZmX3Njb3JlX29wdCA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCi0JCQkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RybmNtcChhcmcsICItQyIsIDIpKSB7Ci0JCQlkZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfQ09QWTsKLQkJCWlmICgoZGlmZl9zY29yZV9vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQotCQkJCXVzYWdlKGRpZmZfdHJlZV91c2FnZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cm5jbXAoYXJnLCAiLUIiLCAyKSkgewotCQkJaWYgKChkaWZmX2JyZWFrX29wdCA9IGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCi0JCQkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tZmluZC1jb3BpZXMtaGFyZGVyIikpIHsKLQkJCWZpbmRfY29waWVzX2hhcmRlciA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtb25seSIpKSB7Ci0JCQlkaWZmX291dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OQU1FOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkgewotCQkJZGlmZl9saW5lX3Rlcm1pbmF0aW9uID0gMDsKKwkJCWRpZmZfb3B0aW9ucy5yZWN1cnNpdmUgPSAxOworCQkJZGlmZl9vcHRpb25zLnRyZWVfaW5fcmVjdXJzaXZlID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi1tIikpIHsKIAkJCWlnbm9yZV9tZXJnZXMgPSAwOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFzdHJjbXAoYXJnLCAiLXMiKSkgewotCQkJZGlmZl9vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOwotCQkJY29udGludWU7Ci0JCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgewogCQkJdmVyYm9zZV9oZWFkZXIgPSAxOwogCQkJaGVhZGVyX3ByZWZpeCA9ICJkaWZmLXRyZWUgIjsKQEAgLTUzMCwxOCArMjMzLDEwIEBACiAJCX0KIAkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKIAl9Ci0JaWYgKGZpbmRfY29waWVzX2hhcmRlciAmJiBkZXRlY3RfcmVuYW1lICE9IERJRkZfREVURUNUX0NPUFkpCi0JCXVzYWdlKGRpZmZfdHJlZV91c2FnZSk7CisJaWYgKGRpZmZfb3B0aW9ucy5vdXRwdXRfZm9ybWF0ID09IERJRkZfRk9STUFUX1BBVENIKQorCQlkaWZmX29wdGlvbnMucmVjdXJzaXZlID0gMTsKIAotCXBhdGhzID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7Ci0JaWYgKHBhdGhzKSB7Ci0JCWludCBpOwotCi0JCW5yX3BhdGhzID0gY291bnRfcGF0aHMocGF0aHMpOwotCQlwYXRobGVucyA9IHhtYWxsb2MobnJfcGF0aHMgKiBzaXplb2YoaW50KSk7Ci0JCWZvciAoaT0wOyBpPG5yX3BhdGhzOyBpKyspCi0JCQlwYXRobGVuc1tpXSA9IHN0cmxlbihwYXRoc1tpXSk7Ci0JfQorCWRpZmZfdHJlZV9zZXR1cF9wYXRocyhnZXRfcGF0aHNwZWMocHJlZml4LCBhcmd2KSk7CiAKIAlzd2l0Y2ggKG5yX3NoYTEpIHsKIAljYXNlIDA6CkBAIC01NTksOSArMjU0LDkgQEAKIAlpZiAoIXJlYWRfc3RkaW4pCiAJCXJldHVybiAwOwogCi0JaWYgKGRldGVjdF9yZW5hbWUpCi0JCWRpZmZfc2V0dXBfb3B0IHw9IChESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFIHwKLQkJCQkgICBESUZGX1NFVFVQX1VTRV9DQUNIRSk7CisJaWYgKGRpZmZfb3B0aW9ucy5kZXRlY3RfcmVuYW1lKQorCQlkaWZmX29wdGlvbnMuc2V0dXAgfD0gKERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUgfAorCQkJCSAgICAgICBESUZGX1NFVFVQX1VTRV9DQUNIRSk7CiAJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pKQogCQlkaWZmX3RyZWVfc3RkaW4obGluZSk7CiAKZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwppbmRleCBkOGQyMGMyLi5lYzk0YTk2IDEwMDY0NAotLS0gYS9kaWZmLmMKKysrIGIvZGlmZi5jCkBAIC0xMCwxMSArMTAsNDkgQEAKICNpbmNsdWRlICJkaWZmY29yZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9vcHRzID0gIi1wdSI7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBudWxsX3NoYTFbMjBdID0geyAwLCB9OwogCi1zdGF0aWMgaW50IHJldmVyc2VfZGlmZjsKIHN0YXRpYyBpbnQgdXNlX3NpemVfY2FjaGU7CiAKK3N0YXRpYyBjaGFyICpxdW90ZV9vbmUoY29uc3QgY2hhciAqc3RyKQoreworCWludCBuZWVkbGVuOworCWNoYXIgKnhwOworCisJaWYgKCFzdHIpCisJCXJldHVybiBOVUxMOworCW5lZWRsZW4gPSBxdW90ZV9jX3N0eWxlKHN0ciwgTlVMTCwgTlVMTCwgMCk7CisJaWYgKCFuZWVkbGVuKQorCQlyZXR1cm4gc3RyZHVwKHN0cik7CisJeHAgPSB4bWFsbG9jKG5lZWRsZW4gKyAxKTsKKwlxdW90ZV9jX3N0eWxlKHN0ciwgeHAsIE5VTEwsIDApOworCXJldHVybiB4cDsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3R3byhjb25zdCBjaGFyICpvbmUsIGNvbnN0IGNoYXIgKnR3bykKK3sKKwlpbnQgbmVlZF9vbmUgPSBxdW90ZV9jX3N0eWxlKG9uZSwgTlVMTCwgTlVMTCwgMSk7CisJaW50IG5lZWRfdHdvID0gcXVvdGVfY19zdHlsZSh0d28sIE5VTEwsIE5VTEwsIDEpOworCWNoYXIgKnhwOworCisJaWYgKG5lZWRfb25lICsgbmVlZF90d28pIHsKKwkJaWYgKCFuZWVkX29uZSkgbmVlZF9vbmUgPSBzdHJsZW4ob25lKTsKKwkJaWYgKCFuZWVkX3R3bykgbmVlZF9vbmUgPSBzdHJsZW4odHdvKTsKKworCQl4cCA9IHhtYWxsb2MobmVlZF9vbmUgKyBuZWVkX3R3byArIDMpOworCQl4cFswXSA9ICciJzsKKwkJcXVvdGVfY19zdHlsZShvbmUsIHhwICsgMSwgTlVMTCwgMSk7CisJCXF1b3RlX2Nfc3R5bGUodHdvLCB4cCArIG5lZWRfb25lICsgMSwgTlVMTCwgMSk7CisJCXN0cmNweSh4cCArIG5lZWRfb25lICsgbmVlZF90d28gKyAxLCAiXCIiKTsKKwkJcmV0dXJuIHhwOworCX0KKwluZWVkX29uZSA9IHN0cmxlbihvbmUpOworCW5lZWRfdHdvID0gc3RybGVuKHR3byk7CisJeHAgPSB4bWFsbG9jKG5lZWRfb25lICsgbmVlZF90d28gKyAxKTsKKwlzdHJjcHkoeHAsIG9uZSk7CisJc3RyY3B5KHhwICsgbmVlZF9vbmUsIHR3byk7CisJcmV0dXJuIHhwOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZih2b2lkKQogewogCXN0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZCA9IE5VTEw7CkBAIC0xMzUsNTUgKzE3Myw1MiBAQAogCQkJIGludCBjb21wbGV0ZV9yZXdyaXRlKQogewogCWludCBpLCBuZXh0X2F0LCBjbWRfc2l6ZTsKLQljb25zdCBjaGFyICpjb25zdCBkaWZmX2NtZCA9ICJkaWZmIC1MJXMlcyAtTCVzJXMiOwotCWNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfYXJnICA9ICIlcyAlc3x8OiI7IC8qICJ8fDoiIGlzIHRvIHJldHVybiAwICovCisJY29uc3QgY2hhciAqY29uc3QgZGlmZl9jbWQgPSAiZGlmZiAtTCVzIC1MJXMiOworCWNvbnN0IGNoYXIgKmNvbnN0IGRpZmZfYXJnICA9ICItLSAlcyAlc3x8OiI7IC8qICJ8fDoiIGlzIHRvIHJldHVybiAwICovCiAJY29uc3QgY2hhciAqaW5wdXRfbmFtZV9zcVsyXTsKLQljb25zdCBjaGFyICpwYXRoMFsyXTsKLQljb25zdCBjaGFyICpwYXRoMVsyXTsKLQljb25zdCBjaGFyICpuYW1lX3NxWzJdOworCWNvbnN0IGNoYXIgKmxhYmVsX3BhdGhbMl07CiAJY2hhciAqY21kOwogCi0JbmFtZV9zcVswXSA9IHNxX3F1b3RlKG5hbWVfYSk7Ci0JbmFtZV9zcVsxXSA9IHNxX3F1b3RlKG5hbWVfYik7Ci0KLQkvKiBkaWZmX2NtZCBhbmQgZGlmZl9hcmcgaGF2ZSA2ICVzIGluIHRvdGFsIHdoaWNoIG1ha2VzCi0JICogdGhlIHN1bSBvZiB0aGVzZSBzdHJpbmdzIDEyIGJ5dGVzIGxhcmdlciB0aGFuIHJlcXVpcmVkLgorCS8qIGRpZmZfY21kIGFuZCBkaWZmX2FyZyBoYXZlIDQgJXMgaW4gdG90YWwgd2hpY2ggbWFrZXMKKwkgKiB0aGUgc3VtIG9mIHRoZXNlIHN0cmluZ3MgOCBieXRlcyBsYXJnZXIgdGhhbiByZXF1aXJlZC4KIAkgKiB3ZSB1c2UgMiBzcGFjZXMgYXJvdW5kIGRpZmYtb3B0cywgYW5kIHdlIG5lZWQgdG8gY291bnQKLQkgKiB0ZXJtaW5hdGluZyBOVUwsIHNvIHdlIHN1YnRyYWN0IDkgaGVyZS4KKwkgKiB0ZXJtaW5hdGluZyBOVUw7IHdlIHVzZWQgdG8gc3VidHJhY3QgNSBoZXJlLCBidXQgd2UgZG8gbm90CisJICogY2FyZSBhYm91dCBzbWFsbCBsZWFrcyBpbiB0aGlzIHN1YnByb2Nlc3MgdGhhdCBpcyBhYm91dAorCSAqIHRvIGV4ZWMgImRpZmYiIGFueW1vcmUuCiAJICovCi0JY21kX3NpemUgPSAoc3RybGVuKGRpZmZfY21kKSArIHN0cmxlbihkaWZmX29wdHMpICsKLQkJCXN0cmxlbihkaWZmX2FyZykgLSA5KTsKKwljbWRfc2l6ZSA9IChzdHJsZW4oZGlmZl9jbWQpICsgc3RybGVuKGRpZmZfb3B0cykgKyBzdHJsZW4oZGlmZl9hcmcpCisJCSAgICArIDEyOCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWlucHV0X25hbWVfc3FbaV0gPSBzcV9xdW90ZSh0ZW1wW2ldLm5hbWUpOwotCQlpZiAoIXN0cmNtcCh0ZW1wW2ldLm5hbWUsICIvZGV2L251bGwiKSkgewotCQkJcGF0aDBbaV0gPSAiL2Rldi9udWxsIjsKLQkJCXBhdGgxW2ldID0gIiI7Ci0JCX0gZWxzZSB7Ci0JCQlwYXRoMFtpXSA9IGkgPyAiYi8iIDogImEvIjsKLQkJCXBhdGgxW2ldID0gbmFtZV9zcVtpXTsKLQkJfQotCQljbWRfc2l6ZSArPSAoc3RybGVuKHBhdGgwW2ldKSArIHN0cmxlbihwYXRoMVtpXSkgKwotCQkJICAgICBzdHJsZW4oaW5wdXRfbmFtZV9zcVtpXSkpOworCQlpZiAoIXN0cmNtcCh0ZW1wW2ldLm5hbWUsICIvZGV2L251bGwiKSkKKwkJCWxhYmVsX3BhdGhbaV0gPSAiL2Rldi9udWxsIjsKKwkJZWxzZSBpZiAoIWkpCisJCQlsYWJlbF9wYXRoW2ldID0gc3FfcXVvdGUocXVvdGVfdHdvKCJhLyIsIG5hbWVfYSkpOworCQllbHNlCisJCQlsYWJlbF9wYXRoW2ldID0gc3FfcXVvdGUocXVvdGVfdHdvKCJiLyIsIG5hbWVfYikpOworCQljbWRfc2l6ZSArPSAoc3RybGVuKGxhYmVsX3BhdGhbaV0pICsgc3RybGVuKGlucHV0X25hbWVfc3FbaV0pKTsKIAl9CiAKIAljbWQgPSB4bWFsbG9jKGNtZF9zaXplKTsKIAogCW5leHRfYXQgPSAwOwogCW5leHRfYXQgKz0gc25wcmludGYoY21kK25leHRfYXQsIGNtZF9zaXplLW5leHRfYXQsCi0JCQkgICAgZGlmZl9jbWQsCi0JCQkgICAgcGF0aDBbMF0sIHBhdGgxWzBdLCBwYXRoMFsxXSwgcGF0aDFbMV0pOworCQkJICAgIGRpZmZfY21kLCBsYWJlbF9wYXRoWzBdLCBsYWJlbF9wYXRoWzFdKTsKIAluZXh0X2F0ICs9IHNucHJpbnRmKGNtZCtuZXh0X2F0LCBjbWRfc2l6ZS1uZXh0X2F0LAogCQkJICAgICIgJXMgIiwgZGlmZl9vcHRzKTsKIAluZXh0X2F0ICs9IHNucHJpbnRmKGNtZCtuZXh0X2F0LCBjbWRfc2l6ZS1uZXh0X2F0LAogCQkJICAgIGRpZmZfYXJnLCBpbnB1dF9uYW1lX3NxWzBdLCBpbnB1dF9uYW1lX3NxWzFdKTsKIAotCXByaW50ZigiZGlmZiAtLWdpdCBhLyVzIGIvJXNcbiIsIG5hbWVfYSwgbmFtZV9iKTsKLQlpZiAoIXBhdGgxWzBdWzBdKSB7CisJcHJpbnRmKCJkaWZmIC0tZ2l0ICVzICVzXG4iLAorCSAgICAgICBxdW90ZV90d28oImEvIiwgbmFtZV9hKSwgcXVvdGVfdHdvKCJiLyIsIG5hbWVfYikpOworCWlmIChsYWJlbF9wYXRoWzBdWzBdID09ICcvJykgeworCQkvKiBkZXYvbnVsbCAqLwogCQlwcmludGYoIm5ldyBmaWxlIG1vZGUgJXNcbiIsIHRlbXBbMV0ubW9kZSk7CiAJCWlmICh4ZnJtX21zZyAmJiB4ZnJtX21zZ1swXSkKIAkJCXB1dHMoeGZybV9tc2cpOwogCX0KLQllbHNlIGlmICghcGF0aDFbMV1bMF0pIHsKKwllbHNlIGlmIChsYWJlbF9wYXRoWzFdWzBdID09ICcvJykgewogCQlwcmludGYoImRlbGV0ZWQgZmlsZSBtb2RlICVzXG4iLCB0ZW1wWzBdLm1vZGUpOwogCQlpZiAoeGZybV9tc2cgJiYgeGZybV9tc2dbMF0pCiAJCQlwdXRzKHhmcm1fbXNnKTsKQEAgLTQxNSw3ICs0NTAsNyBAQAogc3RhdGljIHZvaWQgcHJlcF90ZW1wX2Jsb2Ioc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAsCiAJCQkgICB2b2lkICpibG9iLAogCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJICAgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQkgICBpbnQgbW9kZSkKIHsKIAlpbnQgZmQ7CkBAIC01OTgsMTUgKzYzMywzMiBAQAogCXJlbW92ZV90ZW1wZmlsZSgpOwogfQogCitzdGF0aWMgdm9pZCBkaWZmX2ZpbGxfc2hhMV9pbmZvKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKERJRkZfRklMRV9WQUxJRChvbmUpKSB7CisJCWlmICghb25lLT5zaGExX3ZhbGlkKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmIChzdGF0KG9uZS0+cGF0aCwgJnN0KSA8IDApCisJCQkJZGllKCJzdGF0ICVzIiwgb25lLT5wYXRoKTsKKwkJCWlmIChpbmRleF9wYXRoKG9uZS0+c2hhMSwgb25lLT5wYXRoLCAmc3QsIDApKQorCQkJCWRpZSgiY2Fubm90IGhhc2ggJXNcbiIsIG9uZS0+cGF0aCk7CisJCX0KKwl9CisJZWxzZQorCQltZW1zZXQob25lLT5zaGExLCAwLCAyMCk7Cit9CisKIHN0YXRpYyB2b2lkIHJ1bl9kaWZmKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQogewogCWNvbnN0IGNoYXIgKnBnbSA9IGV4dGVybmFsX2RpZmYoKTsKLQljaGFyIG1zZ19bUEFUSF9NQVgqMisyMDBdLCAqeGZybV9tc2c7CisJY2hhciBtc2dbUEFUSF9NQVgqMiszMDBdLCAqeGZybV9tc2c7CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZTsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqb3RoZXI7CisJY2hhciAqbmFtZV9tdW5nZWQsICpvdGhlcl9tdW5nZWQ7CiAJaW50IGNvbXBsZXRlX3Jld3JpdGUgPSAwOworCWludCBsZW47CiAKIAlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CiAJCS8qIHVubWVyZ2VkICovCkBAIC02MTcsNDAgKzY2OSw2MyBAQAogCiAJbmFtZSA9IHAtPm9uZS0+cGF0aDsKIAlvdGhlciA9IChzdHJjbXAobmFtZSwgcC0+dHdvLT5wYXRoKSA/IHAtPnR3by0+cGF0aCA6IE5VTEwpOworCW5hbWVfbXVuZ2VkID0gcXVvdGVfb25lKG5hbWUpOworCW90aGVyX211bmdlZCA9IHF1b3RlX29uZShvdGhlcik7CiAJb25lID0gcC0+b25lOyB0d28gPSBwLT50d287CisKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKG9uZSk7CisJZGlmZl9maWxsX3NoYTFfaW5mbyh0d28pOworCisJbGVuID0gMDsKIAlzd2l0Y2ggKHAtPnN0YXR1cykgewogCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgotCQlzcHJpbnRmKG1zZ18sCi0JCQkic2ltaWxhcml0eSBpbmRleCAlZCUlXG4iCi0JCQkiY29weSBmcm9tICVzXG4iCi0JCQkiY29weSB0byAlcyIsCi0JCQkoaW50KSgwLjUgKyBwLT5zY29yZSAqIDEwMC4wL01BWF9TQ09SRSksCi0JCQluYW1lLCBvdGhlcik7Ci0JCXhmcm1fbXNnID0gbXNnXzsKKwkJbGVuICs9IHNucHJpbnRmKG1zZyArIGxlbiwgc2l6ZW9mKG1zZykgLSBsZW4sCisJCQkJInNpbWlsYXJpdHkgaW5kZXggJWQlJVxuIgorCQkJCSJjb3B5IGZyb20gJXNcbiIKKwkJCQkiY29weSB0byAlc1xuIiwKKwkJCQkoaW50KSgwLjUgKyBwLT5zY29yZSAqIDEwMC4wL01BWF9TQ09SRSksCisJCQkJbmFtZV9tdW5nZWQsIG90aGVyX211bmdlZCk7CiAJCWJyZWFrOwogCWNhc2UgRElGRl9TVEFUVVNfUkVOQU1FRDoKLQkJc3ByaW50Zihtc2dfLAotCQkJInNpbWlsYXJpdHkgaW5kZXggJWQlJVxuIgotCQkJInJlbmFtZSBmcm9tICVzXG4iCi0JCQkicmVuYW1lIHRvICVzIiwKLQkJCShpbnQpKDAuNSArIHAtPnNjb3JlICogMTAwLjAvTUFYX1NDT1JFKSwKLQkJCW5hbWUsIG90aGVyKTsKLQkJeGZybV9tc2cgPSBtc2dfOworCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKKwkJCQkic2ltaWxhcml0eSBpbmRleCAlZCUlXG4iCisJCQkJInJlbmFtZSBmcm9tICVzXG4iCisJCQkJInJlbmFtZSB0byAlc1xuIiwKKwkJCQkoaW50KSgwLjUgKyBwLT5zY29yZSAqIDEwMC4wL01BWF9TQ09SRSksCisJCQkJbmFtZV9tdW5nZWQsIG90aGVyX211bmdlZCk7CiAJCWJyZWFrOwogCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CiAJCWlmIChwLT5zY29yZSkgewotCQkJc3ByaW50Zihtc2dfLAotCQkJCSJkaXNzaW1pbGFyaXR5IGluZGV4ICVkJSUiLAotCQkJCShpbnQpKDAuNSArIHAtPnNjb3JlICogMTAwLjAvTUFYX1NDT1JFKSk7Ci0JCQl4ZnJtX21zZyA9IG1zZ187CisJCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKKwkJCQkJImRpc3NpbWlsYXJpdHkgaW5kZXggJWQlJVxuIiwKKwkJCQkJKGludCkoMC41ICsgcC0+c2NvcmUgKgorCQkJCQkgICAgICAxMDAuMC9NQVhfU0NPUkUpKTsKIAkJCWNvbXBsZXRlX3Jld3JpdGUgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgotCQl4ZnJtX21zZyA9IE5VTEw7CisJCS8qIG5vdGhpbmcgKi8KKwkJOwogCX0KIAorCWlmIChtZW1jbXAob25lLT5zaGExLCB0d28tPnNoYTEsIDIwKSkgeworCQljaGFyIG9uZV9zaGExWzQxXTsKKwkJbWVtY3B5KG9uZV9zaGExLCBzaGExX3RvX2hleChvbmUtPnNoYTEpLCA0MSk7CisKKwkJbGVuICs9IHNucHJpbnRmKG1zZyArIGxlbiwgc2l6ZW9mKG1zZykgLSBsZW4sCisJCQkJImluZGV4ICUuN3MuLiUuN3MiLCBvbmVfc2hhMSwKKwkJCQlzaGExX3RvX2hleCh0d28tPnNoYTEpKTsKKwkJaWYgKG9uZS0+bW9kZSA9PSB0d28tPm1vZGUpCisJCQlsZW4gKz0gc25wcmludGYobXNnICsgbGVuLCBzaXplb2YobXNnKSAtIGxlbiwKKwkJCQkJIiAlMDZvIiwgb25lLT5tb2RlKTsKKwkJbGVuICs9IHNucHJpbnRmKG1zZyArIGxlbiwgc2l6ZW9mKG1zZykgLSBsZW4sICJcbiIpOworCX0KKworCWlmIChsZW4pCisJCW1zZ1stLWxlbl0gPSAwOworCXhmcm1fbXNnID0gbGVuID8gbXNnIDogTlVMTDsKKwogCWlmICghcGdtICYmCiAJICAgIERJRkZfRklMRV9WQUxJRChvbmUpICYmIERJRkZfRklMRV9WQUxJRCh0d28pICYmCiAJICAgIChTX0lGTVQgJiBvbmUtPm1vZGUpICE9IChTX0lGTVQgJiB0d28tPm1vZGUpKSB7CkBAIC02NjcsMTMgKzc0MiwyOSBAQAogCWVsc2UKIAkJcnVuX2V4dGVybmFsX2RpZmYocGdtLCBuYW1lLCBvdGhlciwgb25lLCB0d28sIHhmcm1fbXNnLAogCQkJCSAgY29tcGxldGVfcmV3cml0ZSk7CisKKwlmcmVlKG5hbWVfbXVuZ2VkKTsKKwlmcmVlKG90aGVyX211bmdlZCk7CiB9CiAKLXZvaWQgZGlmZl9zZXR1cChpbnQgZmxhZ3MpCit2b2lkIGRpZmZfc2V0dXAoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKLQlpZiAoZmxhZ3MgJiBESUZGX1NFVFVQX1JFVkVSU0UpCi0JCXJldmVyc2VfZGlmZiA9IDE7Ci0JaWYgKGZsYWdzICYgRElGRl9TRVRVUF9VU0VfQ0FDSEUpIHsKKwltZW1zZXQob3B0aW9ucywgMCwgc2l6ZW9mKCpvcHRpb25zKSk7CisJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKwlvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlvcHRpb25zLT5icmVha19vcHQgPSAtMTsKKwlvcHRpb25zLT5yZW5hbWVfbGltaXQgPSAtMTsKKworCW9wdGlvbnMtPmNoYW5nZSA9IGRpZmZfY2hhbmdlOworCW9wdGlvbnMtPmFkZF9yZW1vdmUgPSBkaWZmX2FkZHJlbW92ZTsKK30KKworaW50IGRpZmZfc2V0dXBfZG9uZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWlmICgob3B0aW9ucy0+ZmluZF9jb3BpZXNfaGFyZGVyIHx8IDAgPD0gb3B0aW9ucy0+cmVuYW1lX2xpbWl0KSAmJgorCSAgICBvcHRpb25zLT5kZXRlY3RfcmVuYW1lICE9IERJRkZfREVURUNUX0NPUFkpCisJCXJldHVybiAtMTsKKwlpZiAob3B0aW9ucy0+c2V0dXAgJiBESUZGX1NFVFVQX1VTRV9DQUNIRSkgewogCQlpZiAoIWFjdGl2ZV9jYWNoZSkKIAkJCS8qIHJlYWQtY2FjaGUgZG9lcyBub3QgZGllIGV2ZW4gd2hlbiBpdCBmYWlscwogCQkJICogc28gaXQgaXMgc2FmZSBmb3IgdXMgdG8gZG8gdGhpcyBoZXJlLiAgQWxzbwpAQCAtNjgzLDkgKzc3NCw1OSBAQAogCQkJICovCiAJCQlyZWFkX2NhY2hlKCk7CiAJfQotCWlmIChmbGFncyAmIERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUpCisJaWYgKG9wdGlvbnMtPnNldHVwICYgRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRSkKIAkJdXNlX3NpemVfY2FjaGUgPSAxOwotCQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWZmX29wdF9wYXJzZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICoqYXYsIGludCBhYykKK3sKKwljb25zdCBjaGFyICphcmcgPSBhdlswXTsKKwlpZiAoIXN0cmNtcChhcmcsICItcCIpIHx8ICFzdHJjbXAoYXJnLCAiLXUiKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkKKwkJb3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbiA9IDA7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLWwiLCAyKSkKKwkJb3B0aW9ucy0+cmVuYW1lX2xpbWl0ID0gc3RydG91bChhcmcrMiwgTlVMTCwgMTApOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uYW1lLW9ubHkiKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05BTUU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtc3RhdHVzIikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUzsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi1SIikpCisJCW9wdGlvbnMtPnJldmVyc2VfZGlmZiA9IDE7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLVMiLCAyKSkKKwkJb3B0aW9ucy0+cGlja2F4ZSA9IGFyZyArIDI7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcyIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1PIiwgMikpCisJCW9wdGlvbnMtPm9yZGVyZmlsZSA9IGFyZyArIDI7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiLS1kaWZmLWZpbHRlcj0iLCAxNCkpCisJCW9wdGlvbnMtPmZpbHRlciA9IGFyZyArIDE0OworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1waWNrYXhlLWFsbCIpKQorCQlvcHRpb25zLT5waWNrYXhlX29wdHMgPSBESUZGX1BJQ0tBWEVfQUxMOworCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1CIiwgMikpIHsKKwkJaWYgKChvcHRpb25zLT5icmVha19vcHQgPQorCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJfQorCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1NIiwgMikpIHsKKwkJaWYgKChvcHRpb25zLT5yZW5hbWVfc2NvcmUgPQorCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJfQorCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgIi1DIiwgMikpIHsKKwkJaWYgKChvcHRpb25zLT5yZW5hbWVfc2NvcmUgPQorCQkgICAgIGRpZmZfc2NvcmVvcHRfcGFyc2UoYXJnKSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9DT1BZOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZmluZC1jb3BpZXMtaGFyZGVyIikpCisJCW9wdGlvbnMtPmZpbmRfY29waWVzX2hhcmRlciA9IDE7CisJZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBwYXJzZV9udW0oY29uc3QgY2hhciAqKmNwX3ApCkBAIC03NzgsMjAgKzkxOSwxOCBAQAogCiBzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3JhdyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKIAkJCSAgIGludCBsaW5lX3Rlcm1pbmF0aW9uLAotCQkJICAgaW50IGludGVyX25hbWVfdGVybWluYXRpb24pCisJCQkgICBpbnQgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiwKKwkJCSAgIGludCBvdXRwdXRfZm9ybWF0KQogewogCWludCB0d29fcGF0aHM7CiAJY2hhciBzdGF0dXNbMTBdOworCWNvbnN0IGNoYXIgKnBhdGhfb25lLCAqcGF0aF90d287CiAKKwlwYXRoX29uZSA9IHAtPm9uZS0+cGF0aDsKKwlwYXRoX3R3byA9IHAtPnR3by0+cGF0aDsKIAlpZiAobGluZV90ZXJtaW5hdGlvbikgewotCQljb25zdCBjaGFyICpjb25zdCBlcnIgPQotCQkJInBhdGggJXMgY2Fubm90IGJlIGV4cHJlc3NlZCB3aXRob3V0IC16IjsKLQkJaWYgKHN0cmNocihwLT5vbmUtPnBhdGgsIGxpbmVfdGVybWluYXRpb24pIHx8Ci0JCSAgICBzdHJjaHIocC0+b25lLT5wYXRoLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKSkKLQkJCWRpZShlcnIsIHAtPm9uZS0+cGF0aCk7Ci0JCWlmIChzdHJjaHIocC0+dHdvLT5wYXRoLCBsaW5lX3Rlcm1pbmF0aW9uKSB8fAotCQkgICAgc3RyY2hyKHAtPnR3by0+cGF0aCwgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbikpCi0JCQlkaWUoZXJyLCBwLT50d28tPnBhdGgpOworCQlwYXRoX29uZSA9IHF1b3RlX29uZShwYXRoX29uZSk7CisJCXBhdGhfdHdvID0gcXVvdGVfb25lKHBhdGhfdHdvKTsKIAl9CiAKIAlpZiAocC0+c2NvcmUpCkBAIC04MTQsMjIgKzk1MywzNCBAQAogCQl0d29fcGF0aHMgPSAwOwogCQlicmVhazsKIAl9Ci0JcHJpbnRmKCI6JTA2byAlMDZvICVzICIsCi0JICAgICAgIHAtPm9uZS0+bW9kZSwgcC0+dHdvLT5tb2RlLCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpKTsKLQlwcmludGYoIiVzICVzJWMlcyIsCi0JICAgICAgIHNoYTFfdG9faGV4KHAtPnR3by0+c2hhMSksCi0JICAgICAgIHN0YXR1cywKLQkgICAgICAgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiwKLQkgICAgICAgcC0+b25lLT5wYXRoKTsKKwlpZiAob3V0cHV0X2Zvcm1hdCAhPSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykgeworCQlwcmludGYoIjolMDZvICUwNm8gJXMgIiwKKwkJICAgICAgIHAtPm9uZS0+bW9kZSwgcC0+dHdvLT5tb2RlLCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpKTsKKwkJcHJpbnRmKCIlcyAiLCBzaGExX3RvX2hleChwLT50d28tPnNoYTEpKTsKKwl9CisJcHJpbnRmKCIlcyVjJXMiLCBzdGF0dXMsIGludGVyX25hbWVfdGVybWluYXRpb24sIHBhdGhfb25lKTsKIAlpZiAodHdvX3BhdGhzKQotCQlwcmludGYoIiVjJXMiLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBwLT50d28tPnBhdGgpOworCQlwcmludGYoIiVjJXMiLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBwYXRoX3R3byk7CiAJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKKwlpZiAocGF0aF9vbmUgIT0gcC0+b25lLT5wYXRoKQorCQlmcmVlKCh2b2lkKilwYXRoX29uZSk7CisJaWYgKHBhdGhfdHdvICE9IHAtPnR3by0+cGF0aCkKKwkJZnJlZSgodm9pZCopcGF0aF90d28pOwogfQogCiBzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX25hbWUoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCQkgICAgaW50IGludGVyX25hbWVfdGVybWluYXRpb24sCiAJCQkgICAgaW50IGxpbmVfdGVybWluYXRpb24pCiB7Ci0JcHJpbnRmKCIlcyVjIiwgcC0+dHdvLT5wYXRoLCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwljaGFyICpwYXRoID0gcC0+dHdvLT5wYXRoOworCisJaWYgKGxpbmVfdGVybWluYXRpb24pCisJCXBhdGggPSBxdW90ZV9vbmUocC0+dHdvLT5wYXRoKTsKKwllbHNlCisJCXBhdGggPSBwLT50d28tPnBhdGg7CisJcHJpbnRmKCIlcyVjIiwgcGF0aCwgbGluZV90ZXJtaW5hdGlvbik7CisJaWYgKHAtPnR3by0+cGF0aCAhPSBwYXRoKQorCQlmcmVlKHBhdGgpOwogfQogCiBpbnQgZGlmZl91bm1vZGlmaWVkX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCkBAIC05ODcsMzIgKzExMzgsMzggQEAKIAlkaWZmX2RlYnVnX3F1ZXVlKCJyZXNvbHZlLXJlbmFtZS1jb3B5IGRvbmUiLCBxKTsKIH0KIAotdm9pZCBkaWZmX2ZsdXNoKGludCBkaWZmX291dHB1dF9zdHlsZSwgaW50IGxpbmVfdGVybWluYXRpb24pCit2b2lkIGRpZmZfZmx1c2goc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKIAlpbnQgaTsKIAlpbnQgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiA9ICdcdCc7CisJaW50IGRpZmZfb3V0cHV0X2Zvcm1hdCA9IG9wdGlvbnMtPm91dHB1dF9mb3JtYXQ7CisJaW50IGxpbmVfdGVybWluYXRpb24gPSBvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uOwogCiAJaWYgKCFsaW5lX3Rlcm1pbmF0aW9uKQogCQlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CiAJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07Ci0JCWlmICgoZGlmZl9vdXRwdXRfc3R5bGUgPT0gRElGRl9GT1JNQVRfTk9fT1VUUFVUKSB8fAorCQlpZiAoKGRpZmZfb3V0cHV0X2Zvcm1hdCA9PSBESUZGX0ZPUk1BVF9OT19PVVRQVVQpIHx8CiAJCSAgICAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX1VOS05PV04pKQogCQkJY29udGludWU7CiAJCWlmIChwLT5zdGF0dXMgPT0gMCkKIAkJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gZGlmZi1yZXNvbHZlLXJlbmFtZS1jb3B5Iik7Ci0JCXN3aXRjaCAoZGlmZl9vdXRwdXRfc3R5bGUpIHsKKwkJc3dpdGNoIChkaWZmX291dHB1dF9mb3JtYXQpIHsKIAkJY2FzZSBESUZGX0ZPUk1BVF9QQVRDSDoKIAkJCWRpZmZfZmx1c2hfcGF0Y2gocCk7CiAJCQlicmVhazsKIAkJY2FzZSBESUZGX0ZPUk1BVF9SQVc6CisJCWNhc2UgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM6CiAJCQlkaWZmX2ZsdXNoX3JhdyhwLCBsaW5lX3Rlcm1pbmF0aW9uLAotCQkJCSAgICAgICBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwkJCQkgICAgICAgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiwKKwkJCQkgICAgICAgZGlmZl9vdXRwdXRfZm9ybWF0KTsKIAkJCWJyZWFrOwogCQljYXNlIERJRkZfRk9STUFUX05BTUU6Ci0JCQlkaWZmX2ZsdXNoX25hbWUocCwgbGluZV90ZXJtaW5hdGlvbik7CisJCQlkaWZmX2ZsdXNoX25hbWUocCwKKwkJCQkJaW50ZXJfbmFtZV90ZXJtaW5hdGlvbiwKKwkJCQkJbGluZV90ZXJtaW5hdGlvbik7CiAJCQlicmVhazsKIAkJfQogCQlkaWZmX2ZyZWVfZmlsZXBhaXIocS0+cXVldWVbaV0pOwpAQCAtMTA3OCw0NSArMTIzNSwzNiBAQAogCSpxID0gb3V0cTsKIH0KIAotdm9pZCBkaWZmY29yZV9zdGQoY29uc3QgY2hhciAqKnBhdGhzLAotCQkgIGludCBkZXRlY3RfcmVuYW1lLCBpbnQgcmVuYW1lX3Njb3JlLAotCQkgIGNvbnN0IGNoYXIgKnBpY2theGUsIGludCBwaWNrYXhlX29wdHMsCi0JCSAgaW50IGJyZWFrX29wdCwKLQkJICBjb25zdCBjaGFyICpvcmRlcmZpbGUsCi0JCSAgY29uc3QgY2hhciAqZmlsdGVyKQordm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKLQlpZiAocGF0aHMgJiYgcGF0aHNbMF0pCi0JCWRpZmZjb3JlX3BhdGhzcGVjKHBhdGhzKTsKLQlpZiAoYnJlYWtfb3B0ICE9IC0xKQotCQlkaWZmY29yZV9icmVhayhicmVha19vcHQpOwotCWlmIChkZXRlY3RfcmVuYW1lKQotCQlkaWZmY29yZV9yZW5hbWUoZGV0ZWN0X3JlbmFtZSwgcmVuYW1lX3Njb3JlKTsKLQlpZiAoYnJlYWtfb3B0ICE9IC0xKQorCWlmIChvcHRpb25zLT5wYXRocyAmJiBvcHRpb25zLT5wYXRoc1swXSkKKwkJZGlmZmNvcmVfcGF0aHNwZWMob3B0aW9ucy0+cGF0aHMpOworCWlmIChvcHRpb25zLT5icmVha19vcHQgIT0gLTEpCisJCWRpZmZjb3JlX2JyZWFrKG9wdGlvbnMtPmJyZWFrX29wdCk7CisJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUpCisJCWRpZmZjb3JlX3JlbmFtZShvcHRpb25zKTsKKwlpZiAob3B0aW9ucy0+YnJlYWtfb3B0ICE9IC0xKQogCQlkaWZmY29yZV9tZXJnZV9icm9rZW4oKTsKLQlpZiAocGlja2F4ZSkKLQkJZGlmZmNvcmVfcGlja2F4ZShwaWNrYXhlLCBwaWNrYXhlX29wdHMpOwotCWlmIChvcmRlcmZpbGUpCi0JCWRpZmZjb3JlX29yZGVyKG9yZGVyZmlsZSk7CisJaWYgKG9wdGlvbnMtPnBpY2theGUpCisJCWRpZmZjb3JlX3BpY2theGUob3B0aW9ucy0+cGlja2F4ZSwgb3B0aW9ucy0+cGlja2F4ZV9vcHRzKTsKKwlpZiAob3B0aW9ucy0+b3JkZXJmaWxlKQorCQlkaWZmY29yZV9vcmRlcihvcHRpb25zLT5vcmRlcmZpbGUpOwogCWRpZmZfcmVzb2x2ZV9yZW5hbWVfY29weSgpOwotCWRpZmZjb3JlX2FwcGx5X2ZpbHRlcihmaWx0ZXIpOworCWRpZmZjb3JlX2FwcGx5X2ZpbHRlcihvcHRpb25zLT5maWx0ZXIpOwogfQogCiAKLXZvaWQgZGlmZmNvcmVfc3RkX25vX3Jlc29sdmUoY29uc3QgY2hhciAqKnBhdGhzLAotCQkJICAgICBjb25zdCBjaGFyICpwaWNrYXhlLCBpbnQgcGlja2F4ZV9vcHRzLAotCQkJICAgICBjb25zdCBjaGFyICpvcmRlcmZpbGUsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmZpbHRlcikKK3ZvaWQgZGlmZmNvcmVfc3RkX25vX3Jlc29sdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKLQlpZiAocGF0aHMgJiYgcGF0aHNbMF0pCi0JCWRpZmZjb3JlX3BhdGhzcGVjKHBhdGhzKTsKLQlpZiAocGlja2F4ZSkKLQkJZGlmZmNvcmVfcGlja2F4ZShwaWNrYXhlLCBwaWNrYXhlX29wdHMpOwotCWlmIChvcmRlcmZpbGUpCi0JCWRpZmZjb3JlX29yZGVyKG9yZGVyZmlsZSk7Ci0JZGlmZmNvcmVfYXBwbHlfZmlsdGVyKGZpbHRlcik7CisJaWYgKG9wdGlvbnMtPnBpY2theGUpCisJCWRpZmZjb3JlX3BpY2theGUob3B0aW9ucy0+cGlja2F4ZSwgb3B0aW9ucy0+cGlja2F4ZV9vcHRzKTsKKwlpZiAob3B0aW9ucy0+b3JkZXJmaWxlKQorCQlkaWZmY29yZV9vcmRlcihvcHRpb25zLT5vcmRlcmZpbGUpOworCWRpZmZjb3JlX2FwcGx5X2ZpbHRlcihvcHRpb25zLT5maWx0ZXIpOwogfQogCi12b2lkIGRpZmZfYWRkcmVtb3ZlKGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCit2b2lkIGRpZmZfYWRkcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKIAkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpCiB7CkBAIC0xMTM1LDcgKzEyODMsNyBAQAogCSAqIEJlZm9yZSB0aGUgZmluYWwgb3V0cHV0IGhhcHBlbnMsIHRoZXkgYXJlIHBydW5lZCBhZnRlcgogCSAqIG1lcmdlZCBpbnRvIHJlbmFtZS9jb3B5IHBhaXJzIGFzIGFwcHJvcHJpYXRlLgogCSAqLwotCWlmIChyZXZlcnNlX2RpZmYpCisJaWYgKG9wdGlvbnMtPnJldmVyc2VfZGlmZikKIAkJYWRkcmVtb3ZlID0gKGFkZHJlbW92ZSA9PSAnKycgPyAnLScgOgogCQkJICAgICBhZGRyZW1vdmUgPT0gJy0nID8gJysnIDogYWRkcmVtb3ZlKTsKIApAQCAtMTE1MiwzMCArMTMwMCw4IEBACiAJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOwogfQogCi12b2lkIGRpZmZfaGVscGVyX2lucHV0KHVuc2lnbmVkIG9sZF9tb2RlLAotCQkgICAgICAgdW5zaWduZWQgbmV3X21vZGUsCi0JCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKLQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAotCQkgICAgICAgY29uc3QgY2hhciAqb2xkX3BhdGgsCi0JCSAgICAgICBpbnQgc3RhdHVzLAotCQkgICAgICAgaW50IHNjb3JlLAotCQkgICAgICAgY29uc3QgY2hhciAqbmV3X3BhdGgpCi17Ci0Jc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKLQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZHA7Ci0KLQlvbmUgPSBhbGxvY19maWxlc3BlYyhvbGRfcGF0aCk7Ci0JdHdvID0gYWxsb2NfZmlsZXNwZWMobmV3X3BhdGgpOwotCWlmIChvbGRfbW9kZSkKLQkJZmlsbF9maWxlc3BlYyhvbmUsIG9sZF9zaGExLCBvbGRfbW9kZSk7Ci0JaWYgKG5ld19tb2RlKQotCQlmaWxsX2ZpbGVzcGVjKHR3bywgbmV3X3NoYTEsIG5ld19tb2RlKTsKLQlkcCA9IGRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIG9uZSwgdHdvKTsKLQlkcC0+c2NvcmUgPSBzY29yZSAqIE1BWF9TQ09SRSAvIDEwMDsKLQlkcC0+c3RhdHVzID0gc3RhdHVzOwotfQotCi12b2lkIGRpZmZfY2hhbmdlKHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKK3ZvaWQgZGlmZl9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCiAJCSBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKSAKQEAgLTExODMsNyArMTMwOSw3IEBACiAJY2hhciBjb25jYXRwYXRoW1BBVEhfTUFYXTsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOwogCi0JaWYgKHJldmVyc2VfZGlmZikgeworCWlmIChvcHRpb25zLT5yZXZlcnNlX2RpZmYpIHsKIAkJdW5zaWduZWQgdG1wOwogCQljb25zdCB1bnNpZ25lZCBjaGFyICp0bXBfYzsKIAkJdG1wID0gb2xkX21vZGU7IG9sZF9tb2RlID0gbmV3X21vZGU7IG5ld19tb2RlID0gdG1wOwpAQCAtMTE5OSw3ICsxMzI1LDggQEAKIAlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CiB9CiAKLXZvaWQgZGlmZl91bm1lcmdlKGNvbnN0IGNoYXIgKnBhdGgpCit2b2lkIGRpZmZfdW5tZXJnZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgIGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKIAlvbmUgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKZGlmZiAtLWdpdCBhL2RpZmYuaCBiL2RpZmYuaAppbmRleCAzZGViN2ZhLi4xMjU5MDc5IDEwMDY0NAotLS0gYS9kaWZmLmgKKysrIGIvZGlmZi5oCkBAIC04LDI3ICs4LDY3IEBACiAJKFNfSVNSRUcobW9kZSkgPyAoU19JRlJFRyB8IGNlX3Blcm1pc3Npb25zKG1vZGUpKSA6IFwKIAlTX0lTTE5LKG1vZGUpID8gU19JRkxOSyA6IFNfSUZESVIpCiAKLWV4dGVybiB2b2lkIGRpZmZfYWRkcmVtb3ZlKGludCBhZGRyZW1vdmUsCitzdHJ1Y3QgdHJlZV9kZXNjIHsKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RydWN0IGRpZmZfb3B0aW9uczsKKwordHlwZWRlZiB2b2lkICgqY2hhbmdlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisKK3R5cGVkZWYgdm9pZCAoKmFkZF9yZW1vdmVfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisKK3N0cnVjdCBkaWZmX29wdGlvbnMgeworCWNvbnN0IGNoYXIgKipwYXRoczsKKwljb25zdCBjaGFyICpmaWx0ZXI7CisJY29uc3QgY2hhciAqb3JkZXJmaWxlOworCWNvbnN0IGNoYXIgKnBpY2theGU7CisJdW5zaWduZWQgcmVjdXJzaXZlOjEsCisJCSB0cmVlX2luX3JlY3Vyc2l2ZToxOworCWludCBicmVha19vcHQ7CisJaW50IGRldGVjdF9yZW5hbWU7CisJaW50IGZpbmRfY29waWVzX2hhcmRlcjsKKwlpbnQgbGluZV90ZXJtaW5hdGlvbjsKKwlpbnQgb3V0cHV0X2Zvcm1hdDsKKwlpbnQgcGlja2F4ZV9vcHRzOworCWludCByZW5hbWVfc2NvcmU7CisJaW50IHJldmVyc2VfZGlmZjsKKwlpbnQgcmVuYW1lX2xpbWl0OworCWludCBzZXR1cDsKKworCWNoYW5nZV9mbl90IGNoYW5nZTsKKwlhZGRfcmVtb3ZlX2ZuX3QgYWRkX3JlbW92ZTsKK307CisKK2V4dGVybiB2b2lkIGRpZmZfdHJlZV9zZXR1cF9wYXRocyhjb25zdCBjaGFyICoqcGF0aHMpOworZXh0ZXJuIGludCBkaWZmX3RyZWUoc3RydWN0IHRyZWVfZGVzYyAqdDEsIHN0cnVjdCB0cmVlX2Rlc2MgKnQyLAorCQkgICAgIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitleHRlcm4gaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LAorCQkJICBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpOworCitleHRlcm4gdm9pZCBkaWZmX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCisJCQkgICBpbnQgYWRkcmVtb3ZlLAogCQkJICAgdW5zaWduZWQgbW9kZSwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQkgICBjb25zdCBjaGFyICpiYXNlLAogCQkJICAgY29uc3QgY2hhciAqcGF0aCk7CiAKLWV4dGVybiB2b2lkIGRpZmZfY2hhbmdlKHVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwKLQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMiwKLQkJCSAgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gdm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCisJCQl1bnNpZ25lZCBtb2RlMSwgdW5zaWduZWQgbW9kZTIsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMiwKKwkJCWNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpOwogCi1leHRlcm4gdm9pZCBkaWZmX2hlbHBlcl9pbnB1dCh1bnNpZ25lZCBtb2RlMSwKLQkJCSAgICAgIHVuc2lnbmVkIG1vZGUyLAotCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTIsCi0JCQkgICAgICBjb25zdCBjaGFyICpwYXRoMSwKLQkJCSAgICAgIGludCBzdGF0dXMsCi0JCQkgICAgICBpbnQgc2NvcmUsCi0JCQkgICAgICBjb25zdCBjaGFyICpwYXRoMik7Ci0KLWV4dGVybiB2b2lkIGRpZmZfdW5tZXJnZShjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIGRpZmZfdW5tZXJnZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCisJCQkgY29uc3QgY2hhciAqcGF0aCk7CiAKIGV4dGVybiBpbnQgZGlmZl9zY29yZW9wdF9wYXJzZShjb25zdCBjaGFyICpvcHQpOwogCkBAIC0zNiw0MiArNzYsMzcgQEAKICNkZWZpbmUgRElGRl9TRVRVUF9VU0VfQ0FDSEUJCTIKICNkZWZpbmUgRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRQk0CiAKLWV4dGVybiB2b2lkIGRpZmZfc2V0dXAoaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIGRpZmZfc2V0dXAoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiBpbnQgZGlmZl9vcHRfcGFyc2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICoqLCBpbnQpOworZXh0ZXJuIGludCBkaWZmX3NldHVwX2RvbmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKIAogI2RlZmluZSBESUZGX0RFVEVDVF9SRU5BTUUJMQogI2RlZmluZSBESUZGX0RFVEVDVF9DT1BZCTIKIAogI2RlZmluZSBESUZGX1BJQ0tBWEVfQUxMCTEKIAotZXh0ZXJuIHZvaWQgZGlmZmNvcmVfc3RkKGNvbnN0IGNoYXIgKipwYXRocywKLQkJCSBpbnQgZGV0ZWN0X3JlbmFtZSwgaW50IHJlbmFtZV9zY29yZSwKLQkJCSBjb25zdCBjaGFyICpwaWNrYXhlLCBpbnQgcGlja2F4ZV9vcHRzLAotCQkJIGludCBicmVha19vcHQsCi0JCQkgY29uc3QgY2hhciAqb3JkZXJmaWxlLCBjb25zdCBjaGFyICpmaWx0ZXIpOworZXh0ZXJuIHZvaWQgZGlmZmNvcmVfc3RkKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CiAKLWV4dGVybiB2b2lkIGRpZmZjb3JlX3N0ZF9ub19yZXNvbHZlKGNvbnN0IGNoYXIgKipwYXRocywKLQkJCQkgICAgY29uc3QgY2hhciAqcGlja2F4ZSwgaW50IHBpY2theGVfb3B0cywKLQkJCQkgICAgY29uc3QgY2hhciAqb3JkZXJmaWxlLCBjb25zdCBjaGFyICpmaWx0ZXIpOworZXh0ZXJuIHZvaWQgZGlmZmNvcmVfc3RkX25vX3Jlc29sdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKIAogI2RlZmluZSBDT01NT05fRElGRl9PUFRJT05TX0hFTFAgXAogIlxuY29tbW9uIGRpZmYgb3B0aW9uczpcbiIgXAotIiAgLXIJCWRpZmYgcmVjdXJzaXZlbHkgKG9ubHkgbWVhbmluZ2Z1bCBpbiBkaWZmLXRyZWUpXG4iIFwKLSIgIC16CQlvdXRwdXQgZGlmZi1yYXcgd2l0aCBsaW5lcyB0ZXJtaW5hdGVkIHdpdGggTlVMLlxuIiBcCi0iICAtcAkJb3V0cHV0IHBhdGNoIGZvcm1hdC5cbiIgXAotIiAgLXUJCXN5bm9ueW0gZm9yIC1wLlxuIiBcCi0iICAtLW5hbWUtb25seQlzaG93IG9ubHkgbmFtZXMgb2YgY2hhbmdlZCBmaWxlcy5cbiIgXAotIiAgLS1uYW1lLW9ubHktelxuIiBcCi0iCQlzYW1lIGFzIC0tbmFtZS1vbmx5IGJ1dCB0ZXJtaW5hdGUgbGluZXMgd2l0aCBOVUwuXG4iIFwKLSIgIC1SCQlzd2FwIGlucHV0IGZpbGUgcGFpcnMuXG4iIFwKLSIgIC1CCQlkZXRlY3QgY29tcGxldGUgcmV3cml0ZXMuXG4iIFwKLSIgIC1NCQlkZXRlY3QgcmVuYW1lcy5cbiIgXAotIiAgLUMJCWRldGVjdCBjb3BpZXMuXG4iIFwKKyIgIC16ICAgICAgICAgICAgb3V0cHV0IGRpZmYtcmF3IHdpdGggbGluZXMgdGVybWluYXRlZCB3aXRoIE5VTC5cbiIgXAorIiAgLXAgICAgICAgICAgICBvdXRwdXQgcGF0Y2ggZm9ybWF0LlxuIiBcCisiICAtdSAgICAgICAgICAgIHN5bm9ueW0gZm9yIC1wLlxuIiBcCisiICAtLW5hbWUtb25seSAgIHNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLW5hbWUtc3RhdHVzIHNob3cgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtUiAgICAgICAgICAgIHN3YXAgaW5wdXQgZmlsZSBwYWlycy5cbiIgXAorIiAgLUIgICAgICAgICAgICBkZXRlY3QgY29tcGxldGUgcmV3cml0ZXMuXG4iIFwKKyIgIC1NICAgICAgICAgICAgZGV0ZWN0IHJlbmFtZXMuXG4iIFwKKyIgIC1DICAgICAgICAgICAgZGV0ZWN0IGNvcGllcy5cbiIgXAogIiAgLS1maW5kLWNvcGllcy1oYXJkZXJcbiIgXAotIgkJdHJ5IHVuY2hhbmdlZCBmaWxlcyBhcyBjYW5kaWRhdGUgZm9yIGNvcHkgZGV0ZWN0aW9uLlxuIiBcCi0iICAtTzxmaWxlPglyZW9yZGVyIGRpZmZzIGFjY29yZGluZyB0byB0aGUgPGZpbGU+LlxuIiBcCi0iICAtUzxzdHJpbmc+CWZpbmQgZmlsZXBhaXIgd2hvc2Ugb25seSBvbmUgc2lkZSBjb250YWlucyB0aGUgc3RyaW5nLlxuIiBcCisiICAgICAgICAgICAgICAgIHRyeSB1bmNoYW5nZWQgZmlsZXMgYXMgY2FuZGlkYXRlIGZvciBjb3B5IGRldGVjdGlvbi5cbiIgXAorIiAgLWw8bj4gICAgICAgICBsaW1pdCByZW5hbWUgYXR0ZW1wdHMgdXAgdG8gPG4+IHBhdGhzLlxuIiBcCisiICAtTzxmaWxlPiAgICAgIHJlb3JkZXIgZGlmZnMgYWNjb3JkaW5nIHRvIHRoZSA8ZmlsZT4uXG4iIFwKKyIgIC1TPHN0cmluZz4gICAgZmluZCBmaWxlcGFpciB3aG9zZSBvbmx5IG9uZSBzaWRlIGNvbnRhaW5zIHRoZSBzdHJpbmcuXG4iIFwKICIgIC0tcGlja2F4ZS1hbGxcbiIgXAotIgkJc2hvdyBhbGwgZmlsZXMgZGlmZiB3aGVuIC1TIGlzIHVzZWQgYW5kIGhpdCBpcyBmb3VuZC5cbiIKKyIgICAgICAgICAgICAgICAgc2hvdyBhbGwgZmlsZXMgZGlmZiB3aGVuIC1TIGlzIHVzZWQgYW5kIGhpdCBpcyBmb3VuZC5cbiIKIAogZXh0ZXJuIGludCBkaWZmX3F1ZXVlX2lzX2VtcHR5KHZvaWQpOwogCkBAIC03OSw4ICsxMTQsOSBAQAogI2RlZmluZSBESUZGX0ZPUk1BVF9QQVRDSAkyCiAjZGVmaW5lIERJRkZfRk9STUFUX05PX09VVFBVVAkzCiAjZGVmaW5lIERJRkZfRk9STUFUX05BTUUJNAorI2RlZmluZSBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUwk1CiAKLWV4dGVybiB2b2lkIGRpZmZfZmx1c2goaW50IG91dHB1dF9zdHlsZSwgaW50IGxpbmVfdGVybWluYXRvcik7CitleHRlcm4gdm9pZCBkaWZmX2ZsdXNoKHN0cnVjdCBkaWZmX29wdGlvbnMqKTsKIAogLyogZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgKi8KICNkZWZpbmUgRElGRl9TVEFUVVNfQURERUQJCSdBJwpAQCAtOTUsNyArMTMxLDcgQEAKIC8qIHRoZXNlIGFyZSBub3QgZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgcHJvcGVyLCBidXQgdXNlZCBieQogICogZGlmZmNvcmUtZmlsdGVyIGluc24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4KICAqLwotI2RlZmluZSBESUZGX1NUQVRVU19GSUxURVJfQU9OCQknQScKKyNkZWZpbmUgRElGRl9TVEFUVVNfRklMVEVSX0FPTgkJJyonCiAjZGVmaW5lIERJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4JJ0InCiAKICNlbmRpZiAvKiBESUZGX0ggKi8KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXJlbmFtZS5jIGIvZGlmZmNvcmUtcmVuYW1lLmMKaW5kZXggMDkyY2Y2OC4uZTE3ZGQ5MCAxMDA2NDQKLS0tIGEvZGlmZmNvcmUtcmVuYW1lLmMKKysrIGIvZGlmZmNvcmUtcmVuYW1lLmMKQEAgLTI0OSw4ICsyNDksMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBkaWZmY29yZV9yZW5hbWUoaW50IGRldGVjdF9yZW5hbWUsIGludCBtaW5pbXVtX3Njb3JlKQordm9pZCBkaWZmY29yZV9yZW5hbWUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKKwlpbnQgZGV0ZWN0X3JlbmFtZSA9IG9wdGlvbnMtPmRldGVjdF9yZW5hbWU7CisJaW50IG1pbmltdW1fc2NvcmUgPSBvcHRpb25zLT5yZW5hbWVfc2NvcmU7CisJaW50IHJlbmFtZV9saW1pdCA9IG9wdGlvbnMtPnJlbmFtZV9saW1pdDsKIAlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKIAlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKIAlzdHJ1Y3QgZGlmZl9zY29yZSAqbXg7CkBAIC0yNzksNyArMjgyLDggQEAKIAkJZWxzZSBpZiAoZGV0ZWN0X3JlbmFtZSA9PSBESUZGX0RFVEVDVF9DT1BZKQogCQkJcmVnaXN0ZXJfcmVuYW1lX3NyYyhwLT5vbmUsIDEpOwogCX0KLQlpZiAocmVuYW1lX2RzdF9uciA9PSAwKQorCWlmIChyZW5hbWVfZHN0X25yID09IDAgfHwKKwkgICAgKDAgPD0gcmVuYW1lX2xpbWl0ICYmIHJlbmFtZV9saW1pdCA8IHJlbmFtZV9kc3RfbnIpKQogCQlnb3RvIGNsZWFudXA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAogCS8qIFdlIHJlYWxseSB3YW50IHRvIGN1bGwgdGhlIGNhbmRpZGF0ZXMgbGlzdCBlYXJseQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUuaCBiL2RpZmZjb3JlLmgKaW5kZXggZjFiNWNhNy4uYTM4YWNiMSAxMDA2NDQKLS0tIGEvZGlmZmNvcmUuaAorKysgYi9kaWZmY29yZS5oCkBAIC04NSw3ICs4NSw3IEBACiAKIGV4dGVybiB2b2lkIGRpZmZjb3JlX3BhdGhzcGVjKGNvbnN0IGNoYXIgKipwYXRoc3BlYyk7CiBleHRlcm4gdm9pZCBkaWZmY29yZV9icmVhayhpbnQpOwotZXh0ZXJuIHZvaWQgZGlmZmNvcmVfcmVuYW1lKGludCByZW5hbWVfY29weSwgaW50KTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX3JlbmFtZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwogZXh0ZXJuIHZvaWQgZGlmZmNvcmVfbWVyZ2VfYnJva2VuKHZvaWQpOwogZXh0ZXJuIHZvaWQgZGlmZmNvcmVfcGlja2F4ZShjb25zdCBjaGFyICpuZWVkbGUsIGludCBvcHRzKTsKIGV4dGVybiB2b2lkIGRpZmZjb3JlX29yZGVyKGNvbnN0IGNoYXIgKm9yZGVyZmlsZSk7CmRpZmYgLS1naXQgYS9lbnRyeS5jIGIvZW50cnkuYwppbmRleCBiODQyNmRiLi4xNWIzNGViIDEwMDY0NAotLS0gYS9lbnRyeS5jCisrKyBiL2VudHJ5LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQlpZiAoIXN0YXRlLT5mb3JjZSkgewogCQkJaWYgKCFzdGF0ZS0+cXVpZXQpCiAJCQkJZnByaW50ZihzdGRlcnIsICJnaXQtY2hlY2tvdXQtaW5kZXg6ICVzIGFscmVhZHkgZXhpc3RzXG4iLCBwYXRoKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC0xOwogCQl9CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzdhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9lbnZpcm9ubWVudC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBXZSBwdXQgYWxsIHRoZSBnaXQgY29uZmlnIHZhcmlhYmxlcyBpbiB0aGlzIHNhbWUgb2JqZWN0CisgKiBmaWxlLCBzbyB0aGF0IHByb2dyYW1zIGNhbiBsaW5rIGFnYWluc3QgdGhlIGNvbmZpZyBwYXJzZXIKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIGxpbmsgYWdhaW5zdCBhbGwgdGhlIHJlc3Qgb2YgZ2l0LgorICoKKyAqIEluIHBhcnRpY3VsYXIsIG5vIG5lZWQgdG8gYnJpbmcgaW4gbGlieiBldGMgdW5sZXNzIG5lZWRlZCwKKyAqIGV2ZW4gaWYgeW91IG1pZ2h0IHdhbnQgdG8ga25vdyB3aGVyZSB0aGUgZ2l0IGRpcmVjdG9yeSBldGMKKyAqIGFyZS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisKK2NoYXIgZ2l0X2RlZmF1bHRfZW1haWxbTUFYX0dJVE5BTUVdOworY2hhciBnaXRfZGVmYXVsdF9uYW1lW01BWF9HSVROQU1FXTsKK2ludCB0cnVzdF9leGVjdXRhYmxlX2JpdCA9IDE7CisKK3N0YXRpYyBjaGFyICpnaXRfZGlyLCAqZ2l0X29iamVjdF9kaXIsICpnaXRfaW5kZXhfZmlsZSwgKmdpdF9yZWZzX2RpciwKKwkqZ2l0X2dyYWZ0X2ZpbGU7CitzdGF0aWMgdm9pZCBzZXR1cF9naXRfZW52KHZvaWQpCit7CisJZ2l0X2RpciA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisJZ2l0X29iamVjdF9kaXIgPSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpOworCWlmICghZ2l0X29iamVjdF9kaXIpIHsKKwkJZ2l0X29iamVjdF9kaXIgPSB4bWFsbG9jKHN0cmxlbihnaXRfZGlyKSArIDkpOworCQlzcHJpbnRmKGdpdF9vYmplY3RfZGlyLCAiJXMvb2JqZWN0cyIsIGdpdF9kaXIpOworCX0KKwlnaXRfcmVmc19kaXIgPSB4bWFsbG9jKHN0cmxlbihnaXRfZGlyKSArIDYpOworCXNwcmludGYoZ2l0X3JlZnNfZGlyLCAiJXMvcmVmcyIsIGdpdF9kaXIpOworCWdpdF9pbmRleF9maWxlID0gZ2V0ZW52KElOREVYX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9pbmRleF9maWxlKSB7CisJCWdpdF9pbmRleF9maWxlID0geG1hbGxvYyhzdHJsZW4oZ2l0X2RpcikgKyA3KTsKKwkJc3ByaW50ZihnaXRfaW5kZXhfZmlsZSwgIiVzL2luZGV4IiwgZ2l0X2Rpcik7CisJfQorCWdpdF9ncmFmdF9maWxlID0gZ2V0ZW52KEdSQUZUX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9ncmFmdF9maWxlKQorCQlnaXRfZ3JhZnRfZmlsZSA9IHN0cmR1cChnaXRfcGF0aCgiaW5mby9ncmFmdHMiKSk7Cit9CisKK2NoYXIgKmdldF9naXRfZGlyKHZvaWQpCit7CisJaWYgKCFnaXRfZGlyKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9kaXI7Cit9CisKK2NoYXIgKmdldF9vYmplY3RfZGlyZWN0b3J5KHZvaWQpCit7CisJaWYgKCFnaXRfb2JqZWN0X2RpcikKKwkJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiBnaXRfb2JqZWN0X2RpcjsKK30KKworY2hhciAqZ2V0X3JlZnNfZGlyZWN0b3J5KHZvaWQpCit7CisJaWYgKCFnaXRfcmVmc19kaXIpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X3JlZnNfZGlyOworfQorCitjaGFyICpnZXRfaW5kZXhfZmlsZSh2b2lkKQoreworCWlmICghZ2l0X2luZGV4X2ZpbGUpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X2luZGV4X2ZpbGU7Cit9CisKK2NoYXIgKmdldF9ncmFmdF9maWxlKHZvaWQpCit7CisJaWYgKCFnaXRfZ3JhZnRfZmlsZSkKKwkJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiBnaXRfZ3JhZnRfZmlsZTsKK30KKworCmRpZmYgLS1naXQgYS9leHBvcnQuYyBiL2V4cG9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTEwYjVhLi4wMDAwMDAwCi0tLSBhL2V4cG9ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotI2luY2x1ZGUgImNhY2hlLmgiCi0jaW5jbHVkZSAiY29tbWl0LmgiCi0KLS8qCi0gKiBTaG93IG9uZSBjb21taXQKLSAqLwotc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQotewotCWNoYXIgY21kbGluZVs0MDBdOwotCWNoYXIgaGV4WzEwMF07Ci0KLQlzdHJjcHkoaGV4LCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7Ci0JcHJpbnRmKCJJZDogJXNcbiIsIGhleCk7Ci0JZmZsdXNoKE5VTEwpOwotCXNwcmludGYoY21kbGluZSwgImdpdC1jYXQtZmlsZSBjb21taXQgJXMiLCBoZXgpOwotCXN5c3RlbShjbWRsaW5lKTsKLQlpZiAoY29tbWl0LT5wYXJlbnRzKSB7Ci0JCWNoYXIgKmFnYWluc3QgPSBzaGExX3RvX2hleChjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExKTsKLQkJcHJpbnRmKCJcblxuPT09PT09PT0gZGlmZiBhZ2FpbnN0ICVzID09PT09PT09XG4iLCBhZ2FpbnN0KTsKLQkJZmZsdXNoKE5VTEwpOwotCQlzcHJpbnRmKGNtZGxpbmUsICJnaXQtZGlmZi10cmVlIC1wICVzICVzIiwgYWdhaW5zdCwgaGV4KTsKLQkJc3lzdGVtKGNtZGxpbmUpOwotCX0KLQlwcmludGYoIj09PT09PT09IGVuZCA9PT09PT09PVxuXG4iKTsKLX0KLQotLyoKLSAqIFNob3cgYWxsIHVuc2VlbiBjb21taXRzLCBkZXB0aC1maXJzdAotICovCi1zdGF0aWMgdm9pZCBzaG93X3Vuc2VlbihzdHJ1Y3QgY29tbWl0ICp0b3ApCi17Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOwotCi0JaWYgKHRvcC0+b2JqZWN0LmZsYWdzICYgMikKLQkJcmV0dXJuOwotCXRvcC0+b2JqZWN0LmZsYWdzIHw9IDI7Ci0JcGFyZW50cyA9IHRvcC0+cGFyZW50czsKLQl3aGlsZSAocGFyZW50cykgewotCQlzaG93X3Vuc2VlbihwYXJlbnRzLT5pdGVtKTsKLQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7Ci0JfQotCXNob3dfY29tbWl0KHRvcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4cG9ydChzdHJ1Y3QgY29tbWl0ICp0b3AsIHN0cnVjdCBjb21taXQgKmJhc2UpCi17Ci0JbWFya19yZWFjaGFibGUoJnRvcC0+b2JqZWN0LCAxKTsKLQlpZiAoYmFzZSkKLQkJbWFya19yZWFjaGFibGUoJmJhc2UtPm9iamVjdCwgMik7Ci0Jc2hvd191bnNlZW4odG9wKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXQodW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHNoYTEpOwotCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKSB7Ci0JCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKLQotCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgPCAwKQotCQkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOwotCQl3aGlsZSAocGFyZW50cykgewotCQkJZ2V0X2NvbW1pdChwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSk7Ci0JCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKLQkJfQotCX0KLQlyZXR1cm4gY29tbWl0OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0JdW5zaWduZWQgY2hhciBiYXNlX3NoYTFbMjBdOwotCXVuc2lnbmVkIGNoYXIgdG9wX3NoYTFbMjBdOwotCi0JaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiA0IHx8Ci0JICAgIGdldF9zaGExKGFyZ3ZbMV0sIHRvcF9zaGExKSB8fAotCSAgICAoYXJnYyA9PSAzICYmIGdldF9zaGExKGFyZ3ZbMl0sIGJhc2Vfc2hhMSkpKQotCQl1c2FnZSgiZ2l0LWV4cG9ydCB0b3AgW2Jhc2VdIik7Ci0JZXhwb3J0KGdldF9jb21taXQodG9wX3NoYTEpLCBhcmdjPT0zID8gZ2V0X2NvbW1pdChiYXNlX3NoYTEpIDogTlVMTCk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9mZXRjaC1wYWNrLmMgYi9mZXRjaC1wYWNrLmMKaW5kZXggNTgyZjk2Ny4uNjU2NTk4MiAxMDA2NDQKLS0tIGEvZmV0Y2gtcGFjay5jCisrKyBiL2ZldGNoLXBhY2suYwpAQCAtMSw2ICsxLDkgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCiBzdGF0aWMgaW50IHF1aWV0OwpAQCAtOSwzNyArMTIsMTY4IEBACiAiZ2l0LWZldGNoLXBhY2sgWy1xXSBbLXZdIFstLWV4ZWM9dXBsb2FkLXBhY2tdIFtob3N0Ol1kaXJlY3RvcnkgPHJlZnM+Li4uIjsKIHN0YXRpYyBjb25zdCBjaGFyICpleGVjID0gImdpdC11cGxvYWQtcGFjayI7CiAKKyNkZWZpbmUgQ09NUExFVEUJKDFVIDw8IDApCisjZGVmaW5lIENPTU1PTgkJKDFVIDw8IDEpCisjZGVmaW5lIENPTU1PTl9SRUYJKDFVIDw8IDIpCisjZGVmaW5lIFNFRU4JCSgxVSA8PCAzKQorI2RlZmluZSBQT1BQRUQJCSgxVSA8PCA0KQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZXZfbGlzdCA9IE5VTEw7CitzdGF0aWMgaW50IG5vbl9jb21tb25fcmV2cyA9IDAsIG11bHRpX2FjayA9IDA7CisKK3N0YXRpYyB2b2lkIHJldl9saXN0X3B1c2goc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbWFyaykKK3sKKwlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIG1hcmspKSB7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IG1hcms7CisKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QucGFyc2VkKSkKKwkJCXBhcnNlX2NvbW1pdChjb21taXQpOworCisJCWluc2VydF9ieV9kYXRlKGNvbW1pdCwgJnJldl9saXN0KTsKKworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpCisJCQlub25fY29tbW9uX3JldnMrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmV2X2xpc3RfaW5zZXJ0X3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KHNoYTEpLCBwYXRoLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gY29tbWl0X3R5cGUpCisJCXJldl9saXN0X3B1c2goKHN0cnVjdCBjb21taXQgKilvLCBTRUVOKTsKKworCXJldHVybiAwOworfQorCisvKgorICAgVGhpcyBmdW5jdGlvbiBtYXJrcyBhIHJldiBhbmQgaXRzIGFuY2VzdG9ycyBhcyBjb21tb24uCisgICBJbiBzb21lIGNhc2VzLCBpdCBpcyBkZXNpcmFibGUgdG8gbWFyayBvbmx5IHRoZSBhbmNlc3RvcnMgKGZvciBleGFtcGxlCisgICB3aGVuIG9ubHkgdGhlIHNlcnZlciBkb2VzIG5vdCB5ZXQga25vdyB0aGF0IHRoZXkgYXJlIGNvbW1vbikuCisqLworCitzdGF0aWMgdm9pZCBtYXJrX2NvbW1vbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCWludCBhbmNlc3RvcnNfb25seSwgaW50IGRvbnRfcGFyc2UpCit7CisJaWYgKGNvbW1pdCAhPSBOVUxMICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBDT01NT04pKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSAoc3RydWN0IG9iamVjdCAqKWNvbW1pdDsKKworCQlpZiAoIWFuY2VzdG9yc19vbmx5KQorCQkJby0+ZmxhZ3MgfD0gQ09NTU9OOworCisJCWlmICghKG8tPmZsYWdzICYgU0VFTikpCisJCQlyZXZfbGlzdF9wdXNoKGNvbW1pdCwgU0VFTik7CisJCWVsc2UgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCQlpZiAoIWFuY2VzdG9yc19vbmx5ICYmICEoby0+ZmxhZ3MgJiBQT1BQRUQpKQorCQkJCW5vbl9jb21tb25fcmV2cy0tOworCQkJaWYgKCFvLT5wYXJzZWQgJiYgIWRvbnRfcGFyc2UpCisJCQkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisKKwkJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJCQkJcGFyZW50czsKKwkJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQkJbWFya19jb21tb24ocGFyZW50cy0+aXRlbSwgMCwgZG9udF9wYXJzZSk7CisJCX0KKwl9Cit9CisKKy8qCisgIEdldCB0aGUgbmV4dCByZXYgdG8gc2VuZCwgaWdub3JpbmcgdGhlIGNvbW1vbi4KKyovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyKiBnZXRfcmV2KCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCisJd2hpbGUgKGNvbW1pdCA9PSBOVUxMKSB7CisJCXVuc2lnbmVkIGludCBtYXJrOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QqIHBhcmVudHM7CisKKwkJaWYgKHJldl9saXN0ID09IE5VTEwgfHwgbm9uX2NvbW1vbl9yZXZzID09IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQljb21taXQgPSByZXZfbGlzdC0+aXRlbTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QucGFyc2VkKSkKKwkJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBQT1BQRUQ7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cy0tOworCQorCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikgeworCQkJLyogZG8gbm90IHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJY29tbWl0ID0gTlVMTDsKKwkJCW1hcmsgPSBDT01NT04gfCBTRUVOOworCQl9IGVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OX1JFRikKKwkJCS8qIHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJbWFyayA9IENPTU1PTiB8IFNFRU47CisJCWVsc2UKKwkJCS8qIHNlbmQgImhhdmUiLCBhbHNvIGZvciBpdHMgYW5jZXN0b3JzICovCisJCQltYXJrID0gU0VFTjsKKworCQl3aGlsZSAocGFyZW50cykgeworCQkJaWYgKCEocGFyZW50cy0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJcmV2X2xpc3RfcHVzaChwYXJlbnRzLT5pdGVtLCBtYXJrKTsKKwkJCWlmIChtYXJrICYgQ09NTU9OKQorCQkJCW1hcmtfY29tbW9uKHBhcmVudHMtPml0ZW0sIDEsIDApOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKworCQlyZXZfbGlzdCA9IHJldl9saXN0LT5uZXh0OworCX0KKworCXJldHVybiBjb21taXQtPm9iamVjdC5zaGExOworfQorCiBzdGF0aWMgaW50IGZpbmRfY29tbW9uKGludCBmZFsyXSwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEsCiAJCSAgICAgICBzdHJ1Y3QgcmVmICpyZWZzKQogewotCXN0YXRpYyBjaGFyIGxpbmVbMTAwMF07CisJaW50IGZldGNoaW5nOwogCWludCBjb3VudCA9IDAsIGZsdXNoZXMgPSAwLCByZXR2YWw7Ci0JRklMRSAqcmV2czsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOwogCi0JcmV2cyA9IHBvcGVuKCJnaXQtcmV2LWxpc3QgJChnaXQtcmV2LXBhcnNlIC0tYWxsKSIsICJyIik7Ci0JaWYgKCFyZXZzKQotCQlkaWUoInVuYWJsZSB0byBydW4gJ2dpdC1yZXYtbGlzdCciKTsKKwlmb3JfZWFjaF9yZWYocmV2X2xpc3RfaW5zZXJ0X3JlZik7CiAKLQl3aGlsZSAocmVmcykgeworCWZldGNoaW5nID0gMDsKKwlmb3IgKCA7IHJlZnMgOyByZWZzID0gcmVmcy0+bmV4dCkgewogCQl1bnNpZ25lZCBjaGFyICpyZW1vdGUgPSByZWZzLT5vbGRfc2hhMTsKLQkJaWYgKHZlcmJvc2UpCi0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkid2FudCAlcyAoJXMpXG4iLCBzaGExX3RvX2hleChyZW1vdGUpLAotCQkJCXJlZnMtPm5hbWUpOwotCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJ3YW50ICVzXG4iLCBzaGExX3RvX2hleChyZW1vdGUpKTsKLQkJcmVmcyA9IHJlZnMtPm5leHQ7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJLyoKKwkJICogSWYgdGhhdCBvYmplY3QgaXMgY29tcGxldGUgKGkuZS4gaXQgaXMgYW4gYW5jZXN0b3Igb2YgYQorCQkgKiBsb2NhbCByZWYpLCB3ZSB0ZWxsIHRoZW0gd2UgaGF2ZSBpdCBidXQgZG8gbm90IGhhdmUgdG8KKwkJICogdGVsbCB0aGVtIGFib3V0IGl0cyBhbmNlc3RvcnMsIHdoaWNoIHRoZXkgYWxyZWFkeSBrbm93CisJCSAqIGFib3V0LgorCQkgKgorCQkgKiBXZSB1c2UgbG9va3VwX29iamVjdCBoZXJlIGJlY2F1c2Ugd2UgYXJlIG9ubHkKKwkJICogaW50ZXJlc3RlZCBpbiB0aGUgY2FzZSB3ZSAqa25vdyogdGhlIG9iamVjdCBpcworCQkgKiByZWFjaGFibGUgYW5kIHdlIGhhdmUgYWxyZWFkeSBzY2FubmVkIGl0LgorCQkgKi8KKwkJaWYgKCgobyA9IGxvb2t1cF9vYmplY3QocmVtb3RlKSkgIT0gTlVMTCkgJiYKKwkJCQkoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcGFja2V0X3dyaXRlKGZkWzFdLCAid2FudCAlcyVzXG4iLCBzaGExX3RvX2hleChyZW1vdGUpLAorCQkJbXVsdGlfYWNrID8gIiBtdWx0aV9hY2siIDogIiIpOworCQlmZXRjaGluZysrOwogCX0KIAlwYWNrZXRfZmx1c2goZmRbMV0pOwotCWZsdXNoZXMgPSAxOworCWlmICghZmV0Y2hpbmcpCisJCXJldHVybiAxOworCisJZmx1c2hlcyA9IDA7CiAJcmV0dmFsID0gLTE7Ci0Jd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgcmV2cykgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpKQotCQkJZGllKCJnaXQtZmV0Y2gtcGFjazogZXhwZWN0ZWQgb2JqZWN0IG5hbWUsIGdvdCBjcnVkIik7CisJd2hpbGUgKChzaGExID0gZ2V0X3JldigpKSkgewogCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CiAJCWlmICh2ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CiAJCWlmICghKDMxICYgKytjb3VudCkpIHsKKwkJCWludCBhY2s7CisKIAkJCXBhY2tldF9mbHVzaChmZFsxXSk7CiAJCQlmbHVzaGVzKys7CiAKQEAgLTQ5LDI3ICsxODMsMTc3IEBACiAJCQkgKi8KIAkJCWlmIChjb3VudCA9PSAzMikKIAkJCQljb250aW51ZTsKLQkJCWlmIChnZXRfYWNrKGZkWzBdLCByZXN1bHRfc2hhMSkpIHsKLQkJCQlmbHVzaGVzID0gMDsKLQkJCQlyZXR2YWwgPSAwOwotCQkJCWlmICh2ZXJib3NlKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCBhY2tcbiIpOwotCQkJCWJyZWFrOwotCQkJfQorCisJCQlkbyB7CisJCQkJYWNrID0gZ2V0X2FjayhmZFswXSwgcmVzdWx0X3NoYTEpOworCQkJCWlmICh2ZXJib3NlICYmIGFjaykKKwkJCQkJZnByaW50ZihzdGRlcnIsICJnb3QgYWNrICVkICVzXG4iLCBhY2ssCisJCQkJCQkJc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwkJCQlpZiAoYWNrID09IDEpIHsKKwkJCQkJZmx1c2hlcyA9IDA7CisJCQkJCW11bHRpX2FjayA9IDA7CisJCQkJCXJldHZhbCA9IDA7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9IGVsc2UgaWYgKGFjayA9PSAyKSB7CisJCQkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9CisJCQkJCQlsb29rdXBfY29tbWl0KHJlc3VsdF9zaGExKTsKKwkJCQkJbWFya19jb21tb24oY29tbWl0LCAwLCAxKTsKKwkJCQkJcmV0dmFsID0gMDsKKwkJCQl9CisJCQl9IHdoaWxlIChhY2spOwogCQkJZmx1c2hlcy0tOwogCQl9CiAJfQotCXBjbG9zZShyZXZzKTsKK2RvbmU6CiAJcGFja2V0X3dyaXRlKGZkWzFdLCAiZG9uZVxuIik7CiAJaWYgKHZlcmJvc2UpCiAJCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuIik7Ci0Jd2hpbGUgKGZsdXNoZXMpIHsKLQkJZmx1c2hlcy0tOwotCQlpZiAoZ2V0X2FjayhmZFswXSwgcmVzdWx0X3NoYTEpKSB7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCW11bHRpX2FjayA9IDA7CisJCWZsdXNoZXMrKzsKKwl9CisJd2hpbGUgKGZsdXNoZXMgfHwgbXVsdGlfYWNrKSB7CisJCWludCBhY2sgPSBnZXRfYWNrKGZkWzBdLCByZXN1bHRfc2hhMSk7CisJCWlmIChhY2spIHsKIAkJCWlmICh2ZXJib3NlKQotCQkJCWZwcmludGYoc3RkZXJyLCAiZ290IGFja1xuIik7Ci0JCQlyZXR1cm4gMDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImdvdCBhY2sgKCVkKSAlc1xuIiwgYWNrLAorCQkJCQlzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOworCQkJaWYgKGFjayA9PSAxKQorCQkJCXJldHVybiAwOworCQkJbXVsdGlfYWNrID0gMTsKKwkJCWNvbnRpbnVlOwogCQl9CisJCWZsdXNoZXMtLTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29tcGxldGUgPSBOVUxMOworCitzdGF0aWMgaW50IG1hcmtfY29tcGxldGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSB0YWdfdHlwZSkgeworCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKKwkJaWYgKCF0LT50YWdnZWQpCisJCQlicmVhazsgLyogYnJva2VuIHJlcG9zaXRvcnkgKi8KKwkJby0+ZmxhZ3MgfD0gQ09NUExFVEU7CisJCW8gPSBwYXJzZV9vYmplY3QodC0+dGFnZ2VkLT5zaGExKTsKKwl9CisJaWYgKG8gJiYgby0+dHlwZSA9PSBjb21taXRfdHlwZSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IENPTVBMRVRFOworCQlpbnNlcnRfYnlfZGF0ZShjb21taXQsICZjb21wbGV0ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXJrX3JlY2VudF9jb21wbGV0ZV9jb21taXRzKHVuc2lnbmVkIGxvbmcgY3V0b2ZmKQoreworCXdoaWxlIChjb21wbGV0ZSAmJiBjdXRvZmYgPD0gY29tcGxldGUtPml0ZW0tPmRhdGUpIHsKKwkJaWYgKHZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIk1hcmtpbmcgJXMgYXMgY29tcGxldGVcbiIsCisJCQkJc2hhMV90b19oZXgoY29tcGxldGUtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCXBvcF9tb3N0X3JlY2VudF9jb21taXQoJmNvbXBsZXRlLCBDT01QTEVURSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaWx0ZXJfcmVmcyhzdHJ1Y3QgcmVmICoqcmVmcywgaW50IG5yX21hdGNoLCBjaGFyICoqbWF0Y2gpCit7CisJc3RydWN0IHJlZiAqcHJldiwgKmN1cnJlbnQsICpuZXh0OworCisJaWYgKCFucl9tYXRjaCkKKwkJcmV0dXJuOworCisJZm9yIChwcmV2ID0gTlVMTCwgY3VycmVudCA9ICpyZWZzOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgeworCQluZXh0ID0gY3VycmVudC0+bmV4dDsKKwkJaWYgKCghbWVtY21wKGN1cnJlbnQtPm5hbWUsICJyZWZzLyIsIDUpICYmCisJCQkJCWNoZWNrX3JlZl9mb3JtYXQoY3VycmVudC0+bmFtZSArIDUpKSB8fAorCQkJCSFwYXRoX21hdGNoKGN1cnJlbnQtPm5hbWUsIG5yX21hdGNoLCBtYXRjaCkpIHsKKwkJCWlmIChwcmV2ID09IE5VTEwpCisJCQkJKnJlZnMgPSBuZXh0OworCQkJZWxzZQorCQkJCXByZXYtPm5leHQgPSBuZXh0OworCQkJZnJlZShjdXJyZW50KTsKKwkJfSBlbHNlCisJCQlwcmV2ID0gY3VycmVudDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXZlcnl0aGluZ19sb2NhbChzdHJ1Y3QgcmVmICoqcmVmcywgaW50IG5yX21hdGNoLCBjaGFyICoqbWF0Y2gpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBjdXRvZmYgPSAwOworCisJdHJhY2tfb2JqZWN0X3JlZnMgPSAwOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvOworCisJCW8gPSBwYXJzZV9vYmplY3QocmVmLT5vbGRfc2hhMSk7CisJCWlmICghbykKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIGFscmVhZHkgaGF2ZSBpdCAtLSB3aGljaCBtYXkgbWVhbiB0aGF0IHdlIHdlcmUKKwkJICogaW4gc3luYyB3aXRoIHRoZSBvdGhlciBzaWRlIGF0IHNvbWUgdGltZSBhZnRlcgorCQkgKiB0aGF0IChpdCBpcyBPSyBpZiB3ZSBndWVzcyB3cm9uZyBoZXJlKS4KKwkJICovCisJCWlmIChvLT50eXBlID09IGNvbW1pdF90eXBlKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCQlpZiAoIWN1dG9mZiB8fCBjdXRvZmYgPCBjb21taXQtPmRhdGUpCisJCQkJY3V0b2ZmID0gY29tbWl0LT5kYXRlOworCQl9CisJfQorCisJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGUpOworCWlmIChjdXRvZmYpCisJCW1hcmtfcmVjZW50X2NvbXBsZXRlX2NvbW1pdHMoY3V0b2ZmKTsKKworCS8qCisJICogTWFyayBhbGwgY29tcGxldGUgcmVtb3RlIHJlZnMgYXMgY29tbW9uIHJlZnMuCisJICogRG9uJ3QgbWFyayB0aGVtIGNvbW1vbiB5ZXQ7IHRoZSBzZXJ2ZXIgaGFzIHRvIGJlIHRvbGQgc28gZmlyc3QuCisJICovCisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhsb29rdXBfb2JqZWN0KHJlZi0+b2xkX3NoYTEpLAorCQkJCQkgICAgIE5VTEwsIDApOworCisJCWlmICghbyB8fCBvLT50eXBlICE9IGNvbW1pdF90eXBlIHx8ICEoby0+ZmxhZ3MgJiBDT01QTEVURSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIShvLT5mbGFncyAmIFNFRU4pKSB7CisJCQlyZXZfbGlzdF9wdXNoKChzdHJ1Y3QgY29tbWl0ICopbywgQ09NTU9OX1JFRiB8IFNFRU4pOworCisJCQltYXJrX2NvbW1vbigoc3RydWN0IGNvbW1pdCAqKW8sIDEsIDEpOworCQl9CisJfQorCisJZmlsdGVyX3JlZnMocmVmcywgbnJfbWF0Y2gsIG1hdGNoKTsKKworCWZvciAocmV0dmFsID0gMSwgcmVmID0gKnJlZnM7IHJlZiA7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpyZW1vdGUgPSByZWYtPm9sZF9zaGExOworCQl1bnNpZ25lZCBjaGFyIGxvY2FsWzIwXTsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlvID0gbG9va3VwX29iamVjdChyZW1vdGUpOworCQlpZiAoIW8gfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkgeworCQkJcmV0dmFsID0gMDsKKwkJCWlmICghdmVyYm9zZSkKKwkJCQljb250aW51ZTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJ3YW50ICVzICglcylcbiIsIHNoYTFfdG9faGV4KHJlbW90ZSksCisJCQkJcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbWVtY3B5KHJlZi0+bmV3X3NoYTEsIGxvY2FsLCAyMCk7CisJCWlmICghdmVyYm9zZSkKKwkJCWNvbnRpbnVlOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJhbHJlYWR5IGhhdmUgJXMgKCVzKVxuIiwgc2hhMV90b19oZXgocmVtb3RlKSwKKwkJCXJlZi0+bmFtZSk7CiAJfQogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MSwxMSArMzY1LDIwIEBACiAJaW50IHN0YXR1czsKIAlwaWRfdCBwaWQ7CiAKLQlnZXRfcmVtb3RlX2hlYWRzKGZkWzBdLCAmcmVmLCBucl9tYXRjaCwgbWF0Y2gpOworCWdldF9yZW1vdGVfaGVhZHMoZmRbMF0sICZyZWYsIDAsIE5VTEwsIDApOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm11bHRpX2FjayIpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlfYWNrXG4iKTsKKwkJbXVsdGlfYWNrID0gMTsKKwl9CiAJaWYgKCFyZWYpIHsKIAkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAkJZGllKCJubyBtYXRjaGluZyByZW1vdGUgaGVhZCIpOwogCX0KKwlpZiAoZXZlcnl0aGluZ19sb2NhbCgmcmVmLCBucl9tYXRjaCwgbWF0Y2gpKSB7CisJCXBhY2tldF9mbHVzaChmZFsxXSk7CisJCWdvdG8gYWxsX2RvbmU7CisJfQogCWlmIChmaW5kX2NvbW1vbihmZCwgc2hhMSwgcmVmKSA8IDApCiAJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogbm8gY29tbW9uIGNvbW1pdHNcbiIpOwogCXBpZCA9IGZvcmsoKTsKQEAgLTEwOSw2ICs0MDIsNyBAQAogCQlpbnQgY29kZSA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CiAJCWlmIChjb2RlKQogCQkJZGllKCJnaXQtdW5wYWNrLW9iamVjdHMgZGllZCB3aXRoIGVycm9yIGNvZGUgJWQiLCBjb2RlKTsKK2FsbF9kb25lOgogCQl3aGlsZSAocmVmKSB7CiAJCQlwcmludGYoIiVzICVzXG4iLAogCQkJICAgICAgIHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCByZWYtPm5hbWUpOwpAQCAtMTY0LDUgKzQ1OCwxOSBAQAogCWNsb3NlKGZkWzBdKTsKIAljbG9zZShmZFsxXSk7CiAJZmluaXNoX2Nvbm5lY3QocGlkKTsKKworCWlmICghcmV0ICYmIG5yX2hlYWRzKSB7CisJCS8qIElmIHRoZSBoZWFkcyB0byBwdWxsIHdlcmUgZ2l2ZW4sIHdlIHNob3VsZCBoYXZlCisJCSAqIGNvbnN1bWVkIGFsbCBvZiB0aGVtIGJ5IG1hdGNoaW5nIHRoZSByZW1vdGUuCisJCSAqIE90aGVyd2lzZSwgJ2dpdC1mZXRjaCByZW1vdGUgbm8tc3VjaC1yZWYnIHdvdWxkCisJCSAqIHNpbGVudGx5IHN1Y2NlZWQgd2l0aG91dCBpc3N1aW5nIGFuIGVycm9yLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCQlpZiAoaGVhZHNbaV0gJiYgaGVhZHNbaV1bMF0pIHsKKwkJCQllcnJvcigibm8gc3VjaCByZW1vdGUgcmVmICVzIiwgaGVhZHNbaV0pOworCQkJCXJldCA9IDE7CisJCQl9CisJfQorCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZldGNoLmMgYi9mZXRjaC5jCmluZGV4IDFhMzNhZTkuLjczYmRlMDcgMTAwNjQ0Ci0tLSBhL2ZldGNoLmMKKysrIGIvZmV0Y2guYwpAQCAtMTUsNiArMTUsNyBAQAogaW50IGdldF9oaXN0b3J5ID0gMDsKIGludCBnZXRfYWxsID0gMDsKIGludCBnZXRfdmVyYm9zZWx5ID0gMDsKK2ludCBnZXRfcmVjb3ZlciA9IDA7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBjdXJyZW50X2NvbW1pdF9zaGExWzIwXTsKIAogdm9pZCBwdWxsX3NheShjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKmhleCkgCkBAIC0xNjQsNyArMTY1LDcgQEAKIAkJICogdGhlIHF1ZXVlIGJlY2F1c2Ugd2UgbmVlZGVkIHRvIGZldGNoIGl0IGZpcnN0LgogCQkgKi8KIAkJaWYgKCEgKG9iai0+ZmxhZ3MgJiBUT19TQ0FOKSkgewotCQkJaWYgKCFoYXNfc2hhMV9maWxlKG9iai0+c2hhMSkgJiYgZmV0Y2gob2JqLT5zaGExKSkgeworCQkJaWYgKGZldGNoKG9iai0+c2hhMSkpIHsKIAkJCQlyZXBvcnRfbWlzc2luZyhvYmotPnR5cGUKIAkJCQkJICAgICAgID8gb2JqLT50eXBlCiAJCQkJCSAgICAgICA6ICJvYmplY3QiLCBvYmotPnNoYTEpOwpAQCAtMjE0LDcgKzIxNSw5IEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGUpOworCWlmICghZ2V0X3JlY292ZXIpIHsKKwkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGUpOworCX0KIAogCWlmIChpbnRlcnByZXRfdGFyZ2V0KHRhcmdldCwgc2hhMSkpCiAJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGludGVycHJldCAlcyBhcyBzb21ldGhpbmcgdG8gcHVsbCIsCmRpZmYgLS1naXQgYS9mZXRjaC5oIGIvZmV0Y2guaAppbmRleCBlNzcxMGU4Li45ODM3YTNkIDEwMDY0NAotLS0gYS9mZXRjaC5oCisrKyBiL2ZldGNoLmgKQEAgLTQwLDYgKzQwLDkgQEAKIC8qIFNldCB0byBiZSB2ZXJib3NlICovCiBleHRlcm4gaW50IGdldF92ZXJib3NlbHk7CiAKKy8qIFNldCB0byBjaGVjayBvbiBhbGwgcmVhY2hhYmxlIG9iamVjdHMuICovCitleHRlcm4gaW50IGdldF9yZWNvdmVyOworCiAvKiBSZXBvcnQgd2hhdCB3ZSBnb3QgdW5kZXIgZ2V0X3ZlcmJvc2VseSAqLwogZXh0ZXJuIHZvaWQgcHVsbF9zYXkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCmRpZmYgLS1naXQgYS9mc2NrLW9iamVjdHMuYyBiL2ZzY2stb2JqZWN0cy5jCmluZGV4IDBjNWM0MzAuLjE3ZDA1MzYgMTAwNjQ0Ci0tLSBhL2ZzY2stb2JqZWN0cy5jCisrKyBiL2ZzY2stb2JqZWN0cy5jCkBAIC0yMCw2ICsyMCwzNSBAQAogc3RhdGljIGludCBrZWVwX2NhY2hlX29iamVjdHMgPSAwOyAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CiAKKworc3RhdGljIHZvaWQgb2JqcmVwb3J0KHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqc2V2ZXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIGluICVzICVzOiAiLAorCSAgICAgICAgc2V2ZXJpdHksIG9iai0+dHlwZSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIHBhcmFtcyk7CisJZnB1dHMoIlxuIiwgc3RkZXJyKTsKK30KKworc3RhdGljIGludCBvYmplcnJvcihzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlvYmpyZXBvcnQob2JqLCAiZXJyb3IiLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IG9iandhcm5pbmcoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJb2JqcmVwb3J0KG9iaiwgIndhcm5pbmciLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJcmV0dXJuIC0xOworfQorCisKIHN0YXRpYyB2b2lkIGNoZWNrX2Nvbm5lY3Rpdml0eSh2b2lkKQogewogCWludCBpOwpAQCAtMTYyLDMxICsxOTEsMTkgQEAKIAogCXJldHZhbCA9IDA7CiAJaWYgKGhhc19mdWxsX3BhdGgpIHsKLQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBnaXQtZnNjay1vYmplY3RzOiB0cmVlICVzICIKLQkJCSJoYXMgZnVsbCBwYXRobmFtZXMgaW4gaXRcbiIsIAotCQkJc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJb2Jqd2FybmluZygmaXRlbS0+b2JqZWN0LCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKIAl9CiAJaWYgKGhhc196ZXJvX3BhZCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IGdpdC1mc2NrLW9iamVjdHM6IHRyZWUgJXMgIgotCQkJImhhcyB6ZXJvLXBhZGRlZCBmaWxlIG1vZGVzIGluIGl0XG4iLAotCQkJc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJb2Jqd2FybmluZygmaXRlbS0+b2JqZWN0LCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOwogCX0KIAlpZiAoaGFzX2JhZF9tb2RlcykgewotCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IGdpdC1mc2NrLW9iamVjdHM6IHRyZWUgJXMgIgotCQkJImhhcyBiYWQgZmlsZSBtb2RlcyBpbiBpdFxuIiwKLQkJCXNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJCW9iandhcm5pbmcoJml0ZW0tPm9iamVjdCwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CiAJfQogCWlmIChoYXNfZHVwX2VudHJpZXMpIHsKLQkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogZ2l0LWZzY2stb2JqZWN0czogdHJlZSAlcyAiCi0JCQkiaGFzIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXNcbiIsCi0JCQlzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOwotCQlyZXR2YWwgPSAtMTsKKwkJcmV0dmFsID0gb2JqZXJyb3IoJml0ZW0tPm9iamVjdCwgImNvbnRhaW5zIGR1cGxpY2F0ZSBmaWxlIGVudHJpZXMiKTsKIAl9CiAJaWYgKG5vdF9wcm9wZXJseV9zb3J0ZWQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogZ2l0LWZzY2stb2JqZWN0czogdHJlZSAlcyAiCi0JCQkiaXMgbm90IHByb3Blcmx5IHNvcnRlZFxuIiwKLQkJCXNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7Ci0JCXJldHZhbCA9IC0xOworCQlyZXR2YWwgPSBvYmplcnJvcigmaXRlbS0+b2JqZWN0LCAibm90IHByb3Blcmx5IHNvcnRlZCIpOwogCX0KIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTk0LDI0ICsyMTEsMjQgQEAKIHN0YXRpYyBpbnQgZnNja19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewogCWNoYXIgKmJ1ZmZlciA9IGNvbW1pdC0+YnVmZmVyOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdLCBzaGExWzIwXTsKIAogCWlmIChtZW1jbXAoYnVmZmVyLCAidHJlZSAiLCA1KSkKLQkJcmV0dXJuIC0xOwotCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyKzUsIHNoYTEpIHx8IGJ1ZmZlcls0NV0gIT0gJ1xuJykKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gb2JqZXJyb3IoJmNvbW1pdC0+b2JqZWN0LCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOworCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyKzUsIHRyZWVfc2hhMSkgfHwgYnVmZmVyWzQ1XSAhPSAnXG4nKQorCQlyZXR1cm4gb2JqZXJyb3IoJmNvbW1pdC0+b2JqZWN0LCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCWJ1ZmZlciArPSA0NjsKIAl3aGlsZSAoIW1lbWNtcChidWZmZXIsICJwYXJlbnQgIiwgNykpIHsKIAkJaWYgKGdldF9zaGExX2hleChidWZmZXIrNywgc2hhMSkgfHwgYnVmZmVyWzQ3XSAhPSAnXG4nKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIG9iamVycm9yKCZjb21taXQtPm9iamVjdCwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQlidWZmZXIgKz0gNDg7CiAJfQogCWlmIChtZW1jbXAoYnVmZmVyLCAiYXV0aG9yICIsIDcpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiBvYmplcnJvcigmY29tbWl0LT5vYmplY3QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdhdXRob3InIGxpbmUiKTsKIAlmcmVlKGNvbW1pdC0+YnVmZmVyKTsKIAljb21taXQtPmJ1ZmZlciA9IE5VTEw7CiAJaWYgKCFjb21taXQtPnRyZWUpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIG9iamVycm9yKCZjb21taXQtPm9iamVjdCwgImNvdWxkIG5vdCBsb2FkIGNvbW1pdCdzIHRyZWUgJXMiLCB0cmVlX3NoYTEpOwogCWlmICghY29tbWl0LT5wYXJlbnRzICYmIHNob3dfcm9vdCkKIAkJcHJpbnRmKCJyb290ICVzXG4iLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CiAJaWYgKCFjb21taXQtPmRhdGUpCkBAIC0yMjUsOCArMjQyLDcgQEAKIAlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQgPSB0YWctPnRhZ2dlZDsKIAogCWlmICghdGFnZ2VkKSB7Ci0JCXByaW50ZigiYmFkIG9iamVjdCBpbiB0YWcgJXNcbiIsIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gb2JqZXJyb3IoJnRhZy0+b2JqZWN0LCAiY291bGQgbm90IGxvYWQgdGFnZ2VkIG9iamVjdCIpOwogCX0KIAlpZiAoIXNob3dfdGFncykKIAkJcmV0dXJuIDA7CkBAIC0yNDAsNyArMjU2LDcgQEAKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CiAJaWYgKCFvYmopCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIGVycm9yKCIlczogb2JqZWN0IG5vdCBmb3VuZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAlpZiAob2JqLT50eXBlID09IGJsb2JfdHlwZSkKIAkJcmV0dXJuIDA7CiAJaWYgKG9iai0+dHlwZSA9PSB0cmVlX3R5cGUpCkBAIC0yNDksNyArMjY1LDggQEAKIAkJcmV0dXJuIGZzY2tfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopIG9iaik7CiAJaWYgKG9iai0+dHlwZSA9PSB0YWdfdHlwZSkKIAkJcmV0dXJuIGZzY2tfdGFnKChzdHJ1Y3QgdGFnICopIG9iaik7Ci0JcmV0dXJuIC0xOworCS8qIEJ5IG5vdywgcGFyc2Vfb2JqZWN0KCkgd291bGQndmUgcmV0dXJuZWQgTlVMTCBpbnN0ZWFkLiAqLworCXJldHVybiBvYmplcnJvcihvYmosICJ1bmtub3duIHR5cGUgJyVzJyAoaW50ZXJuYWwgZnNjayBlcnJvcikiLCBvYmotPnR5cGUpOwogfQogCiAvKgpAQCAtMjg1LDggKzMwMiw3IEBACiAJCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBlbnRyeS0+c2hhMTsKIAogCQlzaGExX2xpc3QuZW50cnlbaV0gPSBOVUxMOwotCQlpZiAoZnNja19zaGExKHNoYTEpIDwgMCkKLQkJCWZwcmludGYoc3RkZXJyLCAiYmFkIHNoYTEgZW50cnkgJyVzJ1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQlmc2NrX3NoYTEoc2hhMSk7CiAJCWZyZWUoZW50cnkpOwogCX0KIAlzaGExX2xpc3QubnIgPSAwOwpAQCAtMzEzLDkgKzMyOSw4IEBACiAJRElSICpkaXIgPSBvcGVuZGlyKHBhdGgpOwogCXN0cnVjdCBkaXJlbnQgKmRlOwogCi0JaWYgKCFkaXIpIHsKLQkJcmV0dXJuIGVycm9yKCJtaXNzaW5nIHNoYTEgZGlyZWN0b3J5ICclcyciLCBwYXRoKTsKLQl9CisJaWYgKCFkaXIpCisJCXJldHVybiAwOwogCiAJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQljaGFyIG5hbWVbMTAwXTsKQEAgLTM4NiwyOCArNDAxLDE3IEBACiAKIHN0YXRpYyBpbnQgZnNja19oZWFkX2xpbmsodm9pZCkKIHsKLQlpbnQgZmQsIGNvdW50OwotCWNoYXIgaGV4WzQwXTsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVhdLCBsaW5rW1BBVEhfTUFYXTsKLQljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbnN0IGNoYXIgKmdpdF9IRUFEID0gc3RyZHVwKGdpdF9wYXRoKCJIRUFEIikpOworCWNvbnN0IGNoYXIgKmdpdF9yZWZzX2hlYWRzX21hc3RlciA9IHJlc29sdmVfcmVmKGdpdF9IRUFELCBzaGExLCAxKTsKKwlpbnQgcGZ4bGVuID0gc3RybGVuKGdpdF9IRUFEKSAtIDQ7IC8qIHN0cmlwIC4uLi8uZ2l0LyBwYXJ0ICovCiAKLQlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2RpcikgZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKLQotCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzL0hFQUQiLCBnaXRfZGlyKTsKLQlpZiAocmVhZGxpbmsocGF0aCwgbGluaywgc2l6ZW9mKGxpbmspKSA8IDApCi0JCXJldHVybiBlcnJvcigiSEVBRCBpcyBub3QgYSBzeW1saW5rIik7Ci0JaWYgKHN0cm5jbXAoInJlZnMvaGVhZHMvIiwgbGluaywgMTEpKQotCQlyZXR1cm4gZXJyb3IoIkhFQUQgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlICglcykiLCBsaW5rKTsKLQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCWlmIChmZCA8IDApCi0JCXJldHVybiBlcnJvcigiSEVBRDogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCWNvdW50ID0gcmVhZChmZCwgaGV4LCBzaXplb2YoaGV4KSk7Ci0JY2xvc2UoZmQpOwotCWlmIChjb3VudCA8IDApCi0JCXJldHVybiBlcnJvcigiSEVBRDogJXMiLCBzdHJlcnJvcihlcnJubykpOwotCWlmIChjb3VudCA8IDQwIHx8IGdldF9zaGExX2hleChoZXgsIHNoYTEpKQorCWlmICghZ2l0X3JlZnNfaGVhZHNfbWFzdGVyKQorCQlyZXR1cm4gZXJyb3IoIkhFQUQgaXMgbm90IGEgc3ltYm9saWMgcmVmIik7CisJaWYgKHN0cm5jbXAoZ2l0X3JlZnNfaGVhZHNfbWFzdGVyICsgcGZ4bGVuLCAicmVmcy9oZWFkcy8iLCAxMSkpCisJCXJldHVybiBlcnJvcigiSEVBRCBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIsCisJCQkgICAgIGdpdF9yZWZzX2hlYWRzX21hc3RlciArIHBmeGxlbik7CisJaWYgKCFtZW1jbXAobnVsbF9zaGExLCBzaGExLCAyMCkpCiAJCXJldHVybiBlcnJvcigiSEVBRDogbm90IGEgdmFsaWQgZ2l0IHBvaW50ZXIiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3OSw5ICs0ODMsNyBAQAogCQkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAkJCQludGhfcGFja2VkX29iamVjdF9zaGExKHAsIGksIHNoYTEpOwotCQkJCWlmIChmc2NrX3NoYTEoc2hhMSkgPCAwKQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgImJhZCBzaGExIGVudHJ5ICclcydcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQorCQkJCWZzY2tfc2hhMShzaGExKTsKIAkJCX0KIAkJfQogCX0KQEAgLTUwNSw3ICs1MDcsNyBAQAogCQkJaGVhZHMrKzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWVycm9yKCJleHBlY3RlZCBzaGExLCBnb3QgJXMiLCBhcmcpOworCQllcnJvcigiaW52YWxpZCBwYXJhbWV0ZXI6IGV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiwgYXJnKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZ2l0LWFkZC5zaCBiL2dpdC1hZGQuc2gKaW5kZXggM2QzNjRkYi4uYjVmZTQ2YSAxMDA3NTUKLS0tIGEvZ2l0LWFkZC5zaAorKysgYi9naXQtYWRkLnNoCkBAIC0xLDE1ICsxLDIxIEBACiAjIS9iaW4vc2gKIAordXNhZ2UoKSB7CisgICAgZGllICJ1c2FnZTogZ2l0IGFkZCBbLW5dIFstdl0gPGZpbGU+Li4uIgorfQorCiBzaG93X29ubHk9CiB2ZXJib3NlPQogd2hpbGUgOiA7IGRvCiAgIGNhc2UgIiQxIiBpbgogICAgIC1uKQogCXNob3dfb25seT10cnVlCi0JdmVyYm9zZT10cnVlCiAJOzsKICAgICAtdikKLQl2ZXJib3NlPXRydWUKKwl2ZXJib3NlPS0tdmVyYm9zZQorCTs7CisgICAgLSopCisJdXNhZ2UKIAk7OwogICAgICopCiAJYnJlYWsKQEAgLTE5LDE0ICsyNSwxOSBAQAogZG9uZQogCiBHSVRfRElSPSQoZ2l0LXJldi1wYXJzZSAtLWdpdC1kaXIpIHx8IGV4aXQKLWdsb2JhbF9leGNsdWRlPQotaWYgWyAtZiAiJEdJVF9ESVIvaW5mby9leGNsdWRlIiBdOyB0aGVuCi0gICBnbG9iYWxfZXhjbHVkZT0iLS1leGNsdWRlLWZyb209JEdJVF9ESVIvaW5mby9leGNsdWRlIgotZmkKLWZvciBpIGluICQoZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIFwKLQkkZ2xvYmFsX2V4Y2x1ZGUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCi0JIiRAIikKLWRvCi0gICBbICIkdmVyYm9zZSIgXSAmJiBlY2hvICIgICRpIgotICAgWyAiJHNob3dfb25seSIgXSB8fCBnaXQtdXBkYXRlLWluZGV4IC0tYWRkIC0tICIkaSIgfHwgZXhpdAotZG9uZQorCitpZiB0ZXN0IC1mICIkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiCit0aGVuCisJZ2l0LWxzLWZpbGVzIC16IFwKKwktLWV4Y2x1ZGUtZnJvbT0iJEdJVF9ESVIvaW5mby9leGNsdWRlIiBcCisJLS1vdGhlcnMgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSAtLSAiJEAiCitlbHNlCisJZ2l0LWxzLWZpbGVzIC16IFwKKwktLW90aGVycyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIC0tICIkQCIKK2ZpIHwKK2Nhc2UgIiRzaG93X29ubHkiIGluCit0cnVlKQorCXhhcmdzIC0wIGVjaG8gOzsKKyopCisJZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAkdmVyYm9zZSAteiAtLXN0ZGluIDs7Citlc2FjCmRpZmYgLS1naXQgYS9naXQtYW0uc2ggYi9naXQtYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTE1ZWJhZAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1hbS5zaApAQCAtMCwwICsxLDM1MSBAQAorIyEvYmluL3NoCisjCisjCisuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgorCitmaWxlcz0kKGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5IEhFQUQpIHx8IGV4aXQKK2lmIFsgIiRmaWxlcyIgXTsgdGhlbgorICAgZWNobyAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIgPiYyCisgICBleGl0IDEKK2ZpCisKK3VzYWdlICgpIHsKKyAgICBlY2hvID4mMiAidXNhZ2U6ICQwIFstLXNpZ25vZmZdIFstLWRvdGVzdD08ZGlyPl0gWy0tdXRmOF0gWy0tM3dheV0gPG1ib3g+IgorICAgIGVjaG8gPiYyICIJb3IsIHdoZW4gcmVzdW1pbmciCisgICAgZWNobyA+JjIgIgkkMCBbLS1za2lwXSIKKyAgICBleGl0IDE7Cit9CisKK3N0b3BfaGVyZSAoKSB7CisgICAgZWNobyAiJDEiID4iJGRvdGVzdC9uZXh0IgorICAgIGV4aXQgMQorfQorCitnb19uZXh0ICgpIHsKKwlybSAtZiAiJGRvdGVzdC8kbXNnbnVtIiAiJGRvdGVzdC9tc2ciICIkZG90ZXN0L21zZy1jbGVhbiIgXAorCQkiJGRvdGVzdC9wYXRjaCIgIiRkb3Rlc3QvaW5mbyIKKwllY2hvICIkbmV4dCIgPiIkZG90ZXN0L25leHQiCisJdGhpcz0kbmV4dAorfQorCitmYWxsX2JhY2tfM3dheSAoKSB7CisgICAgT19PQkpFQ1Q9YGNkICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiICYmIHB3ZGAKKworICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKgorICAgIG1rZGlyICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1kaXIiCisKKyAgICAjIEZpcnN0IHNlZSBpZiB0aGUgcGF0Y2ggcmVjb3JkcyB0aGUgaW5kZXggaW5mbyB0aGF0IHdlIGNhbiB1c2UuCisgICAgaWYgZ2l0LWFwcGx5IC16IC0taW5kZXgtaW5mbyAiJGRvdGVzdC9wYXRjaCIgXAorCT4iJGRvdGVzdC9wYXRjaC1tZXJnZS1pbmRleC1pbmZvIiAyPi9kZXYvbnVsbCAmJgorCUdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAorCWdpdC11cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvIDwiJGRvdGVzdC9wYXRjaC1tZXJnZS1pbmRleC1pbmZvIiAmJgorCUdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgXAorCWdpdC13cml0ZS10cmVlID4iJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlKyIgJiYKKwkjIGluZGV4IGhhcyB0aGUgYmFzZSB0cmVlIG5vdy4KKwkoCisJICAgIGNkICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1kaXIiICYmCisJICAgIEdJVF9JTkRFWF9GSUxFPSIuLi9wYXRjaC1tZXJnZS10bXAtaW5kZXgiIFwKKwkgICAgR0lUX09CSkVDVF9ESVJFQ1RPUlk9IiRPX09CSkVDVCIgXAorCSAgICBnaXQtYXBwbHkgLS1pbmRleCA8Li4vcGF0Y2gKKyAgICAgICAgKQorICAgIHRoZW4KKwllY2hvIFVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4KKwltdiAiJGRvdGVzdC9wYXRjaC1tZXJnZS1iYXNlKyIgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtYmFzZSIKKwltdiAiJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtaW5kZXgiICIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4IgorICAgIGVsc2UKKwkjIE90aGVyd2lzZSwgdHJ5IG5lYXJieSB0cmVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFwcGx5IHRoZQorCSMgcGF0Y2guCisJKAorCSAgICBOPTEwCisKKwkgICAgIyBIb3BpbmcgdGhlIHBhdGNoIGlzIGFnYWluc3Qgb3VyIHJlY2VudCBjb21taXRzLi4uCisJICAgIGdpdC1yZXYtbGlzdCAtLW1heC1jb3VudD0kTiBIRUFECisKKwkgICAgIyBvciBob3BpbmcgdGhlIHBhdGNoIGlzIGFnYWluc3Qga25vd24gdGFncy4uLgorCSAgICBnaXQtbHMtcmVtb3RlIC0tdGFncyAuCisJKSB8CisJd2hpbGUgcmVhZCBiYXNlIGp1bmsKKwlkbworCSAgICAjIFNlZSBpZiB3ZSBoYXZlIGl0IGFzIGEgdHJlZS4uLgorCSAgICBnaXQtY2F0LWZpbGUgdHJlZSAiJGJhc2UiID4vZGV2L251bGwgMj4mMSB8fCBjb250aW51ZQorCisJICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKiAmJgorCSAgICBta2RpciAiJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtZGlyIiB8fCBicmVhaworCSAgICAoCisJCWNkICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1kaXIiICYmCisJCUdJVF9JTkRFWF9GSUxFPS4uL3BhdGNoLW1lcmdlLXRtcC1pbmRleCAmJgorCQlHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJE9fT0JKRUNUIiAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKwkJZ2l0LXJlYWQtdHJlZSAiJGJhc2UiICYmCisJCWdpdC1hcHBseSAtLWluZGV4ICYmCisJCW12IC4uL3BhdGNoLW1lcmdlLXRtcC1pbmRleCAuLi9wYXRjaC1tZXJnZS1pbmRleCAmJgorCQllY2hvICIkYmFzZSIgPi4uL3BhdGNoLW1lcmdlLWJhc2UKKwkgICAgKSA8IiRkb3Rlc3QvcGF0Y2giICAyPi9kZXYvbnVsbCAmJiBicmVhaworCWRvbmUKKyAgICBmaQorCisgICAgdGVzdCAtZiAiJGRvdGVzdC9wYXRjaC1tZXJnZS1pbmRleCIgJiYKKyAgICBoaXNfdHJlZT0kKEdJVF9JTkRFWF9GSUxFPSIkZG90ZXN0L3BhdGNoLW1lcmdlLWluZGV4IiBnaXQtd3JpdGUtdHJlZSkgJiYKKyAgICBvcmlnX3RyZWU9JChjYXQgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtYmFzZSIpICYmCisgICAgcm0gLWZyICIkZG90ZXN0Ii9wYXRjaC1tZXJnZS0qIHx8IGV4aXQgMQorCisgICAgZWNobyBGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4KKworICAgICMgVGhpcyBpcyBub3Qgc28gd3JvbmcuICBEZXBlbmRpbmcgb24gd2hpY2ggYmFzZSB3ZSBwaWNrZWQsCisgICAgIyBvcmlnX3RyZWUgbWF5IGJlIHdpbGRseSBkaWZmZXJlbnQgZnJvbSBvdXJzLCBidXQgaGlzX3RyZWUKKyAgICAjIGhhcyB0aGUgc2FtZSBzZXQgb2Ygd2lsZGx5IGRpZmZlcmVudCBjaGFuZ2VzIGluIHBhcnRzIHRoZQorICAgICMgcGF0Y2ggZGlkIG5vdCB0b3VjaCwgc28gcmVzb2x2ZSBlbmRzIHVwIGNhbmNlbGxpbmcgdGhlbSwKKyAgICAjIHNheWluZyB0aGF0IHdlIHJldmVydGVkIGFsbCB0aG9zZSBjaGFuZ2VzLgorCisgICAgZ2l0LW1lcmdlLXJlc29sdmUgJG9yaWdfdHJlZSAtLSBIRUFEICRoaXNfdHJlZSB8fCB7CisJICAgIGVjaG8gRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLgorCSAgICBleGl0IDEKKyAgICB9Cit9CisKK3ByZWM9NAorZG90ZXN0PS5kb3Rlc3Qgc2lnbj0gdXRmOD0ga2VlcD0gc2tpcD0gaW50ZXJhY3RpdmU9CisKK3doaWxlIGNhc2UgIiQjIiBpbiAwKSBicmVhazs7IGVzYWMKK2RvCisJY2FzZSAiJDEiIGluCisJLWQ9KnwtLWQ9KnwtLWRvPSp8LS1kb3Q9KnwtLWRvdGU9KnwtLWRvdGVzPSp8LS1kb3Rlc3Q9KikKKwlkb3Rlc3Q9YGV4cHIgIiQxIiA6ICctW149XSo9XCguKlwpJ2A7IHNoaWZ0IDs7CisJLWR8LS1kfC0tZG98LS1kb3R8LS1kb3RlfC0tZG90ZXN8LS1kb3Rlc3QpCisJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWM7IHNoaWZ0CisJZG90ZXN0PSIkMSI7IHNoaWZ0OzsKKworCS1pfC0taXwtLWlufC0taW50fC0taW50ZXwtLWludGVyfC0taW50ZXJhfC0taW50ZXJhY3wtLWludGVyYWN0fFwKKwktLWludGVyYWN0aXwtLWludGVyYWN0aXZ8LS1pbnRlcmFjdGl2ZSkKKwlpbnRlcmFjdGl2ZT10OyBzaGlmdCA7OworCisJLTN8LS0zfC0tM3d8LS0zd2F8LS0zd2F5KQorCXRocmVld2F5PXQ7IHNoaWZ0IDs7CisJLXN8LS1zfC0tc2l8LS1zaWd8LS1zaWdufC0tc2lnbm98LS1zaWdub2Z8LS1zaWdub2ZmKQorCXNpZ249dDsgc2hpZnQgOzsKKwktdXwtLXV8LS11dHwtLXV0ZnwtLXV0ZjgpCisJdXRmOD10OyBzaGlmdCA7OworCS1rfC0ta3wtLWtlfC0ta2VlfC0ta2VlcCkKKwlrZWVwPXQ7IHNoaWZ0IDs7CisKKwktLXNrfC0tc2tpfC0tc2tpcCkKKwlza2lwPXQ7IHNoaWZ0IDs7CisKKwktLSkKKwlzaGlmdDsgYnJlYWsgOzsKKwktKikKKwl1c2FnZSA7OworCSopCisJYnJlYWsgOzsKKwllc2FjCitkb25lCisKK2lmIHRlc3QgLWQgIiRkb3Rlc3QiICYmCisgICBsYXN0PSQoY2F0ICIkZG90ZXN0L2xhc3QiKSAmJgorICAgbmV4dD0kKGNhdCAiJGRvdGVzdC9uZXh0IikgJiYKKyAgIHRlc3QgJCMgIT0gMCAmJgorICAgdGVzdCAiJG5leHQiIC1ndCAiJGxhc3QiCit0aGVuCisgICBybSAtZnIgIiRkb3Rlc3QiCitmaQorCitpZiB0ZXN0IC1kICIkZG90ZXN0IgordGhlbgorCXRlc3QgIiwkIywiID0gIiwwLCIgfHwKKwlkaWUgInByZXZpb3VzIGRvdGVzdCBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorCXJlc3VtZT15ZXMKK2Vsc2UKKwkjIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGdpdmVuIC0tc2tpcAorCXRlc3QgIiwkc2tpcCwiID0gLCwgfHwKKwlkaWUgIndlIGFyZSBub3QgcmVzdW1pbmcuIgorCisJIyBTdGFydCBhZnJlc2guCisJbWtkaXIgLXAgIiRkb3Rlc3QiIHx8IGV4aXQKKworCSMgY2F0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGZvciB1cywgaW5jbHVkaW5nICctJyB0byBtZWFuCisJIyBzdGFuZGFyZCBpbnB1dC4KKwljYXQgIiRAIiB8CisJZ2l0LW1haWxzcGxpdCAtZCRwcmVjICIkZG90ZXN0LyIgPiIkZG90ZXN0L2xhc3QiIHx8IHsKKwkJcm0gLWZyICIkZG90ZXN0IgorCQlleGl0IDEKKwl9CisKKwllY2hvICIkc2lnbiIgPiIkZG90ZXN0L3NpZ24iCisJZWNobyAiJHV0ZjgiID4iJGRvdGVzdC91dGY4IgorCWVjaG8gIiRrZWVwIiA+IiRkb3Rlc3Qva2VlcCIKKwllY2hvIDEgPiIkZG90ZXN0L25leHQiCitmaQorCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC91dGY4IikiID0gdAordGhlbgorCXV0Zjg9LXUKK2ZpCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC9rZWVwIikiID0gdAordGhlbgorCWtlZXA9LWsKK2ZpCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC9zaWduIikiID0gdAordGhlbgorCVNJR05PRkY9YGdpdC12YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAnCisJCQlzLz4uKi8+LworCQkJcy9eL1NpZ25lZC1vZmYtYnk6IC8nCisJCWAKK2Vsc2UKKwlTSUdOT0ZGPQorZmkKKworbGFzdD1gY2F0ICIkZG90ZXN0L2xhc3QiYAordGhpcz1gY2F0ICIkZG90ZXN0L25leHQiYAoraWYgdGVzdCAiJHNraXAiID0gdAordGhlbgorCXRoaXM9YGV4cHIgIiR0aGlzIiArIDFgCitmaQorCitpZiB0ZXN0ICIkdGhpcyIgLWd0ICIkbGFzdCIKK3RoZW4KKwllY2hvIE5vdGhpbmcgdG8gZG8uCisJcm0gLWZyICIkZG90ZXN0IgorCWV4aXQKK2ZpCisKK3doaWxlIHRlc3QgIiR0aGlzIiAtbGUgIiRsYXN0IgorZG8KKwltc2dudW09YHByaW50ZiAiJTAke3ByZWN9ZCIgJHRoaXNgCisJbmV4dD1gZXhwciAiJHRoaXMiICsgMWAKKwl0ZXN0IC1mICIkZG90ZXN0LyRtc2dudW0iIHx8IHsKKwkJZ29fbmV4dAorCQljb250aW51ZQorCX0KKwljYXNlICIkcmVzdW1lIiBpbgorCScnKQorCQlnaXQtbWFpbGluZm8gJGtlZXAgJHV0ZjggIiRkb3Rlc3QvbXNnIiAiJGRvdGVzdC9wYXRjaCIgXAorCQkJPCIkZG90ZXN0LyRtc2dudW0iID4iJGRvdGVzdC9pbmZvIiB8fAorCQkJc3RvcF9oZXJlICR0aGlzCisJCWdpdC1zdHJpcHNwYWNlIDwgIiRkb3Rlc3QvbXNnIiA+ICIkZG90ZXN0L21zZy1jbGVhbiIKKwkJOzsKKwllc2FjCisJcmVzdW1lPQorCisJR0lUX0FVVEhPUl9OQU1FPSIkKHNlZCAtbiAnL15BdXRob3IvIHMvQXV0aG9yOiAvL3AnICIkZG90ZXN0L2luZm8iKSIKKwlHSVRfQVVUSE9SX0VNQUlMPSIkKHNlZCAtbiAnL15FbWFpbC8gcy9FbWFpbDogLy9wJyAiJGRvdGVzdC9pbmZvIikiCisJR0lUX0FVVEhPUl9EQVRFPSIkKHNlZCAtbiAnL15EYXRlLyBzL0RhdGU6IC8vcCcgIiRkb3Rlc3QvaW5mbyIpIgorCVNVQkpFQ1Q9IiQoc2VkIC1uICcvXlN1YmplY3QvIHMvU3ViamVjdDogLy9wJyAiJGRvdGVzdC9pbmZvIikiCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQorCisJY2FzZSAiJGtlZXBfc3ViamVjdCIgaW4gLWspICBTVUJKRUNUPSJbUEFUQ0hdICRTVUJKRUNUIiA7OyBlc2FjCisJaWYgdGVzdCAnJyAhPSAiJFNJR05PRkYiCisJdGhlbgorCQlMQVNUX1NJR05FRF9PRkZfQlk9YAorCQkJc2VkIC1uZSAnL15TaWduZWQtb2ZmLWJ5OiAvcCcgIiRkb3Rlc3QvbXNnLWNsZWFuIiB8CisJCQl0YWlsIC1uIDEKKwkJYAorCQlBRERfU0lHTk9GRj0kKHRlc3QgIiRMQVNUX1NJR05FRF9PRkZfQlkiID0gIiRTSUdOT0ZGIiB8fCB7CisJCSAgICB0ZXN0ICcnID0gIiRMQVNUX1NJR05FRF9PRkZfQlkiICYmIGVjaG8KKwkJICAgIGVjaG8gIiRTSUdOT0ZGIgorCQl9KQorCWVsc2UKKwkJQUREX1NJR05PRkY9CisJZmkKKwl7CisJCWVjaG8gIiRTVUJKRUNUIgorCQlpZiB0ZXN0IC1zICIkZG90ZXN0L21zZy1jbGVhbiIKKwkJdGhlbgorCQkJZWNobworCQkJY2F0ICIkZG90ZXN0L21zZy1jbGVhbiIKKwkJZmkKKwkJaWYgdGVzdCAnJyAhPSAiJEFERF9TSUdOT0ZGIgorCQl0aGVuCisJCQllY2hvICIkQUREX1NJR05PRkYiCisJCWZpCisJfSA+IiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCisJaWYgdGVzdCAiJGludGVyYWN0aXZlIiA9IHQKKwl0aGVuCisJICAgIHRlc3QgLXQgMCB8fAorCSAgICBkaWUgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKKwkgICAgYWN0aW9uPWFnYWluCisJICAgIHdoaWxlIHRlc3QgIiRhY3Rpb24iID0gYWdhaW4KKwkgICAgZG8KKwkJZWNobyAiQ29tbWl0IEJvZHkgaXM6IgorCQllY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKwkJY2F0ICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJCWVjaG8gLW4gIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKKwkJcmVhZCByZXBseQorCQljYXNlICIkcmVwbHkiIGluCisJCVt5WV0qKSBhY3Rpb249eWVzIDs7CisJCVthQV0qKSBhY3Rpb249eWVzIGludGVyYWN0aXZlPSA7OworCQlbbk5dKikgYWN0aW9uPXNraXAgOzsKKwkJW2VFXSopICIke1ZJU1VBTDotJHtFRElUT1I6LXZpfX0iICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIKKwkJICAgICAgIGFjdGlvbj1hZ2FpbiA7OworCQlbdlZdKikgYWN0aW9uPWFnYWluCisJCSAgICAgICBMRVNTPS1TICR7UEFHRVI6LWxlc3N9ICIkZG90ZXN0L3BhdGNoIiA7OworCQkqKSAgICAgYWN0aW9uPWFnYWluIDs7CisJCWVzYWMKKwkgICAgZG9uZQorCWVsc2UKKwkgICAgYWN0aW9uPXllcworCWZpCisKKwlpZiB0ZXN0ICRhY3Rpb24gPSBza2lwCisJdGhlbgorCQlnb19uZXh0CisJCWNvbnRpbnVlCisJZmkKKworCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9hcHBseXBhdGNoLW1zZworCXRoZW4KKwkJIiRHSVRfRElSIi9ob29rcy9hcHBseXBhdGNoLW1zZyAiJGRvdGVzdC9maW5hbC1jb21taXQiIHx8CisJCXN0b3BfaGVyZSAkdGhpcworCWZpCisKKwllY2hvCisJZWNobyAiQXBwbHlpbmcgJyRTVUJKRUNUJyIKKwllY2hvCisKKwlnaXQtYXBwbHkgLS1pbmRleCAiJGRvdGVzdC9wYXRjaCI7IGFwcGx5X3N0YXR1cz0kPworCWlmIHRlc3QgJGFwcGx5X3N0YXR1cyA9IDEgJiYgdGVzdCAiJHRocmVld2F5IiA9IHQKKwl0aGVuCisJCWlmIChmYWxsX2JhY2tfM3dheSkKKwkJdGhlbgorCQkgICAgIyBBcHBseWluZyB0aGUgcGF0Y2ggdG8gYW4gZWFybGllciB0cmVlIGFuZCBtZXJnaW5nIHRoZQorCQkgICAgIyByZXN1bHQgbWF5IGhhdmUgcHJvZHVjZWQgdGhlIHNhbWUgdHJlZSBhcyBvdXJzLgorCQkgICAgY2hhbmdlZD0iJChnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSAteiBIRUFEKSIKKwkJICAgIGlmIHRlc3QgJycgPSAiJGNoYW5nZWQiCisJCSAgICB0aGVuCisJCQkgICAgZWNobyBObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4KKwkJCSAgICBnb19uZXh0CisJCQkgICAgY29udGludWUKKwkJICAgIGZpCisJCSAgICAjIGNsZWFyIGFwcGx5X3N0YXR1cyAtLSB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBtZXJnZWQuCisJCSAgICBhcHBseV9zdGF0dXM9MAorCQlmaQorCWZpCisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzICE9IDAKKwl0aGVuCisJCWVjaG8gUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0uCisJCXN0b3BfaGVyZSAkdGhpcworCWZpCisKKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcHJlLWFwcGx5cGF0Y2gKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvcHJlLWFwcGx5cGF0Y2ggfHwgc3RvcF9oZXJlICR0aGlzCisJZmkKKworCXRyZWU9JChnaXQtd3JpdGUtdHJlZSkgJiYKKwllY2hvIFdyb3RlIHRyZWUgJHRyZWUgJiYKKwlwYXJlbnQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY29tbWl0PSQoZ2l0LWNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQgPCIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpICYmCisJZWNobyBDb21taXR0ZWQ6ICRjb21taXQgJiYKKwlnaXQtdXBkYXRlLXJlZiBIRUFEICRjb21taXQgJHBhcmVudCB8fAorCXN0b3BfaGVyZSAkdGhpcworCisJaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtYXBwbHlwYXRjaAorCXRoZW4KKwkJIiRHSVRfRElSIi9ob29rcy9wb3N0LWFwcGx5cGF0Y2gKKwlmaQorCisJZ29fbmV4dAorZG9uZQorCitybSAtZnIgIiRkb3Rlc3QiCmRpZmYgLS1naXQgYS9naXQtYXBwbHltYm94LnNoIGIvZ2l0LWFwcGx5bWJveC5zaAppbmRleCBlMmJmZDAyLi42ZGU2OTMyIDEwMDc1NQotLS0gYS9naXQtYXBwbHltYm94LnNoCisrKyBiL2dpdC1hcHBseW1ib3guc2gKQEAgLTksMTkgKzksMTkgQEAKICMjIFlvdSBnaXZlIGl0IGEgbWJveC1mb3JtYXQgY29sbGVjdGlvbiBvZiBlbWFpbHMsIGFuZCBpdCB3aWxsIHRyeSB0bwogIyMgYXBwbHkgdGhlbSB0byB0aGUga2VybmVsIHVzaW5nICJhcHBseXBhdGNoIgogIyMKLSMjIGFwcGx5bWJveCBbLXVdIFsta10gWy1xXSAoLWMgLmRvdGVzdC9tc2ctbnVtYmVyIHwgbWFpbF9hcmNoaXZlKSBbU2lnbm9mZl9maWxlXSIKLSMjCiAjIyBUaGUgcGF0Y2ggYXBwbGljYXRpb24gbWF5IGZhaWwgaW4gdGhlIG1pZGRsZS4gIEluIHdoaWNoIGNhc2U6CiAjIyAoMSkgbG9vayBhdCAuZG90ZXN0L3BhdGNoIGFuZCBmaXggaXQgdXAgdG8gYXBwbHkKICMjICgyKSByZS1ydW4gYXBwbHltYm94IHdpdGggLWMgLmRvdGVzdC9tc2ctbnVtYmVyIGZvciB0aGUgY3VycmVudCBvbmUuCiAjIyBQYXkgYSBzcGVjaWFsIGF0dGVudGlvbiB0byB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlmIHlvdSBkbyB0aGlzIGFuZAogIyMgdXNlIGEgU2lnbm9mZl9maWxlLCBiZWNhdXNlIGFwcGx5cGF0Y2ggd2FudHMgdG8gYXBwZW5kIHRoZSBzaWduLW9mZgogIyMgbWVzc2FnZSB0byBtc2ctY2xlYW4gZXZlcnkgdGltZSBpdCBpcyBydW4uCisjIworIyMgZ2l0LWFtIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBuZXdlciBhbmQgYmV0dGVyIHRvb2wgZm9yIHRoaXMgam9iLgogCiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgogCiB1c2FnZSAoKSB7Ci0gICAgZWNobyA+JjIgImFwcGx5bWJveCBbLXVdIFsta10gWy1xXSAoLWMgLmRvdGVzdC88bnVtPiB8IG1ib3gpIFtzaWdub2ZmXSIKKyAgICBlY2hvID4mMiAiYXBwbHltYm94IFstdV0gWy1rXSBbLXFdIFstbV0gKC1jIC5kb3Rlc3QvPG51bT4gfCBtYm94KSBbc2lnbm9mZl0iCiAgICAgZXhpdCAxCiB9CiAKQEAgLTMzLDYgKzMzLDcgQEAKIAktaykJa2VlcF9zdWJqZWN0PS1rIDs7CiAJLXEpCXF1ZXJ5X2FwcGx5PXQgOzsKIAktYykJY29udGludWU9IiQyIjsgcmVzdW1lPWY7IHNoaWZ0IDs7CisJLW0pCWZhbGxiYWNrXzN3YXk9dCA7OwogCS0qKQl1c2FnZSA7OwogCSopCWJyZWFrIDs7CiAJZXNhYwpAQCAtNDMsNyArNDQsOCBAQAogJycpCiAJcm0gLXJmIC5kb3Rlc3QKIAlta2RpciAuZG90ZXN0Ci0JZ2l0LW1haWxzcGxpdCAiJDEiIC5kb3Rlc3QgfHwgZXhpdCAxCisJbnVtX21zZ3M9JChnaXQtbWFpbHNwbGl0ICIkMSIgLmRvdGVzdCkgfHwgZXhpdCAxCisJZWNobyAiJG51bV9tc2dzIHBhdGNoKGVzKSB0byBwcm9jZXNzLiIKIAlzaGlmdAogZXNhYwogCkBAIC01Niw2ICs1OCw5IEBACiBjYXNlICIkcXVlcnlfYXBwbHkiIGluCiB0KQl0b3VjaCAuZG90ZXN0Ly5xdWVyeV9hcHBseQogZXNhYworY2FzZSAiJGZhbGxfYmFja18zd2F5IiBpbgordCkJOiA+LmRvdGVzdC8uM3dheQorZXNhYwogY2FzZSAiJGtlZXBfc3ViamVjdCIgaW4KIC1rKQk6ID4uZG90ZXN0Ly5rZWVwX3N1YmplY3QKIGVzYWMKQEAgLTgwLDcgKzg1LDExIEBACiAgICAgZG8KIAlnaXQtYXBwbHlwYXRjaCAuZG90ZXN0L21zZy1jbGVhbiAuZG90ZXN0L3BhdGNoIC5kb3Rlc3QvaW5mbyAiJHNpZ25vZmYiCiAJY2FzZSAiJD8iIGluCi0JMCB8IDIgKQorCTApCisJCSMgUmVtb3ZlIHRoZSBjbGVhbmx5IGFwcGxpZWQgb25lIHRvIHJlZHVjZSBjbHV0dGVyLgorCQlybSAtZiAuZG90ZXN0LyRpCisJCTs7CisJMikKIAkJIyAyIGlzIGEgc3BlY2lhbCBleGl0IGNvZGUgZnJvbSBhcHBseXBhdGNoIHRvIGluZGljYXRlIHRoYXQKIAkgICAgCSMgdGhlIHBhdGNoIHdhc24ndCBhcHBsaWVkLCBidXQgY29udGludWUgYW55d2F5IAogCQk7OwpkaWZmIC0tZ2l0IGEvZ2l0LWFwcGx5cGF0Y2guc2ggYi9naXQtYXBwbHlwYXRjaC5zaAppbmRleCBmZDU5NGVkLi42NmZkMTlhIDEwMDc1NQotLS0gYS9naXQtYXBwbHlwYXRjaC5zaAorKysgYi9naXQtYXBwbHlwYXRjaC5zaApAQCAtMjIsNiArMjIsOCBAQAogIyMgaWYgdGhpcyBmaWxlIGV4aXN0cy4KIGtlZXBfc3ViamVjdD0uZG90ZXN0Ly5rZWVwX3N1YmplY3QKIAorIyMgV2UgZG8gbm90IGF0dGVtcHQgdGhlIDMtd2F5IG1lcmdlIGZhbGxiYWNrIHVubGVzcyB0aGlzIGZpbGUgZXhpc3RzLgorZmFsbF9iYWNrXzN3YXk9LmRvdGVzdC8uM3dheQogCiBNU0dGSUxFPSQxCiBQQVRDSEZJTEU9JDIKQEAgLTI5LDEwICszMSwxMCBAQAogU0lHTk9GRj0kNAogRURJVD0ke1ZJU1VBTDotJHtFRElUT1I6LXZpfX0KIAotZXhwb3J0IEdJVF9BVVRIT1JfTkFNRT0iJChzZWQgLW4gJy9eQXV0aG9yLyBzL0F1dGhvcjogLy9wJyAuZG90ZXN0L2luZm8pIgotZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IiQoc2VkIC1uICcvXkVtYWlsLyBzL0VtYWlsOiAvL3AnIC5kb3Rlc3QvaW5mbykiCi1leHBvcnQgR0lUX0FVVEhPUl9EQVRFPSIkKHNlZCAtbiAnL15EYXRlLyBzL0RhdGU6IC8vcCcgLmRvdGVzdC9pbmZvKSIKLWV4cG9ydCBTVUJKRUNUPSIkKHNlZCAtbiAnL15TdWJqZWN0LyBzL1N1YmplY3Q6IC8vcCcgLmRvdGVzdC9pbmZvKSIKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiQoc2VkIC1uICcvXkF1dGhvci8gcy9BdXRob3I6IC8vcCcgIiRJTkZPIikiCitleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJChzZWQgLW4gJy9eRW1haWwvIHMvRW1haWw6IC8vcCcgIiRJTkZPIikiCitleHBvcnQgR0lUX0FVVEhPUl9EQVRFPSIkKHNlZCAtbiAnL15EYXRlLyBzL0RhdGU6IC8vcCcgIiRJTkZPIikiCitleHBvcnQgU1VCSkVDVD0iJChzZWQgLW4gJy9eU3ViamVjdC8gcy9TdWJqZWN0OiAvL3AnICIkSU5GTyIpIgogCiBpZiB0ZXN0ICcnICE9ICIkU0lHTk9GRiIKIHRoZW4KQEAgLTU0LDggKzU2LDEwIEBACiAJCQlzZWQgLW5lICcvXlNpZ25lZC1vZmYtYnk6IC9wJyAiJE1TR0ZJTEUiIHwKIAkJCXRhaWwgLW4gMQogCQlgCi0JCXRlc3QgIiRMQVNUX1NJR05FRF9PRkZfQlkiID0gIiRTSUdOT0ZGIiB8fAotCQllY2hvICIkU0lHTk9GRiIgPj4iJE1TR0ZJTEUiCisJCXRlc3QgIiRMQVNUX1NJR05FRF9PRkZfQlkiID0gIiRTSUdOT0ZGIiB8fCB7CisJCSAgICB0ZXN0ICcnID0gIiRMQVNUX1NJR05FRF9PRkZfQlkiICYmIGVjaG8KKwkJICAgIGVjaG8gIiRTSUdOT0ZGIgorCQl9ID4+IiRNU0dGSUxFIgogCWZpCiBmaQogCkBAIC05OSw3ICsxMDMsODEgQEAKIGVjaG8gQXBwbHlpbmcgIickU1VCSkVDVCciCiBlY2hvCiAKLWdpdC1hcHBseSAtLWluZGV4ICIkUEFUQ0hGSUxFIiB8fCBleGl0IDEKK2dpdC1hcHBseSAtLWluZGV4ICIkUEFUQ0hGSUxFIiB8fCB7CisKKwkjIGdpdC1hcHBseSBleGl0cyB3aXRoIHN0YXR1cyAxIHdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5LAorCSMgYnV0IGl0IGRpZSgpcyB3aXRoIG90aGVyIGZhaWx1cmVzLCBtb3N0IG5vdGFibHkgdXBvbiBjb3JydXB0CisJIyBwYXRjaC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlcmUgaXMgbm8gcG9pbnQgdG8gdHJ5IGFwcGx5aW5nCisJIyBpdCB0byBhbm90aGVyIHRyZWUgYW5kIGRvIDMtd2F5IG1lcmdlLgorCXRlc3QgJD8gPSAxIHx8IGV4aXQgMQorCisJdGVzdCAtZiAiJGZhbGxfYmFja18zd2F5IiB8fCBleGl0IDEKKworCSMgSGVyZSBpZiB3ZSBrbm93IHdoaWNoIHJldmlzaW9uIHRoZSBwYXRjaCBhcHBsaWVzIHRvLAorCSMgd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXgsIGFwcGx5IHRoZQorCSMgcGF0Y2gsIGFuZCBhdHRlbXB0IDMtd2F5IG1lcmdlIHdpdGggdGhlIHJlc3VsdGluZyB0cmVlLgorCisJT19PQkpFQ1Q9YGNkICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiICYmIHB3ZGAKKwlybSAtZnIgLnBhdGNoLW1lcmdlLSoKKworCSgKKwkJTj0xMAorCisJCSMgaWYgdGhlIHBhdGNoIHJlY29yZHMgdGhlIGJhc2UgdHJlZS4uLgorCQlzZWQgLW5lICcKKwkJCS9eZGlmZiAvcQorCQkJL15hcHBsaWVzLXRvOiBcKFswLTlhLWZdKlwpJC97CisJCQkJcy8vXDEvcAorCQkJCXEKKwkJCX0KKwkJJyAiJFBBVENIRklMRSIKKworCQkjIG9yIGhvcGluZyB0aGUgcGF0Y2ggaXMgYWdhaW5zdCBvdXIgcmVjZW50IGNvbW1pdHMuLi4KKwkJZ2l0LXJldi1saXN0IC0tbWF4LWNvdW50PSROIEhFQUQKKworCQkjIG9yIGhvcGluZyB0aGUgcGF0Y2ggaXMgYWdhaW5zdCBrbm93biB0YWdzLi4uCisJCWdpdC1scy1yZW1vdGUgLS10YWdzIC4KKwkpIHwKKwl3aGlsZSByZWFkIGJhc2UganVuaworCWRvCisJCSMgVHJ5IGl0IGlmIHdlIGhhdmUgaXQgYXMgYSB0cmVlLgorCQlnaXQtY2F0LWZpbGUgdHJlZSAiJGJhc2UiID4vZGV2L251bGwgMj4mMSB8fCBjb250aW51ZQorCisJCXJtIC1mciAucGF0Y2gtbWVyZ2UtdG1wLSogJiYKKwkJbWtkaXIgLnBhdGNoLW1lcmdlLXRtcC1kaXIgfHwgYnJlYWsKKwkJKAorCQkJY2QgLnBhdGNoLW1lcmdlLXRtcC1kaXIgJiYKKwkJCUdJVF9JTkRFWF9GSUxFPS4uLy5wYXRjaC1tZXJnZS10bXAtaW5kZXggJiYKKwkJCUdJVF9PQkpFQ1RfRElSRUNUT1JZPSIkT19PQkpFQ1QiICYmCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKwkJCWdpdC1yZWFkLXRyZWUgIiRiYXNlIiAmJgorCQkJZ2l0LWFwcGx5IC0taW5kZXggJiYKKwkJCW12IC4uLy5wYXRjaC1tZXJnZS10bXAtaW5kZXggLi4vLnBhdGNoLW1lcmdlLWluZGV4ICYmCisJCQllY2hvICIkYmFzZSIgPi4uLy5wYXRjaC1tZXJnZS1iYXNlCisJCSkgPCIkUEFUQ0hGSUxFIiAgMj4vZGV2L251bGwgJiYgYnJlYWsKKwlkb25lCisKKwl0ZXN0IC1mIC5wYXRjaC1tZXJnZS1pbmRleCAmJgorCWhpc190cmVlPSQoR0lUX0lOREVYX0ZJTEU9LnBhdGNoLW1lcmdlLWluZGV4IGdpdC13cml0ZS10cmVlKSAmJgorCW9yaWdfdHJlZT0kKGNhdCAucGF0Y2gtbWVyZ2UtYmFzZSkgJiYKKwlybSAtZnIgLnBhdGNoLW1lcmdlLSogfHwgZXhpdCAxCisKKwllY2hvIEZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZSB1c2luZyAkb3JpZ190cmVlLi4uCisKKwkjIFRoaXMgaXMgbm90IHNvIHdyb25nLiAgRGVwZW5kaW5nIG9uIHdoaWNoIGJhc2Ugd2UgcGlja2VkLAorCSMgb3JpZ190cmVlIG1heSBiZSB3aWxkbHkgZGlmZmVyZW50IGZyb20gb3VycywgYnV0IGhpc190cmVlCisJIyBoYXMgdGhlIHNhbWUgc2V0IG9mIHdpbGRseSBkaWZmZXJlbnQgY2hhbmdlcyBpbiBwYXJ0cyB0aGUKKwkjIHBhdGNoIGRpZCBub3QgdG91Y2gsIHNvIHJlc29sdmUgZW5kcyB1cCBjYW5jZWxsaW5nIHRoZW0sCisJIyBzYXlpbmcgdGhhdCB3ZSByZXZlcnRlZCBhbGwgdGhvc2UgY2hhbmdlcy4KKworCWlmIGdpdC1tZXJnZS1yZXNvbHZlICRvcmlnX3RyZWUgLS0gSEVBRCAkaGlzX3RyZWUKKwl0aGVuCisJCWVjaG8gRG9uZS4KKwllbHNlCisJCWVjaG8gRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLgorCQlleGl0IDEKKwlmaQorfQogCiBpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcHJlLWFwcGx5cGF0Y2gKIHRoZW4KQEAgLTEwOCw5ICsxODYsMTAgQEAKIAogdHJlZT0kKGdpdC13cml0ZS10cmVlKSB8fCBleGl0IDEKIGVjaG8gV3JvdGUgdHJlZSAkdHJlZQotY29tbWl0PSQoZ2l0LWNvbW1pdC10cmVlICR0cmVlIC1wICQoY2F0ICIkR0lUX0RJUiIvSEVBRCkgPCAiJGZpbmFsIikgfHwgZXhpdCAxCitwYXJlbnQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCitjb21taXQ9JChnaXQtY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCA8IiRmaW5hbCIpIHx8IGV4aXQgMQogZWNobyBDb21taXR0ZWQ6ICRjb21taXQKLWVjaG8gJGNvbW1pdCA+ICIkR0lUX0RJUiIvSEVBRAorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0ICRwYXJlbnQgfHwgZXhpdAogCiBpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1hcHBseXBhdGNoCiB0aGVuCmRpZmYgLS1naXQgYS9naXQtYXJjaGltcG9ydC5wZXJsIGIvZ2l0LWFyY2hpbXBvcnQucGVybAppbmRleCAzNzQ5YjhiLi45ODBlODI3IDEwMDc1NQotLS0gYS9naXQtYXJjaGltcG9ydC5wZXJsCisrKyBiL2dpdC1hcmNoaW1wb3J0LnBlcmwKQEAgLTIyOCwxMCArMjI4LDEyIEBACiAgICAgIyBza2lwIGNvbW1pdHMgYWxyZWFkeSBpbiByZXBvCiAgICAgIwogICAgIGlmIChwdGFnKCRwcy0+e2lkfSkpIHsKLSAgICAgICRvcHRfdiAmJiBwcmludCAiU2tpcHBpbmcgYWxyZWFkeSBpbXBvcnRlZDogJHBzLT57aWR9XG4iOworICAgICAgJG9wdF92ICYmIHByaW50ICIgKiBTa2lwcGluZyBhbHJlYWR5IGltcG9ydGVkOiAkcHMtPntpZH1cbiI7CiAgICAgICBuZXh0OwogICAgIH0KIAorICAgIHByaW50ICIgKiBTdGFydGluZyB0byB3b3JrIG9uICRwcy0+e2lkfVxuIjsKKwogICAgICMgCiAgICAgIyBjcmVhdGUgdGhlIGJyYW5jaCBpZiBuZWVkZWQKICAgICAjCkBAIC02NzUsNiArNjc3LDEwIEBACiAgICAgIyB0aGF0IGJyYW5jaC4KICAgICAjCiAgICAgZm9yZWFjaCBteSAkYnJhbmNoIChrZXlzICVicmFuY2hlcykgeworCisJIyBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGtub3cgYWJvdXQgdGhlIGJyYW5jaAorCW5leHQgdW5sZXNzIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRicmFuY2giOworCiAJbXkgJG1lcmdlYmFzZSA9IGBnaXQtbWVyZ2UtYmFzZSAkYnJhbmNoICRwcy0+e2JyYW5jaH1gOwogCWRpZSAiQ2Fubm90IGZpbmQgbWVyZ2UgYmFzZSBmb3IgJGJyYW5jaCBhbmQgJHBzLT57YnJhbmNofSIgaWYgJD87CiAJY2hvbXAgJG1lcmdlYmFzZTsKZGlmZiAtLWdpdCBhL2dpdC1iaXNlY3Quc2ggYi9naXQtYmlzZWN0LnNoCmluZGV4IDhkYzc3YzkuLjFhYjJmMTggMTAwNzU1Ci0tLSBhL2dpdC1iaXNlY3Quc2gKKysrIGIvZ2l0LWJpc2VjdC5zaApAQCAtMzgsNyArMzgsOCBAQAogCSMgVmVyaWZ5IEhFQUQuIElmIHdlIHdlcmUgYmlzZWN0aW5nIGJlZm9yZSB0aGlzLCByZXNldCB0byB0aGUKIAkjIHRvcC1vZi1saW5lIG1hc3RlciBmaXJzdCEKIAkjCi0JaGVhZD0kKHJlYWRsaW5rICRHSVRfRElSL0hFQUQpIHx8IGRpZSAiQmFkIEhFQUQgLSBJIG5lZWQgYSBzeW1saW5rIgorCWhlYWQ9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXN5bWJvbGljLXJlZiBIRUFEKSB8fAorCWRpZSAiQmFkIEhFQUQgLSBJIG5lZWQgYSBzeW1ib2xpYyByZWYiCiAJY2FzZSAiJGhlYWQiIGluCiAJcmVmcy9oZWFkcy9iaXNlY3QqKQogCQlnaXQgY2hlY2tvdXQgbWFzdGVyIHx8IGV4aXQKQEAgLTQ2LDcgKzQ3LDcgQEAKIAlyZWZzL2hlYWRzLyopCiAJCTs7CiAJKikKLQkJZGllICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltbGluayIKKwkJZGllICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgogCQk7OwogCWVzYWMKIApAQCAtMTM1LDcgKzEzNiw3IEBACiAJZWNobyAiJHJldiIgPiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9uZXctYmlzZWN0IgogCWdpdCBjaGVja291dCBuZXctYmlzZWN0IHx8IGV4aXQKIAltdiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9uZXctYmlzZWN0IiAiJEdJVF9ESVIvcmVmcy9oZWFkcy9iaXNlY3QiICYmCi0JbG4gLXNmIHJlZnMvaGVhZHMvYmlzZWN0ICIkR0lUX0RJUi9IRUFEIgorCUdJVF9ESVI9IiRHSVRfRElSIiBnaXQtc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9iaXNlY3QKIAlnaXQtc2hvdy1icmFuY2ggIiRyZXYiCiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1icmFuY2guc2ggYi9naXQtYnJhbmNoLnNoCmluZGV4IGRjZWMyYTkuLjY3ZjExM2EgMTAwNzU1Ci0tLSBhL2dpdC1icmFuY2guc2gKKysrIGIvZ2l0LWJyYW5jaC5zaApAQCAtMTMsMzcgKzEzLDQyIEBACiB9CiAKIGRlbGV0ZV9icmFuY2ggKCkgewotICAgIG9wdGlvbj0iJDEiIGJyYW5jaF9uYW1lPSIkMiIKLSAgICBoZWFkcmVmPSQocmVhZGxpbmsgIiRHSVRfRElSL0hFQUQiIHwgc2VkIC1lICdzfF5yZWZzL2hlYWRzL3x8JykKLSAgICBjYXNlICIsJGhlYWRyZWYsIiBpbgotICAgICIsJGJyYW5jaF9uYW1lLCIpCi0JZGllICJDYW5ub3QgZGVsZXRlIHRoZSBicmFuY2ggeW91IGFyZSBvbi4iIDs7Ci0gICAgLCwpCi0JZGllICJXaGF0IGJyYW5jaCBhcmUgeW91IG9uIGFueXdheT8iIDs7Ci0gICAgZXNhYwotICAgIGJyYW5jaD0kKGNhdCAiJEdJVF9ESVIvcmVmcy9oZWFkcy8kYnJhbmNoX25hbWUiKSAmJgotCWJyYW5jaD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRicmFuY2heMCIpIHx8Ci0JICAgIGRpZSAiU2VyaW91c2x5LCB3aGF0IGJyYW5jaCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgotICAgIGNhc2UgIiRvcHRpb24iIGluCi0gICAgLUQpCi0JOzsKLSAgICAqKQotCW1icz0kKGdpdC1tZXJnZS1iYXNlIC1hICIkYnJhbmNoIiBIRUFEIHwgdHIgJ1wwMTInICcgJykKLQljYXNlICIgJG1icyAiIGluCi0JKicgJyRicmFuY2gnICcqKQotCSAgICAjIHRoZSBtZXJnZSBiYXNlIG9mIGJyYW5jaCBhbmQgSEVBRCBjb250YWlucyBicmFuY2ggLS0KLQkgICAgIyB3aGljaCBtZWFucyB0aGF0IHRoZSBIRUFEIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgaW4gdGhlIEhFQUQuCisgICAgb3B0aW9uPSIkMSIKKyAgICBzaGlmdAorICAgIGhlYWRyZWY9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXN5bWJvbGljLXJlZiBIRUFEIHwKKyAgICAJICAgICAgIHNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCisgICAgZm9yIGJyYW5jaF9uYW1lCisgICAgZG8KKwljYXNlICIsJGhlYWRyZWYsIiBpbgorCSIsJGJyYW5jaF9uYW1lLCIpCisJICAgIGRpZSAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoIHlvdSBhcmUgb24uIiA7OworCSwsKQorCSAgICBkaWUgIldoYXQgYnJhbmNoIGFyZSB5b3Ugb24gYW55d2F5PyIgOzsKKwllc2FjCisJYnJhbmNoPSQoY2F0ICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRicmFuY2hfbmFtZSIpICYmCisJICAgIGJyYW5jaD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRicmFuY2heMCIpIHx8CisJCWRpZSAiU2VyaW91c2x5LCB3aGF0IGJyYW5jaCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorCWNhc2UgIiRvcHRpb24iIGluCisJLUQpCiAJICAgIDs7CiAJKikKLQkgICAgZWNobyA+JjIgIlRoZSBicmFuY2ggJyRicmFuY2hfbmFtZScgaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB5b3VyIGN1cnJlbnQgSEVBRC4KLUlmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAkYnJhbmNoX25hbWUnLiIKLQkgICAgZXhpdCAxCisJICAgIG1icz0kKGdpdC1tZXJnZS1iYXNlIC1hICIkYnJhbmNoIiBIRUFEIHwgdHIgJ1wwMTInICcgJykKKwkgICAgY2FzZSAiICRtYnMgIiBpbgorCSAgICAqJyAnJGJyYW5jaCcgJyopCisJCSMgdGhlIG1lcmdlIGJhc2Ugb2YgYnJhbmNoIGFuZCBIRUFEIGNvbnRhaW5zIGJyYW5jaCAtLQorCQkjIHdoaWNoIG1lYW5zIHRoYXQgdGhlIEhFQUQgY29udGFpbnMgZXZlcnl0aGluZyBpbiB0aGUgSEVBRC4KKwkJOzsKKwkgICAgKikKKwkJZWNobyA+JjIgIlRoZSBicmFuY2ggJyRicmFuY2hfbmFtZScgaXMgbm90IGEgc3RyaWN0IHN1YnNldCBvZiB5b3VyIGN1cnJlbnQgSEVBRC4KKyAgICBJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJGJyYW5jaF9uYW1lJy4iCisJCWV4aXQgMQorCQk7OworCSAgICBlc2FjCiAJICAgIDs7CiAJZXNhYwotCTs7Ci0gICAgZXNhYwotICAgIHJtIC1mICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRicmFuY2hfbmFtZSIKLSAgICBlY2hvICJEZWxldGVkIGJyYW5jaCAkYnJhbmNoX25hbWUuIgorCXJtIC1mICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRicmFuY2hfbmFtZSIKKwllY2hvICJEZWxldGVkIGJyYW5jaCAkYnJhbmNoX25hbWUuIgorICAgIGRvbmUKICAgICBleGl0IDAKIH0KIApAQCAtNTEsNyArNTYsNyBAQAogZG8KIAljYXNlICIkMSIgaW4KIAktZCB8IC1EKQotCQlkZWxldGVfYnJhbmNoICIkMSIgIiQyIgorCQlkZWxldGVfYnJhbmNoICIkQCIKIAkJZXhpdAogCQk7OwogCS0tKQpAQCAtNjcsNyArNzIsOCBAQAogCiBjYXNlICIkIyIgaW4KIDApCi0JaGVhZHJlZj0kKHJlYWRsaW5rICIkR0lUX0RJUi9IRUFEIiB8IHNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCisJaGVhZHJlZj0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQtc3ltYm9saWMtcmVmIEhFQUQgfAorCQkgIHNlZCAtZSAnc3xecmVmcy9oZWFkcy98fCcpCiAJZ2l0LXJldi1wYXJzZSAtLXN5bWJvbGljIC0tYWxsIHwKIAlzZWQgLW5lICdzfF5yZWZzL2hlYWRzL3x8cCcgfAogCXNvcnQgfApAQCAtOTEsNiArOTcsMTEgQEAKIAogcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGhlYWQiKSB8fCBleGl0CiAKLVsgLWUgIiRHSVRfRElSL3JlZnMvaGVhZHMvJGJyYW5jaG5hbWUiIF0gJiYgZGllICIkYnJhbmNobmFtZSBhbHJlYWR5IGV4aXN0cyIKK1sgLWUgIiRHSVRfRElSL3JlZnMvaGVhZHMvJGJyYW5jaG5hbWUiIF0gJiYKKwlkaWUgIiRicmFuY2huYW1lIGFscmVhZHkgZXhpc3RzLiIKK2dpdC1jaGVjay1yZWYtZm9ybWF0ICJoZWFkcy8kYnJhbmNobmFtZSIgfHwKKwlkaWUgIndlIGRvIG5vdCBsaWtlICckYnJhbmNobmFtZScgYXMgYSBicmFuY2ggbmFtZS4iCiAKK2xlYWRpbmc9YGV4cHIgInJlZnMvaGVhZHMvJGJyYW5jaG5hbWUiIDogJ1woLipcKS8nYCAmJgorbWtkaXIgLXAgIiRHSVRfRElSLyRsZWFkaW5nIiAmJgogZWNobyAkcmV2ID4gIiRHSVRfRElSL3JlZnMvaGVhZHMvJGJyYW5jaG5hbWUiCmRpZmYgLS1naXQgYS9naXQtY2hlY2tvdXQuc2ggYi9naXQtY2hlY2tvdXQuc2gKaW5kZXggMzdhZmNkZC4uNGMwOGYzNiAxMDA3NTUKLS0tIGEvZ2l0LWNoZWNrb3V0LnNoCisrKyBiL2dpdC1jaGVja291dC5zaApAQCAtMSw2ICsxLDEwIEBACiAjIS9iaW4vc2gKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKK3VzYWdlICgpIHsKKyAgICBkaWUgInVzYWdlOiBnaXQgY2hlY2tvdXQgWy1mXSBbLWIgPG5ld19icmFuY2g+XSBbPGJyYW5jaD5dIFs8cGF0aHM+Li4uXSIKK30KKwogb2xkPSQoZ2l0LXJldi1wYXJzZSBIRUFEKQogbmV3PQogZm9yY2U9CkBAIC0xNywzNiArMjEsOTAgQEAKIAkJCWRpZSAiZ2l0IGNoZWNrb3V0OiAtYiBuZWVkcyBhIGJyYW5jaCBuYW1lIgogCQlbIC1lICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRuZXdicmFuY2giIF0gJiYKIAkJCWRpZSAiZ2l0IGNoZWNrb3V0OiBicmFuY2ggJG5ld2JyYW5jaCBhbHJlYWR5IGV4aXN0cyIKKwkJZ2l0LWNoZWNrLXJlZi1mb3JtYXQgImhlYWRzLyRuZXdicmFuY2giIHx8CisJCQlkaWUgIndlIGRvIG5vdCBsaWtlICckbmV3YnJhbmNoJyBhcyBhIGJyYW5jaCBuYW1lLiIKIAkJOzsKIAkiLWYiKQogCQlmb3JjZT0xCiAJCTs7CisJLS0pCisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CiAJKikKLQkJcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGFyZ14wIiAyPi9kZXYvbnVsbCkgfHwKLQkJCWRpZSAiSSBkb24ndCBrbm93IGFueSAnJGFyZycuIgotCQlpZiBbIC16ICIkcmV2IiBdOyB0aGVuCi0JCQllY2hvICJ1bmtub3duIGZsYWcgJGFyZyIKLQkJCWV4aXQgMQorCQlpZiByZXY9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkYXJnXjAiIDI+L2Rldi9udWxsKQorCQl0aGVuCisJCQlpZiBbIC16ICIkcmV2IiBdOyB0aGVuCisJCQkJZWNobyAidW5rbm93biBmbGFnICRhcmciCisJCQkJZXhpdCAxCisJCQlmaQorCQkJbmV3PSIkcmV2IgorCQkJaWYgWyAtZiAiJEdJVF9ESVIvcmVmcy9oZWFkcy8kYXJnIiBdOyB0aGVuCisJCQkJYnJhbmNoPSIkYXJnIgorCQkJZmkKKwkJZWxpZiByZXY9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkYXJnXnt0cmVlfSIgMj4vZGV2L251bGwpCisJCXRoZW4KKwkJCSMgY2hlY2tpbmcgb3V0IHNlbGVjdGVkIHBhdGhzIGZyb20gYSB0cmVlLWlzaC4KKwkJCW5ldz0iJHJldiIKKwkJCWJyYW5jaD0KKwkJZWxzZQorCQkJbmV3PQorCQkJYnJhbmNoPQorCQkJc2V0IHggIiRhcmciICIkQCIKKwkJCXNoaWZ0CiAJCWZpCi0JCWlmIFsgIiRuZXciIF07IHRoZW4KLQkJCWVjaG8gIk11bHRpcGxlIHJldmlzaW9ucz8iCi0JCQlleGl0IDEKLQkJZmkKLQkJbmV3PSIkcmV2IgotCQlpZiBbIC1mICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRhcmciIF07IHRoZW4KLQkJCWJyYW5jaD0iJGFyZyIKLQkJZmkKKwkJYnJlYWsKIAkJOzsKICAgICBlc2FjCiBkb25lCisKKyMgVGhlIGJlaGF2aW91ciBvZiB0aGUgY29tbWFuZCB3aXRoIGFuZCB3aXRob3V0IGV4cGxpY2l0IHBhdGgKKyMgcGFyYW1ldGVycyBpcyBxdWl0ZSBkaWZmZXJlbnQuCisjCisjIFdpdGhvdXQgcGF0aHMsIHdlIGFyZSBjaGVja2luZyBvdXQgZXZlcnl0aGluZyBpbiB0aGUgd29yayB0cmVlLAorIyBwb3NzaWJseSBzd2l0Y2hpbmcgYnJhbmNoZXMuICBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIuCisjCisjIFdpdGggcGF0aHMsIHdlIGFyZSBfbmV2ZXJfIHN3aXRjaGluZyBicmFuY2gsIGJ1dCBjaGVja2luZyBvdXQKKyMgdGhlIG5hbWVkIHBhdGhzIGZyb20gZWl0aGVyIGluZGV4ICh3aGVuIG5vIHJldiBpcyBnaXZlbiksCisjIG9yIHRoZSBuYW1lZCB0cmVlLWlzaCAod2hlbiByZXYgaXMgZ2l2ZW4pLgorCitpZiB0ZXN0ICIkIyIgLWdlIDEKK3RoZW4KKwlpZiB0ZXN0ICcnICE9ICIkbmV3YnJhbmNoJGZvcmNlIgorCXRoZW4KKwkJZGllICJ1cGRhdGluZyBwYXRocyBhbmQgc3dpdGNoaW5nIGJyYW5jaGVzIG9yIGZvcmNpbmcgYXJlIGluY29tcGF0aWJsZS4iCisJZmkKKwlpZiB0ZXN0ICcnICE9ICIkbmV3IgorCXRoZW4KKwkJIyBmcm9tIGEgc3BlY2lmaWMgdHJlZS1pc2g7IG5vdGUgdGhhdCB0aGlzIGlzIGZvcgorCQkjIHJlc2N1aW5nIHBhdGhzIGFuZCBpcyBuZXZlciBtZWFudCB0byByZW1vdmUgd2hhdAorCQkjIGlzIG5vdCBpbiB0aGUgbmFtZWQgdHJlZS1pc2guCisJCWdpdC1scy10cmVlIC1yICIkbmV3IiAiJEAiIHwKKwkJc2VkIC1uZSAncy9eXChbMC03XSpcKSBibG9iIFwoLipcKSQvXDEgXDIvcCcgfAorCQlnaXQtdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyB8fCBleGl0ICQ/CisJZmkKKwlnaXQtY2hlY2tvdXQtaW5kZXggLWYgLXUgLS0gIiRAIgorCWV4aXQgJD8KK2Vsc2UKKwkjIE1ha2Ugc3VyZSB3ZSBkaWQgbm90IGZhbGwgYmFjayBvbiAkYXJnXnt0cmVlfSBjb2RlcGF0aAorCSMgc2luY2Ugd2UgYXJlIG5vdCBjaGVja2luZyBvdXQgZnJvbSBhbiBhcmJpdHJhcnkgdHJlZS1pc2gsCisJIyBidXQgc3dpdGNoaW5nIGJyYW5jaGVzLgorCWlmIHRlc3QgJycgIT0gIiRuZXciCisJdGhlbgorCQlnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkbmV3Xntjb21taXR9IiA+L2Rldi9udWxsIDI+JjEgfHwKKwkJZGllICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQuIgorCWZpCitmaQorCiBbIC16ICIkbmV3IiBdICYmIG5ldz0kb2xkCiAKLSMKICMgSWYgd2UgZG9uJ3QgaGF2ZSBhbiBvbGQgYnJhbmNoIHRoYXQgd2UncmUgc3dpdGNoaW5nIHRvLAogIyBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5ldyBicmFuY2ggbmFtZSBmb3IgdGhlIHRhcmdldCB3ZQogIyBhcmUgc3dpdGNoaW5nIHRvLCB0aGVuIHdlJ2QgYmV0dGVyIGp1c3QgYmUgY2hlY2tpbmcgb3V0CiAjIHdoYXQgd2UgYWxyZWFkeSBoYWQKLSMKKwogWyAteiAiJGJyYW5jaCRuZXdicmFuY2giIF0gJiYKIAlbICIkbmV3IiAhPSAiJG9sZCIgXSAmJgogCWRpZSAiZ2l0IGNoZWNrb3V0OiB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgbmV3IGJyYW5jaCBuYW1lIgpAQCAtNjgsMTAgKzEyNiwxMyBAQAogIwogaWYgWyAiJD8iIC1lcSAwIF07IHRoZW4KIAlpZiBbICIkbmV3YnJhbmNoIiBdOyB0aGVuCi0JCWVjaG8gJG5ldyA+ICIkR0lUX0RJUi9yZWZzL2hlYWRzLyRuZXdicmFuY2giCisJCWxlYWRpbmc9YGV4cHIgInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIgOiAnXCguKlwpLydgICYmCisJCW1rZGlyIC1wICIkR0lUX0RJUi8kbGVhZGluZyIgJiYKKwkJZWNobyAkbmV3ID4iJEdJVF9ESVIvcmVmcy9oZWFkcy8kbmV3YnJhbmNoIiB8fCBleGl0CiAJCWJyYW5jaD0iJG5ld2JyYW5jaCIKIAlmaQotCVsgIiRicmFuY2giIF0gJiYgbG4gLXNmICJyZWZzL2hlYWRzLyRicmFuY2giICIkR0lUX0RJUi9IRUFEIgorCVsgIiRicmFuY2giIF0gJiYKKwlHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXN5bWJvbGljLXJlZiBIRUFEICJyZWZzL2hlYWRzLyRicmFuY2giCiAJcm0gLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiCiBlbHNlCiAJZXhpdCAxCmRpZmYgLS1naXQgYS9naXQtY2xvbmUuc2ggYi9naXQtY2xvbmUuc2gKaW5kZXggNDQxMzVmNC4uNGZkZDY1MiAxMDA3NTUKLS0tIGEvZ2l0LWNsb25lLnNoCisrKyBiL2dpdC1jbG9uZS5zaApAQCAtOSw3ICs5LDcgQEAKIHVuc2V0IENEUEFUSAogCiB1c2FnZSgpIHsKLQllY2hvID4mMiAiKiBnaXQgY2xvbmUgWy1sIFstc11dIFstcV0gWy11IDx1cGxvYWQtcGFjaz5dIDxyZXBvPiA8ZGlyPiIKKwllY2hvID4mMiAiKiBnaXQgY2xvbmUgWy1sIFstc11dIFstcV0gWy11IDx1cGxvYWQtcGFjaz5dIFstbl0gPHJlcG8+IDxkaXI+IgogCWV4aXQgMQogfQogCkBAIC01Myw3ICs1MywxMSBAQAogCXdoaWxlIHJlYWQgc2hhMSByZWZuYW1lCiAJZG8KIAkJbmFtZT1gZXhwciAiJHJlZm5hbWUiIDogJ3JlZnMvXCguKlwpJ2AgJiYKLQkJZ2l0LWh0dHAtZmV0Y2ggLXYgLWEgLXcgIiRuYW1lIiAiJG5hbWUiICIkMS8iIHx8IGV4aXQgMQorCQljYXNlICIkbmFtZSIgaW4KKwkJKl4qKQk7OworCQkqKQorCQkJZ2l0LWh0dHAtZmV0Y2ggLXYgLWEgLXcgIiRuYW1lIiAiJG5hbWUiICIkMS8iIHx8IGV4aXQgMQorCQllc2FjCiAJZG9uZSA8IiRjbG9uZV90bXAvcmVmcyIKIAlybSAtZnIgIiRjbG9uZV90bXAiCiB9CkBAIC02MSwxMCArNjUsMTIgQEAKIHF1aWV0PQogdXNlX2xvY2FsPW5vCiBsb2NhbF9zaGFyZWQ9bm8KK25vX2NoZWNrb3V0PQogdXBsb2FkX3BhY2s9CiB3aGlsZQogCWNhc2UgIiQjLCQxIiBpbgogCTAsKikgYnJlYWsgOzsKKwkqLC1uKSBub19jaGVja291dD15ZXMgOzsKIAkqLC1sfCosLS1sfCosLS1sb3wqLC0tbG9jfCosLS1sb2NhfCosLS1sb2NhbCkgdXNlX2xvY2FsPXllcyA7OwogICAgICAgICAqLC1zfCosLS1zfCosLS1zaHwqLC0tc2hhfCosLS1zaGFyfCosLS1zaGFyZXwqLC0tc2hhcmVkKSAKICAgICAgICAgICBsb2NhbF9zaGFyZWQ9eWVzIDs7CkBAIC0xMjAsOCArMTI2LDcgQEAKIAkgICAgZmkgJiYKIAkgICAgcm0gLWYgIiRELy5naXQvb2JqZWN0cy9zYW1wbGUiICYmCiAJICAgIGNkICIkcmVwbyIgJiYKLQkgICAgZmluZCBvYmplY3RzIC10eXBlIGYgLXByaW50IHwKLQkgICAgY3BpbyAtcHVhbWQkbCAiJEQvLmdpdC8iIHx8IGV4aXQgMQorCSAgICBmaW5kIG9iamVjdHMgLWRlcHRoIC1wcmludCB8IGNwaW8gLXB1YW1kJGwgIiRELy5naXQvIiB8fCBleGl0IDEKIAkgICAgOzsKIAl5ZXMpCiAJICAgIG1rZGlyIC1wICIkRC8uZ2l0L29iamVjdHMvaW5mbyIKQEAgLTEzOSw3ICsxNDQsOCBAQAogCXRoZW4KIAkJSEVBRD1IRUFECiAJZmkKLQl0YXIgQ2NmICIkcmVwbyIgLSByZWZzICRIRUFEIHwgdGFyIEN4ZiAiJEQvLmdpdCIgLSB8fCBleGl0IDEKKwkoY2QgIiRyZXBvIiAmJiB0YXIgY2YgLSByZWZzICRIRUFEKSB8CisJKGNkICIkRC8uZ2l0IiAmJiB0YXIgeGYgLSkgfHwgZXhpdCAxCiAJOzsKICopCiAJY2FzZSAiJHJlcG8iIGluCkBAIC0xODUsOSArMTkxLDMxIEBACiAJOzsKIGVzYWMKIAotIyBVcGRhdGUgb3JpZ2luLgotbWtkaXIgLXAgIiRELy5naXQvcmVtb3Rlcy8iICYmCi1ybSAtZiAiJEQvLmdpdC9yZW1vdGVzL29yaWdpbiIgJiYKLWVjaG8gPiIkRC8uZ2l0L3JlbW90ZXMvb3JpZ2luIiBcCi0iVVJMOiAkcmVwbwotUHVsbDogbWFzdGVyOm9yaWdpbiIKK2NkICREIHx8IGV4aXQKKworaWYgdGVzdCAtZiAiLmdpdC9IRUFEIgordGhlbgorCWhlYWRfcG9pbnRzX2F0PWBnaXQtc3ltYm9saWMtcmVmIEhFQURgCisJY2FzZSAiJGhlYWRfcG9pbnRzX2F0IiBpbgorCXJlZnMvaGVhZHMvKikKKwkJaGVhZF9wb2ludHNfYXQ9YGV4cHIgIiRoZWFkX3BvaW50c19hdCIgOiAncmVmcy9oZWFkcy9cKC4qXCknYAorCQlta2RpciAtcCAuZ2l0L3JlbW90ZXMgJiYKKwkJZWNobyA+LmdpdC9yZW1vdGVzL29yaWdpbiBcCisJCSJVUkw6ICRyZXBvCitQdWxsOiAkaGVhZF9wb2ludHNfYXQ6b3JpZ2luIiAmJgorCQljcCAiLmdpdC9yZWZzL2hlYWRzLyRoZWFkX3BvaW50c19hdCIgLmdpdC9yZWZzL2hlYWRzL29yaWdpbiAmJgorCQlmaW5kIC5naXQvcmVmcy9oZWFkcyAtdHlwZSBmIC1wcmludCB8CisJCXdoaWxlIHJlYWQgcmVmCisJCWRvCisJCQloZWFkPWBleHByICIkcmVmIiA6ICcuZ2l0L3JlZnMvaGVhZHMvXCguKlwpJ2AgJiYKKwkJCXRlc3QgIiRoZWFkX3BvaW50c19hdCIgPSAiJGhlYWQiIHx8CisJCQl0ZXN0ICJvcmlnaW4iID0gIiRoZWFkIiB8fAorCQkJZWNobyAiUHVsbDogJHtoZWFkfToke2hlYWR9IgorCQlkb25lID4+LmdpdC9yZW1vdGVzL29yaWdpbgorCWVzYWMKKworCWNhc2UgIiRub19jaGVja291dCIgaW4KKwknJykKKwkJZ2l0IGNoZWNrb3V0CisJZXNhYworZmkKZGlmZiAtLWdpdCBhL2dpdC1jb21taXQuc2ggYi9naXQtY29tbWl0LnNoCmluZGV4IGQ4YmZjM2MuLmRhZjkwZjEgMTAwNzU1Ci0tLSBhL2dpdC1jb21taXQuc2gKKysrIGIvZ2l0LWNvbW1pdC5zaApAQCAtNiw3ICs2LDcgQEAKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKIHVzYWdlICgpIHsKLQlkaWUgJ2dpdCBjb21taXQgWy1hXSBbLXYgfCAtLW5vLXZlcmlmeV0gIFstbSA8bWVzc2FnZT5dIFstRiA8bG9nZmlsZT5dIFsoLUN8LWMpIDxjb21taXQ+XSBbPHBhdGg+Li4uXScKKwlkaWUgJ2dpdCBjb21taXQgWy1hXSBbLXNdIFstdiB8IC0tbm8tdmVyaWZ5XSAgWy1tIDxtZXNzYWdlPiB8IC1GIDxsb2dmaWxlPiB8ICgtQ3wtYykgPGNvbW1pdD5dIFstZV0gWzxwYXRoPi4uLl0nCiB9CiAKIGFsbD0gbG9nZmlsZT0gdXNlX2NvbW1pdD0gbm9fZWRpdD0gbG9nX2dpdmVuPSBsb2dfbWVzc2FnZT0gdmVyaWZ5PXQgc2lnbm9mZj0KQEAgLTk0LDEzICs5NCwxMyBAQAogY2FzZSAiJGFsbCwkIyIgaW4KIHQsKikKIAlnaXQtZGlmZi1maWxlcyAtLW5hbWUtb25seSAteiB8Ci0JeGFyZ3MgLTAgZ2l0LXVwZGF0ZS1pbmRleCAtcSAtLXJlbW92ZSAtLQorCWdpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbgogCTs7CiAsMCkKIAk7OwogKikKLQlnaXQtZGlmZi1maWxlcyAtLW5hbWUtb25seSAteiAiJEAiIHwKLQl4YXJncyAtMCBnaXQtdXBkYXRlLWluZGV4IC1xIC0tcmVtb3ZlIC0tCisJZ2l0LWRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXogLS0gIiRAIiB8CisJZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZSAteiAtLXN0ZGluCiAJOzsKIGVzYWMgfHwgZXhpdCAxCiBnaXQtdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCB8fCBleGl0IDEKQEAgLTEyOSwxNCArMTI5LDIwIEBACiBlbGlmIHRlc3QgIiR1c2VfY29tbWl0IiAhPSAiIgogdGhlbgogCWdpdC1jYXQtZmlsZSBjb21taXQgIiR1c2VfY29tbWl0IiB8IHNlZCAtZSAnMSwvXiQvZCcKLWZpIHwgZ2l0LXN0cmlwc3BhY2UgPi5lZGl0bXNnCitlbGlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiICYmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX01TRyIKK3RoZW4KKwljYXQgIiRHSVRfRElSL01FUkdFX01TRyIKK2ZpIHwgZ2l0LXN0cmlwc3BhY2UgPiIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cKIAogY2FzZSAiJHNpZ25vZmYiIGluCiB0KQotCWdpdC12YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAnCi0JCXMvPi4qLz4vCi0JCXMvXi9TaWduZWQtb2ZmLWJ5OiAvCi0JJyA+Pi5lZGl0bXNnCisJeworCQllY2hvCisJCWdpdC12YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAnCisJCQlzLz4uKi8+LworCQkJcy9eL1NpZ25lZC1vZmYtYnk6IC8KKwkJJworCX0gPj4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCiAJOzsKIGVzYWMKIApAQCAtMTQ3LDE2ICsxNTMsMTEgQEAKIAllY2hvICIjCSRHSVRfRElSL01FUkdFX0hFQUQiCiAJZWNobyAiIyBhbmQgdHJ5IGFnYWluIgogCWVjaG8gIiMiCi1maSA+Pi5lZGl0bXNnCitmaSA+PiIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cKIAogUEFSRU5UUz0iLXAgSEVBRCIKLWlmIFsgISAtciAiJEdJVF9ESVIvSEVBRCIgXTsgdGhlbgotCWlmIFsgLXogIiQoZ2l0LWxzLWZpbGVzKSIgXTsgdGhlbgotCQllY2hvIE5vdGhpbmcgdG8gY29tbWl0IDE+JjIKLQkJZXhpdCAxCi0JZmkKLQlQQVJFTlRTPSIiCi1lbHNlCitpZiBHSVRfRElSPSIkR0lUX0RJUiIgZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgMj4mMQordGhlbgogCWlmIFsgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiIF07IHRoZW4KIAkJUEFSRU5UUz0iLXAgSEVBRCAiYHNlZCAtZSAncy9eLy1wIC8nICIkR0lUX0RJUi9NRVJHRV9IRUFEImAKIAlmaQpAQCAtMTg5LDE3ICsxOTAsMjMgQEAKIAkJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKIAkJZXhwb3J0IEdJVF9BVVRIT1JfREFURQogCWZpCitlbHNlCisJaWYgWyAteiAiJChnaXQtbHMtZmlsZXMpIiBdOyB0aGVuCisJCWVjaG8gTm90aGluZyB0byBjb21taXQgMT4mMgorCQlleGl0IDEKKwlmaQorCVBBUkVOVFM9IiIKIGZpCi1naXQtc3RhdHVzID4+LmVkaXRtc2cKLWlmIFsgIiQ/IiAhPSAiMCIgLWEgISAtZiAkR0lUX0RJUi9NRVJHRV9IRUFEIF0KK2dpdC1zdGF0dXMgPj4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCitpZiBbICIkPyIgIT0gIjAiIC1hICEgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiIF0KIHRoZW4KLQlybSAtZiAuZWRpdG1zZworCXJtIC1mICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIKIAlnaXQtc3RhdHVzCiAJZXhpdCAxCiBmaQogY2FzZSAiJG5vX2VkaXQiIGluCiAnJykKLQkke1ZJU1VBTDotJHtFRElUT1I6LXZpfX0gLmVkaXRtc2cKKwkke1ZJU1VBTDotJHtFRElUT1I6LXZpfX0gIiRHSVRfRElSL0NPTU1JVF9FRElUTVNHIgogCTs7CiBlc2FjCiAKQEAgLTIwNywyNCArMjE0LDI4IEBACiB0KQogCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9jb21taXQtbXNnCiAJdGhlbgotCQkiJEdJVF9ESVIiL2hvb2tzL2NvbW1pdC1tc2cgLmVkaXRtc2cgfHwgZXhpdAorCQkiJEdJVF9ESVIiL2hvb2tzL2NvbW1pdC1tc2cgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRyB8fCBleGl0CiAJZmkKIGVzYWMKIAotZ3JlcCAtdiAnXiMnIDwgLmVkaXRtc2cgfCBnaXQtc3RyaXBzcGFjZSA+IC5jbWl0bXNnCi1ncmVwIC12IC1pICdeU2lnbmVkLW9mZi1ieScgLmNtaXRtc2cgPi5jbWl0Y2hrCi1pZiB0ZXN0IC1zIC5jbWl0Y2hrCitncmVwIC12ICdeIycgPCAiJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHIHwKK2dpdC1zdHJpcHNwYWNlID4gIiRHSVRfRElSIi9DT01NSVRfTVNHCisKK2lmIGNudD1gZ3JlcCAtdiAtaSAnXlNpZ25lZC1vZmYtYnknICIkR0lUX0RJUiIvQ09NTUlUX01TRyB8CisJZ2l0LXN0cmlwc3BhY2UgfAorCXdjIC1sYCAmJgorICAgdGVzdCAwIC1sdCAkY250CiB0aGVuCiAJdHJlZT0kKGdpdC13cml0ZS10cmVlKSAmJgotCWNvbW1pdD0kKGNhdCAuY21pdG1zZyB8IGdpdC1jb21taXQtdHJlZSAkdHJlZSAkUEFSRU5UUykgJiYKLQllY2hvICRjb21taXQgPiAiJEdJVF9ESVIvSEVBRCIgJiYKKwljb21taXQ9JChjYXQgIiRHSVRfRElSIi9DT01NSVRfTVNHIHwgZ2l0LWNvbW1pdC10cmVlICR0cmVlICRQQVJFTlRTKSAmJgorCWdpdC11cGRhdGUtcmVmIEhFQUQgJGNvbW1pdCAkY3VycmVudCAmJgogCXJtIC1mIC0tICIkR0lUX0RJUi9NRVJHRV9IRUFEIgogZWxzZQogCWVjaG8gPiYyICIqIG5vIGNvbW1pdCBtZXNzYWdlPyAgYWJvcnRpbmcgY29tbWl0LiIKIAlmYWxzZQogZmkKIHJldD0iJD8iCi1ybSAtZiAuY21pdG1zZyAuZWRpdG1zZyAuY21pdGNoaworcm0gLWYgIiRHSVRfRElSL0NPTU1JVF9NU0ciICIkR0lUX0RJUi9DT01NSVRfRURJVE1TRyIKIAogaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL3Bvc3QtY29tbWl0ICYmIHRlc3QgIiRyZXQiID0gMAogdGhlbgpkaWZmIC0tZ2l0IGEvZ2l0LWNvcmUuc3BlYy5pbiBiL2dpdC1jb3JlLnNwZWMuaW4KaW5kZXggNjFiZWViZC4uNTI0MGRkMiAxMDA2NDQKLS0tIGEvZ2l0LWNvcmUuc3BlYy5pbgorKysgYi9naXQtY29yZS5zcGVjLmluCkBAIC05LDcgKzksNyBAQAogU291cmNlOiAJaHR0cDovL2tlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negogQnVpbGRSZXF1aXJlczoJemxpYi1kZXZlbCwgb3BlbnNzbC1kZXZlbCwgY3VybC1kZXZlbCAgJXshP193aXRob3V0X2RvY3M6LCB4bWx0bywgYXNjaWlkb2MgPiA2LjAuM30KIEJ1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKLVJlcXVpcmVzOglyc3luYywgcmNzLCBjdXJsLCBsZXNzLCBvcGVuc3NoLWNsaWVudHMsIHB5dGhvbiA+PSAyLjMsIHRrCitSZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCByY3MsIGN1cmwsIGxlc3MsIG9wZW5zc2gtY2xpZW50cywgcHl0aG9uID49IDIuMywgdGsgPj0gOC40CiAKICVkZXNjcmlwdGlvbgogVGhpcyBpcyBhIHN0dXBpZCAoYnV0IGV4dHJlbWVseSBmYXN0KSBkaXJlY3RvcnkgY29udGVudCBtYW5hZ2VyLiAgSXQKQEAgLTIzLDEyICsyMywxMiBAQAogJXNldHVwIC1xCiAKICVidWlsZAotbWFrZSBDT1BUUz0iJFJQTV9PUFRfRkxBR1MiIFdJVEhfT1dOX1NVQlBST0NFU1NfUFk9WWVzUGxlYXNlIFwKK21ha2UgJXtfc21wX21mbGFnc30gQ0ZMQUdTPSIkUlBNX09QVF9GTEFHUyIgV0lUSF9PV05fU1VCUFJPQ0VTU19QWT1ZZXNQbGVhc2UgXAogICAgICBwcmVmaXg9JXtfcHJlZml4fSBhbGwgJXshP193aXRob3V0X2RvY3M6IGRvY30KIAogJWluc3RhbGwKIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKLW1ha2UgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgV0lUSF9PV05fU1VCUFJPQ0VTU19QWT1ZZXNQbGVhc2UgXAorbWFrZSAle19zbXBfbWZsYWdzfSBERVNURElSPSRSUE1fQlVJTERfUk9PVCBXSVRIX09XTl9TVUJQUk9DRVNTX1BZPVllc1BsZWFzZSBcCiAgICAgIHByZWZpeD0le19wcmVmaXh9IG1hbmRpcj0le19tYW5kaXJ9IFwKICAgICAgaW5zdGFsbCAleyE/X3dpdGhvdXRfZG9jczogaW5zdGFsbC1kb2N9CiAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW43LyouNyp9CiAKICVjaGFuZ2Vsb2cKKyogVHVlIFNlcCAyNyAyMDA1IEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPgorLSBwYXJhbGxlbGl6ZSBidWlsZAorLSBDT1BUUyAtPiBDRkxBR1MKKwogKiBGcmkgU2VwIDE2IDIwMDUgQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAb3NkbC5vcmc+IDAuOTkuNi0xCiAtIHVwZGF0ZSB0byAwLjk5LjYKIApkaWZmIC0tZ2l0IGEvZ2l0LWNvdW50LW9iamVjdHMuc2ggYi9naXQtY291bnQtb2JqZWN0cy5zaAppbmRleCA3NGVlNGYzLi44NDNkMmZkIDEwMDc1NQotLS0gYS9naXQtY291bnQtb2JqZWN0cy5zaAorKysgYi9naXQtY291bnQtb2JqZWN0cy5zaApAQCAtMiw3ICsyLDcgQEAKIAogLiBnaXQtc2gtc2V0dXAKIAotZWNobyAkKGZpbmQgIiRHSVRfRElSL29iamVjdHMiLz8/IC10eXBlIGYgLXByaW50IHwgd2MgLWwpIG9iamVjdHMsIFwKK2VjaG8gJChmaW5kICIkR0lUX0RJUi9vYmplY3RzIi8/PyAtdHlwZSBmIC1wcmludCAyPi9kZXYvbnVsbCB8IHdjIC1sKSBvYmplY3RzLCBcCiAkKHsKICAgICBlY2hvIDAKICAgICAjICJuby1zdWNoIiBpcyB0byBoZWxwIERhcndpbiBmb2xrcyBieSBub3QgdXNpbmcgeGFyZ3MgLXIuCmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKaW5kZXggNTY1ZjRmMS4uN2JkOTEzNiAxMDA3NTUKLS0tIGEvZ2l0LWN2c2ltcG9ydC5wZXJsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtMjksNyArMjksNyBAQAogJFNJR3snUElQRSd9PSJJR05PUkUiOwogJEVOVnsnVFonfT0iVVRDIjsKIAotb3VyKCRvcHRfaCwkb3B0X28sJG9wdF92LCRvcHRfaywkb3B0X3UsJG9wdF9kLCRvcHRfcCwkb3B0X0MsJG9wdF96LCRvcHRfaSwkb3B0X3MsJG9wdF9tLCRvcHRfTSk7CitvdXIoJG9wdF9oLCRvcHRfbywkb3B0X3YsJG9wdF9rLCRvcHRfdSwkb3B0X2QsJG9wdF9wLCRvcHRfQywkb3B0X3osJG9wdF9pLCRvcHRfUCwgJG9wdF9zLCRvcHRfbSwkb3B0X00pOwogCiBzdWIgdXNhZ2UoKSB7CiAJcHJpbnQgU1RERVJSIDw8RU5EOwpAQCAtNDEsNyArNDEsNyBAQAogCWV4aXQoMSk7CiB9CiAKLWdldG9wdHMoImhpdm1rdW86ZDpwOkM6ejpzOk06Iikgb3IgdXNhZ2UoKTsKK2dldG9wdHMoImhpdm1rdW86ZDpwOkM6ejpzOk06UDoiKSBvciB1c2FnZSgpOwogdXNhZ2UgaWYgJG9wdF9oOwogCiBAQVJHViA8PSAxIG9yIHVzYWdlKCk7CkBAIC0zMzcsNiArMzM3LDEwIEBACiAJfQogCWNsb3NlICgkZmgpOwogCisJaWYgKCRyZXMgZXEgJycpIHsKKwkgICAgZGllICJMb29rcyBsaWtlIHRoZSBzZXJ2ZXIgaGFzIGdvbmUgYXdheSB3aGlsZSBmZXRjaGluZyAkZm4gJHJldiAtLSBleGl0aW5nISI7CisJfQorCiAJcmV0dXJuICgkbmFtZSwgJHJlcyk7CiB9CiAKQEAgLTQ4Nyw4ICs0OTEsMTYgQEAKIAlteSBAb3B0OwogCUBvcHQgPSBzcGxpdCgvLC8sJG9wdF9wKSBpZiBkZWZpbmVkICRvcHRfcDsKIAl1bnNoaWZ0IEBvcHQsICcteicsICRvcHRfeiBpZiBkZWZpbmVkICRvcHRfejsKLQlleGVjKCJjdnNwcyIsQG9wdCwiLXUiLCItQSIsIi0tY3ZzLWRpcmVjdCIsJy0tcm9vdCcsJG9wdF9kLCRjdnNfdHJlZSk7Ci0JZGllICJDb3VsZCBub3Qgc3RhcnQgY3ZzcHM6ICQhXG4iOworCXVuc2hpZnQgQG9wdCwgJy1xJyAgICAgICAgIHVubGVzcyBkZWZpbmVkICRvcHRfdjsKKwl1bmxlc3MgKGRlZmluZWQoJG9wdF9wKSAmJiAkb3B0X3AgPX4gbS8tLW5vLWN2cy1kaXJlY3QvKSB7CisJCXB1c2ggQG9wdCwgJy0tY3ZzLWRpcmVjdCc7CisJfQorCWlmICgkb3B0X1ApIHsKKwkgICAgZXhlYygiY2F0IiwgJG9wdF9QKTsKKwl9IGVsc2UgeworCSAgICBleGVjKCJjdnNwcyIsQG9wdCwiLXUiLCItQSIsJy0tcm9vdCcsJG9wdF9kLCRjdnNfdHJlZSk7CisJICAgIGRpZSAiQ291bGQgbm90IHN0YXJ0IGN2c3BzOiAkIVxuIjsKKwl9CiB9CiAKIApAQCAtNTEwLDcgKzUyMiw3IEBACiAKIG15ICRzdGF0ZSA9IDA7CiAKLW15KCRwYXRjaHNldCwkZGF0ZSwkYXV0aG9yLCRicmFuY2gsJGFuY2VzdG9yLCR0YWcsJGxvZ21zZyk7CitteSgkcGF0Y2hzZXQsJGRhdGUsJGF1dGhvcl9uYW1lLCRhdXRob3JfZW1haWwsJGJyYW5jaCwkYW5jZXN0b3IsJHRhZywkbG9nbXNnKTsKIG15KEBvbGQsQG5ldyk7CiBteSAkY29tbWl0ID0gc3ViIHsKIAlteSAkcGlkOwpAQCAtNTY3LDYgKzU3OSw3IEBACiAJdW5sZXNzKCRwaWQpIHsKIAkJJHByLT53cml0ZXIoKTsKIAkJJHB3LT5yZWFkZXIoKTsKKwkJb3BlbihPVVQsIj4mU1RET1VUIik7CiAJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKIAkJZHVwMigkcHItPmZpbGVubygpLDEpOwogCQkkcHItPmNsb3NlKCk7CkBAIC01ODQsMTggKzU5NywxNyBAQAogCQkJCWlmICggLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG1wYXJlbnQiKSB7CiAJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKIAkJCQkJcHVzaCBAcGFyLCAnLXAnLCAkbXBhcmVudDsKLQkJCQkJIyBwcmludGluZyBoZXJlIGJyZWFrcyBpbXBvcnQgIyAKLQkJCQkJIyAjIHByaW50ICJNZXJnZSBwYXJlbnQgYnJhbmNoOiAkbXBhcmVudFxuIiBpZiAkb3B0X3Y7CisJCQkJCXByaW50IE9VVCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJG1wYXJlbnRcbiIgaWYgJG9wdF92OwogCQkJCX0KLQkJICAgIAl9IAorCQkJfQogCQl9CiAKIAkJZXhlYygiZW52IiwKLQkJCSJHSVRfQVVUSE9SX05BTUU9JGF1dGhvciIsCi0JCQkiR0lUX0FVVEhPUl9FTUFJTD0kYXV0aG9yIiwKKwkJCSJHSVRfQVVUSE9SX05BTUU9JGF1dGhvcl9uYW1lIiwKKwkJCSJHSVRfQVVUSE9SX0VNQUlMPSRhdXRob3JfZW1haWwiLAogCQkJIkdJVF9BVVRIT1JfREFURT0iLnN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSksCi0JCQkiR0lUX0NPTU1JVFRFUl9OQU1FPSRhdXRob3IiLAotCQkJIkdJVF9DT01NSVRURVJfRU1BSUw9JGF1dGhvciIsCisJCQkiR0lUX0NPTU1JVFRFUl9OQU1FPSRhdXRob3JfbmFtZSIsCisJCQkiR0lUX0NPTU1JVFRFUl9FTUFJTD0kYXV0aG9yX2VtYWlsIiwKIAkJCSJHSVRfQ09NTUlUVEVSX0RBVEU9Ii5zdHJmdGltZSgiKzAwMDAgJVktJW0tJWQgJUg6JU06JVMiLGdtdGltZSgkZGF0ZSkpLAogCQkJImdpdC1jb21taXQtdHJlZSIsICR0cmVlLEBwYXIpOwogCQlkaWUgIkNhbm5vdCBleGVjIGdpdC1jb21taXQtdHJlZTogJCFcbiI7CkBAIC02MzgsNyArNjUwLDcgQEAKIAkJcHJpbnQgJG91dCAib2JqZWN0ICRjaWRcbiIuCiAJCSAgICAidHlwZSBjb21taXRcbiIuCiAJCSAgICAidGFnICR4dGFnXG4iLgotCQkgICAgInRhZ2dlciAkYXV0aG9yIDwkYXV0aG9yPlxuIgorCQkgICAgInRhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+XG4iCiAJCSAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnIG9iamVjdCAkeHRhZzogJCFcbiI7CiAJCWNsb3NlKCRvdXQpCiAJCSAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnIG9iamVjdCAkeHRhZzogJCFcbiI7CkBAIC02ODMsNyArNjk1LDExIEBACiAJCSRzdGF0ZT0zOwogCX0gZWxzaWYoJHN0YXRlID09IDMgYW5kIHMvXkF1dGhvcjpccysvLykgewogCQlzL1xzKyQvLzsKLQkJJGF1dGhvciA9ICRfOworCQlpZiAoL14oLio/KVxzKzwoLiopPi8pIHsKKwkJICAgICgkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwpID0gKCQxLCAkMik7CisJCX0gZWxzZSB7CisJCSAgICAkYXV0aG9yX25hbWUgPSAkYXV0aG9yX2VtYWlsID0gJF87CisJCX0KIAkJJHN0YXRlID0gNDsKIAl9IGVsc2lmKCRzdGF0ZSA9PSA0IGFuZCBzL15CcmFuY2g6XHMrLy8pIHsKIAkJcy9ccyskLy87CmRpZmYgLS1naXQgYS9naXQtZGlmZi5zaCBiL2dpdC1kaWZmLnNoCmluZGV4IDg0YTE1MmEuLmIzZWM4NGIgMTAwNzU1Ci0tLSBhL2dpdC1kaWZmLnNoCisrKyBiL2dpdC1kaWZmLnNoCkBAIC0yOCwxNiArMjgsMTYgQEAKID8qJyAnXj8qKQogCWJlZ2luPSQoZXhwciAiJHJldiIgOiAnLipeLlwoWzAtOWEtZl0qXCkuKicpICYmCiAJZW5kPSQoZXhwciAiJHJldiIgOiAnLlwoWzAtOWEtZl0qXCkuIC4qJykgfHwgZXhpdAotCWNtZD0iZ2l0LWRpZmYtdHJlZSAkZmxhZ3MgJGJlZ2luICRlbmQgJGZpbGVzIgorCWNtZD0iZ2l0LWRpZmYtdHJlZSAkZmxhZ3MgJGJlZ2luICRlbmQgLS0gJGZpbGVzIgogCTs7CiA/KicgJz8qKQotCWNtZD0iZ2l0LWRpZmYtdHJlZSAkZmxhZ3MgJHJldiAkZmlsZXMiCisJY21kPSJnaXQtZGlmZi10cmVlICRmbGFncyAkcmV2IC0tICRmaWxlcyIKIAk7OwogPyonICcpCi0JY21kPSJnaXQtZGlmZi1pbmRleCAkZmxhZ3MgJHJldiAkZmlsZXMiCisJY21kPSJnaXQtZGlmZi1pbmRleCAkZmxhZ3MgJHJldiAtLSAkZmlsZXMiCiAJOzsKICcnKQotCWNtZD0iZ2l0LWRpZmYtZmlsZXMgJGZsYWdzICRmaWxlcyIKKwljbWQ9ImdpdC1kaWZmLWZpbGVzICRmbGFncyAtLSAkZmlsZXMiCiAJOzsKICopCiAJZGllICJJIGRvbid0IHVuZGVyc3RhbmQgJCoiCmRpZmYgLS1naXQgYS9naXQtZXh0ZXJuYWwtZGlmZi1zY3JpcHQgYi9naXQtZXh0ZXJuYWwtZGlmZi1zY3JpcHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDEzNzI4MGEuLjAwMDAwMDAKLS0tIGEvZ2l0LWV4dGVybmFsLWRpZmYtc2NyaXB0CisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotIyEvYmluL3NoCi0jIENvcHlyaWdodCAoQykgMjAwNSBKdW5pbyBDIEhhbWFubwotIwotIyBUaGlzIHNjcmlwdCBpcyBkZXNpZ25lZCB0byBlbXVsYXRlIHdoYXQgdGhlIGJ1aWx0LWluIGRpZmYgZHJpdmVyCi0jIGRvZXMgd2hlbiBzZXQgYXMgR0lUX0VYVEVSTkFMX1NDUklQVC4KLQotY2FzZSAiJCMiIGluCi0xKQotICAgIGVjaG8gIiogVW5tZXJnZWQgcGF0aCAkMSIKLSAgICBleGl0IDAgOzsKLSopCi0gICAgbmFtZTE9IiQxIiB0bXAxPSIkMiIgaGV4MT0iJDMiIG1vZGUxPSIkNCIgdG1wMj0iJDUiIGhleDI9IiQ2IiBtb2RlMj0iJDciCi0gICAgY2FzZSAiJCMiIGluCi0gICAgNykKLQluYW1lMj0iJG5hbWUxIiA7OwotICAgIDkpCi0JbmFtZTI9IiQ4IiB4ZnJtX21zZz0iJDkiIDs7Ci0gICAgZXNhYyA7OwkKLWVzYWMKLQotc2hvd19jcmVhdGUgKCkgewotICAgIG5hbWVfPSIkMSIgdG1wXz0iJDIiIGhleF89IiQzIiBtb2RlXz0iJDQiCi0gICAgZWNobyAiZGlmZiAtLWdpdCBhLyRuYW1lXyBiLyRuYW1lXyIKLSAgICBlY2hvICJuZXcgZmlsZSBtb2RlICRtb2RlXyIKLSAgICBkaWZmICR7R0lUX0RJRkZfT1BUUy0nLXB1J30gLUwgL2Rldi9udWxsIC1MICJiLyRuYW1lXyIgL2Rldi9udWxsICIkdG1wXyIKLX0KLQotc2hvd19kZWxldGUgKCkgewotICAgIG5hbWVfPSIkMSIgdG1wXz0iJDIiIGhleF89IiQzIiBtb2RlXz0iJDQiCi0gICAgZWNobyAiZGlmZiAtLWdpdCBhLyRuYW1lXyBiLyRuYW1lXyIKLSAgICBlY2hvICJkZWxldGVkIGZpbGUgbW9kZSAkbW9kZV8iCi0gICAgZGlmZiAke0dJVF9ESUZGX09QVFMtJy1wdSd9IC1MICJhLyRuYW1lXyIgLUwgL2Rldi9udWxsICIkdG1wXyIgL2Rldi9udWxsCi19Ci0KLWNhc2UgIiRtb2RlMSIgaW4KLTEyMCopIHR5cGUxPWwgOzsKLTEwMCopIHR5cGUxPWYgOzsKLS4pICAgIHNob3dfY3JlYXRlICIkbmFtZTIiICIkdG1wMiIgIiRoZXgyIiAiJG1vZGUyIgotICAgICAgZXhpdCAwIDs7Ci1lc2FjCi1jYXNlICIkbW9kZTIiIGluCi0xMjAqKSB0eXBlMj1sIDs7Ci0xMDAqKSB0eXBlMj1mIDs7Ci0uKSAgICBzaG93X2RlbGV0ZSAiJG5hbWUxIiAiJHRtcDEiICIkaGV4MSIgIiRtb2RlMSIKLSAgICAgIGV4aXQgMCA7OwotZXNhYwotCi1pZiB0ZXN0ICIkdHlwZTEiICE9ICIkdHlwZTIiCi10aGVuCi0Jc2hvd19kZWxldGUgIiRuYW1lMSIgIiR0bXAxIiAiJGhleDEiICIkbW9kZTEiCi0Jc2hvd19jcmVhdGUgIiRuYW1lMiIgIiR0bXAyIiAiJGhleDIiICIkbW9kZTIiCi0JZXhpdCAwCi1maQotCi1lY2hvIGRpZmYgLS1naXQgImEvJG5hbWUxIiAiYi8kbmFtZTIiCi1pZiB0ZXN0ICIkbW9kZTEiICE9ICIkbW9kZTIiCi10aGVuCi0gICAgZWNobyAib2xkIG1vZGUgJG1vZGUxIgotICAgIGVjaG8gIm5ldyBtb2RlICRtb2RlMiIKLSAgICBpZiB0ZXN0ICIkeGZybV9tc2ciICE9ICIiCi0gICAgdGhlbgotCWVjaG8gIiR4ZnJtX21zZyIKLSAgICBmaQotZmkKLWRpZmYgJHtHSVRfRElGRl9PUFRTLSctcHUnfSAtTCAiYS8kbmFtZTEiIC1MICJiLyRuYW1lMiIgIiR0bXAxIiAiJHRtcDIiCi1leGl0IDAKLQpkaWZmIC0tZ2l0IGEvZ2l0LWZldGNoLnNoIGIvZ2l0LWZldGNoLnNoCmluZGV4IDgyMmI0Y2QuLjMxZTVmNGMgMTAwNzU1Ci0tLSBhL2dpdC1mZXRjaC5zaAorKysgYi9naXQtZmV0Y2guc2gKQEAgLTUsNiArNSwxMSBAQAogX3g0MD0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKIF94NDA9IiRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAiCiAKK0xGPScKKycKK0lGUz0iJExGIgorCit0YWdzPQogYXBwZW5kPQogZm9yY2U9CiB1cGRhdGVfaGVhZF9vaz0KQEAgLTE3LDYgKzIyLDkgQEAKIAktZnwtLWZ8LS1mb3wtLWZvcnwtLWZvcmN8LS1mb3JjZSkKIAkJZm9yY2U9dAogCQk7OworCS10fC0tdHwtLXRhfC0tdGFnfC0tdGFncykKKwkJdGFncz10CisJCTs7CiAJLXV8LS11fC0tdXB8LS11cGR8LS11cGRhfC0tdXBkYXR8LS11cGRhdGV8LS11cGRhdGUtfC0tdXBkYXRlLWh8XAogCS0tdXBkYXRlLWhlfC0tdXBkYXRlLWhlYXwtLXVwZGF0ZS1oZWFkfC0tdXBkYXRlLWhlYWQtfFwKIAktLXVwZGF0ZS1oZWFkLW98LS11cGRhdGUtaGVhZC1vaykKQEAgLTQ1LDcgKzUzLDcgQEAKIAogaWYgdGVzdCAiIiA9ICIkYXBwZW5kIgogdGhlbgotCTogPiRHSVRfRElSL0ZFVENIX0hFQUQKKwk6ID4iJEdJVF9ESVIvRkVUQ0hfSEVBRCIKIGZpCiAKIGFwcGVuZF9mZXRjaF9oZWFkICgpIHsKQEAgLTU0LDYgKzYyLDEwIEBACiAgICAgcmVtb3RlX25hbWVfPSIkMyIKICAgICByZW1vdGVfbmlja189IiQ0IgogICAgIGxvY2FsX25hbWVfPSIkNSIKKyAgICBjYXNlICIkNiIgaW4KKyAgICB0KSBub3RfZm9yX21lcmdlXz0nbm90LWZvci1tZXJnZScgOzsKKyAgICAnJykgbm90X2Zvcl9tZXJnZV89IDs7CisgICAgZXNhYwogCiAgICAgIyByZW1vdGUtbmljayBpcyB0aGUgVVJMIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgKG9yIGEgc2hvcnRoYW5kKQogICAgICMgcmVtb3RlLW5hbWUgaXMgdGhlICRHSVRfRElSIHJlbGF0aXZlIHJlZnMvIHBhdGggd2UgY29tcHV0ZWQKQEAgLTc4LDEwICs5MCwxMSBAQAogICAgIGlmIGdpdC1jYXQtZmlsZSBjb21taXQgIiRoZWFkXyIgPi9kZXYvbnVsbCAyPiYxCiAgICAgdGhlbgogCWhlYWRjXz0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRoZWFkX14wIikgfHwgZXhpdAotCWVjaG8gIiRoZWFkY18JJG5vdGVfIiA+PiRHSVRfRElSL0ZFVENIX0hFQUQKKwllY2hvICIkaGVhZGNfCSRub3RfZm9yX21lcmdlXwkkbm90ZV8iID4+IiRHSVRfRElSL0ZFVENIX0hFQUQiCiAJZWNobyA+JjIgIiogY29tbWl0dGlzaDogJGhlYWRfIgogCWVjaG8gPiYyICIgICRub3RlXyIKICAgICBlbHNlCisJZWNobyAiJGhlYWRfCW5vdC1mb3ItbWVyZ2UJJG5vdGVfIiA+PiIkR0lUX0RJUi9GRVRDSF9IRUFEIgogCWVjaG8gPiYyICIqIG5vbi1jb21taXQ6ICRoZWFkXyIKIAllY2hvID4mMiAiICAkbm90ZV8iCiAgICAgZmkKQEAgLTEwMSwxOCArMTE0LDI1IEBACiAJIyBpcyBubyB3YXkgdG8gZ3VhcmFudGVlICJmYXN0LWZvcndhcmQiIGFueXdheS4KIAlpZiB0ZXN0IC1mICIkR0lUX0RJUi8kMSIKIAl0aGVuCi0JCWVjaG8gPiYyICIqICQxOiB1cGRhdGluZyB3aXRoICQzIgorCQlpZiBub3dfPSQoY2F0ICIkR0lUX0RJUi8kMSIpICYmIHRlc3QgIiRub3dfIiA9ICIkMiIKKwkJdGhlbgorCQkJZWNobyA+JjIgIiogJDE6IHNhbWUgYXMgJDMiCisJCWVsc2UKKwkJCWVjaG8gPiYyICIqICQxOiB1cGRhdGluZyB3aXRoICQzIgorCQlmaQogCWVsc2UKIAkJZWNobyA+JjIgIiogJDE6IHN0b3JpbmcgJDMiCiAJZmkKLQllY2hvICIkMiIgPiIkR0lUX0RJUi8kMSIgOzsKKwlnaXQtdXBkYXRlLXJlZiAiJDEiICIkMiIgCisJOzsKIAogICAgIHJlZnMvaGVhZHMvKikKLQkjIE5FRURTV09SSzogdXNlIHRoZSBzYW1lIGNtcHhjaGcgcHJvdG9jb2wgaGVyZS4KLQllY2hvICIkMiIgPiIkR0lUX0RJUi8kMS5sb2NrIgotCWlmIHRlc3QgLWYgIiRHSVRfRElSLyQxIgorCSMgJDEgaXMgdGhlIHJlZiBiZWluZyB1cGRhdGVkLgorCSMgJDIgaXMgdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIHJlZi4KKwlsb2NhbD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiQxXjAiIDI+L2Rldi9udWxsKQorCWlmIHRlc3QgIiRsb2NhbCIKIAl0aGVuCi0JICAgIGxvY2FsPSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJDFeMCIpICYmCisJICAgICMgUmVxdWlyZSBmYXN0LWZvcndhcmQuCiAJICAgIG1iPSQoZ2l0LW1lcmdlLWJhc2UgIiRsb2NhbCIgIiQyIikgJiYKIAkgICAgY2FzZSAiJDIsJG1iIiBpbgogCSAgICAkbG9jYWwsKikKQEAgLTEyMCw0MyArMTQwLDczIEBACiAJCTs7CiAJICAgICosJGxvY2FsKQogCQllY2hvID4mMiAiKiAkMTogZmFzdCBmb3J3YXJkIHRvICQzIgorCQlnaXQtdXBkYXRlLXJlZiAiJDEiICIkMiIgIiRsb2NhbCIKIAkJOzsKIAkgICAgKikKIAkJZmFsc2UKIAkJOzsKIAkgICAgZXNhYyB8fCB7CiAJCWVjaG8gPiYyICIqICQxOiBkb2VzIG5vdCBmYXN0IGZvcndhcmQgdG8gJDM7IgotCQljYXNlICIkZm9yY2UsJHNpbmdsZV9mb3JjZSIgaW4KLQkJdCwqIHwgKix0KQorCQljYXNlICIsJGZvcmNlLCRzaW5nbGVfZm9yY2UsIiBpbgorCQkqLHQsKikKIAkJCWVjaG8gPiYyICIgIGZvcmNpbmcgdXBkYXRlLiIKKwkJCWdpdC11cGRhdGUtcmVmICIkMSIgIiQyIiAiJGxvY2FsIgogCQkJOzsKIAkJKikKLQkJCW12ICIkR0lUX0RJUi8kMS5sb2NrIiAiJEdJVF9ESVIvJDEucmVtb3RlIgotCQkJZWNobyA+JjIgIiAgbGVhdmluZyBpdCBpbiAnJDEucmVtb3RlJyIKKwkJCWVjaG8gPiYyICIgIG5vdCB1cGRhdGluZy4iCiAJCQk7OwogCQllc2FjCiAJICAgIH0KIAllbHNlCi0JCWVjaG8gPiYyICIqICQxOiBzdG9yaW5nICQzIgorCSAgICBlY2hvID4mMiAiKiAkMTogc3RvcmluZyAkMyIKKwkgICAgZ2l0LXVwZGF0ZS1yZWYgIiQxIiAiJDIiCiAJZmkKLQl0ZXN0IC1mICIkR0lUX0RJUi8kMS5sb2NrIiAmJgotCSAgICBtdiAiJEdJVF9ESVIvJDEubG9jayIgIiRHSVRfRElSLyQxIgogCTs7CiAgICAgZXNhYwogfQogCiBjYXNlICIkdXBkYXRlX2hlYWRfb2siIGluCiAnJykKLQlvcmlnX2hlYWQ9JChjYXQgIiRHSVRfRElSL0hFQUQiIDI+L2Rldi9udWxsKQorCW9yaWdfaGVhZD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAyPi9kZXYvbnVsbCkKIAk7OwogZXNhYwogCi1mb3IgcmVmIGluICQoZ2V0X3JlbW90ZV9yZWZzX2Zvcl9mZXRjaCAiJEAiKQorIyBJZiAtLXRhZ3MgKGFuZCBsYXRlciAtLWhlYWRzIG9yIC0tYWxsKSBpcyBzcGVjaWZpZWQsIHRoZW4gd2UgYXJlCisjIG5vdCB0YWxraW5nIGFib3V0IGRlZmF1bHRzIHN0b3JlZCBpbiBQdWxsOiBsaW5lIG9mIHJlbW90ZXMgb3IKKyMgYnJhbmNoZXMgZmlsZSwgYW5kIGp1c3QgZmV0Y2ggdGhvc2UgYW5kIHJlZnNwZWNzIGV4cGxpY2l0bHkgZ2l2ZW4uCisjIE90aGVyd2lzZSB3ZSBkbyB3aGF0IHdlIGFsd2F5cyBkaWQuCisKK3JlZmxpc3Q9JChnZXRfcmVtb3RlX3JlZnNfZm9yX2ZldGNoICIkQCIpCitpZiB0ZXN0ICIkdGFncyIKK3RoZW4KKwl0YWdsaXN0PSQoZ2l0LWxzLXJlbW90ZSAtLXRhZ3MgIiRyZW1vdGUiIHwKKwkJc2VkIC1lICcKKwkJCS9cXi9kCisJCQlzL15bXgldKgkvLworCQkJcy8uKi8mOiYvJykKKwlpZiB0ZXN0ICIkIyIgLWd0IDEKKwl0aGVuCisJCSMgcmVtb3RlIFVSTCBwbHVzIGV4cGxpY2l0IHJlZnNwZWNzOyB3ZSBuZWVkIHRvIG1lcmdlIHRoZW0uCisJCXJlZmxpc3Q9IiRyZWZsaXN0JExGJHRhZ2xpc3QiCisJZWxzZQorCQkjIE5vIGV4cGxpY2l0IHJlZnNwZWNzOyBmZXRjaCB0YWdzIG9ubHkuCisJCXJlZmxpc3Q9JHRhZ2xpc3QKKwlmaQorZmkKKworZm9yIHJlZiBpbiAkcmVmbGlzdAogZG8KLSAgICByZWZzPSIkcmVmcyAkcmVmIgorICAgIHJlZnM9IiRyZWZzJExGJHJlZiIKIAogICAgICMgVGhlc2UgYXJlIHJlbGF0aXZlIHBhdGggZnJvbSAkR0lUX0RJUiwgdHlwaWNhbGx5IHN0YXJ0aW5nIGF0IHJlZnMvCiAgICAgIyBidXQgbWF5IGJlIEhFQUQKKyAgICBpZiBleHByICIkcmVmIiA6ICdcLicgPi9kZXYvbnVsbAorICAgIHRoZW4KKwlub3RfZm9yX21lcmdlPXQKKwlyZWY9JChleHByICIkcmVmIiA6ICdcLlwoLipcKScpCisgICAgZWxzZQorCW5vdF9mb3JfbWVyZ2U9CisgICAgZmkKICAgICBpZiBleHByICIkcmVmIiA6ICdcKycgPi9kZXYvbnVsbAogICAgIHRoZW4KIAlzaW5nbGVfZm9yY2U9dApAQCAtMTY3LDcgKzIxNyw3IEBACiAgICAgcmVtb3RlX25hbWU9JChleHByICIkcmVmIiA6ICdcKFteOl0qXCk6JykKICAgICBsb2NhbF9uYW1lPSQoZXhwciAiJHJlZiIgOiAnW146XSo6XCguKlwpJykKIAotICAgIHJyZWY9IiRycmVmICRyZW1vdGVfbmFtZSIKKyAgICBycmVmPSIkcnJlZiRMRiRyZW1vdGVfbmFtZSIKIAogICAgICMgVGhlcmUgYXJlIHRyYW5zcG9ydHMgdGhhdCBjYW4gZmV0Y2ggb25seSBvbmUgaGVhZCBhdCBhIHRpbWUuLi4KICAgICBjYXNlICIkcmVtb3RlIiBpbgpAQCAtMTc1LDE2ICsyMjUsMjEgQEAKIAlpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIF07IHRoZW4KIAkgICAgY3VybF9leHRyYV9hcmdzPSItayIKIAlmaQotCWhlYWQ9JChjdXJsIC1uc2YgJGN1cmxfZXh0cmFfYXJncyAiJHJlbW90ZS8kcmVtb3RlX25hbWUiKSAmJgorCXJlbW90ZV9uYW1lX3F1b3RlZD0kKHBlcmwgLWUgJworCSAgICBteSAkdSA9ICRBUkdWWzBdOworCSAgICAkdSA9fiBzeyhbXi1hLXpBLVowLTkvLl0pfXtzcHJpbnRmIiUlJTAyeCIsb3JkKCQxKX1lZzsKKwkgICAgcHJpbnQgIiR1IjsKKwknICIkcmVtb3RlX25hbWUiKQorCWhlYWQ9JChjdXJsIC1uc2YgJGN1cmxfZXh0cmFfYXJncyAiJHJlbW90ZS8kcmVtb3RlX25hbWVfcXVvdGVkIikgJiYKIAlleHByICIkaGVhZCIgOiAiJF94NDBcJCIgPi9kZXYvbnVsbCB8fAogCQlkaWUgIkZhaWxlZCB0byBmZXRjaCAkcmVtb3RlX25hbWUgZnJvbSAkcmVtb3RlIgotCWVjaG8gRmV0Y2hpbmcgIiRyZW1vdGVfbmFtZSBmcm9tICRyZW1vdGUiIHVzaW5nIGh0dHAKKwllY2hvID4mMiBGZXRjaGluZyAiJHJlbW90ZV9uYW1lIGZyb20gJHJlbW90ZSIgdXNpbmcgaHR0cAogCWdpdC1odHRwLWZldGNoIC12IC1hICIkaGVhZCIgIiRyZW1vdGUvIiB8fCBleGl0CiAJOzsKICAgICByc3luYzovLyopCiAJVE1QX0hFQUQ9IiRHSVRfRElSL1RNUF9IRUFEIgogCXJzeW5jIC1MIC1xICIkcmVtb3RlLyRyZW1vdGVfbmFtZSIgIiRUTVBfSEVBRCIgfHwgZXhpdCAxCi0JaGVhZD0kKGdpdC1yZXYtcGFyc2UgVE1QX0hFQUQpCisJaGVhZD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgVE1QX0hFQUQpCiAJcm0gLWYgIiRUTVBfSEVBRCIKIAl0ZXN0ICIkcnN5bmNfc2x1cnBlZF9vYmplY3RzIiB8fCB7CiAJICAgIHJzeW5jIC1hdiAtLWlnbm9yZS1leGlzdGluZyAtLWV4Y2x1ZGUgaW5mbyBcCkBAIC0yMTYsNyArMjcxLDggQEAKIAljb250aW51ZSA7OwogICAgIGVzYWMKIAotICAgIGFwcGVuZF9mZXRjaF9oZWFkICIkaGVhZCIgIiRyZW1vdGUiICIkcmVtb3RlX25hbWUiICIkcmVtb3RlX25pY2siICIkbG9jYWxfbmFtZSIKKyAgICBhcHBlbmRfZmV0Y2hfaGVhZCAiJGhlYWQiICIkcmVtb3RlIiBcCisgICAgCSIkcmVtb3RlX25hbWUiICIkcmVtb3RlX25pY2siICIkbG9jYWxfbmFtZSIgIiRub3RfZm9yX21lcmdlIgogCiBkb25lCiAKQEAgLTIyNCw2ICsyODAsNyBAQAogaHR0cDovLyogfCBodHRwczovLyogfCByc3luYzovLyogKQogICAgIDs7ICMgd2UgYXJlIGFscmVhZHkgZG9uZS4KICopCisgICAgSUZTPSIgCSRMRiIKICAgICAoCiAJZ2l0LWZldGNoLXBhY2sgIiRyZW1vdGUiICRycmVmIHx8IGVjaG8gZmFpbGVkICIkcmVtb3RlIgogICAgICkgfApAQCAtMjQxLDE2ICsyOTgsMjcgQEAKIAkgICAgY2FzZSAiJHJlZiIgaW4KIAkgICAgKyRyZW1vdGVfbmFtZToqKQogCQlzaW5nbGVfZm9yY2U9dAorCQlub3RfZm9yX21lcmdlPQorCQlmb3VuZD0iJHJlZiIKKwkJYnJlYWsgOzsKKwkgICAgLiskcmVtb3RlX25hbWU6KikKKwkJc2luZ2xlX2ZvcmNlPXQKKwkJbm90X2Zvcl9tZXJnZT10CisJCWZvdW5kPSIkcmVmIgorCQlicmVhayA7OworCSAgICAuJHJlbW90ZV9uYW1lOiopCisJICAgICAgICBub3RfZm9yX21lcmdlPXQKIAkJZm91bmQ9IiRyZWYiCiAJCWJyZWFrIDs7CiAJICAgICRyZW1vdGVfbmFtZToqKQorCSAgICAJbm90X2Zvcl9tZXJnZT0KIAkJZm91bmQ9IiRyZWYiCiAJCWJyZWFrIDs7CiAJICAgIGVzYWMKIAlkb25lCi0KIAlsb2NhbF9uYW1lPSQoZXhwciAiJGZvdW5kIiA6ICdbXjpdKjpcKC4qXCknKQotCWFwcGVuZF9mZXRjaF9oZWFkICIkc2hhMSIgIiRyZW1vdGUiICIkcmVtb3RlX25hbWUiICIkcmVtb3RlX25pY2siICIkbG9jYWxfbmFtZSIKKwlhcHBlbmRfZmV0Y2hfaGVhZCAiJHNoYTEiICIkcmVtb3RlIiBcCisJCSIkcmVtb3RlX25hbWUiICIkcmVtb3RlX25pY2siICIkbG9jYWxfbmFtZSIgIiRub3RfZm9yX21lcmdlIgogICAgIGRvbmUgfHwgZXhpdAogICAgIDs7CiBlc2FjCkBAIC0yNjEsMTAgKzMyOSwxMCBAQAogKiwsIHwgdCwqICkKIAk7OwogKikKLQljdXJyX2hlYWQ9JChjYXQgIiRHSVRfRElSL0hFQUQiIDI+L2Rldi9udWxsKQorCWN1cnJfaGVhZD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAyPi9kZXYvbnVsbCkKIAlpZiB0ZXN0ICIkY3Vycl9oZWFkIiAhPSAiJG9yaWdfaGVhZCIKIAl0aGVuCi0JCWVjaG8gIiRvcmlnX2hlYWQiID4kR0lUX0RJUi9IRUFECisJICAgIAlnaXQtdXBkYXRlLXJlZiBIRUFEICIkb3JpZ19oZWFkIgogCQlkaWUgIkNhbm5vdCBmZXRjaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4iCiAJZmkKIAk7OwpkaWZmIC0tZ2l0IGEvZ2l0LWZtdC1tZXJnZS1tc2cucGVybCBiL2dpdC1mbXQtbWVyZ2UtbXNnLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzc4Mzg4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1mbXQtbWVyZ2UtbXNnLnBlcmwKQEAgLTAsMCArMSw5NSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBSZWFkIC5naXQvRkVUQ0hfSEVBRCBhbmQgbWFrZSBhIGh1bWFuIHJlYWRhYmxlIG1lcmdlIG1lc3NhZ2UKKyMgYnkgZ3JvdXBpbmcgYnJhbmNoZXMgYW5kIHRhZ3MgdG9nZXRoZXIgdG8gZm9ybSBhIHNpbmdsZSBsaW5lLgorCit1c2Ugc3RyaWN0OworCitteSBAc3JjOworbXkgJXNyYzsKK3N1YiBhbmRqb2luIHsKKwlteSAoJGxhYmVsLCAkbGFiZWxzLCAkc3R1ZmYpID0gQF87CisJbXkgJGwgPSBzY2FsYXIgQCRzdHVmZjsKKwlteSAkbSA9ICcnOworCWlmICgkbCA9PSAwKSB7CisJCXJldHVybiAoKTsKKwl9CisJaWYgKCRsID09IDEpIHsKKwkJJG0gPSAiJGxhYmVsJHN0dWZmLT5bMF0iOworCX0KKwllbHNlIHsKKwkJJG0gPSAoIiRsYWJlbHMiIC4KKwkJICAgICAgam9pbiAoJywgJywgQHskc3R1ZmZ9WzAuLiRsLTJdKSAuCisJCSAgICAgICIgYW5kICRzdHVmZi0+Wy0xXSIpOworCX0KKwlyZXR1cm4gKCRtKTsKK30KKword2hpbGUgKDw+KSB7CisJbXkgKCRibmFtZSwgJHRuYW1lLCAkZ25hbWUsICRzcmMpOworCWNob21wOworCXMvXlswLTlhLWZdKgkvLzsKKwluZXh0IGlmICgvXm5vdC1mb3ItbWVyZ2UvKTsKKwlzL14JLy87CisJaWYgKHMvIG9mICguKikkLy8pIHsKKwkJJHNyYyA9ICQxOworCX0gZWxzZSB7CisJCSMgUHVsbGluZyBIRUFECisJCSRzcmMgPSAkXzsKKwkJJF8gPSAnSEVBRCc7CisJfQorCWlmICghIGV4aXN0cyAkc3JjeyRzcmN9KSB7CisJCXB1c2ggQHNyYywgJHNyYzsKKwkJJHNyY3skc3JjfSA9IHsKKwkJCUJSQU5DSCA9PiBbXSwKKwkJCVRBRyA9PiBbXSwKKwkJCUdFTkVSSUMgPT4gW10sCisJCQkjICYxID09IGhhcyBIRUFELgorCQkJIyAmMiA9PSBoYXMgb3RoZXJzLgorCQkJSEVBRF9TVEFUVVMgPT4gMCwKKwkJfTsKKwl9CisJaWYgKC9eYnJhbmNoICguKikkLykgeworCQlwdXNoIEB7JHNyY3skc3JjfXtCUkFOQ0h9fSwgJDE7CisJCSRzcmN7JHNyY317SEVBRF9TVEFUVVN9IHw9IDI7CisJfQorCWVsc2lmICgvXnRhZyAoLiopJC8pIHsKKwkJcHVzaCBAeyRzcmN7JHNyY317VEFHfX0sICQxOworCQkkc3JjeyRzcmN9e0hFQURfU1RBVFVTfSB8PSAyOworCX0KKwllbHNpZiAoL15IRUFEJC8pIHsKKwkJJHNyY3skc3JjfXtIRUFEX1NUQVRVU30gfD0gMTsKKwl9CisJZWxzZSB7CisJCXB1c2ggQHskc3JjeyRzcmN9e0dFTkVSSUN9fSwgJF87CisJCSRzcmN7JHNyY317SEVBRF9TVEFUVVN9IHw9IDI7CisJfQorfQorCitteSBAbXNnOworZm9yIG15ICRzcmMgKEBzcmMpIHsKKwlpZiAoJHNyY3skc3JjfXtIRUFEX1NUQVRVU30gPT0gMSkgeworCQkjIE9ubHkgSEVBRCBpcyBmZXRjaGVkLCBub3RoaW5nIGVsc2UuCisJCXB1c2ggQG1zZywgJHNyYzsKKwkJbmV4dDsKKwl9CisJbXkgQHRoaXM7CisJaWYgKCRzcmN7JHNyY317SEVBRF9TVEFUVVN9ID09IDMpIHsKKwkJIyBIRUFEIGlzIGZldGNoZWQgYW1vbmcgb3RoZXJzLgorCQlwdXNoIEB0aGlzLCBhbmRqb2luKCcnLCAnJywgWydIRUFEJ10pOworCX0KKwlwdXNoIEB0aGlzLCBhbmRqb2luKCJicmFuY2ggIiwgImJyYW5jaGVzICIsCisJCQkgICAkc3JjeyRzcmN9e0JSQU5DSH0pOworCXB1c2ggQHRoaXMsIGFuZGpvaW4oInRhZyAiLCAidGFncyAiLAorCQkJICAgJHNyY3skc3JjfXtUQUd9KTsKKwlwdXNoIEB0aGlzLCBhbmRqb2luKCJjb21taXQgIiwgImNvbW1pdHMgIiwKKwkJCSAgICAkc3JjeyRzcmN9e0dFTkVSSUN9KTsKKwlteSAkdGhpcyA9IGpvaW4oJywgJywgQHRoaXMpOworCWlmICgkc3JjIG5lICcuJykgeworCQkkdGhpcyAuPSAiIG9mICRzcmMiOworCX0KKwlwdXNoIEBtc2csICR0aGlzOworfQorcHJpbnQgIk1lcmdlICIsIGpvaW4oIjsgIiwgQG1zZyksICJcbiI7CmRpZmYgLS1naXQgYS9naXQtZm9ybWF0LXBhdGNoLnNoIGIvZ2l0LWZvcm1hdC1wYXRjaC5zaAppbmRleCA1MjVhMmYyLi5iNDNiYTM5IDEwMDc1NQotLS0gYS9naXQtZm9ybWF0LXBhdGNoLnNoCisrKyBiL2dpdC1mb3JtYXQtcGF0Y2guc2gKQEAgLTYsNyArNiw5IEBACiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlLiIKIAogdXNhZ2UgKCkgewotICAgIGVjaG8gPiYyICJ1c2FnZTogJDAiJyBbLW5dIFstbyBkaXJdIFstLWtlZXAtc3ViamVjdF0gWy0tbWJveF0gWy0tY2hlY2tdIFstLXNpZ25vZmZdIFstPGRpZmYgb3B0aW9ucz4uLi5dIHVwc3RyZWFtIFsgb3VyLWhlYWQgXQorICAgIGVjaG8gPiYyICJ1c2FnZTogJDAiJyBbLW5dIFstbyBkaXIgfCAtLXN0ZG91dF0gWy0ta2VlcC1zdWJqZWN0XSBbLS1tYm94XQorICAgIFstLWNoZWNrXSBbLS1zaWdub2ZmXSBbLTxkaWZmIG9wdGlvbnM+Li4uXQorICAgICggZnJvbS4udG8gLi4uIHwgdXBzdHJlYW0gWyBvdXItaGVhZCBdICkKIAogUHJlcGFyZSBlYWNoIGNvbW1pdCB3aXRoIGl0cyBwYXRjaCBzaW5jZSBvdXItaGVhZCBmb3JrZWQgZnJvbSB1cHN0cmVhbSwKIG9uZSBmaWxlIHBlciBwYXRjaCwgZm9yIGUtbWFpbCBzdWJtaXNzaW9uLiAgRWFjaCBvdXRwdXQgZmlsZSBpcwpAQCAtNDksNiArNTEsOCBAQAogICAgIG51bWJlcmVkPXQgOzsKICAgICAtc3wtLXN8LS1zaXwtLXNpZ3wtLXNpZ258LS1zaWdub3wtLXNpZ25vZnwtLXNpZ25vZmYpCiAgICAgc2lnbm9mZj10IDs7CisgICAgLS1zdHwtLXN0ZHwtLXN0ZG98LS1zdGRvdXwtLXN0ZG91dCkKKyAgICBzdGRvdXQ9dCBtYm94PXQgZGF0ZT10IGF1dGhvcj10IDs7CiAgICAgLW89KnwtLW89KnwtLW91PSp8LS1vdXQ9KnwtLW91dHA9KnwtLW91dHB1PSp8LS1vdXRwdXQ9KnwtLW91dHB1dC09KnxcCiAgICAgLS1vdXRwdXQtZD0qfC0tb3V0cHV0LWRpPSp8LS1vdXRwdXQtZGlyPSp8LS1vdXRwdXQtZGlyZT0qfFwKICAgICAtLW91dHB1dC1kaXJlYz0qfC0tb3V0cHV0LWRpcmVjdD0qfC0tb3V0cHV0LWRpcmVjdG89KnxcCkBAIC03MywyNSArNzcsNzcgQEAKIAlkaWUgJy0ta2VlcC1zdWJqZWN0IGFuZCAtLW51bWJlcmVkIGFyZSBpbmNvbXBhdGlibGUuJyA7OwogZXNhYwogCi1yZXYxPSByZXYyPQotY2FzZSAiJCMiIGluCi0yKQotICAgIHJldjE9IiQxIiByZXYyPSIkMiIgOzsKLTEpCi0gICAgY2FzZSAiJDEiIGluCi0gICAgKi4uKikKLQlyZXYxPWBleHByICIkMSIgOiAnXCguKlwpXC5cLidgCi0JcmV2Mj1gZXhwciAiJDEiIDogJy4qXC5cLlwoLipcKSdgCit0bXA9LnRtcC1zZXJpZXMkJAordHJhcCAncm0gLWYgJHRtcC0qJyAwIDEgMiAzIDE1CisKK3Nlcmllcz0kdG1wLXNlcmllcworY29tbXNnPSR0bXAtY29tbXNnCitmaWxlbGlzdD0kdG1wLWZpbGVzCisKKyMgQmFja3dhcmQgY29tcGF0aWJsZSBhcmd1bWVudCBwYXJzaW5nIGhhY2suCisjCisjIEhpc3RvcmljYWxseSwgd2Ugc3VwcG9ydGVkOgorIyAxLiAicmV2MSIJCWlzIGVxdWl2YWxlbnQgdG8gInJldjEuLkhFQUQiCisjIDIuICJyZXYxLi5yZXYyIgorIyAzLiAicmV2MSIgInJldjIJaXMgZXF1aXZhbGVudCB0byAicmV2MS4ucmV2MiIKKyMKKyMgV2Ugd2FudCB0byB0YWtlIGEgc2VxdWVuY2Ugb2YgInJldjEuLnJldjIiIGluIGdlbmVyYWwuCisjIEFsc28sICJyZXYxLi4iIHNob3VsZCBtZWFuICJyZXYxLi5IRUFEIjsgZ2l0LWRpZmYgdXNlcnMgYXJlCisjIGZhbWlsaWFyIHdpdGggdGhhdCBzeW50YXguCisKK2Nhc2UgIiQjLCQxIiBpbgorMSw/Ki4uPyopCisJIyBzaW5nbGUgInJldjEuLnJldjIiCiAJOzsKLSAgICAqKQotICAgICAgICByZXYxPSIkMSIKLQlyZXYyPSJIRUFEIgorMSw/Ki4uKQorCSMgc2luZ2xlICJyZXYxLi4iIHNob3VsZCBtZWFuICJyZXYxLi5IRUFEIgorCXNldCB4ICIkMSJIRUFECisJc2hpZnQKIAk7OwotICAgIGVzYWMgOzsKLSopCi0gICAgdXNhZ2UgOzsKKzEsKikKKwkjIHNpbmdsZSByZXYxCisJc2V0IHggIiQxLi5IRUFEIgorCXNoaWZ0CisJOzsKKzIsPyouLj8qKQorCSMgbm90IHRyYWRpdGlvbmFsICJyZXYxIiAicmV2MiIKKwk7OworMiwqKQorCXNldCB4ICIkMS4uJDIiCisJc2hpZnQKKwk7OwogZXNhYwogCisjIE5vdyB3ZSBoYXZlIHdoYXQgd2Ugd2FudCBpbiAkQAorZm9yIHJldnBhaXIKK2RvCisJY2FzZSAiJHJldnBhaXIiIGluCisJPyouLj8qKQorCQlyZXYxPWBleHByICIkcmV2cGFpciIgOiAnXCguKlwpXC5cLidgCisJCXJldjI9YGV4cHIgIiRyZXZwYWlyIiA6ICcuKlwuXC5cKC4qXCknYAorCQk7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCWdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRyZXYxXjAiID4vZGV2L251bGwgMj4mMSB8fAorCQlkaWUgIk5vdCBhIHZhbGlkIHJldiAkcmV2MSAoJHJldnBhaXIpIgorCWdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiRyZXYyXjAiID4vZGV2L251bGwgMj4mMSB8fAorCQlkaWUgIk5vdCBhIHZhbGlkIHJldiAkcmV2MiAoJHJldnBhaXIpIgorCWdpdC1jaGVycnkgLXYgIiRyZXYxIiAiJHJldjIiIHwKKwl3aGlsZSByZWFkIHNpZ24gcmV2IGNvbW1lbnQKKwlkbworCQljYXNlICIkc2lnbiIgaW4KKwkJJy0nKQorCQkJZWNobyA+JjIgIk1lcmdlZCBhbHJlYWR5OiAkY29tbWVudCIKKwkJCTs7CisJCSopCisJCQllY2hvICRyZXYKKwkJCTs7CisJCWVzYWMKKwlkb25lCitkb25lID4kc2VyaWVzCisKIG1lPWBnaXQtdmFyIEdJVF9BVVRIT1JfSURFTlQgfCBzZWQgLWUgJ3MvPi4qLz4vJ2AKIAogY2FzZSAiJG91dGRpciIgaW4KQEAgLTEwMCwxMyArMTU2LDYgQEAKIGVzYWMKIHRlc3QgLWQgIiRvdXRkaXIiIHx8IG1rZGlyIC1wICIkb3V0ZGlyIiB8fCBleGl0CiAKLXRtcD0udG1wLXNlcmllcyQkCi10cmFwICdybSAtZiAkdG1wLSonIDAgMSAyIDMgMTUKLQotc2VyaWVzPSR0bXAtc2VyaWVzCi1jb21tc2c9JHRtcC1jb21tc2cKLWZpbGVsaXN0PSR0bXAtZmlsZXMKLQogdGl0bGVTY3JpcHQ9JwogCS8uL2QKIAkvXiQvbgpAQCAtMTI4LDQyICsxNzcsNyBAQAogCXEKIH0nCiAKLV94NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCi1feDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgotc3RyaXBDb21taXRIZWFkPScvXiciJF94NDAiJyAoZnJvbSAnIiRfeDQwIicpJC9kJwotCi1naXQtY2hlcnJ5IC12ICIkcmV2MSIgIiRyZXYyIiB8Ci13aGlsZSByZWFkIHNpZ24gcmV2IGNvbW1lbnQKLWRvCi0JY2FzZSAiJHNpZ24iIGluCi0JJy0nKQotCQllY2hvID4mMiAiTWVyZ2VkIGFscmVhZHk6ICRjb21tZW50IgotCQk7OwotCSopCi0JCWVjaG8gJHJldgotCQk7OwotCWVzYWMKLWRvbmUgPiRzZXJpZXMKLQotdG90YWw9YHdjIC1sIDwkc2VyaWVzIHwgdHIgLWRjICJbMC05XSJgCi1pPTEKLXdoaWxlIHJlYWQgY29tbWl0Ci1kbwotICAgIGdpdC1jYXQtZmlsZSBjb21taXQgIiRjb21taXQiIHwgZ2l0LXN0cmlwc3BhY2UgPiRjb21tc2cKLSAgICB0aXRsZT1gc2VkIC1uZSAiJHRpdGxlU2NyaXB0IiA8JGNvbW1zZ2AKLSAgICBjYXNlICIkbnVtYmVyZWQiIGluCi0gICAgJycpIG51bT0gOzsKLSAgICAqKQotCWNhc2UgJHRvdGFsIGluCi0JMSkgbnVtPSA7OwotCSopIG51bT0nICdgcHJpbnRmICIlZC8lZCIgJGkgJHRvdGFsYCA7OwotCWVzYWMKLSAgICBlc2FjCi0KLSAgICBmaWxlPWBwcmludGYgJyUwNGQtJXN0eHQnICRpICIkdGl0bGUiYAotICAgIGk9YGV4cHIgIiRpIiArIDFgCi0gICAgZWNobyAiKiAkZmlsZSIKLSAgICB7Citwcm9jZXNzX29uZSAoKSB7CiAJbWFpbFNjcmlwdD0nCiAJLy4vZAogCS9eJC9uJwpAQCAtMTgyLDYgKzE5Niw3IEBACiAJICAgIGVjaG8gJ0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMScgOyMgVU5JWCAiRnJvbSIgbGluZQogCSAgICA7OwogCWVzYWMKKwogCWV2YWwgIiQoc2VkIC1uZSAiJHdob3NlcGF0Y2hTY3JpcHQiICRjb21tc2cpIgogCXRlc3QgIiRhdXRob3IsJGF1IiA9ICIsJG1lIiB8fCB7CiAJCW1haWxTY3JpcHQ9IiRtYWlsU2NyaXB0IicKQEAgLTIwMCw3ICsyMTUsOSBAQAogCW4KIAliIGJvZHknCiAKLQlzZWQgLW5lICIkbWFpbFNjcmlwdCIgPCRjb21tc2cKKwkoY2F0ICRjb21tc2cgOyBlY2hvOyBlY2hvKSB8CisJc2VkIC1uZSAiJG1haWxTY3JpcHQiIHwKKwlnaXQtc3RyaXBzcGFjZQogCiAJdGVzdCAiJHNpZ25vZmYiID0gInQiICYmIHsKIAkJb2Zmc2lnbmVyPWBnaXQtdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgJ3MvPi4qLz4vJ2AKQEAgLTIxNiwyMSArMjMzLDQ5IEBACiAJZWNobwogCWdpdC1kaWZmLXRyZWUgLXAgJGRpZmZfb3B0cyAiJGNvbW1pdCIgfCBnaXQtYXBwbHkgLS1zdGF0IC0tc3VtbWFyeQogCWVjaG8KLQlnaXQtZGlmZi10cmVlIC1wICRkaWZmX29wdHMgIiRjb21taXQiIHwgc2VkIC1lICIkc3RyaXBDb21taXRIZWFkIgorCWdpdC1jYXQtZmlsZSBjb21taXQgIiRjb21taXReIiB8IHNlZCAtZSAncy9edHJlZSAvYXBwbGllcy10bzogLycgLWUgcQorCWdpdC1kaWZmLXRyZWUgLXAgJGRpZmZfb3B0cyAiJGNvbW1pdCIKKwllY2hvICItLS0iCisJZWNobyAiQEBHSVRfVkVSU0lPTkBAIgogCiAJY2FzZSAiJG1ib3giIGluCiAJdCkKIAkJZWNobwogCQk7OwogCWVzYWMKLSAgICB9ID4iJG91dGRpciRmaWxlIgotICAgIGNhc2UgIiRjaGVjayIgaW4KLSAgICB0KQotCSMgVGhpcyBpcyBzbGlnaHRseSBtb2RpZmllZCBmcm9tIEFuZHJldyBNb3J0b24ncyBQZXJmZWN0IFBhdGNoLgotCSMgTGluZXMgeW91IGludHJvZHVjZSBzaG91bGQgbm90IGhhdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLQkjIEFsc28gY2hlY2sgZm9yIGFuIGluZGVudGF0aW9uIHRoYXQgaGFzIFNQIGJlZm9yZSBhIFRBQi4KLSAgICAgICAgZ3JlcCAtbiAnXitcKFsgCV0qIAkuKlx8LipbIAldXCkkJyAiJG91dGRpciRmaWxlIgorfQogCi0JOiBkbyBub3QgZXhpdCB3aXRoIG5vbi16ZXJvIGJlY2F1c2Ugd2Ugc2F3IG5vIHByb2JsZW0gaW4gdGhlIGxhc3Qgb25lLgordG90YWw9YHdjIC1sIDwkc2VyaWVzIHwgdHIgLWRjICJbMC05XSJgCitpPTEKK3doaWxlIHJlYWQgY29tbWl0CitkbworICAgIGdpdC1jYXQtZmlsZSBjb21taXQgIiRjb21taXQiIHwgZ2l0LXN0cmlwc3BhY2UgPiRjb21tc2cKKyAgICB0aXRsZT1gc2VkIC1uZSAiJHRpdGxlU2NyaXB0IiA8JGNvbW1zZ2AKKyAgICBjYXNlICIkbnVtYmVyZWQiIGluCisgICAgJycpIG51bT0gOzsKKyAgICAqKQorCWNhc2UgJHRvdGFsIGluCisJMSkgbnVtPSA7OworCSopIG51bT0nICdgcHJpbnRmICIlZC8lZCIgJGkgJHRvdGFsYCA7OworCWVzYWMKICAgICBlc2FjCisKKyAgICBmaWxlPWBwcmludGYgJyUwNGQtJXN0eHQnICRpICIkdGl0bGUiYAorICAgIGlmIHRlc3QgJycgPSAiJHN0ZG91dCIKKyAgICB0aGVuCisJICAgIGVjaG8gIiogJGZpbGUiCisJICAgIHByb2Nlc3Nfb25lID4iJG91dGRpciRmaWxlIgorCSAgICBpZiB0ZXN0IHQgPSAiJGNoZWNrIgorCSAgICB0aGVuCisJCSMgVGhpcyBpcyBzbGlnaHRseSBtb2RpZmllZCBmcm9tIEFuZHJldyBNb3J0b24ncyBQZXJmZWN0IFBhdGNoLgorCQkjIExpbmVzIHlvdSBpbnRyb2R1Y2Ugc2hvdWxkIG5vdCBoYXZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisJCSMgQWxzbyBjaGVjayBmb3IgYW4gaW5kZW50YXRpb24gdGhhdCBoYXMgU1AgYmVmb3JlIGEgVEFCLgorCQlncmVwIC1uICdeK1woWyAJXSogCS4qXHwuKlsgCV1cKSQnICIkb3V0ZGlyJGZpbGUiCisJCToKKwkgICAgZmkKKyAgICBlbHNlCisJICAgIGVjaG8gPiYyICIqICRmaWxlIgorCSAgICBwcm9jZXNzX29uZQorICAgIGZpCisgICAgaT1gZXhwciAiJGkiICsgMWAKIGRvbmUgPCRzZXJpZXMKZGlmZiAtLWdpdCBhL2dpdC1scy1yZW1vdGUuc2ggYi9naXQtbHMtcmVtb3RlLnNoCmluZGV4IGJmYmQ1YTQuLmYwZjBiMDcgMTAwNzU1Ci0tLSBhL2dpdC1scy1yZW1vdGUuc2gKKysrIGIvZ2l0LWxzLXJlbW90ZS5zaApAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogIwotLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKKy4gZ2l0LXNoLXNldHVwCiAKIHVzYWdlICgpIHsKICAgICBlY2hvID4mMiAidXNhZ2U6ICQwIFstLWhlYWRzXSBbLS10YWdzXSA8cmVwb3NpdG9yeT4gPHJlZnM+Li4uIgpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLW91cnMuc2ggYi9naXQtbWVyZ2Utb3Vycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjNkMDUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLW91cnMuc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBQcmV0ZW5kIHdlIHJlc29sdmVkIHRoZSBoZWFkcywgYnV0IGRlY2xhcmUgb3VyIHRyZWUgdHJ1bXBzIGV2ZXJ5Ym9keSBlbHNlLgorIworCisjIFdlIG5lZWQgdG8gZXhpdCB3aXRoIDIgaWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIG91ciBIRUFEIHRyZWUsCisjIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW5kZXggaXMgd2hhdCB3ZSB3aWxsIGJlIGNvbW1pdHRpbmcgYXMgdGhlCisjIG1lcmdlIHJlc3VsdC4KKwordGVzdCAiJChnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUQpIiA9ICIiIHx8IGV4aXQgMgorCitleGl0IDAKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1yZWN1cnNpdmUucHkgYi9naXQtbWVyZ2UtcmVjdXJzaXZlLnB5CmluZGV4IDYwZThiMjEuLjYyNmQ4NTQgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1yZWN1cnNpdmUucHkKKysrIGIvZ2l0LW1lcmdlLXJlY3Vyc2l2ZS5weQpAQCAtNCwxMiArNCw5IEBACiBmcm9tIGhlYXBxIGltcG9ydCBoZWFwcHVzaCwgaGVhcHBvcAogZnJvbSBzZXRzIGltcG9ydCBTZXQKIAotc3lzLnBhdGguYXBwZW5kKCdAQEdJVF9QWVRIT05fUEFUSEBAJykKK3N5cy5wYXRoLmFwcGVuZCgnJydAQEdJVF9QWVRIT05fUEFUSEBAJycnKQogZnJvbSBnaXRNZXJnZUNvbW1vbiBpbXBvcnQgKgogCi0jIFRoZSBhY3R1YWwgbWVyZ2UgY29kZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogb3JpZ2luYWxJbmRleEZpbGUgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0lOREVYX0ZJTEUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uLmdldCgnR0lUX0RJUicsICcuZ2l0JykgKyAnL2luZGV4JykKIHRlbXBvcmFyeUluZGV4RmlsZSA9IG9zLmVudmlyb24uZ2V0KCdHSVRfRElSJywgJy5naXQnKSArIFwKQEAgLTIxLDExICsxOCwyMyBAQAogICAgICAgICBwYXNzCiAgICAgaWYgdGVtcG9yYXJ5OgogICAgICAgICBuZXdJbmRleCA9IHRlbXBvcmFyeUluZGV4RmlsZQotICAgICAgICBvcy5lbnZpcm9uCiAgICAgZWxzZToKICAgICAgICAgbmV3SW5kZXggPSBvcmlnaW5hbEluZGV4RmlsZQogICAgIG9zLmVudmlyb25bJ0dJVF9JTkRFWF9GSUxFJ10gPSBuZXdJbmRleAogCisjIFRoaXMgaXMgYSBnbG9iYWwgdmFyaWFibGUgd2hpY2ggaXMgdXNlZCBpbiBhIG51bWJlciBvZiBwbGFjZXMgYnV0CisjIG9ubHkgd3JpdHRlbiB0byBpbiB0aGUgJ21lcmdlJyBmdW5jdGlvbi4KKworIyBjYWNoZU9ubHkgPT0gVHJ1ZSAgPT4gRG9uJ3QgbGVhdmUgYW55IG5vbi1zdGFnZSAwIGVudHJpZXMgaW4gdGhlIGNhY2hlIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgdXBkYXRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKyMgICAgICAgICAgICAgIEZhbHNlID0+IExlYXZlIHVubWVyZ2VkIGVudHJpZXMgaW4gdGhlIGNhY2hlIGFuZCB1cGRhdGUKKyMgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKworY2FjaGVPbmx5ID0gRmFsc2UKKworIyBUaGUgZW50cnkgcG9pbnQgdG8gdGhlIG1lcmdlIGNvZGUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIGRlZiBtZXJnZShoMSwgaDIsIGJyYW5jaDFOYW1lLCBicmFuY2gyTmFtZSwgZ3JhcGgsIGNhbGxEZXB0aD0wKToKICAgICAnJydNZXJnZSB0aGUgY29tbWl0cyBoMSBhbmQgaDIsIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpcnR1YWwKICAgICBjb21taXQgb2JqZWN0IGFuZCBhIGZsYWcgaW5kaWNhdGluZyB0aGUgY2xlYW5lc3Mgb2YgdGhlIG1lcmdlLicnJwpAQCAtMzUsNiArNDQsNyBAQAogICAgIGRlZiBpbmZvTXNnKCphcmdzKToKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnICAnKmNhbGxEZXB0aCkKICAgICAgICAgcHJpbnRMaXN0KGFyZ3MpCisKICAgICBpbmZvTXNnKCdNZXJnaW5nOicpCiAgICAgaW5mb01zZyhoMSkKICAgICBpbmZvTXNnKGgyKQpAQCAtNDYsMjcgKzU2LDI3IEBACiAgICAgICAgIGluZm9Nc2coeCkKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAotICAgIE1zID0gY2FbMF0KKyAgICBtZXJnZWRDQSA9IGNhWzBdCiAgICAgZm9yIGggaW4gY2FbMTpdOgotICAgICAgICBbTXMsIGlnbm9yZV0gPSBtZXJnZShNcywgaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RlbXBvcmFyeSBzaGFyZWQgbWVyZ2UgYnJhbmNoIDEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVtcG9yYXJ5IHNoYXJlZCBtZXJnZSBicmFuY2ggMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoLCBjYWxsRGVwdGgrMSkKLSAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2UoTXMsIENvbW1pdCkpCisgICAgICAgIFttZXJnZWRDQSwgZHVtbXldID0gbWVyZ2UobWVyZ2VkQ0EsIGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RlbXBvcmFyeSBzaGFyZWQgbWVyZ2UgYnJhbmNoIDEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUZW1wb3Jhcnkgc2hhcmVkIG1lcmdlIGJyYW5jaCAyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaCwgY2FsbERlcHRoKzEpCisgICAgICAgIGFzc2VydChpc2luc3RhbmNlKG1lcmdlZENBLCBDb21taXQpKQogCisgICAgZ2xvYmFsIGNhY2hlT25seQogICAgIGlmIGNhbGxEZXB0aCA9PSAwOgogICAgICAgICBzZXR1cEluZGV4KEZhbHNlKQotICAgICAgICBjbGVhbkNhY2hlID0gRmFsc2UKKyAgICAgICAgY2FjaGVPbmx5ID0gRmFsc2UKICAgICBlbHNlOgogICAgICAgICBzZXR1cEluZGV4KFRydWUpCiAgICAgICAgIHJ1blByb2dyYW0oWydnaXQtcmVhZC10cmVlJywgaDEudHJlZSgpXSkKLSAgICAgICAgY2xlYW5DYWNoZSA9IFRydWUKKyAgICAgICAgY2FjaGVPbmx5ID0gVHJ1ZQogCi0gICAgW3NoYVJlcywgY2xlYW5dID0gbWVyZ2VUcmVlcyhoMS50cmVlKCksIGgyLnRyZWUoKSwgTXMudHJlZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5DYWNoZSkKKyAgICBbc2hhUmVzLCBjbGVhbl0gPSBtZXJnZVRyZWVzKGgxLnRyZWUoKSwgaDIudHJlZSgpLCBtZXJnZWRDQS50cmVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gxTmFtZSwgYnJhbmNoMk5hbWUpCiAKLSAgICBpZiBjbGVhbiBvciBjbGVhbkNhY2hlOgorICAgIGlmIGNsZWFuIG9yIGNhY2hlT25seToKICAgICAgICAgcmVzID0gQ29tbWl0KE5vbmUsIFtoMSwgaDJdLCB0cmVlPXNoYVJlcykKICAgICAgICAgZ3JhcGguYWRkTm9kZShyZXMpCiAgICAgZWxzZToKQEAgLTg5LDQ5ICs5OSwxNCBAQAogCiAgICAgcmV0dXJuIFtmaWxlcywgZGlyc10KIAotY2xhc3MgQ2FjaGVFbnRyeToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIGNsYXNzIFN0YWdlOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuc2hhMSA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLm1vZGUgPSBOb25lCi0gICAgICAgIAotICAgICAgICBzZWxmLnN0YWdlcyA9IFtTdGFnZSgpLCBTdGFnZSgpLCBTdGFnZSgpXQotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisjIFRob3NlIHR3byBnbG9iYWwgdmFyaWFibGVzIGFyZSB1c2VkIGluIGEgbnVtYmVyIG9mIHBsYWNlcyBidXQgb25seQorIyB3cml0dGVuIHRvIGluICdtZXJnZVRyZWVzJyBhbmQgJ3VuaXF1ZVBhdGgnLiBUaGV5IGtlZXAgdHJhY2sgb2YKKyMgZXZlcnkgZmlsZSBhbmQgZGlyZWN0b3J5IGluIHRoZSB0d28gYnJhbmNoZXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUKKyMgbWVyZ2VkLgorY3VycmVudEZpbGVTZXQgPSBOb25lCitjdXJyZW50RGlyZWN0b3J5U2V0ID0gTm9uZQogCi11bm1lcmdlZFJFID0gcmUuY29tcGlsZShyJ14oWzAtN10rKSAoWzAtOWEtZl17NDB9KSAoWzEtM10pXHQoLiopJCcsIHJlLlMpCi1kZWYgdW5tZXJnZWRDYWNoZUVudHJpZXMoKToKLSAgICAnJydDcmVhdGUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgZmlsZSBuYW1lcyB0byBDYWNoZUVudHJ5Ci0gICAgb2JqZWN0cy4gVGhlIGRpY3Rpb25hcnkgY29udGFpbnMgb25lIGVudHJ5IGZvciBldmVyeSBwYXRoIHdpdGggYQotICAgIG5vbi16ZXJvIHN0YWdlIGVudHJ5LicnJwotCi0gICAgbGluZXMgPSBydW5Qcm9ncmFtKFsnZ2l0LWxzLWZpbGVzJywgJy16JywgJy0tdW5tZXJnZWQnXSkuc3BsaXQoJ1wwJykKLSAgICBsaW5lcy5wb3AoKQotCi0gICAgcmVzID0ge30KLSAgICBmb3IgbCBpbiBsaW5lczoKLSAgICAgICAgbSA9IHVubWVyZ2VkUkUubWF0Y2gobCkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIG1vZGUgPSBpbnQobS5ncm91cCgxKSwgOCkKLSAgICAgICAgICAgIHNoYTEgPSBtLmdyb3VwKDIpCi0gICAgICAgICAgICBzdGFnZSA9IGludChtLmdyb3VwKDMpKSAtIDEKLSAgICAgICAgICAgIHBhdGggPSBtLmdyb3VwKDQpCi0KLSAgICAgICAgICAgIGlmIHJlcy5oYXNfa2V5KHBhdGgpOgotICAgICAgICAgICAgICAgIGUgPSByZXNbcGF0aF0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZSA9IENhY2hlRW50cnkocGF0aCkKLSAgICAgICAgICAgICAgICByZXNbcGF0aF0gPSBlCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBlLnN0YWdlc1tzdGFnZV0ubW9kZSA9IG1vZGUKLSAgICAgICAgICAgIGUuc3RhZ2VzW3N0YWdlXS5zaGExID0gc2hhMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGllKCdFcnJvcjogTWVyZ2UgcHJvZ3JhbSBmYWlsZWQ6IFVuZXhwZWN0ZWQgb3V0cHV0IGZyb20nLCBcCi0gICAgICAgICAgICAgICAgJ2dpdC1scy1maWxlczonLCBsKQotICAgIHJldHVybiByZXMKLQotZGVmIG1lcmdlVHJlZXMoaGVhZCwgbWVyZ2UsIGNvbW1vbiwgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lLAotICAgICAgICAgICAgICAgY2xlYW5DYWNoZSk6CitkZWYgbWVyZ2VUcmVlcyhoZWFkLCBtZXJnZSwgY29tbW9uLCBicmFuY2gxTmFtZSwgYnJhbmNoMk5hbWUpOgogICAgICcnJ01lcmdlIHRoZSB0cmVlcyAnaGVhZCcgYW5kICdtZXJnZScgd2l0aCB0aGUgY29tbW9uIGFuY2VzdG9yCiAgICAgJ2NvbW1vbicuIFRoZSBuYW1lIG9mIHRoZSBoZWFkIGJyYW5jaCBpcyAnYnJhbmNoMU5hbWUnIGFuZCB0aGUgbmFtZSBvZgogICAgIHRoZSBtZXJnZSBicmFuY2ggaXMgJ2JyYW5jaDJOYW1lJy4gUmV0dXJuIGEgdHVwbGUgKHRyZWUsIGNsZWFuTWVyZ2UpCkBAIC0xNDQsMzAgKzExOSwzOCBAQAogICAgICAgICBwcmludCAnQWxyZWFkeSB1cHRvZGF0ZSEnCiAgICAgICAgIHJldHVybiBbaGVhZCwgVHJ1ZV0KIAotICAgIGlmIGNsZWFuQ2FjaGU6CisgICAgaWYgY2FjaGVPbmx5OgogICAgICAgICB1cGRhdGVBcmcgPSAnLWknCiAgICAgZWxzZToKICAgICAgICAgdXBkYXRlQXJnID0gJy11JwogCi0gICAgcnVuUHJvZ3JhbShbJ2dpdC1yZWFkLXRyZWUnLCB1cGRhdGVBcmcsICctbScsIGNvbW1vbiwgaGVhZCwgbWVyZ2VdKQotICAgIGNsZWFuTWVyZ2UgPSBUcnVlCisgICAgW291dCwgY29kZV0gPSBydW5Qcm9ncmFtKFsnZ2l0LXJlYWQtdHJlZScsIHVwZGF0ZUFyZywgJy1tJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLCBoZWFkLCBtZXJnZV0sIHJldHVybkNvZGUgPSBUcnVlKQorICAgIGlmIGNvZGUgIT0gMDoKKyAgICAgICAgZGllKCdnaXQtcmVhZC10cmVlOicsIG91dCkKIAogICAgIFt0cmVlLCBjb2RlXSA9IHJ1blByb2dyYW0oJ2dpdC13cml0ZS10cmVlJywgcmV0dXJuQ29kZT1UcnVlKQogICAgIHRyZWUgPSB0cmVlLnJzdHJpcCgpCiAgICAgaWYgY29kZSAhPSAwOgotICAgICAgICBbZmlsZXMsIGRpcnNdID0gZ2V0RmlsZXNBbmREaXJzKGhlYWQpCisgICAgICAgIGdsb2JhbCBjdXJyZW50RmlsZVNldCwgY3VycmVudERpcmVjdG9yeVNldAorICAgICAgICBbY3VycmVudEZpbGVTZXQsIGN1cnJlbnREaXJlY3RvcnlTZXRdID0gZ2V0RmlsZXNBbmREaXJzKGhlYWQpCiAgICAgICAgIFtmaWxlc00sIGRpcnNNXSA9IGdldEZpbGVzQW5kRGlycyhtZXJnZSkKLSAgICAgICAgZmlsZXMudW5pb25fdXBkYXRlKGZpbGVzTSkKLSAgICAgICAgZGlycy51bmlvbl91cGRhdGUoZGlyc00pCi0gICAgICAgIAotICAgICAgICBjbGVhbk1lcmdlID0gVHJ1ZQorICAgICAgICBjdXJyZW50RmlsZVNldC51bmlvbl91cGRhdGUoZmlsZXNNKQorICAgICAgICBjdXJyZW50RGlyZWN0b3J5U2V0LnVuaW9uX3VwZGF0ZShkaXJzTSkKKwogICAgICAgICBlbnRyaWVzID0gdW5tZXJnZWRDYWNoZUVudHJpZXMoKQotICAgICAgICBmb3IgbmFtZSBpbiBlbnRyaWVzOgotICAgICAgICAgICAgaWYgbm90IHByb2Nlc3NFbnRyeShlbnRyaWVzW25hbWVdLCBicmFuY2gxTmFtZSwgYnJhbmNoMk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLCBkaXJzLCBjbGVhbkNhY2hlKToKKyAgICAgICAgcmVuYW1lc0hlYWQgPSAgZ2V0UmVuYW1lcyhoZWFkLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKQorICAgICAgICByZW5hbWVzTWVyZ2UgPSBnZXRSZW5hbWVzKG1lcmdlLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKQorCisgICAgICAgIGNsZWFuTWVyZ2UgPSBwcm9jZXNzUmVuYW1lcyhyZW5hbWVzSGVhZCwgcmVuYW1lc01lcmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lKQorICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoKKyAgICAgICAgICAgIGlmIGVudHJ5LnByb2Nlc3NlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgbm90IHByb2Nlc3NFbnRyeShlbnRyeSwgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lKToKICAgICAgICAgICAgICAgICBjbGVhbk1lcmdlID0gRmFsc2UKICAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgY2xlYW5NZXJnZSBvciBjbGVhbkNhY2hlOgorICAgICAgICBpZiBjbGVhbk1lcmdlIG9yIGNhY2hlT25seToKICAgICAgICAgICAgIHRyZWUgPSBydW5Qcm9ncmFtKCdnaXQtd3JpdGUtdHJlZScpLnJzdHJpcCgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cmVlID0gTm9uZQpAQCAtMTc2LDg0ICsxNTksNTM4IEBACiAKICAgICByZXR1cm4gW3RyZWUsIGNsZWFuTWVyZ2VdCiAKLWRlZiBwcm9jZXNzRW50cnkoZW50cnksIGJyYW5jaDFOYW1lLCBicmFuY2gyTmFtZSwgZmlsZXMsIGRpcnMsIGNsZWFuQ2FjaGUpOgotICAgICcnJ01lcmdlIG9uZSBjYWNoZSBlbnRyeS4gJ2ZpbGVzJyBpcyBhIFNldCB3aXRoIHRoZSBmaWxlcyBpbiBib3RoIG9mCi0gICAgdGhlIGhlYWRzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1lcmdlLiAnZGlycycgY29udGFpbnMgdGhlCi0gICAgY29ycmVzcG9uZGluZyBkYXRhIGZvciBkaXJlY3Rvcmllcy4gSWYgJ2NsZWFuQ2FjaGUnIGlzIFRydWUgbm8KLSAgICBub24temVybyBzdGFnZXMgd2lsbCBiZSBsZWZ0IGluIHRoZSBjYWNoZSBmb3IgdGhlIHBhdGgKLSAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnRyeSAnZW50cnknLicnJworIyBMb3cgbGV2ZWwgZmlsZSBtZXJnaW5nLCB1cGRhdGUgYW5kIHJlbW92YWwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMgY2xlYW5DYWNoZSA9PSBUcnVlICA9PiBEb24ndCBsZWF2ZSBhbnkgbm9uLXN0YWdlIDAgZW50cmllcyBpbiB0aGUgY2FjaGUgYW5kCi0jICAgICAgICAgICAgICAgICAgICAgICAgZG9uJ3QgdXBkYXRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeQotIyAgICAgICAgICAgICAgIEZhbHNlID0+IExlYXZlIHVubWVyZ2VkIGVudHJpZXMgYW5kIHVwZGF0ZSB0aGUgd29ya2luZyBkaXJlY3RvcnkKK2RlZiBtZXJnZUZpbGUob1BhdGgsIG9TaGEsIG9Nb2RlLCBhUGF0aCwgYVNoYSwgYU1vZGUsIGJQYXRoLCBiU2hhLCBiTW9kZSwKKyAgICAgICAgICAgICAgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lKToKIAotIyBjbGVhbiAgICAgPT0gVHJ1ZSAgPT4gbm9uLWNvbmZsaWN0IGNhc2UKLSMgICAgICAgICAgICAgIEZhbHNlID0+IGNvbmZsaWN0IGNhc2UKKyAgICBtZXJnZSA9IEZhbHNlCisgICAgY2xlYW4gPSBUcnVlCiAKLSMgSWYgY2xlYW5DYWNoZSA9PSBGYWxzZSB0aGVuIHRoZSBjYWNoZSBzaG91bGRuJ3QgYmUgdXBkYXRlZCBpZiBjbGVhbiA9PSBGYWxzZQorICAgIGlmIHN0YXQuU19JRk1UKGFNb2RlKSAhPSBzdGF0LlNfSUZNVChiTW9kZSk6CisgICAgICAgIGNsZWFuID0gRmFsc2UKKyAgICAgICAgaWYgc3RhdC5TX0lTUkVHKGFNb2RlKToKKyAgICAgICAgICAgIG1vZGUgPSBhTW9kZQorICAgICAgICAgICAgc2hhID0gYVNoYQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kZSA9IGJNb2RlCisgICAgICAgICAgICBzaGEgPSBiU2hhCisgICAgZWxzZToKKyAgICAgICAgaWYgYVNoYSAhPSBvU2hhIGFuZCBiU2hhICE9IG9TaGE6CisgICAgICAgICAgICBtZXJnZSA9IFRydWUKIAotICAgIGRlZiB1cGRhdGVGaWxlKGNsZWFuLCBzaGEsIG1vZGUsIHBhdGgsIG9ubHlXZD1GYWxzZSk6Ci0gICAgICAgIHVwZGF0ZUNhY2hlID0gbm90IG9ubHlXZCBhbmQgKGNsZWFuQ2FjaGUgb3IgKG5vdCBjbGVhbkNhY2hlIGFuZCBjbGVhbikpCi0gICAgICAgIHVwZGF0ZVdkID0gb25seVdkIG9yIChub3QgY2xlYW5DYWNoZSBhbmQgY2xlYW4pCisgICAgICAgIGlmIGFNb2RlID09IG9Nb2RlOgorICAgICAgICAgICAgbW9kZSA9IGJNb2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2RlID0gYU1vZGUKIAotICAgICAgICBpZiB1cGRhdGVXZDoKLSAgICAgICAgICAgIHByb2cgPSBbJ2dpdC1jYXQtZmlsZScsICdibG9iJywgc2hhXQotICAgICAgICAgICAgaWYgc3RhdC5TX0lTUkVHKG1vZGUpOgorICAgICAgICBpZiBhU2hhID09IG9TaGE6CisgICAgICAgICAgICBzaGEgPSBiU2hhCisgICAgICAgIGVsaWYgYlNoYSA9PSBvU2hhOgorICAgICAgICAgICAgc2hhID0gYVNoYQorICAgICAgICBlbGlmIHN0YXQuU19JU1JFRyhhTW9kZSk6CisgICAgICAgICAgICBhc3NlcnQoc3RhdC5TX0lTUkVHKGJNb2RlKSkKKworICAgICAgICAgICAgb3JpZyA9IHJ1blByb2dyYW0oWydnaXQtdW5wYWNrLWZpbGUnLCBvU2hhXSkucnN0cmlwKCkKKyAgICAgICAgICAgIHNyYzEgPSBydW5Qcm9ncmFtKFsnZ2l0LXVucGFjay1maWxlJywgYVNoYV0pLnJzdHJpcCgpCisgICAgICAgICAgICBzcmMyID0gcnVuUHJvZ3JhbShbJ2dpdC11bnBhY2stZmlsZScsIGJTaGFdKS5yc3RyaXAoKQorICAgICAgICAgICAgW291dCwgY29kZV0gPSBydW5Qcm9ncmFtKFsnbWVyZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLUwnLCBicmFuY2gxTmFtZSArICcvJyArIGFQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLUwnLCAnb3JpZy8nICsgb1BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctTCcsIGJyYW5jaDJOYW1lICsgJy8nICsgYlBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEsIG9yaWcsIHNyYzJdLCByZXR1cm5Db2RlPVRydWUpCisKKyAgICAgICAgICAgIHNoYSA9IHJ1blByb2dyYW0oWydnaXQtaGFzaC1vYmplY3QnLCAnLXQnLCAnYmxvYicsICctdycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxXSkucnN0cmlwKCkKKworICAgICAgICAgICAgb3MudW5saW5rKG9yaWcpCisgICAgICAgICAgICBvcy51bmxpbmsoc3JjMSkKKyAgICAgICAgICAgIG9zLnVubGluayhzcmMyKQorICAgICAgICAgICAgCisgICAgICAgICAgICBjbGVhbiA9IChjb2RlID09IDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoc3RhdC5TX0lTTE5LKGFNb2RlKSBhbmQgc3RhdC5TX0lTTE5LKGJNb2RlKSkKKyAgICAgICAgICAgIHNoYSA9IGFTaGEKKworICAgICAgICAgICAgaWYgYVNoYSAhPSBiU2hhOgorICAgICAgICAgICAgICAgIGNsZWFuID0gRmFsc2UKKworICAgIHJldHVybiBbc2hhLCBtb2RlLCBjbGVhbiwgbWVyZ2VdCisKK2RlZiB1cGRhdGVGaWxlKGNsZWFuLCBzaGEsIG1vZGUsIHBhdGgpOgorICAgIHVwZGF0ZUNhY2hlID0gY2FjaGVPbmx5IG9yIGNsZWFuCisgICAgdXBkYXRlV2QgPSBub3QgY2FjaGVPbmx5CisKKyAgICByZXR1cm4gdXBkYXRlRmlsZUV4dChzaGEsIG1vZGUsIHBhdGgsIHVwZGF0ZUNhY2hlLCB1cGRhdGVXZCkKKworZGVmIHVwZGF0ZUZpbGVFeHQoc2hhLCBtb2RlLCBwYXRoLCB1cGRhdGVDYWNoZSwgdXBkYXRlV2QpOgorICAgIGlmIGNhY2hlT25seToKKyAgICAgICAgdXBkYXRlV2QgPSBGYWxzZQorCisgICAgaWYgdXBkYXRlV2Q6CisgICAgICAgIHBhdGhDb21wb25lbnRzID0gcGF0aC5zcGxpdCgnLycpCisgICAgICAgIGZvciB4IGluIHhyYW5nZSgxLCBsZW4ocGF0aENvbXBvbmVudHMpKToKKyAgICAgICAgICAgIHAgPSAnLycuam9pbihwYXRoQ29tcG9uZW50c1swOnhdKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3JlYXRlRGlyID0gbm90IHN0YXQuU19JU0RJUihvcy5sc3RhdChwKS5zdF9tb2RlKQorICAgICAgICAgICAgZXhjZXB0OiAKKyAgICAgICAgICAgICAgICBjcmVhdGVEaXIgPSBUcnVlCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGNyZWF0ZURpcjoKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaWYgbW9kZSAmIDAxMDA6Ci0gICAgICAgICAgICAgICAgICAgIG1vZGUgPSAwNzc3Ci0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDA2NjYKLSAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocGF0aCwgb3MuT19XUk9OTFkgfCBvcy5PX1RSVU5DIHwgb3MuT19DUkVBVCwgbW9kZSkKLSAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihwcm9nLCBzdGRvdXQ9ZmQpCi0gICAgICAgICAgICAgICAgcHJvYy53YWl0KCkKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgIGVsaWYgc3RhdC5TX0lTTE5LKG1vZGUpOgotICAgICAgICAgICAgICAgIGxpbmtUYXJnZXQgPSBydW5Qcm9ncmFtKHByb2cpCi0gICAgICAgICAgICAgICAgb3Muc3ltbGluayhsaW5rVGFyZ2V0LCBwYXRoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhc3NlcnQoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKHApCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiQ291bGRuJ3QgY3JlYXRlIGRpcmVjdG9yeSIsIHAsIGUuc3RyZXJyb3IpCiAKLSAgICAgICAgaWYgdXBkYXRlV2QgYW5kIHVwZGF0ZUNhY2hlOgotICAgICAgICAgICAgcnVuUHJvZ3JhbShbJ2dpdC11cGRhdGUtaW5kZXgnLCAnLS1hZGQnLCAnLS0nLCBwYXRoXSkKLSAgICAgICAgZWxpZiB1cGRhdGVDYWNoZToKLSAgICAgICAgICAgIHJ1blByb2dyYW0oWydnaXQtdXBkYXRlLWluZGV4JywgJy0tYWRkJywgJy0tY2FjaGVpbmZvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICcwJW8nICUgbW9kZSwgc2hhLCBwYXRoXSkKLQotICAgIGRlZiByZW1vdmVGaWxlKGNsZWFuLCBwYXRoKToKLSAgICAgICAgaWYgY2xlYW5DYWNoZSBvciAobm90IGNsZWFuQ2FjaGUgYW5kIGNsZWFuKToKLSAgICAgICAgICAgIHJ1blByb2dyYW0oWydnaXQtdXBkYXRlLWluZGV4JywgJy0tZm9yY2UtcmVtb3ZlJywgJy0tJywgcGF0aF0pCi0KLSAgICAgICAgaWYgbm90IGNsZWFuQ2FjaGUgYW5kIGNsZWFuOgorICAgICAgICBwcm9nID0gWydnaXQtY2F0LWZpbGUnLCAnYmxvYicsIHNoYV0KKyAgICAgICAgaWYgc3RhdC5TX0lTUkVHKG1vZGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhwYXRoKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlTRElSOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbW9kZSAmIDAxMDA6CisgICAgICAgICAgICAgICAgbW9kZSA9IDA3NzcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbW9kZSA9IDA2NjYKKyAgICAgICAgICAgIGZkID0gb3Mub3BlbihwYXRoLCBvcy5PX1dST05MWSB8IG9zLk9fVFJVTkMgfCBvcy5PX0NSRUFULCBtb2RlKQorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4ocHJvZywgc3Rkb3V0PWZkKQorICAgICAgICAgICAgcHJvYy53YWl0KCkKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICBlbGlmIHN0YXQuU19JU0xOSyhtb2RlKToKKyAgICAgICAgICAgIGxpbmtUYXJnZXQgPSBydW5Qcm9ncmFtKHByb2cpCisgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmtUYXJnZXQsIHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoRmFsc2UpCiAKLSAgICBkZWYgdW5pcXVlUGF0aChwYXRoLCBicmFuY2gpOgotICAgICAgICBuZXdQYXRoID0gcGF0aCArICdfJyArIGJyYW5jaAotICAgICAgICBzdWZmaXggPSAwCi0gICAgICAgIHdoaWxlIG5ld1BhdGggaW4gZmlsZXMgb3IgbmV3UGF0aCBpbiBkaXJzOgotICAgICAgICAgICAgc3VmZml4ICs9IDEKLSAgICAgICAgICAgIG5ld1BhdGggPSBwYXRoICsgJ18nICsgYnJhbmNoICsgJ18nICsgc3RyKHN1ZmZpeCkKLSAgICAgICAgZmlsZXMuYWRkKG5ld1BhdGgpCi0gICAgICAgIHJldHVybiBuZXdQYXRoCisgICAgaWYgdXBkYXRlV2QgYW5kIHVwZGF0ZUNhY2hlOgorICAgICAgICBydW5Qcm9ncmFtKFsnZ2l0LXVwZGF0ZS1pbmRleCcsICctLWFkZCcsICctLScsIHBhdGhdKQorICAgIGVsaWYgdXBkYXRlQ2FjaGU6CisgICAgICAgIHJ1blByb2dyYW0oWydnaXQtdXBkYXRlLWluZGV4JywgJy0tYWRkJywgJy0tY2FjaGVpbmZvJywKKyAgICAgICAgICAgICAgICAgICAgJzAlbycgJSBtb2RlLCBzaGEsIHBhdGhdKQogCi0gICAgZGVidWcoJ3Byb2Nlc3NpbmcnLCBlbnRyeS5wYXRoLCAnY2xlYW4gY2FjaGU6JywgY2xlYW5DYWNoZSkKK2RlZiByZW1vdmVGaWxlKGNsZWFuLCBwYXRoKToKKyAgICB1cGRhdGVDYWNoZSA9IGNhY2hlT25seSBvciBjbGVhbgorICAgIHVwZGF0ZVdkID0gbm90IGNhY2hlT25seQorCisgICAgaWYgdXBkYXRlQ2FjaGU6CisgICAgICAgIHJ1blByb2dyYW0oWydnaXQtdXBkYXRlLWluZGV4JywgJy0tZm9yY2UtcmVtb3ZlJywgJy0tJywgcGF0aF0pCisKKyAgICBpZiB1cGRhdGVXZDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHBhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlTRElSOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiB1bmlxdWVQYXRoKHBhdGgsIGJyYW5jaCk6CisgICAgZGVmIGZpbGVFeGlzdHMocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmxzdGF0KHBhdGgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgbmV3UGF0aCA9IHBhdGggKyAnXycgKyBicmFuY2gKKyAgICBzdWZmaXggPSAwCisgICAgd2hpbGUgbmV3UGF0aCBpbiBjdXJyZW50RmlsZVNldCBvciBcCisgICAgICAgICAgbmV3UGF0aCBpbiBjdXJyZW50RGlyZWN0b3J5U2V0ICBvciBcCisgICAgICAgICAgZmlsZUV4aXN0cyhuZXdQYXRoKToKKyAgICAgICAgc3VmZml4ICs9IDEKKyAgICAgICAgbmV3UGF0aCA9IHBhdGggKyAnXycgKyBicmFuY2ggKyAnXycgKyBzdHIoc3VmZml4KQorICAgIGN1cnJlbnRGaWxlU2V0LmFkZChuZXdQYXRoKQorICAgIHJldHVybiBuZXdQYXRoCisKKyMgQ2FjaGUgZW50cnkgbWFuYWdlbWVudAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIENhY2hlRW50cnk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBjbGFzcyBTdGFnZToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNoYTEgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5tb2RlID0gTm9uZQorCisgICAgICAgICAgICAjIFVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1vZGUgIT0gTm9uZToKKyAgICAgICAgICAgICAgICAgICAgbSA9ICcwJW8nICUgc2VsZi5tb2RlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbSA9ICdOb25lJworCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zaGExOgorICAgICAgICAgICAgICAgICAgICBzaGExID0gc2VsZi5zaGExCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2hhMSA9ICdOb25lJworICAgICAgICAgICAgICAgIHJldHVybiAnc2hhMTogJyArIHNoYTEgKyAnIG1vZGU6ICcgKyBtCisgICAgICAgIAorICAgICAgICBzZWxmLnN0YWdlcyA9IFtTdGFnZSgpLCBTdGFnZSgpLCBTdGFnZSgpLCBTdGFnZSgpXQorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYucHJvY2Vzc2VkID0gRmFsc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3BhdGg6ICcgKyBzZWxmLnBhdGggKyAnIHN0YWdlczogJyArIHJlcHIoW3N0cih4KSBmb3IgeCBpbiBzZWxmLnN0YWdlc10pCisKK2NsYXNzIENhY2hlRW50cnlDb250YWluZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmVudHJpZXMgPSB7fQorCisgICAgZGVmIGFkZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHNlbGYuZW50cmllc1tlbnRyeS5wYXRoXSA9IGVudHJ5CisKKyAgICBkZWYgZ2V0KHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnRyaWVzLmdldChwYXRoKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnRyaWVzLml0ZXJ2YWx1ZXMoKQorICAgIAordW5tZXJnZWRSRSA9IHJlLmNvbXBpbGUocideKFswLTddKykgKFswLTlhLWZdezQwfSkgKFsxLTNdKVx0KC4qKSQnLCByZS5TKQorZGVmIHVubWVyZ2VkQ2FjaGVFbnRyaWVzKCk6CisgICAgJycnQ3JlYXRlIGEgZGljdGlvbmFyeSBtYXBwaW5nIGZpbGUgbmFtZXMgdG8gQ2FjaGVFbnRyeQorICAgIG9iamVjdHMuIFRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IgZXZlcnkgcGF0aCB3aXRoIGEKKyAgICBub24temVybyBzdGFnZSBlbnRyeS4nJycKKworICAgIGxpbmVzID0gcnVuUHJvZ3JhbShbJ2dpdC1scy1maWxlcycsICcteicsICctLXVubWVyZ2VkJ10pLnNwbGl0KCdcMCcpCisgICAgbGluZXMucG9wKCkKKworICAgIHJlcyA9IENhY2hlRW50cnlDb250YWluZXIoKQorICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICBtID0gdW5tZXJnZWRSRS5tYXRjaChsKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbW9kZSA9IGludChtLmdyb3VwKDEpLCA4KQorICAgICAgICAgICAgc2hhMSA9IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIHN0YWdlID0gaW50KG0uZ3JvdXAoMykpCisgICAgICAgICAgICBwYXRoID0gbS5ncm91cCg0KQorCisgICAgICAgICAgICBlID0gcmVzLmdldChwYXRoKQorICAgICAgICAgICAgaWYgbm90IGU6CisgICAgICAgICAgICAgICAgZSA9IENhY2hlRW50cnkocGF0aCkKKyAgICAgICAgICAgICAgICByZXMuYWRkKGUpCisKKyAgICAgICAgICAgIGUuc3RhZ2VzW3N0YWdlXS5tb2RlID0gbW9kZQorICAgICAgICAgICAgZS5zdGFnZXNbc3RhZ2VdLnNoYTEgPSBzaGExCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaWUoJ0Vycm9yOiBNZXJnZSBwcm9ncmFtIGZhaWxlZDogVW5leHBlY3RlZCBvdXRwdXQgZnJvbScsCisgICAgICAgICAgICAgICAgJ2dpdC1scy1maWxlczonLCBsKQorICAgIHJldHVybiByZXMKKworbHNUcmVlUkUgPSByZS5jb21waWxlKHInXihbMC03XSspIChcUyspIChbMC05YS1mXXs0MH0pXHQoLiopXG4kJywgcmUuUykKK2RlZiBnZXRDYWNoZUVudHJ5KHBhdGgsIG9yaWdUcmVlLCBhVHJlZSwgYlRyZWUpOgorICAgICcnJ1JldHVybnMgYSBDYWNoZUVudHJ5IG9iamVjdCB3aGljaCBkb2Vzbid0IGhhdmUgdG8gY29ycmVzcG9uZCB0bworICAgIGEgcmVhbCBjYWNoZSBlbnRyeSBpbiBHaXQncyBpbmRleC4nJycKKyAgICAKKyAgICBkZWYgcGFyc2Uob3V0KToKKyAgICAgICAgaWYgb3V0ID09ICcnOgorICAgICAgICAgICAgcmV0dXJuIFtOb25lLCBOb25lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbSA9IGxzVHJlZVJFLm1hdGNoKG91dCkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGRpZSgnVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQtbHMtdHJlZTonLCBvdXQpCisgICAgICAgICAgICBlbGlmIG0uZ3JvdXAoMikgPT0gJ2Jsb2InOgorICAgICAgICAgICAgICAgIHJldHVybiBbbS5ncm91cCgzKSwgaW50KG0uZ3JvdXAoMSksIDgpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gW05vbmUsIE5vbmVdCisKKyAgICByZXMgPSBDYWNoZUVudHJ5KHBhdGgpCisKKyAgICBbb1NoYSwgb01vZGVdID0gcGFyc2UocnVuUHJvZ3JhbShbJ2dpdC1scy10cmVlJywgb3JpZ1RyZWUsICctLScsIHBhdGhdKSkKKyAgICBbYVNoYSwgYU1vZGVdID0gcGFyc2UocnVuUHJvZ3JhbShbJ2dpdC1scy10cmVlJywgYVRyZWUsICctLScsIHBhdGhdKSkKKyAgICBbYlNoYSwgYk1vZGVdID0gcGFyc2UocnVuUHJvZ3JhbShbJ2dpdC1scy10cmVlJywgYlRyZWUsICctLScsIHBhdGhdKSkKKworICAgIHJlcy5zdGFnZXNbMV0uc2hhMSA9IG9TaGEKKyAgICByZXMuc3RhZ2VzWzFdLm1vZGUgPSBvTW9kZQorICAgIHJlcy5zdGFnZXNbMl0uc2hhMSA9IGFTaGEKKyAgICByZXMuc3RhZ2VzWzJdLm1vZGUgPSBhTW9kZQorICAgIHJlcy5zdGFnZXNbM10uc2hhMSA9IGJTaGEKKyAgICByZXMuc3RhZ2VzWzNdLm1vZGUgPSBiTW9kZQorCisgICAgcmV0dXJuIHJlcworCisjIFJlbmFtZSBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFJlbmFtZUVudHJ5OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBzcmMsIHNyY1NoYSwgc3JjTW9kZSwgc3JjQ2FjaGVFbnRyeSwKKyAgICAgICAgICAgICAgICAgZHN0LCBkc3RTaGEsIGRzdE1vZGUsIGRzdENhY2hlRW50cnksCisgICAgICAgICAgICAgICAgIHNjb3JlKToKKyAgICAgICAgc2VsZi5zcmNOYW1lID0gc3JjCisgICAgICAgIHNlbGYuc3JjU2hhID0gc3JjU2hhCisgICAgICAgIHNlbGYuc3JjTW9kZSA9IHNyY01vZGUKKyAgICAgICAgc2VsZi5zcmNDYWNoZUVudHJ5ID0gc3JjQ2FjaGVFbnRyeQorICAgICAgICBzZWxmLmRzdE5hbWUgPSBkc3QKKyAgICAgICAgc2VsZi5kc3RTaGEgPSBkc3RTaGEKKyAgICAgICAgc2VsZi5kc3RNb2RlID0gZHN0TW9kZQorICAgICAgICBzZWxmLmRzdENhY2hlRW50cnkgPSBkc3RDYWNoZUVudHJ5CisgICAgICAgIHNlbGYuc2NvcmUgPSBzY29yZQorCisgICAgICAgIHNlbGYucHJvY2Vzc2VkID0gRmFsc2UKKworY2xhc3MgUmVuYW1lRW50cnlDb250YWluZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmVudHJpZXNTcmMgPSB7fQorICAgICAgICBzZWxmLmVudHJpZXNEc3QgPSB7fQorCisgICAgZGVmIGFkZChzZWxmLCBlbnRyeSk6CisgICAgICAgIHNlbGYuZW50cmllc1NyY1tlbnRyeS5zcmNOYW1lXSA9IGVudHJ5CisgICAgICAgIHNlbGYuZW50cmllc0RzdFtlbnRyeS5kc3ROYW1lXSA9IGVudHJ5CisKKyAgICBkZWYgZ2V0U3JjKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnRyaWVzU3JjLmdldChwYXRoKQorCisgICAgZGVmIGdldERzdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50cmllc0RzdC5nZXQocGF0aCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50cmllc1NyYy5pdGVydmFsdWVzKCkKKworcGFyc2VEaWZmUmVuYW1lc1JFID0gcmUuY29tcGlsZSgnXjooWzAtN10rKSAoWzAtN10rKSAoWzAtOWEtZl17NDB9KSAoWzAtOWEtZl17NDB9KSBSKFswLTldKikkJykKK2RlZiBnZXRSZW5hbWVzKHRyZWUsIG9UcmVlLCBhVHJlZSwgYlRyZWUsIGNhY2hlRW50cmllcyk6CisgICAgJycnR2V0IGluZm9ybWF0aW9uIG9mIGFsbCByZW5hbWVzIHdoaWNoIG9jY3VyZWQgYmV0d2VlbiAnb1RyZWUnIGFuZAorICAgICd0cmVlJy4gV2UgbmVlZCB0aGUgdGhyZWUgdHJlZXMgaW4gdGhlIG1lcmdlICgnb1RyZWUnLCAnYVRyZWUnIGFuZAorICAgICdiVHJlZScpIHRvIGJlIGFibGUgdG8gYXNzb2NpYXRlIHRoZSBjb3JyZWN0IGNhY2hlIGVudHJpZXMgd2l0aAorICAgIHRoZSByZW5hbWUgaW5mb3JtYXRpb24uICd0cmVlJyBpcyBhbHdheXMgZXF1YWwgdG8gZWl0aGVyIGFUcmVlIG9yIGJUcmVlLicnJworCisgICAgYXNzZXJ0KHRyZWUgPT0gYVRyZWUgb3IgdHJlZSA9PSBiVHJlZSkKKyAgICBpbnAgPSBydW5Qcm9ncmFtKFsnZ2l0LWRpZmYtdHJlZScsICctTScsICctLWRpZmYtZmlsdGVyPVInLCAnLXInLAorICAgICAgICAgICAgICAgICAgICAgICcteicsIG9UcmVlLCB0cmVlXSkKKworICAgIHJldCA9IFJlbmFtZUVudHJ5Q29udGFpbmVyKCkKKyAgICB0cnk6CisgICAgICAgIHJlY3MgPSBpbnAuc3BsaXQoIlwwIikKKyAgICAgICAgcmVjcy5wb3AoKSAjIHJlbW92ZSBsYXN0IGVudHJ5ICh3aGljaCBpcyAnJykKKyAgICAgICAgaXQgPSByZWNzLl9faXRlcl9fKCkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlYyA9IGl0Lm5leHQoKQorICAgICAgICAgICAgbSA9IHBhcnNlRGlmZlJlbmFtZXNSRS5tYXRjaChyZWMpCisKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGRpZSgnVW5leHBlY3RlZCBvdXRwdXQgZnJvbSBnaXQtZGlmZi10cmVlOicsIHJlYykKKworICAgICAgICAgICAgc3JjTW9kZSA9IGludChtLmdyb3VwKDEpLCA4KQorICAgICAgICAgICAgZHN0TW9kZSA9IGludChtLmdyb3VwKDIpLCA4KQorICAgICAgICAgICAgc3JjU2hhID0gbS5ncm91cCgzKQorICAgICAgICAgICAgZHN0U2hhID0gbS5ncm91cCg0KQorICAgICAgICAgICAgc2NvcmUgPSBtLmdyb3VwKDUpCisgICAgICAgICAgICBzcmMgPSBpdC5uZXh0KCkKKyAgICAgICAgICAgIGRzdCA9IGl0Lm5leHQoKQorCisgICAgICAgICAgICBzcmNDYWNoZUVudHJ5ID0gY2FjaGVFbnRyaWVzLmdldChzcmMpCisgICAgICAgICAgICBpZiBub3Qgc3JjQ2FjaGVFbnRyeToKKyAgICAgICAgICAgICAgICBzcmNDYWNoZUVudHJ5ID0gZ2V0Q2FjaGVFbnRyeShzcmMsIG9UcmVlLCBhVHJlZSwgYlRyZWUpCisgICAgICAgICAgICAgICAgY2FjaGVFbnRyaWVzLmFkZChzcmNDYWNoZUVudHJ5KQorCisgICAgICAgICAgICBkc3RDYWNoZUVudHJ5ID0gY2FjaGVFbnRyaWVzLmdldChkc3QpCisgICAgICAgICAgICBpZiBub3QgZHN0Q2FjaGVFbnRyeToKKyAgICAgICAgICAgICAgICBkc3RDYWNoZUVudHJ5ID0gZ2V0Q2FjaGVFbnRyeShkc3QsIG9UcmVlLCBhVHJlZSwgYlRyZWUpCisgICAgICAgICAgICAgICAgY2FjaGVFbnRyaWVzLmFkZChkc3RDYWNoZUVudHJ5KQorCisgICAgICAgICAgICByZXQuYWRkKFJlbmFtZUVudHJ5KHNyYywgc3JjU2hhLCBzcmNNb2RlLCBzcmNDYWNoZUVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QsIGRzdFNoYSwgZHN0TW9kZSwgZHN0Q2FjaGVFbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmUpKQorICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIHJldAorCitkZWYgZm10UmVuYW1lKHNyYywgZHN0KToKKyAgICBzcmNQYXRoID0gc3JjLnNwbGl0KCcvJykKKyAgICBkc3RQYXRoID0gZHN0LnNwbGl0KCcvJykKKyAgICBwYXRoID0gW10KKyAgICBlbmRJbmRleCA9IG1pbihsZW4oc3JjUGF0aCksIGxlbihkc3RQYXRoKSkgLSAxCisgICAgZm9yIHggaW4gcmFuZ2UoMCwgZW5kSW5kZXgpOgorICAgICAgICBpZiBzcmNQYXRoW3hdID09IGRzdFBhdGhbeF06CisgICAgICAgICAgICBwYXRoLmFwcGVuZChzcmNQYXRoW3hdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW5kSW5kZXggPSB4CisgICAgICAgICAgICBicmVhaworCisgICAgaWYgbGVuKHBhdGgpID4gMDoKKyAgICAgICAgcmV0dXJuICcvJy5qb2luKHBhdGgpICsgXAorICAgICAgICAgICAgICAgJy97JyArICcvJy5qb2luKHNyY1BhdGhbZW5kSW5kZXg6XSkgKyAnID0+ICcgKyBcCisgICAgICAgICAgICAgICAnLycuam9pbihkc3RQYXRoW2VuZEluZGV4Ol0pICsgJ30nCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHNyYyArICcgPT4gJyArIGRzdAorCitkZWYgcHJvY2Vzc1JlbmFtZXMocmVuYW1lc0EsIHJlbmFtZXNCLCBicmFuY2hOYW1lQSwgYnJhbmNoTmFtZUIpOgorICAgIHNyY05hbWVzID0gU2V0KCkKKyAgICBmb3IgeCBpbiByZW5hbWVzQToKKyAgICAgICAgc3JjTmFtZXMuYWRkKHguc3JjTmFtZSkKKyAgICBmb3IgeCBpbiByZW5hbWVzQjoKKyAgICAgICAgc3JjTmFtZXMuYWRkKHguc3JjTmFtZSkKKworICAgIGNsZWFuTWVyZ2UgPSBUcnVlCisgICAgZm9yIHBhdGggaW4gc3JjTmFtZXM6CisgICAgICAgIGlmIHJlbmFtZXNBLmdldFNyYyhwYXRoKToKKyAgICAgICAgICAgIHJlbmFtZXMxID0gcmVuYW1lc0EKKyAgICAgICAgICAgIHJlbmFtZXMyID0gcmVuYW1lc0IKKyAgICAgICAgICAgIGJyYW5jaE5hbWUxID0gYnJhbmNoTmFtZUEKKyAgICAgICAgICAgIGJyYW5jaE5hbWUyID0gYnJhbmNoTmFtZUIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlbmFtZXMxID0gcmVuYW1lc0IKKyAgICAgICAgICAgIHJlbmFtZXMyID0gcmVuYW1lc0EKKyAgICAgICAgICAgIGJyYW5jaE5hbWUxID0gYnJhbmNoTmFtZUIKKyAgICAgICAgICAgIGJyYW5jaE5hbWUyID0gYnJhbmNoTmFtZUEKKyAgICAgICAgCisgICAgICAgIHJlbjEgPSByZW5hbWVzMS5nZXRTcmMocGF0aCkKKyAgICAgICAgcmVuMiA9IHJlbmFtZXMyLmdldFNyYyhwYXRoKQorCisgICAgICAgIHJlbjEuZHN0Q2FjaGVFbnRyeS5wcm9jZXNzZWQgPSBUcnVlCisgICAgICAgIHJlbjEuc3JjQ2FjaGVFbnRyeS5wcm9jZXNzZWQgPSBUcnVlCisKKyAgICAgICAgaWYgcmVuMS5wcm9jZXNzZWQ6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJlbjEucHJvY2Vzc2VkID0gVHJ1ZQorICAgICAgICByZW1vdmVGaWxlKFRydWUsIHJlbjEuc3JjTmFtZSkKKyAgICAgICAgaWYgcmVuMjoKKyAgICAgICAgICAgICMgUmVuYW1lZCBpbiAxIGFuZCByZW5hbWVkIGluIDIKKyAgICAgICAgICAgIGFzc2VydChyZW4xLnNyY05hbWUgPT0gcmVuMi5zcmNOYW1lKQorICAgICAgICAgICAgcmVuMi5kc3RDYWNoZUVudHJ5LnByb2Nlc3NlZCA9IFRydWUKKyAgICAgICAgICAgIHJlbjIucHJvY2Vzc2VkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiByZW4xLmRzdE5hbWUgIT0gcmVuMi5kc3ROYW1lOgorICAgICAgICAgICAgICAgIHByaW50ICdDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZScsIFwKKyAgICAgICAgICAgICAgICAgICAgICBmbXRSZW5hbWUocGF0aCwgcmVuMS5kc3ROYW1lKSwgJ2luIGJyYW5jaCcsIGJyYW5jaE5hbWUxLCBcCisgICAgICAgICAgICAgICAgICAgICAgJ3JlbmFtZScsIGZtdFJlbmFtZShwYXRoLCByZW4yLmRzdE5hbWUpLCAnaW4nLCBicmFuY2hOYW1lMgorICAgICAgICAgICAgICAgIGNsZWFuTWVyZ2UgPSBGYWxzZQorCisgICAgICAgICAgICAgICAgaWYgcmVuMS5kc3ROYW1lIGluIGN1cnJlbnREaXJlY3RvcnlTZXQ6CisgICAgICAgICAgICAgICAgICAgIGRzdE5hbWUxID0gdW5pcXVlUGF0aChyZW4xLmRzdE5hbWUsIGJyYW5jaE5hbWUxKQorICAgICAgICAgICAgICAgICAgICBwcmludCByZW4xLmRzdE5hbWUsICdpcyBhIGRpcmVjdG9yeSBpbicsIGJyYW5jaE5hbWUyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRpbmcgYXMnLCBkc3ROYW1lMSwgJ2luc3RlYWQuJworICAgICAgICAgICAgICAgICAgICByZW1vdmVGaWxlKEZhbHNlLCByZW4xLmRzdE5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZHN0TmFtZTEgPSByZW4xLmRzdE5hbWUKKworICAgICAgICAgICAgICAgIGlmIHJlbjIuZHN0TmFtZSBpbiBjdXJyZW50RGlyZWN0b3J5U2V0OgorICAgICAgICAgICAgICAgICAgICBkc3ROYW1lMiA9IHVuaXF1ZVBhdGgocmVuMi5kc3ROYW1lLCBicmFuY2hOYW1lMikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgcmVuMi5kc3ROYW1lLCAnaXMgYSBkaXJlY3RvcnkgaW4nLCBicmFuY2hOYW1lMSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkaW5nIGFzJywgZHN0TmFtZTIsICdpbnN0ZWFkLicKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRmlsZShGYWxzZSwgcmVuMi5kc3ROYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRzdE5hbWUyID0gcmVuMS5kc3ROYW1lCisKKyAgICAgICAgICAgICAgICB1cGRhdGVGaWxlKEZhbHNlLCByZW4xLmRzdFNoYSwgcmVuMS5kc3RNb2RlLCBkc3ROYW1lMSkKKyAgICAgICAgICAgICAgICB1cGRhdGVGaWxlKEZhbHNlLCByZW4yLmRzdFNoYSwgcmVuMi5kc3RNb2RlLCBkc3ROYW1lMikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1JlbmFtaW5nJywgZm10UmVuYW1lKHBhdGgsIHJlbjEuZHN0TmFtZSkKKyAgICAgICAgICAgICAgICBbcmVzU2hhLCByZXNNb2RlLCBjbGVhbiwgbWVyZ2VdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlRmlsZShyZW4xLnNyY05hbWUsIHJlbjEuc3JjU2hhLCByZW4xLnNyY01vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbjEuZHN0TmFtZSwgcmVuMS5kc3RTaGEsIHJlbjEuZHN0TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuMi5kc3ROYW1lLCByZW4yLmRzdFNoYSwgcmVuMi5kc3RNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hOYW1lMSwgYnJhbmNoTmFtZTIpCisKKyAgICAgICAgICAgICAgICBpZiBtZXJnZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0F1dG8tbWVyZ2luZycsIHJlbjEuZHN0TmFtZQorCisgICAgICAgICAgICAgICAgaWYgbm90IGNsZWFuOgorICAgICAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKGNvbnRlbnQpOiBtZXJnZSBjb25mbGljdCBpbicsIHJlbjEuZHN0TmFtZQorICAgICAgICAgICAgICAgICAgICBjbGVhbk1lcmdlID0gRmFsc2UKKworICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2FjaGVPbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmlsZUV4dChyZW4xLmRzdFNoYSwgcmVuMS5kc3RNb2RlLCByZW4xLmRzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhY2hlPVRydWUsIHVwZGF0ZVdkPUZhbHNlKQorICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGUoY2xlYW4sIHJlc1NoYSwgcmVzTW9kZSwgcmVuMS5kc3ROYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZW5hbWVkIGluIDEsIG1heWJlIGNoYW5nZWQgaW4gMgorICAgICAgICAgICAgaWYgcmVuYW1lc0EgPT0gcmVuYW1lczE6CisgICAgICAgICAgICAgICAgc3RhZ2UgPSAzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YWdlID0gMgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3JjU2hhT3RoZXJCcmFuY2ggID0gcmVuMS5zcmNDYWNoZUVudHJ5LnN0YWdlc1tzdGFnZV0uc2hhMQorICAgICAgICAgICAgc3JjTW9kZU90aGVyQnJhbmNoID0gcmVuMS5zcmNDYWNoZUVudHJ5LnN0YWdlc1tzdGFnZV0ubW9kZQorCisgICAgICAgICAgICBkc3RTaGFPdGhlckJyYW5jaCAgPSByZW4xLmRzdENhY2hlRW50cnkuc3RhZ2VzW3N0YWdlXS5zaGExCisgICAgICAgICAgICBkc3RNb2RlT3RoZXJCcmFuY2ggPSByZW4xLmRzdENhY2hlRW50cnkuc3RhZ2VzW3N0YWdlXS5tb2RlCisKKyAgICAgICAgICAgIHRyeU1lcmdlID0gRmFsc2UKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcmVuMS5kc3ROYW1lIGluIGN1cnJlbnREaXJlY3RvcnlTZXQ6CisgICAgICAgICAgICAgICAgbmV3UGF0aCA9IHVuaXF1ZVBhdGgocmVuMS5kc3ROYW1lLCBicmFuY2hOYW1lMSkKKyAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKHJlbmFtZS9kaXJlY3RvcnkpOiBSZW5hbWUnLCBcCisgICAgICAgICAgICAgICAgICAgICAgZm10UmVuYW1lKHJlbjEuc3JjTmFtZSwgcmVuMS5kc3ROYW1lKSwgJ2luJywgYnJhbmNoTmFtZTEsXAorICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnknLCByZW4xLmRzdE5hbWUsICdhZGRlZCBpbicsIGJyYW5jaE5hbWUyCisgICAgICAgICAgICAgICAgcHJpbnQgJ1JlbmFtaW5nJywgcmVuMS5zcmNOYW1lLCAndG8nLCBuZXdQYXRoLCAnaW5zdGVhZCcKKyAgICAgICAgICAgICAgICBjbGVhbk1lcmdlID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZW1vdmVGaWxlKEZhbHNlLCByZW4xLmRzdE5hbWUpCisgICAgICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgcmVuMS5kc3RTaGEsIHJlbjEuZHN0TW9kZSwgbmV3UGF0aCkKKyAgICAgICAgICAgIGVsaWYgc3JjU2hhT3RoZXJCcmFuY2ggPT0gTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKHJlbmFtZS9kZWxldGUpOiBSZW5hbWUnLCBcCisgICAgICAgICAgICAgICAgICAgICAgZm10UmVuYW1lKHJlbjEuc3JjTmFtZSwgcmVuMS5kc3ROYW1lKSwgJ2luJywgXAorICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaE5hbWUxLCAnYW5kIGRlbGV0ZWQgaW4nLCBicmFuY2hOYW1lMgorICAgICAgICAgICAgICAgIGNsZWFuTWVyZ2UgPSBGYWxzZQorICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGUoRmFsc2UsIHJlbjEuZHN0U2hhLCByZW4xLmRzdE1vZGUsIHJlbjEuZHN0TmFtZSkKKyAgICAgICAgICAgIGVsaWYgZHN0U2hhT3RoZXJCcmFuY2g6CisgICAgICAgICAgICAgICAgbmV3UGF0aCA9IHVuaXF1ZVBhdGgocmVuMS5kc3ROYW1lLCBicmFuY2hOYW1lMikKKyAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUnLCBcCisgICAgICAgICAgICAgICAgICAgICAgZm10UmVuYW1lKHJlbjEuc3JjTmFtZSwgcmVuMS5kc3ROYW1lKSwgJ2luJywgXAorICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaE5hbWUxICsgJy4nLCByZW4xLmRzdE5hbWUsICdhZGRlZCBpbicsIGJyYW5jaE5hbWUyCisgICAgICAgICAgICAgICAgcHJpbnQgJ0FkZGluZyBhcycsIG5ld1BhdGgsICdpbnN0ZWFkJworICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGUoRmFsc2UsIGRzdFNoYU90aGVyQnJhbmNoLCBkc3RNb2RlT3RoZXJCcmFuY2gsIG5ld1BhdGgpCisgICAgICAgICAgICAgICAgY2xlYW5NZXJnZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgdHJ5TWVyZ2UgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHJlbmFtZXMyLmdldERzdChyZW4xLmRzdE5hbWUpOgorICAgICAgICAgICAgICAgIGRzdDIgPSByZW5hbWVzMi5nZXREc3QocmVuMS5kc3ROYW1lKQorICAgICAgICAgICAgICAgIG5ld1BhdGgxID0gdW5pcXVlUGF0aChyZW4xLmRzdE5hbWUsIGJyYW5jaE5hbWUxKQorICAgICAgICAgICAgICAgIG5ld1BhdGgyID0gdW5pcXVlUGF0aChkc3QyLmRzdE5hbWUsIGJyYW5jaE5hbWUyKQorICAgICAgICAgICAgICAgIHByaW50ICdDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZScsIFwKKyAgICAgICAgICAgICAgICAgICAgICBmbXRSZW5hbWUocmVuMS5zcmNOYW1lLCByZW4xLmRzdE5hbWUpLCAnaW4nLCBcCisgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoTmFtZTErJy4gUmVuYW1lJywgXAorICAgICAgICAgICAgICAgICAgICAgIGZtdFJlbmFtZShkc3QyLnNyY05hbWUsIGRzdDIuZHN0TmFtZSksICdpbicsIGJyYW5jaE5hbWUyCisgICAgICAgICAgICAgICAgcHJpbnQgJ1JlbmFtaW5nJywgcmVuMS5zcmNOYW1lLCAndG8nLCBuZXdQYXRoMSwgJ2FuZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICBkc3QyLnNyY05hbWUsICd0bycsIG5ld1BhdGgyLCAnaW5zdGVhZCcKKyAgICAgICAgICAgICAgICByZW1vdmVGaWxlKEZhbHNlLCByZW4xLmRzdE5hbWUpCisgICAgICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgcmVuMS5kc3RTaGEsIHJlbjEuZHN0TW9kZSwgbmV3UGF0aDEpCisgICAgICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgZHN0Mi5kc3RTaGEsIGRzdDIuZHN0TW9kZSwgbmV3UGF0aDIpCisgICAgICAgICAgICAgICAgZHN0Mi5wcm9jZXNzZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xlYW5NZXJnZSA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeU1lcmdlID0gVHJ1ZQorCisgICAgICAgICAgICBpZiB0cnlNZXJnZToKKyAgICAgICAgICAgICAgICBwcmludCAnUmVuYW1pbmcnLCBmbXRSZW5hbWUocmVuMS5zcmNOYW1lLCByZW4xLmRzdE5hbWUpCisgICAgICAgICAgICAgICAgW3Jlc1NoYSwgcmVzTW9kZSwgY2xlYW4sIG1lcmdlXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUZpbGUocmVuMS5zcmNOYW1lLCByZW4xLnNyY1NoYSwgcmVuMS5zcmNNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW4xLmRzdE5hbWUsIHJlbjEuZHN0U2hhLCByZW4xLmRzdE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbjEuc3JjTmFtZSwgc3JjU2hhT3RoZXJCcmFuY2gsIHNyY01vZGVPdGhlckJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoTmFtZTEsIGJyYW5jaE5hbWUyKQorCisgICAgICAgICAgICAgICAgaWYgbWVyZ2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICdBdXRvLW1lcmdpbmcnLCByZW4xLmRzdE5hbWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBjbGVhbjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ0NPTkZMSUNUIChyZW5hbWUvbW9kaWZ5KTogTWVyZ2UgY29uZmxpY3QgaW4nLCByZW4xLmRzdE5hbWUKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5NZXJnZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNhY2hlT25seToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGVFeHQocmVuMS5kc3RTaGEsIHJlbjEuZHN0TW9kZSwgcmVuMS5kc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDYWNoZT1UcnVlLCB1cGRhdGVXZD1GYWxzZSkKKyAgICAgICAgICAgICAgICB1cGRhdGVGaWxlKGNsZWFuLCByZXNTaGEsIHJlc01vZGUsIHJlbjEuZHN0TmFtZSkKKworICAgIHJldHVybiBjbGVhbk1lcmdlCisKKyMgUGVyIGVudHJ5IG1lcmdlIGZ1bmN0aW9uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgcHJvY2Vzc0VudHJ5KGVudHJ5LCBicmFuY2gxTmFtZSwgYnJhbmNoMk5hbWUpOgorICAgICcnJ01lcmdlIG9uZSBjYWNoZSBlbnRyeS4nJycKKworICAgIGRlYnVnKCdwcm9jZXNzaW5nJywgZW50cnkucGF0aCwgJ2NsZWFuIGNhY2hlOicsIGNhY2hlT25seSkKIAogICAgIGNsZWFuTWVyZ2UgPSBUcnVlCiAKICAgICBwYXRoID0gZW50cnkucGF0aAotICAgIG9TaGEgPSBlbnRyeS5zdGFnZXNbMF0uc2hhMQotICAgIG9Nb2RlID0gZW50cnkuc3RhZ2VzWzBdLm1vZGUKLSAgICBhU2hhID0gZW50cnkuc3RhZ2VzWzFdLnNoYTEKLSAgICBhTW9kZSA9IGVudHJ5LnN0YWdlc1sxXS5tb2RlCi0gICAgYlNoYSA9IGVudHJ5LnN0YWdlc1syXS5zaGExCi0gICAgYk1vZGUgPSBlbnRyeS5zdGFnZXNbMl0ubW9kZQorICAgIG9TaGEgPSBlbnRyeS5zdGFnZXNbMV0uc2hhMQorICAgIG9Nb2RlID0gZW50cnkuc3RhZ2VzWzFdLm1vZGUKKyAgICBhU2hhID0gZW50cnkuc3RhZ2VzWzJdLnNoYTEKKyAgICBhTW9kZSA9IGVudHJ5LnN0YWdlc1syXS5tb2RlCisgICAgYlNoYSA9IGVudHJ5LnN0YWdlc1szXS5zaGExCisgICAgYk1vZGUgPSBlbnRyeS5zdGFnZXNbM10ubW9kZQogCiAgICAgYXNzZXJ0KG9TaGEgPT0gTm9uZSBvciBpc1NoYShvU2hhKSkKICAgICBhc3NlcnQoYVNoYSA9PSBOb25lIG9yIGlzU2hhKGFTaGEpKQpAQCAtMjcyLDI4ICs3MDksMjYgQEAKICAgICAgICAgICAgKG5vdCBhU2hhICAgICBhbmQgYlNoYSA9PSBvU2hhKToKICAgICAjIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQgdW5jaGFuZ2VkIGluIHRoZSBvdGhlcgogICAgICAgICAgICAgaWYgYVNoYToKLSAgICAgICAgICAgICAgICBwcmludCAnUmVtb3ZpbmcgJyArIHBhdGgKKyAgICAgICAgICAgICAgICBwcmludCAnUmVtb3ZpbmcnLCBwYXRoCiAgICAgICAgICAgICByZW1vdmVGaWxlKFRydWUsIHBhdGgpCiAgICAgICAgIGVsc2U6CiAgICAgIyBEZWxldGVkIGluIG9uZSBhbmQgY2hhbmdlZCBpbiB0aGUgb3RoZXIKICAgICAgICAgICAgIGNsZWFuTWVyZ2UgPSBGYWxzZQogICAgICAgICAgICAgaWYgbm90IGFTaGE6Ci0gICAgICAgICAgICAgICAgcHJpbnQgJ0NPTkZMSUNUIChkZWwvbW9kKTogIicgKyBwYXRoICsgJyIgZGVsZXRlZCBpbicsIFwKLSAgICAgICAgICAgICAgICAgICAgICBicmFuY2gxTmFtZSwgJ2FuZCBtb2RpZmllZCBpbicsIGJyYW5jaDJOYW1lLCBcCi0gICAgICAgICAgICAgICAgICAgICAgJy4gVmVyc2lvbicsIGJyYW5jaDJOYW1lLCAnIG9mICInICsgcGF0aCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAnIiBsZWZ0IGluIHRyZWUnCisgICAgICAgICAgICAgICAgcHJpbnQgJ0NPTkZMSUNUIChkZWxldGUvbW9kaWZ5KTonLCBwYXRoLCAnZGVsZXRlZCBpbicsIFwKKyAgICAgICAgICAgICAgICAgICAgICBicmFuY2gxTmFtZSwgJ2FuZCBtb2RpZmllZCBpbicsIGJyYW5jaDJOYW1lICsgJy4nLCBcCisgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnNpb24nLCBicmFuY2gyTmFtZSwgJ29mJywgcGF0aCwgJ2xlZnQgaW4gdHJlZS4nCiAgICAgICAgICAgICAgICAgbW9kZSA9IGJNb2RlCiAgICAgICAgICAgICAgICAgc2hhID0gYlNoYQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKG1vZC9kZWwpOiAiJyArIHBhdGggKyAnIiBkZWxldGVkIGluJywgXAotICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDJOYW1lLCAnYW5kIG1vZGlmaWVkIGluJywgYnJhbmNoMU5hbWUgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgJy4gVmVyc2lvbicsIGJyYW5jaDFOYW1lLCAnb2YgIicgKyBwYXRoICsgXAotICAgICAgICAgICAgICAgICAgICAgICciIGxlZnQgaW4gdHJlZScKKyAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKG1vZGlmeS9kZWxldGUpOicsIHBhdGgsICdkZWxldGVkIGluJywgXAorICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDJOYW1lLCAnYW5kIG1vZGlmaWVkIGluJywgYnJhbmNoMU5hbWUgKyAnLicsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbicsIGJyYW5jaDFOYW1lLCAnb2YnLCBwYXRoLCAnbGVmdCBpbiB0cmVlLicKICAgICAgICAgICAgICAgICBtb2RlID0gYU1vZGUKICAgICAgICAgICAgICAgICBzaGEgPSBhU2hhCiAKICAgICAgICAgICAgIHVwZGF0ZUZpbGUoRmFsc2UsIHNoYSwgbW9kZSwgcGF0aCkKLSAgICAKKwogICAgIGVsaWYgKG5vdCBvU2hhIGFuZCBhU2hhICAgICBhbmQgbm90IGJTaGEpIG9yIFwKICAgICAgICAgIChub3Qgb1NoYSBhbmQgbm90IGFTaGEgYW5kIGJTaGEpOgogICAgICMKQEAgLTMwNCwyNyArNzM5LDI2IEBACiAgICAgICAgICAgICBvdGhlckJyYW5jaCA9IGJyYW5jaDJOYW1lCiAgICAgICAgICAgICBtb2RlID0gYU1vZGUKICAgICAgICAgICAgIHNoYSA9IGFTaGEKLSAgICAgICAgICAgIGNvbmYgPSAnZmlsZS9kaXInCisgICAgICAgICAgICBjb25mID0gJ2ZpbGUvZGlyZWN0b3J5JwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYWRkQnJhbmNoID0gYnJhbmNoMk5hbWUKICAgICAgICAgICAgIG90aGVyQnJhbmNoID0gYnJhbmNoMU5hbWUKICAgICAgICAgICAgIG1vZGUgPSBiTW9kZQogICAgICAgICAgICAgc2hhID0gYlNoYQotICAgICAgICAgICAgY29uZiA9ICdkaXIvZmlsZScKKyAgICAgICAgICAgIGNvbmYgPSAnZGlyZWN0b3J5L2ZpbGUnCiAgICAgCi0gICAgICAgIGlmIHBhdGggaW4gZGlyczoKKyAgICAgICAgaWYgcGF0aCBpbiBjdXJyZW50RGlyZWN0b3J5U2V0OgogICAgICAgICAgICAgY2xlYW5NZXJnZSA9IEZhbHNlCiAgICAgICAgICAgICBuZXdQYXRoID0gdW5pcXVlUGF0aChwYXRoLCBhZGRCcmFuY2gpCi0gICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKCcgKyBjb25mICsgXAotICAgICAgICAgICAgICAgICAgJyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAiJyArIHBhdGggKyAnIiBpbicsIFwKLSAgICAgICAgICAgICAgICAgIG90aGVyQnJhbmNoICsgJy4gQWRkaW5nICInICsgcGF0aCArICciIGFzICInICsgbmV3UGF0aCArICciJworICAgICAgICAgICAgcHJpbnQgJ0NPTkZMSUNUICgnICsgY29uZiArICcpOicsIFwKKyAgICAgICAgICAgICAgICAgICdUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUnLCBwYXRoLCAnaW4nLCBcCisgICAgICAgICAgICAgICAgICBvdGhlckJyYW5jaCArICcuIEFkZGluZycsIHBhdGgsICdhcycsIG5ld1BhdGgKIAogICAgICAgICAgICAgcmVtb3ZlRmlsZShGYWxzZSwgcGF0aCkKLSAgICAgICAgICAgIHBhdGggPSBuZXdQYXRoCisgICAgICAgICAgICB1cGRhdGVGaWxlKEZhbHNlLCBzaGEsIG1vZGUsIG5ld1BhdGgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAnQWRkaW5nICInICsgcGF0aCArICciJwotCi0gICAgICAgIHVwZGF0ZUZpbGUoVHJ1ZSwgc2hhLCBtb2RlLCBwYXRoKQorICAgICAgICAgICAgcHJpbnQgJ0FkZGluZycsIHBhdGgKKyAgICAgICAgICAgIHVwZGF0ZUZpbGUoVHJ1ZSwgc2hhLCBtb2RlLCBwYXRoKQogICAgIAogICAgIGVsaWYgbm90IG9TaGEgYW5kIGFTaGEgYW5kIGJTaGE6CiAgICAgIwpAQCAtMzMzLDEwICs3NjcsOSBAQAogICAgICAgICBpZiBhU2hhID09IGJTaGE6CiAgICAgICAgICAgICBpZiBhTW9kZSAhPSBiTW9kZToKICAgICAgICAgICAgICAgICBjbGVhbk1lcmdlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1Q6IEZpbGUgIicgKyBwYXRoICsgXAotICAgICAgICAgICAgICAgICAgICAgICciIGFkZGVkIGlkZW50aWNhbGx5IGluIGJvdGggYnJhbmNoZXMsJywgXAotICAgICAgICAgICAgICAgICAgICAgICdidXQgcGVybWlzc2lvbnMgY29uZmxpY3QnLCAnMCVvJyAlIGFNb2RlLCAnLT4nLCBcCi0gICAgICAgICAgICAgICAgICAgICAgJzAlbycgJSBiTW9kZQorICAgICAgICAgICAgICAgIHByaW50ICdDT05GTElDVDogRmlsZScsIHBhdGgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQgaWRlbnRpY2FsbHkgaW4gYm90aCBicmFuY2hlcywgYnV0IHBlcm1pc3Npb25zJywgXAorICAgICAgICAgICAgICAgICAgICAgICdjb25mbGljdCcsICcwJW8nICUgYU1vZGUsICctPicsICcwJW8nICUgYk1vZGUKICAgICAgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1Q6IGFkZGluZyB3aXRoIHBlcm1pc3Npb246JywgJzAlbycgJSBhTW9kZQogCiAgICAgICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgYVNoYSwgYU1vZGUsIHBhdGgpCkBAIC0zNDcsOCArNzgwLDkgQEAKICAgICAgICAgICAgIGNsZWFuTWVyZ2UgPSBGYWxzZQogICAgICAgICAgICAgbmV3UGF0aDEgPSB1bmlxdWVQYXRoKHBhdGgsIGJyYW5jaDFOYW1lKQogICAgICAgICAgICAgbmV3UGF0aDIgPSB1bmlxdWVQYXRoKHBhdGgsIGJyYW5jaDJOYW1lKQotICAgICAgICAgICAgcHJpbnQgJ0NPTkZMSUNUIChhZGQvYWRkKTogRmlsZSAiJyArIHBhdGggKyBcCi0gICAgICAgICAgICAgICAgICAnIiBhZGRlZCBub24taWRlbnRpY2FsbHkgaW4gYm90aCBicmFuY2hlcy4nCisgICAgICAgICAgICBwcmludCAnQ09ORkxJQ1QgKGFkZC9hZGQpOiBGaWxlJywgcGF0aCwgXAorICAgICAgICAgICAgICAgICAgJ2FkZGVkIG5vbi1pZGVudGljYWxseSBpbiBib3RoIGJyYW5jaGVzLiBBZGRpbmcgYXMnLCBcCisgICAgICAgICAgICAgICAgICBuZXdQYXRoMSwgJ2FuZCcsIG5ld1BhdGgyLCAnaW5zdGVhZC4nCiAgICAgICAgICAgICByZW1vdmVGaWxlKEZhbHNlLCBwYXRoKQogICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgYVNoYSwgYU1vZGUsIG5ld1BhdGgxKQogICAgICAgICAgICAgdXBkYXRlRmlsZShGYWxzZSwgYlNoYSwgYk1vZGUsIG5ld1BhdGgyKQpAQCAtMzU3LDM5ICs3OTEsMjQgQEAKICAgICAjCiAgICAgIyBjYXNlIEQ6IE1vZGlmaWVkIGluIGJvdGgsIGJ1dCBkaWZmZXJlbnRseS4KICAgICAjCi0gICAgICAgIHByaW50ICdBdXRvLW1lcmdpbmcnLCBwYXRoIAotICAgICAgICBvcmlnID0gcnVuUHJvZ3JhbShbJ2dpdC11bnBhY2stZmlsZScsIG9TaGFdKS5yc3RyaXAoKQotICAgICAgICBzcmMxID0gcnVuUHJvZ3JhbShbJ2dpdC11bnBhY2stZmlsZScsIGFTaGFdKS5yc3RyaXAoKQotICAgICAgICBzcmMyID0gcnVuUHJvZ3JhbShbJ2dpdC11bnBhY2stZmlsZScsIGJTaGFdKS5yc3RyaXAoKQotICAgICAgICBbb3V0LCByZXRdID0gcnVuUHJvZ3JhbShbJ21lcmdlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctTCcsIGJyYW5jaDFOYW1lICsgJy8nICsgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctTCcsICdvcmlnLycgKyBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1MJywgYnJhbmNoMk5hbWUgKyAnLycgKyBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSwgb3JpZywgc3JjMl0sIHJldHVybkNvZGU9VHJ1ZSkKLQotICAgICAgICBpZiBhTW9kZSA9PSBvTW9kZToKLSAgICAgICAgICAgIG1vZGUgPSBiTW9kZQorICAgICAgICBwcmludCAnQXV0by1tZXJnaW5nJywgcGF0aAorICAgICAgICBbc2hhLCBtb2RlLCBjbGVhbiwgZHVtbXldID0gXAorICAgICAgICAgICAgICBtZXJnZUZpbGUocGF0aCwgb1NoYSwgb01vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCBhU2hhLCBhTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIGJTaGEsIGJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMU5hbWUsIGJyYW5jaDJOYW1lKQorICAgICAgICBpZiBjbGVhbjoKKyAgICAgICAgICAgIHVwZGF0ZUZpbGUoVHJ1ZSwgc2hhLCBtb2RlLCBwYXRoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kZSA9IGFNb2RlCi0KLSAgICAgICAgc2hhID0gcnVuUHJvZ3JhbShbJ2dpdC1oYXNoLW9iamVjdCcsICctdCcsICdibG9iJywgJy13JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMV0pLnJzdHJpcCgpCi0KLSAgICAgICAgaWYgcmV0ICE9IDA6CiAgICAgICAgICAgICBjbGVhbk1lcmdlID0gRmFsc2UKLSAgICAgICAgICAgIHByaW50ICdDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluICInICsgcGF0aCArICciLicKKyAgICAgICAgICAgIHByaW50ICdDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluJywgcGF0aAogCi0gICAgICAgICAgICBpZiBjbGVhbkNhY2hlOgorICAgICAgICAgICAgaWYgY2FjaGVPbmx5OgogICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGUoRmFsc2UsIHNoYSwgbW9kZSwgcGF0aCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdXBkYXRlRmlsZShUcnVlLCBhU2hhLCBhTW9kZSwgcGF0aCkKLSAgICAgICAgICAgICAgICB1cGRhdGVGaWxlKEZhbHNlLCBzaGEsIG1vZGUsIHBhdGgsIFRydWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1cGRhdGVGaWxlKFRydWUsIHNoYSwgbW9kZSwgcGF0aCkKLQotICAgICAgICBvcy51bmxpbmsob3JpZykKLSAgICAgICAgb3MudW5saW5rKHNyYzEpCi0gICAgICAgIG9zLnVubGluayhzcmMyKQorICAgICAgICAgICAgICAgIHVwZGF0ZUZpbGVFeHQoYVNoYSwgYU1vZGUsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDYWNoZT1UcnVlLCB1cGRhdGVXZD1GYWxzZSkKKyAgICAgICAgICAgICAgICB1cGRhdGVGaWxlRXh0KHNoYSwgbW9kZSwgcGF0aCwgdXBkYXRlQ2FjaGU9RmFsc2UsIHVwZGF0ZVdkPVRydWUpCiAgICAgZWxzZToKICAgICAgICAgZGllKCJFUlJPUjogRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iKQogCkBAIC00MTMsNyArODMyLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaDEgPSBmaXJzdEJyYW5jaCA9IHN5cy5hcmd2W25leHRBcmcgKyAxXQogICAgICAgICAgICAgaDIgPSBzZWNvbmRCcmFuY2ggPSBzeXMuYXJndltuZXh0QXJnICsgMl0KLQlleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICB1c2FnZSgpCiAgICAgICAgIGJyZWFrCiAKQEAgLTQyNSwxMyArODQ0LDE2IEBACiAKICAgICBncmFwaCA9IGJ1aWxkR3JhcGgoW2gxLCBoMl0pCiAKLSAgICBbcmVzLCBjbGVhbl0gPSBtZXJnZShncmFwaC5zaGFNYXBbaDFdLCBncmFwaC5zaGFNYXBbaDJdLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QnJhbmNoLCBzZWNvbmRCcmFuY2gsIGdyYXBoKQorICAgIFtkdW1teSwgY2xlYW5dID0gbWVyZ2UoZ3JhcGguc2hhTWFwW2gxXSwgZ3JhcGguc2hhTWFwW2gyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0QnJhbmNoLCBzZWNvbmRCcmFuY2gsIGdyYXBoKQogCiAgICAgcHJpbnQgJycKIGV4Y2VwdDoKLSAgICB0cmFjZWJhY2sucHJpbnRfZXhjKE5vbmUsIHN5cy5zdGRlcnIpCi0gICAgc3lzLmV4aXQoMikKKyAgICBpZiBpc2luc3RhbmNlKHN5cy5leGNfaW5mbygpWzFdLCBTeXN0ZW1FeGl0KToKKyAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgIHN5cy5leGl0KDIpCiAKIGlmIGNsZWFuOgogICAgIHN5cy5leGl0KDApCmRpZmYgLS1naXQgYS9naXQtbWVyZ2UtcmVzb2x2ZS5zaCBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCmluZGV4IGUzYjA0YTAuLjk2NmU4MWYgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS1yZXNvbHZlLnNoCisrKyBiL2dpdC1tZXJnZS1yZXNvbHZlLnNoCkBAIC0zMSw2ICszMSwxMiBAQAogCWV4aXQgMiA7OwogZXNhYwogCisjIEdpdmUgdXAgaWYgdGhpcyBpcyBhIGJhc2VsZXNzIG1lcmdlLgoraWYgdGVzdCAnJyA9ICIkYmFzZXMiCit0aGVuCisJZXhpdCAyCitmaQorCiBnaXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAogZ2l0LXJlYWQtdHJlZSAtdSAtbSAkYmFzZXMgJGhlYWQgJHJlbW90ZXMgfHwgZXhpdCAyCiBlY2hvICJUcnlpbmcgc2ltcGxlIG1lcmdlLiIKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS5zaCBiL2dpdC1tZXJnZS5zaAppbmRleCA4MThlNmI3Li5iODEwZmNlIDEwMDc1NQotLS0gYS9naXQtbWVyZ2Uuc2gKKysrIGIvZ2l0LW1lcmdlLnNoCkBAIC05LDIzICs5LDQ5IEBACiAnCiAKIHVzYWdlICgpIHsKLSAgICBkaWUgImdpdC1tZXJnZSBbLW5dIFstcyA8c3RyYXRlZ3k+XS4uLiA8bWVyZ2UtbWVzc2FnZT4gPGhlYWQ+IDxyZW1vdGU+KyIKKyAgICBkaWUgImdpdC1tZXJnZSBbLW5dIFstLW5vLWNvbW1pdF0gWy1zIDxzdHJhdGVneT5dLi4uIDxtZXJnZS1tZXNzYWdlPiA8aGVhZD4gPHJlbW90ZT4rIgogfQogCiAjIGFsbF9zdHJhdGVnaWVzPSdyZXNvbHZlIHJlY3Vyc2l2ZSBzdHVwaWQgb2N0b3B1cycKIAotYWxsX3N0cmF0ZWdpZXM9J3JlY3Vyc2l2ZSBvY3RvcHVzIHJlc29sdmUgc3R1cGlkJworYWxsX3N0cmF0ZWdpZXM9J3JlY3Vyc2l2ZSBvY3RvcHVzIHJlc29sdmUgc3R1cGlkIG91cnMnCiBkZWZhdWx0X3N0cmF0ZWdpZXM9J3Jlc29sdmUgb2N0b3B1cycKIHVzZV9zdHJhdGVnaWVzPQogCi1kcm9waGVhZHMoKSB7Ci0Jcm0gLWYgLS0gIiRHSVRfRElSL01FUkdFX0hFQUQiIHx8IGV4aXQgMQorZHJvcHNhdmUoKSB7CisJcm0gLWYgLS0gIiRHSVRfRElSL01FUkdFX0hFQUQiICIkR0lUX0RJUi9NRVJHRV9NU0ciIFwKKwkJICIkR0lUX0RJUi9NRVJHRV9TQVZFIiB8fCBleGl0IDEKIH0KIAotc3VtbWFyeSgpIHsKK3NhdmVzdGF0ZSgpIHsKKwkjIFN0YXNoIGF3YXkgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMuCisJZ2l0LWRpZmYtaW5kZXggLXogLS1uYW1lLW9ubHkgJGhlYWQgfAorCWNwaW8gLTAgLW8gPiIkR0lUX0RJUi9NRVJHRV9TQVZFIgorfQorCityZXN0b3Jlc3RhdGUoKSB7CisgICAgICAgIGlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX1NBVkUiCisJdGhlbgorCQlnaXQgcmVzZXQgLS1oYXJkICRoZWFkCisJCWNwaW8gLWl1diA8IiRHSVRfRElSL01FUkdFX1NBVkUiCisJCWdpdC11cGRhdGUtaW5kZXggLS1yZWZyZXNoID4vZGV2L251bGwKKwlmaQorfQorCitmaW5pc2ggKCkgeworCXRlc3QgJycgPSAiJDIiIHx8IGVjaG8gIiQyIgorCWNhc2UgIiRtZXJnZV9tc2ciIGluCisJJycpCisJCWVjaG8gIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQUQiCisJCTs7CisJKikKKwkJZ2l0LXVwZGF0ZS1yZWYgSEVBRCAiJDEiICIkaGVhZCIgfHwgZXhpdCAxCisJCTs7CisJZXNhYworCiAJY2FzZSAiJG5vX3N1bW1hcnkiIGluCiAJJycpCi0JCWdpdC1kaWZmLXRyZWUgLXAgLU0gJGhlYWQgIiQxIiB8CisJCWdpdC1kaWZmLXRyZWUgLXAgLU0gIiRoZWFkIiAiJDEiIHwKIAkJZ2l0LWFwcGx5IC0tc3RhdCAtLXN1bW1hcnkKIAkJOzsKIAllc2FjCkBAIC0zNyw2ICs2Myw4IEBACiAJLW58LS1ufC0tbm98LS1uby18LS1uby1zfC0tbm8tc3V8LS1uby1zdW18LS1uby1zdW1tfFwKIAkJLS1uby1zdW1tYXwtLW5vLXN1bW1hcnwtLW5vLXN1bW1hcnkpCiAJCW5vX3N1bW1hcnk9dCA7OworCS0tbm8tY3wtLW5vLWNvfC0tbm8tY29tfC0tbm8tY29tbXwtLW5vLWNvbW1pfC0tbm8tY29tbWl0KQorCQlub19jb21taXQ9dCA7OwogCS1zPSp8LS1zPSp8LS1zdD0qfC0tc3RyPSp8LS1zdHJhPSp8LS1zdHJhdD0qfC0tc3RyYXRlPSp8XAogCQktLXN0cmF0ZWc9KnwtLXN0cmF0ZWd5PSp8XAogCS1zfC0tc3wtLXN0fC0tc3RyfC0tc3RyYXwtLXN0cmF0fC0tc3RyYXRlfC0tc3RyYXRlZ3wtLXN0cmF0ZWd5KQpAQCAtNzEsNiArOTksNyBAQAogCiBtZXJnZV9tc2c9IiQxIgogc2hpZnQKK2hlYWRfYXJnPSIkMSIKIGhlYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSJeMCkgfHwgdXNhZ2UKIHNoaWZ0CiAKQEAgLTg0LDMxICsxMTMsNTAgQEAKIGNvbW1vbj0kKGdpdC1zaG93LWJyYW5jaCAtLW1lcmdlLWJhc2UgJGhlYWQgIiRAIikKIGVjaG8gIiRoZWFkIiA+IiRHSVRfRElSL09SSUdfSEVBRCIKIAotY2FzZSAiJCMsJGNvbW1vbiIgaW4KLSosJycpCi0JZGllICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IGJldHdlZW4gJGhlYWQgYW5kICQqIgorY2FzZSAiJCMsJGNvbW1vbiwkbm9fY29tbWl0IiBpbgorKiwnJywqKQorCSMgTm8gY29tbW9uIGFuY2VzdG9ycyBmb3VuZC4gV2UgbmVlZCBhIHJlYWwgbWVyZ2UuCiAJOzsKLTEsIiQxIikKKzEsIiQxIiwqKQogCSMgSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgogCSMgYnV0IGZpcnN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZQotCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIgotCWRyb3BoZWFkcworCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZS4iCisJZHJvcHNhdmUKIAlleGl0IDAKIAk7OwotMSwiJGhlYWQiKQorMSwiJGhlYWQiLCopCiAJIyBBZ2FpbiB0aGUgbW9zdCBjb21tb24gY2FzZSBvZiBtZXJnaW5nIG9uZSByZW1vdGUuCiAJZWNobyAiVXBkYXRpbmcgZnJvbSAkaGVhZCB0byAkMS4iCiAJZ2l0LXVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggMj4vZGV2L251bGwKLQlnaXQtcmVhZC10cmVlIC11IC1tICRoZWFkICIkMSIgfHwgZXhpdCAxCi0JZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJDFeMCIgPiAiJEdJVF9ESVIvSEVBRCIKLQlzdW1tYXJ5ICIkMSIKLQlkcm9waGVhZHMKKwluZXdfaGVhZD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgIiQxXjAiKSAmJgorCWdpdC1yZWFkLXRyZWUgLXUgLW0gJGhlYWQgIiRuZXdfaGVhZCIgJiYKKwlmaW5pc2ggIiRuZXdfaGVhZCIgIkZhc3QgZm9yd2FyZCIKKwlkcm9wc2F2ZQogCWV4aXQgMAogCTs7Ci0xLCopCisxLD8qIiRMRiI/KiwqKQogCSMgV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzIGFuZCBub3QgZmFzdCBmb3J3YXJkLiAgTmVlZCBhCiAJIyByZWFsIG1lcmdlLgogCTs7CisxLCosKQorCSMgV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzLCBub3QgZmFzdCBmb3J3YXJkLCBhbmQgaGF2ZSBvbmx5CisJIyBvbmUgY29tbW9uLiAgU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLgorCWVjaG8gIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLiIKKwlnaXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAorCWlmIGdpdC1yZWFkLXRyZWUgLS10cml2aWFsIC1tIC11ICRjb21tb24gJGhlYWQgIiQxIiAmJgorCSAgIHJlc3VsdF90cmVlPSQoZ2l0LXdyaXRlLXRyZWUpCisJdGhlbgorCSAgICBlY2hvICJXb25kZXJmdWwuIgorCSAgICByZXN1bHRfY29tbWl0PSQoCisJICAgICAgICBlY2hvICIkbWVyZ2VfbXNnIiB8CisJICAgICAgICBnaXQtY29tbWl0LXRyZWUgJHJlc3VsdF90cmVlIC1wIEhFQUQgLXAgIiQxIgorCSAgICApIHx8IGV4aXQKKwkgICAgZmluaXNoICIkcmVzdWx0X2NvbW1pdCIgIkluLWluZGV4IG1lcmdlIgorCSAgICBkcm9wc2F2ZQorCSAgICBleGl0IDAKKwlmaQorCWVjaG8gIk5vcGUuIgorCTs7CiAqKQogCSMgQW4gb2N0b3B1cy4gIElmIHdlIGNhbiByZWFjaCBhbGwgdGhlIHJlbW90ZSB3ZSBhcmUgdXAgdG8gZGF0ZS4KIAl1cF90b19kYXRlPXQKQEAgLTEyNCwzNSArMTcyLDU4IEBACiAJaWYgdGVzdCAiJHVwX3RvX2RhdGUiID0gdAogCXRoZW4KIAkJZWNobyAiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiCi0JCWRyb3BoZWFkcworCQlkcm9wc2F2ZQogCQlleGl0IDAKIAlmaQogCTs7CiBlc2FjCiAKLSMgQXQgdGhpcyBwb2ludCB3ZSBuZWVkIGEgcmVhbCBtZXJnZS4gIFJlcXVpcmUgdGhhdCB0aGUgdHJlZSBtYXRjaGVzCi0jIGV4YWN0bHkgb3VyIGhlYWQuCisjIEF0IHRoaXMgcG9pbnQsIHdlIG5lZWQgYSByZWFsIG1lcmdlLiAgTm8gbWF0dGVyIHdoYXQgc3RyYXRlZ3kKKyMgd2UgdXNlLCBpdCB3b3VsZCBvcGVyYXRlIG9uIHRoZSBpbmRleCwgcG9zc2libHkgYWZmZWN0aW5nIHRoZQorIyB3b3JraW5nIHRyZWUsIGFuZCB3aGVuIHJlc29sdmVkIGNsZWFubHksIGhhdmUgdGhlIGRlc2lyZWQgdHJlZQorIyBpbiB0aGUgaW5kZXggLS0gdGhpcyBtZWFucyB0aGF0IHRoZSBpbmRleCBtdXN0IGJlIGluIHN5bmMgd2l0aAorIyB0aGUgJGhlYWQgY29tbWl0LiAgVGhlIHN0cmF0ZWdpZXMgYXJlIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGlzLgogCi1naXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgotdGVzdCAnJyA9ICJgZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLW9ubHkgJGhlYWRgIiB8fCB7Ci0JZGllICJOZWVkIHJlYWwgbWVyZ2UgYnV0IHRoZSB3b3JraW5nIHRyZWUgaGFzIGxvY2FsIGNoYW5nZXMuIgotfQorY2FzZSAiJHVzZV9zdHJhdGVnaWVzIiBpbgorPyonICc/KikKKyAgICAjIFN0YXNoIGF3YXkgdGhlIGxvY2FsIGNoYW5nZXMgc28gdGhhdCB3ZSBjYW4gdHJ5IG1vcmUgdGhhbiBvbmUuCisgICAgc2F2ZXN0YXRlCisgICAgc2luZ2xlX3N0cmF0ZWd5PW5vCisgICAgOzsKKyopCisgICAgcm0gLWYgIiRHSVRfRElSL01FUkdFX1NBVkUiCisgICAgc2luZ2xlX3N0cmF0ZWd5PXllcworICAgIDs7Citlc2FjCiAKIHJlc3VsdF90cmVlPSBiZXN0X2NudD0tMSBiZXN0X3N0cmF0ZWd5PSB3dF9zdHJhdGVneT0KIGZvciBzdHJhdGVneSBpbiAkdXNlX3N0cmF0ZWdpZXMKIGRvCiAgICAgdGVzdCAiJHd0X3N0cmF0ZWd5IiA9ICcnIHx8IHsKIAllY2hvICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi4iCi0JZ2l0IHJlc2V0IC0taGFyZCAkaGVhZAorCXJlc3RvcmVzdGF0ZQogICAgIH0KLSAgICBlY2hvICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJHN0cmF0ZWd5Li4uIgorICAgIGNhc2UgIiRzaW5nbGVfc3RyYXRlZ3kiIGluCisgICAgbm8pCisJZWNobyAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICRzdHJhdGVneS4uLiIKKwk7OworICAgIGVzYWMKKworICAgICMgUmVtZW1iZXIgd2hpY2ggc3RyYXRlZ3kgbGVmdCB0aGUgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZQogICAgIHd0X3N0cmF0ZWd5PSRzdHJhdGVneQotICAgIGdpdC1tZXJnZS0kc3RyYXRlZ3kgJGNvbW1vbiAtLSAkaGVhZCAiJEAiIHx8IHsKKworICAgIGdpdC1tZXJnZS0kc3RyYXRlZ3kgJGNvbW1vbiAtLSAiJGhlYWRfYXJnIiAiJEAiCisgICAgZXhpdD0kPworICAgIGlmIHRlc3QgIiRub19jb21taXQiID0gdCAmJiB0ZXN0ICIkZXhpdCIgPSAwCisgICAgdGhlbgorCWV4aXQ9MSA7IyBwcmV0ZW5kIGl0IGxlZnQgY29uZmxpY3RzLgorICAgIGZpCisKKyAgICB0ZXN0ICIkZXhpdCIgPSAwIHx8IHsKIAogCSMgVGhlIGJhY2tlbmQgZXhpdHMgd2l0aCAxIHdoZW4gY29uZmxpY3RzIGFyZSBsZWZ0IHRvIGJlIHJlc29sdmVkLAogCSMgd2l0aCAyIHdoZW4gaXQgZG9lcyBub3QgaGFuZGxlIHRoZSBnaXZlbiBtZXJnZSBhdCBhbGwuCiAKLQlleGl0PSQ/CiAJaWYgdGVzdCAiJGV4aXQiIC1lcSAxCiAJdGhlbgogCSAgICBjbnQ9YHsKQEAgLTE4MSwxOCArMjUyLDE2IEBACiAgICAgZG8KICAgICAgICAgcGFyZW50cz0iJHBhcmVudHMgLXAgJHJlbW90ZSIKICAgICBkb25lCi0gICAgcmVzdWx0X2NvbW1pdD0kKGVjaG8gIiRtZXJnZV9tc2ciIHwgZ2l0LWNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAkcGFyZW50cykKLSAgICBlY2hvICJDb21taXR0ZWQgbWVyZ2UgJHJlc3VsdF9jb21taXQsIG1hZGUgYnkgJHd0X3N0cmF0ZWd5LiIKLSAgICBlY2hvICRyZXN1bHRfY29tbWl0ID4iJEdJVF9ESVIvSEVBRCIKLSAgICBzdW1tYXJ5ICRyZXN1bHRfY29tbWl0Ci0gICAgZHJvcGhlYWRzCisgICAgcmVzdWx0X2NvbW1pdD0kKGVjaG8gIiRtZXJnZV9tc2ciIHwgZ2l0LWNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAkcGFyZW50cykgfHwgZXhpdAorICAgIGZpbmlzaCAiJHJlc3VsdF9jb21taXQiICJNZXJnZSAkcmVzdWx0X2NvbW1pdCwgbWFkZSBieSAkd3Rfc3RyYXRlZ3kuIgorICAgIGRyb3BzYXZlCiAgICAgZXhpdCAwCiBmaQogCiAjIFBpY2sgdGhlIHJlc3VsdCBmcm9tIHRoZSBiZXN0IHN0cmF0ZWd5IGFuZCBoYXZlIHRoZSB1c2VyIGZpeCBpdCB1cC4KIGNhc2UgIiRiZXN0X3N0cmF0ZWd5IiBpbgogJycpCi0JZ2l0IHJlc2V0IC0taGFyZCAkaGVhZAorCXJlc3RvcmVzdGF0ZQogCWRpZSAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuIgogCTs7CiAiJHd0X3N0cmF0ZWd5IikKQEAgLTIwMCwxMyArMjY5LDE1IEBACiAJOzsKICopCiAJZWNobyAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uIgotCWdpdCByZXNldCAtLWhhcmQgJGhlYWQKKwlyZXN0b3Jlc3RhdGUKIAllY2hvICJVc2luZyB0aGUgJGJlc3Rfc3RyYXRlZ3kgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC4iCi0JZ2l0LW1lcmdlLSRiZXN0X3N0cmF0ZWd5ICRjb21tb24gLS0gJGhlYWQgIiRAIgorCWdpdC1tZXJnZS0kYmVzdF9zdHJhdGVneSAkY29tbW9uIC0tICIkaGVhZF9hcmciICIkQCIKIAk7OwogZXNhYwogZm9yIHJlbW90ZQogZG8KIAllY2hvICRyZW1vdGUKIGRvbmUgPiIkR0lUX0RJUi9NRVJHRV9IRUFEIgotZGllICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggdXAgYnkgaGFuZCIKK2VjaG8gJG1lcmdlX21zZyA+IiRHSVRfRElSL01FUkdFX01TRyIKKworZGllICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkL3ByZXZlbnRlZDsgZml4IHVwIGJ5IGhhbmQiCmRpZmYgLS1naXQgYS9naXQtbXYucGVybCBiL2dpdC1tdi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyMWQ4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbXYucGVybApAQCAtMCwwICsxLDE5NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDA1LCBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIyAgICAgICAgICAgICAgICAgSm9zZWYgV2VpZGVuZG9yZmVyIDxKb3NlZi5XZWlkZW5kb3JmZXJAZ214LmRlPgorIworIyBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisjIGF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzIFRvcnZhbGRzLgorCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpTdGQ7CisKK3N1YiB1c2FnZSgpIHsKKwlwcmludCA8PEVPVDsKKyQwIFstZl0gWy1uXSA8c291cmNlPiA8ZGVzdD4KKyQwIFstZl0gWy1rXSBbLW5dIDxzb3VyY2U+IC4uLiA8ZGVzdCBkaXJlY3Rvcnk+CisKK0luIHRoZSBmaXJzdCBmb3JtLCBzb3VyY2UgbXVzdCBleGlzdCBhbmQgYmUgZWl0aGVyIGEgZmlsZSwKK3N5bWxpbmsgb3IgZGlyZWN0b3J5LCBkZXN0IG11c3Qgbm90IGV4aXN0LiBJdCByZW5hbWVzIHNvdXJjZSB0byBkZXN0LgorSW4gdGhlIHNlY29uZCBmb3JtLCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgdG8gYmUgYW4gZXhpc3RpbmcKK2RpcmVjdG9yeTsgdGhlIGdpdmVuIHNvdXJjZXMgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoaXMgZGlyZWN0b3J5LgorCitVcGRhdGVzIHRoZSBnaXQgY2FjaGUgdG8gcmVmbGVjdCB0aGUgY2hhbmdlLgorVXNlICJnaXQgY29tbWl0IiB0byBtYWtlIHRoZSBjaGFuZ2UgcGVybWFuZW50bHkuCisKK09wdGlvbnM6CisgIC1mICAgRm9yY2UgcmVuYW1pbmcvbW92aW5nLCBldmVuIGlmIHRhcmdldCBleGlzdHMKKyAgLWsgICBDb250aW51ZSBvbiBlcnJvciBieSBza2lwcGluZworICAgICAgIG5vdC1leGlzdGluZyBvciBub3QgcmV2aXNpb24tY29udHJvbGxlZCBzb3VyY2UKKyAgLW4gICBEbyBub3RoaW5nOyBzaG93IHdoYXQgd291bGQgaGFwcGVuCitFT1QKKwlleGl0KDEpOworfQorCisjIFNhbml0eSBjaGVja3M6CitteSAkR0lUX0RJUiA9ICRFTlZ7J0dJVF9ESVInfSB8fCAiLmdpdCI7CisKK3VubGVzcyAoIC1kICRHSVRfRElSICYmIC1kICRHSVRfRElSIC4gIi9vYmplY3RzIiAmJiAKKwktZCAkR0lUX0RJUiAuICIvb2JqZWN0cy8iICYmIC1kICRHSVRfRElSIC4gIi9yZWZzIikgeworICAgIHByaW50ICJHaXQgcmVwb3NpdG9yeSBub3QgZm91bmQuIjsKKyAgICB1c2FnZSgpOworfQorCisKK291ciAoJG9wdF9uLCAkb3B0X2YsICRvcHRfaCwgJG9wdF9rLCAkb3B0X3YpOworZ2V0b3B0cygiaG5ma3YiKSB8fCB1c2FnZTsKK3VzYWdlKCkgaWYgJG9wdF9oOworQEFSR1YgPj0gMSBvciB1c2FnZTsKKworbXkgKEBzcmNBcmdzLCBAZHN0QXJncywgQHNyY3MsIEBkc3RzKTsKK215ICgkc3JjLCAkZHN0LCAkYmFzZSwgJGRzdERpcik7CisKK215ICRhcmdDb3VudCA9IHNjYWxhciBAQVJHVjsKK2lmICgtZCAkQVJHVlskYXJnQ291bnQtMV0pIHsKKwkkZHN0RGlyID0gJEFSR1ZbJGFyZ0NvdW50LTFdOworCSMgcmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaAorCSRkc3REaXIgPX4gcy9cLyQvLzsKKwlAc3JjQXJncyA9IEBBUkdWWzAuLiRhcmdDb3VudC0yXTsKKwkKKwlmb3JlYWNoICRzcmMgKEBzcmNBcmdzKSB7CisJCSRiYXNlID0gJHNyYzsKKwkJJGJhc2UgPX4gcy9eLipcLy8vOworCQkkZHN0ID0gIiRkc3REaXIvIi4gJGJhc2U7CisJCXB1c2ggQGRzdEFyZ3MsICRkc3Q7CisJfQorfQorZWxzZSB7CisgICAgaWYgKCRhcmdDb3VudCAhPSAyKSB7CisJcHJpbnQgIkVycm9yOiBtb3ZpbmcgdG8gZGlyZWN0b3J5ICciCisJICAgIC4gJEFSR1ZbJGFyZ0NvdW50LTFdCisJICAgIC4gIicgbm90IHBvc3NpYmxlOyBub3QgZXhpc2l0aW5nXG4iOworCXVzYWdlOworICAgIH0KKyAgICBAc3JjQXJncyA9ICgkQVJHVlswXSk7CisgICAgQGRzdEFyZ3MgPSAoJEFSR1ZbMV0pOworICAgICRkc3REaXIgPSAiIjsKK30KKworbXkgKEBhbGxmaWxlcyxAc3JjZmlsZXMsQGRzdGZpbGVzKTsKK215ICRzYWZlc3JjOworbXkgKCVvdmVyd3JpdHRlbiwgJXNyY0ZvckRzdCk7CisKKyQvID0gIlwwIjsKK29wZW4oRiwiLXwiLCJnaXQtbHMtZmlsZXMiLCIteiIpCisgICAgICAgIG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gcGlwZSBmcm9tIGdpdC1scy1maWxlczogIiAuICQhOworCitAYWxsZmlsZXMgPSBtYXAgeyBjaG9tcDsgJF87IH0gPEY+OworY2xvc2UoRik7CisKKworbXkgKCRpLCAkYmFkKTsKK3doaWxlKHNjYWxhciBAc3JjQXJncyA+IDApIHsKKyAgICAkc3JjID0gc2hpZnQgQHNyY0FyZ3M7CisgICAgJGRzdCA9IHNoaWZ0IEBkc3RBcmdzOworICAgICRiYWQgPSAiIjsKKworICAgIGlmICgkb3B0X3YpIHsKKwlwcmludCAiQ2hlY2tpbmcgcmVuYW1lIG9mICckc3JjJyB0byAnJGRzdCdcbiI7CisgICAgfQorCisgICAgdW5sZXNzICgtZiAkc3JjIHx8IC1sICRzcmMgfHwgLWQgJHNyYykgeworCSRiYWQgPSAiYmFkIHNvdXJjZSAnJHNyYyciOworICAgIH0KKworICAgICRvdmVyd3JpdHRlbnskZHN0fSA9IDA7CisgICAgaWYgKCgkYmFkIGVxICIiKSAmJiAtZSAkZHN0KSB7CisJJGJhZCA9ICJkZXN0aW5hdGlvbiAnJGRzdCcgYWxyZWFkeSBleGlzdHMiOworCWlmICgtZiAkZHN0ICYmICRvcHRfZikgeworCSAgICBwcmludCAiV2FybmluZzogJGJhZDsgd2lsbCBvdmVyd3JpdGUhXG4iOworCSAgICAkYmFkID0gIiI7CisJICAgICRvdmVyd3JpdHRlbnskZHN0fSA9IDE7CisJfQorICAgIH0KKyAgICAKKyAgICBpZiAoKCRiYWQgZXEgIiIpICYmICgkc3JjIGVxICRkc3REaXIpKSB7CisJJGJhZCA9ICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5ICckc3JjJyBpbnRvIGl0c2VsZiI7CisgICAgfQorCisgICAgaWYgKCRiYWQgZXEgIiIpIHsKKwkkc2FmZXNyYyA9IHF1b3RlbWV0YSgkc3JjKTsKKwlAc3JjZmlsZXMgPSBncmVwIC9eJHNhZmVzcmMoXC98JCkvLCBAYWxsZmlsZXM7CisgICAgICAgIGlmIChzY2FsYXIgQHNyY2ZpbGVzID09IDApIHsKKwkgICAgJGJhZCA9ICInJHNyYycgbm90IHVuZGVyIHZlcnNpb24gY29udHJvbCI7CisJfQorICAgIH0KKworICAgIGlmICgkYmFkIGVxICIiKSB7CisgICAgICAgaWYgKGRlZmluZWQgJHNyY0ZvckRzdHskZHN0fSkgeworICAgICAgICAgICAkYmFkID0gImNhbiBub3QgbW92ZSAnJHNyYycgdG8gJyRkc3QnOyBhbHJlYWR5IHRhcmdldCBvZiAiOworICAgICAgICAgICAkYmFkIC49ICInIi4kc3JjRm9yRHN0eyRkc3R9LiInIjsKKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICAgICRzcmNGb3JEc3R7JGRzdH0gPSAkc3JjOworICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJGJhZCBuZSAiIikgeworCWlmICgkb3B0X2spIHsKKwkgICAgcHJpbnQgIldhcm5pbmc6ICRiYWQ7IHNraXBwaW5nXG4iOworCSAgICBuZXh0OworCX0KKwlwcmludCAiRXJyb3I6ICRiYWRcbiI7CisJdXNhZ2UoKTsKKyAgICB9CisgICAgcHVzaCBAc3JjcywgJHNyYzsKKyAgICBwdXNoIEBkc3RzLCAkZHN0OworfQorCisjIEZpbmFsIHBhc3M6IHJlbmFtZS9tb3ZlCitteSAoQGRlbGV0ZWRmaWxlcyxAYWRkZWRmaWxlcyxAY2hhbmdlZGZpbGVzKTsKK3doaWxlKHNjYWxhciBAc3JjcyA+IDApIHsKKyAgICAkc3JjID0gc2hpZnQgQHNyY3M7CisgICAgJGRzdCA9IHNoaWZ0IEBkc3RzOworCisgICAgaWYgKCRvcHRfbiB8fCAkb3B0X3YpIHsgcHJpbnQgIlJlbmFtaW5nICRzcmMgdG8gJGRzdFxuIjsgfQorICAgIGlmICghJG9wdF9uKSB7CisJcmVuYW1lKCRzcmMsJGRzdCkKKwkgICAgb3IgZGllICJyZW5hbWUgZmFpbGVkOiAkISI7CisgICAgfQorCisgICAgJHNhZmVzcmMgPSBxdW90ZW1ldGEoJHNyYyk7CisgICAgQHNyY2ZpbGVzID0gZ3JlcCAvXiRzYWZlc3JjKFwvfCQpLywgQGFsbGZpbGVzOworICAgIEBkc3RmaWxlcyA9IEBzcmNmaWxlczsKKyAgICBzL14kc2FmZXNyYyhcL3wkKS8kZHN0JDEvIGZvciBAZHN0ZmlsZXM7CisKKyAgICBwdXNoIEBkZWxldGVkZmlsZXMsIEBzcmNmaWxlczsKKyAgICBpZiAoc2NhbGFyIEBzcmNmaWxlcyA9PSAxKSB7CisJaWYgKCRvdmVyd3JpdHRlbnskZHN0fSA9PTEpIHsKKwkgICAgcHVzaCBAY2hhbmdlZGZpbGVzLCAkZHN0OworCX0gZWxzZSB7CisJICAgIHB1c2ggQGFkZGVkZmlsZXMsICRkc3Q7CisJfQorICAgIH0KKyAgICBlbHNlIHsKKwlwdXNoIEBhZGRlZGZpbGVzLCBAZHN0ZmlsZXM7CisgICAgfQorfQorCitpZiAoJG9wdF9uKSB7CisJcHJpbnQgIkNoYW5nZWQgIDogIi4gam9pbigiLCAiLCBAY2hhbmdlZGZpbGVzKSAuIlxuIjsKKwlwcmludCAiQWRkaW5nICAgOiAiLiBqb2luKCIsICIsIEBhZGRlZGZpbGVzKSAuIlxuIjsKKwlwcmludCAiRGVsZXRpbmcgOiAiLiBqb2luKCIsICIsIEBkZWxldGVkZmlsZXMpIC4iXG4iOworCWV4aXQoMSk7Cit9CisJCitteSAkcmM7CitpZiAoc2NhbGFyIEBjaGFuZ2VkZmlsZXMgPjApIHsKKwkkcmMgPSBzeXN0ZW0oImdpdC11cGRhdGUtaW5kZXgiLCItLSIsQGNoYW5nZWRmaWxlcyk7CisJZGllICJnaXQtdXBkYXRlLWluZGV4IGZhaWxlZCB0byB1cGRhdGUgY2hhbmdlZCBmaWxlcyB3aXRoIGNvZGUgJD9cbiIgaWYgJHJjOworfQoraWYgKHNjYWxhciBAYWRkZWRmaWxlcyA+MCkgeworCSRyYyA9IHN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tYWRkIiwiLS0iLEBhZGRlZGZpbGVzKTsKKwlkaWUgImdpdC11cGRhdGUtaW5kZXggZmFpbGVkIHRvIGFkZCBuZXcgbmFtZXMgd2l0aCBjb2RlICQ/XG4iIGlmICRyYzsKK30KKyRyYyA9IHN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tcmVtb3ZlIiwiLS0iLEBkZWxldGVkZmlsZXMpOworZGllICJnaXQtdXBkYXRlLWluZGV4IGZhaWxlZCB0byByZW1vdmUgb2xkIG5hbWVzIHdpdGggY29kZSAkP1xuIiBpZiAkcmM7CmRpZmYgLS1naXQgYS9naXQtb2N0b3B1cy5zaCBiL2dpdC1vY3RvcHVzLnNoCmluZGV4IDUyMWNjNmYuLmQyNDcxYWYgMTAwNzU1Ci0tLSBhL2dpdC1vY3RvcHVzLnNoCisrKyBiL2dpdC1vY3RvcHVzLnNoCkBAIC0yNyw3ICsyNyw3IEBACiAjIE1SQyBpcyB0aGUgY3VycmVudCAibWVyZ2UgcmVmZXJlbmNlIGNvbW1pdCIKICMgTVJUIGlzIHRoZSBjdXJyZW50ICJtZXJnZSByZXN1bHQgdHJlZSIKIAotTVJDPSRoZWFkIE1TRz0gUEFSRU5UPSItcCAkaGVhZCIKK01SQz0kaGVhZCBQQVJFTlQ9Ii1wICRoZWFkIgogTVJUPSQoZ2l0LXdyaXRlLXRyZWUpCiBDTlQ9MSA7IyBjb3VudGluZyBvdXIgaGVhZAogTk9OX0ZGX01FUkdFPTAKQEAgLTQ0LDggKzQ0LDYgQEAKIAogCUNOVD1gZXhwciAkQ05UICsgMWAKIAlQQVJFTlQ9IiRQQVJFTlQgLXAgJFNIQTEiCi0JTVNHPSIkTVNHCi0JJFJFUE8iCiAKIAlpZiB0ZXN0ICIkY29tbW9uLCROT05fRkZfTUVSR0UiID0gIiRNUkMsMCIKIAl0aGVuCkBAIC04NCwyMCArODIsOSBAQAogMSkKIAllY2hvICJObyBjaGFuZ2VzLiIKIAlleGl0IDAgOzsKLTIpCi0JZWNobyAiTm90IGFuIE9jdG9wdXM7IG1ha2luZyBhbiBvcmRpbmFyeSBjb21taXQuIgotCU1TRz0iTWVyZ2UgImBleHByICIkTVNHIiA6ICcuCVwoLipcKSdgIDsgIyByZW1vdmUgTEYgYW5kIFRBQgotCTs7Ci0qKQotCSMgSW4gYW4gb2N0b3B1cywgdGhlIG9yaWdpbmFsIGhlYWQgaXMganVzdCBvbmUgb2YgdGhlIGVxdWFscywKLQkjIHNvIHdlIHNob3VsZCBsaXN0IGl0IGFzIHN1Y2guCi0JSEVBRF9MSU5LPWByZWFkbGluayAiJEdJVF9ESVIvSEVBRCJgCi0JTVNHPSJPY3RvcHVzIG1lcmdlIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLQkkSEVBRF9MSU5LIGZyb20gLiRNU0ciCi0JOzsKIGVzYWMKLXJlc3VsdF9jb21taXQ9JChlY2hvICIkTVNHIiB8IGdpdC1jb21taXQtdHJlZSAkTVJUICRQQVJFTlQpCityZXN1bHRfY29tbWl0PSQoZ2l0LWZtdC1tZXJnZS1tc2cgPCIkR0lUX0RJUi9GRVRDSF9IRUFEIiB8CisJCWdpdC1jb21taXQtdHJlZSAkTVJUICRQQVJFTlQpCiBlY2hvICJDb21taXR0ZWQgbWVyZ2UgJHJlc3VsdF9jb21taXQiCi1lY2hvICRyZXN1bHRfY29tbWl0ID4iJEdJVF9ESVIiL0hFQUQKK2dpdC11cGRhdGUtcmVmIEhFQUQgJHJlc3VsdF9jb21taXQgJGhlYWQKIGdpdC1kaWZmLXRyZWUgLXAgJGhlYWQgJHJlc3VsdF9jb21taXQgfCBnaXQtYXBwbHkgLS1zdGF0CmRpZmYgLS1naXQgYS9naXQtcGFyc2UtcmVtb3RlLnNoIGIvZ2l0LXBhcnNlLXJlbW90ZS5zaAppbmRleCBhOWRiMGNkLi5hZWE3YjBlIDEwMDc1NQotLS0gYS9naXQtcGFyc2UtcmVtb3RlLnNoCisrKyBiL2dpdC1wYXJzZS1yZW1vdGUuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKKy4gZ2l0LXNoLXNldHVwCiAKIGdldF9kYXRhX3NvdXJjZSAoKSB7CiAJY2FzZSAiJDEiIGluCkBAIC02NSw4ICs2NSwxMSBAQAogCWVzYWMKIH0KIAotIyBTdWJyb3V0aW5lIHRvIGNhbm9uaWNhbGl6ZSByZW1vdGU6bG9jYWwgbm90YXRpb24KKyMgU3Vicm91dGluZSB0byBjYW5vbmljYWxpemUgcmVtb3RlOmxvY2FsIG5vdGF0aW9uLgogY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAoKSB7CisJIyBMZWF2ZSBvbmx5IHRoZSBmaXJzdCBvbmUgYWxvbmU7IGFkZCBwcmVmaXggLiB0byB0aGUgcmVzdAorCSMgdG8gcHJldmVudCB0aGUgc2Vjb25kYXJ5IGJyYW5jaGVzIHRvIGJlIG1lcmdlZCBieSBkZWZhdWx0LgorCWRvdF9wcmVmaXg9CiAJZm9yIHJlZgogCWRvCiAJCWZvcmNlPQpAQCAtOTEsNyArOTQsMTQgQEAKIAkJaGVhZHMvKiB8IHRhZ3MvKiApIGxvY2FsPSJyZWZzLyRsb2NhbCIgOzsKIAkJKikgbG9jYWw9InJlZnMvaGVhZHMvJGxvY2FsIiA7OwogCQllc2FjCi0JCWVjaG8gIiR7Zm9yY2V9JHtyZW1vdGV9OiR7bG9jYWx9IgorCisJCWlmIGxvY2FsX3JlZl9uYW1lPSQoZXhwciAiJGxvY2FsIiA6ICdyZWZzL1woLipcKScpCisJCXRoZW4KKwkJICAgZ2l0LWNoZWNrLXJlZi1mb3JtYXQgIiRsb2NhbF9yZWZfbmFtZSIgfHwKKwkJICAgZGllICIqIHJlZnVzaW5nIHRvIGNyZWF0ZSBmdW5ueSByZWYgJyRsb2NhbF9yZWZfbmFtZScgbG9jYWxseSIKKwkJZmkKKwkJZWNobyAiJHtkb3RfcHJlZml4fSR7Zm9yY2V9JHtyZW1vdGV9OiR7bG9jYWx9IgorCQlkb3RfcHJlZml4PS4KIAlkb25lCiB9CiAKQEAgLTEwNyw2ICsxMTcsOSBAQAogCQllY2hvICJyZWZzL2hlYWRzLyR7cmVtb3RlX2JyYW5jaH06cmVmcy9oZWFkcy8kMSIKIAkJOzsKIAlyZW1vdGVzKQorCQkjIFRoaXMgcHJlZml4ZXMgdGhlIHNlY29uZCBhbmQgbGF0ZXIgZGVmYXVsdCByZWZzcGVjcworCQkjIHdpdGggYSAnLicsIHRvIHNpZ25hbCBnaXQtZmV0Y2ggdG8gbWFyayB0aGVtCisJCSMgbm90LWZvci1tZXJnZS4KIAkJY2Fub25fcmVmc19saXN0X2Zvcl9mZXRjaCAkKHNlZCAtbmUgJy9eUHVsbDogKi97CiAJCQkJCQlzLy8vcAogCQkJCQl9JyAiJEdJVF9ESVIvcmVtb3Rlcy8kMSIpCmRpZmYgLS1naXQgYS9naXQtcHJ1bmUuc2ggYi9naXQtcHJ1bmUuc2gKaW5kZXggOTY1N2RiZi4uZWYzMWJkMiAxMDA3NTUKLS0tIGEvZ2l0LXBydW5lLnNoCisrKyBiL2dpdC1wcnVuZS5zaApAQCAtMTUsNiArMTUsNyBAQAogICAgIHNoaWZ0OwogZG9uZQogCitzeW5jCiBnaXQtZnNjay1vYmplY3RzIC0tZnVsbCAtLWNhY2hlIC0tdW5yZWFjaGFibGUgIiRAIiB8CiBzZWQgLW5lICcvdW5yZWFjaGFibGUgL3sKICAgICBzL3VucmVhY2hhYmxlIFteIF1bXiBdKiAvLwpAQCAtMjIsNiArMjMsNyBAQAogfScgfCB7CiAJY2QgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIgfHwgZXhpdAogCXhhcmdzICRlY2hvIHJtIC1mCisJcm1kaXIgMj4vZGV2L251bGwgWzAtOWEtZl1bMC05YS1mXQogfQogCiBnaXQtcHJ1bmUtcGFja2VkICRkcnlydW4KZGlmZiAtLWdpdCBhL2dpdC1wdWxsLnNoIGIvZ2l0LXB1bGwuc2gKaW5kZXggOGNmMzllNy4uZTIzZDRmNSAxMDA3NTUKLS0tIGEvZ2l0LXB1bGwuc2gKKysrIGIvZ2l0LXB1bGwuc2gKQEAgLTYsMTAgKzYsNDUgQEAKIAogLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKIAotb3JpZ19oZWFkPSQoY2F0ICIkR0lUX0RJUi9IRUFEIikgfHwgZGllICJQdWxsaW5nIGludG8gYSBibGFjayBob2xlPyIKK3VzYWdlICgpIHsKKyAgICBkaWUgImdpdCBwdWxsIFstbl0gWy0tbm8tY29tbWl0XSBbLXMgc3RyYXRlZ3ldLi4uIDxyZXBvPiA8aGVhZD4uLi4iCit9CisKK3N0cmF0ZWd5X2FyZ3M9IG5vX3N1bW1hcnk9IG5vX2NvbW1pdD0KK3doaWxlIGNhc2UgIiQjLCQxIiBpbiAwKSBicmVhayA7OyAqLC0qKSA7OyAqKSBicmVhayA7OyBlc2FjCitkbworCWNhc2UgIiQxIiBpbgorCS1ufC0tbnwtLW5vfC0tbm8tfC0tbm8tc3wtLW5vLXN1fC0tbm8tc3VtfC0tbm8tc3VtbXxcCisJCS0tbm8tc3VtbWF8LS1uby1zdW1tYXJ8LS1uby1zdW1tYXJ5KQorCQlub19zdW1tYXJ5PS1uIDs7CisJLS1uby1jfC0tbm8tY298LS1uby1jb218LS1uby1jb21tfC0tbm8tY29tbWl8LS1uby1jb21taXQpCisJCW5vX2NvbW1pdD0tLW5vLWNvbW1pdCA7OworCS1zPSp8LS1zPSp8LS1zdD0qfC0tc3RyPSp8LS1zdHJhPSp8LS1zdHJhdD0qfC0tc3RyYXRlPSp8XAorCQktLXN0cmF0ZWc9KnwtLXN0cmF0ZWd5PSp8XAorCS1zfC0tc3wtLXN0fC0tc3RyfC0tc3RyYXwtLXN0cmF0fC0tc3RyYXRlfC0tc3RyYXRlZ3wtLXN0cmF0ZWd5KQorCQljYXNlICIkIywkMSIgaW4KKwkJKiwqPSopCisJCQlzdHJhdGVneT1gZXhwciAiJDEiIDogJy1bXj1dKj1cKC4qXCknYCA7OworCQkxLCopCisJCQl1c2FnZSA7OworCQkqKQorCQkJc3RyYXRlZ3k9IiQyIgorCQkJc2hpZnQgOzsKKwkJZXNhYworCQlzdHJhdGVneV9hcmdzPSIke3N0cmF0ZWd5X2FyZ3N9LXMgJHN0cmF0ZWd5ICIKKwkJOzsKKwktKikKKwkJIyBQYXNzIHRocnUgYW55dGhpbmcgdGhhdCBpcyBtZWFudCBmb3IgZmV0Y2guCisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK29yaWdfaGVhZD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJQdWxsaW5nIGludG8gYSBibGFjayBob2xlPyIKIGdpdC1mZXRjaCAtLXVwZGF0ZS1oZWFkLW9rICIkQCIgfHwgZXhpdCAxCiAKLWN1cnJfaGVhZD0kKGNhdCAiJEdJVF9ESVIvSEVBRCIpCitjdXJyX2hlYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCiBpZiB0ZXN0ICIkY3Vycl9oZWFkIiAhPSAiJG9yaWdfaGVhZCIKIHRoZW4KIAkjIFRoZSBmZXRjaCBpbnZvbHZlZCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2guCkBAIC0yNCwyMyArNTksMjggQEAKIAkJZGllICJZb3UgbmVlZCB0byBmaXJzdCB1cGRhdGUgeW91ciB3b3JraW5nIHRyZWUuIgogZmkKIAotbWVyZ2VfaGVhZD0kKHNlZCAtZSAncy8JLiovLycgIiRHSVRfRElSIi9GRVRDSF9IRUFEIHwgdHIgJ1wwMTInICcgJykKLW1lcmdlX25hbWU9JCgKLSAgICBwZXJsIC1lICdwcmludCBqb2luKCI7ICIsIG1hcCB7IGNob21wOyBzL15bMC05YS1mXSoJLy87ICRfIH0gPD4pJyBcCi0gICAgIiRHSVRfRElSIi9GRVRDSF9IRUFECi0pCittZXJnZV9oZWFkPSQoc2VkIC1lICcvCW5vdC1mb3ItbWVyZ2UJL2QnIFwKKwktZSAncy8JLiovLycgIiRHSVRfRElSIi9GRVRDSF9IRUFEIHwgXAorCXRyICdcMDEyJyAnICcpCiAKIGNhc2UgIiRtZXJnZV9oZWFkIiBpbgogJycpCiAJZWNobyA+JjIgIk5vIGNoYW5nZXMuIgogCWV4aXQgMAogCTs7Ci0qJyAnPyopCi0JZWNobyA+JjIgIlB1bGxpbmcgbW9yZSB0aGFuIG9uZSBoZWFkczsgbWFraW5nIGFuIE9jdG9wdXMuIgotCWV4ZWMgZ2l0LW9jdG9wdXMKKz8qJyAnPyopCisJc3RyYXRlZ3lfZGVmYXVsdF9hcmdzPSctcyBvY3RvcHVzJworCTs7CisqKQorCXN0cmF0ZWd5X2RlZmF1bHRfYXJncz0nLXMgcmVzb2x2ZScKIAk7OwogZXNhYwogCi1naXQtcmVzb2x2ZSBcCi0JIiQoY2F0ICIkR0lUX0RJUiIvSEVBRCkiIFwKLQkkbWVyZ2VfaGVhZCAiTWVyZ2UgJG1lcmdlX25hbWUiCitjYXNlICIkc3RyYXRlZ3lfYXJncyIgaW4KKycnKQorCXN0cmF0ZWd5X2FyZ3M9JHN0cmF0ZWd5X2RlZmF1bHRfYXJncworCTs7Citlc2FjCisKK21lcmdlX25hbWU9JChnaXQtZm10LW1lcmdlLW1zZyA8IiRHSVRfRElSL0ZFVENIX0hFQUQiKQorZ2l0LW1lcmdlICRub19zdW1tYXJ5ICRub19jb21taXQgJHN0cmF0ZWd5X2FyZ3MgIiRtZXJnZV9uYW1lIiBIRUFEICRtZXJnZV9oZWFkCmRpZmYgLS1naXQgYS9naXQtcHVzaC5zaCBiL2dpdC1wdXNoLnNoCmluZGV4IDAwZDcxNTAuLjVhYTY1MzEgMTAwNzU1Ci0tLSBhL2dpdC1wdXNoLnNoCisrKyBiL2dpdC1wdXNoLnNoCkBAIC0xLDYgKzEsMTEgQEAKICMhL2Jpbi9zaAogLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKIAordXNhZ2UgKCkgeworICAgIGRpZSAiVXNhZ2U6IGdpdCBwdXNoIFstLWFsbF0gWy0tZm9yY2VdIDxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+XSIKK30KKworCiAjIFBhcnNlIG91dCBwYXJhbWV0ZXJzIGFuZCB0aGVuIHN0b3AgYXQgcmVtb3RlLCBzbyB0aGF0IHdlIGNhbgogIyB0cmFuc2xhdGUgaXQgdXNpbmcgLmdpdC9icmFuY2hlcyBpbmZvcm1hdGlvbgogaGFzX2FsbD0KQEAgLTE4LDcgKzIzLDcgQEAKIAktLWV4ZWM9KikKIAkJaGFzX2V4ZWM9IiQxIiA7OwogCS0qKQotCQlkaWUgIlVua25vd24gcGFyYW1ldGVyICQxIiA7OworICAgICAgICAgICAgICAgIHVzYWdlIDs7CiAgICAgICAgICopCiAJCXNldCB4ICIkQCIKIAkJc2hpZnQKQEAgLTI4LDcgKzMzLDggQEAKIGRvbmUKIGNhc2UgIiQjIiBpbgogMCkKLQlkaWUgIldoZXJlIHdvdWxkIHlvdSB3YW50IHRvIHB1c2ggdG9kYXk/IiA7OworCWVjaG8gIldoZXJlIHdvdWxkIHlvdSB3YW50IHRvIHB1c2ggdG9kYXk/IgorICAgICAgICB1c2FnZSA7OwogZXNhYwogCiAuIGdpdC1wYXJzZS1yZW1vdGUKQEAgLTQwLDggKzQ2LDEwIEBACiBzaGlmdAogCiBjYXNlICIkcmVtb3RlIiBpbgotaHR0cDovLyogfCBodHRwczovLyogfCBnaXQ6Ly8qIHwgcnN5bmM6Ly8qICkKLQlkaWUgIkNhbm5vdCBwdXNoIHRvICRyZW1vdGUiIDs7CitodHRwOi8vKiB8IGh0dHBzOi8vKiB8IGdpdDovLyopCisJZGllICJDYW5ub3QgdXNlIFJFQUQtT05MWSB0cmFuc3BvcnQgdG8gcHVzaCB0byAkcmVtb3RlIiA7OworcnN5bmM6Ly8qKQorICAgICAgICBkaWUgIlB1c2hpbmcgd2l0aCByc3luYyB0cmFuc3BvcnQgaXMgZGVwcmVjYXRlZCIgOzsKIGVzYWMKIAogc2V0IHggIiRyZW1vdGUiICIkQCI7IHNoaWZ0CmRpZmYgLS1naXQgYS9naXQtcmViYXNlLnNoIGIvZ2l0LXJlYmFzZS5zaAppbmRleCA0OWM4ZjEyLi5mYTk1MDA5IDEwMDc1NQotLS0gYS9naXQtcmViYXNlLnNoCisrKyBiL2dpdC1yZWJhc2Uuc2gKQEAgLTMzLDcgKzMzLDggQEAKIGRpZSAiWW91ciB3b3JraW5nIHRyZWUgZG9lcyBub3QgbWF0Y2ggJG91cnNfc3ltYm9saWMuIgogCiBnaXQtcmVhZC10cmVlIC1tIC11ICRvdXJzICR1cHN0cmVhbSAmJgotZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJHVwc3RyZWFtXjAiID4iJEdJVF9ESVIvSEVBRCIgfHwgZXhpdAorbmV3X2hlYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkdXBzdHJlYW1eMCIpICYmCitnaXQtdXBkYXRlLXJlZiBIRUFEICIkbmV3X2hlYWQiIHx8IGV4aXQKIAogdG1wPS5yZWJhc2UtdG1wJCQKIGZhaWw9JHRtcC1mYWlsCkBAIC01MCw3ICs1MSw3IEBACiAJCWNvbnRpbnVlIDs7CiAJZXNhYwogCWVjaG8gPiYyICIqIEFwcGx5aW5nOiAkbXNnIgotCVM9YGNhdCAiJEdJVF9ESVIvSEVBRCJgICYmCisJUz0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKIAlnaXQtY2hlcnJ5LXBpY2sgLS1yZXBsYXkgJGNvbW1pdCB8fCB7CiAJCWVjaG8gPiYyICIqIE5vdCBhcHBseWluZyB0aGUgcGF0Y2ggYW5kIGNvbnRpbnVpbmcuIgogCQllY2hvICRjb21taXQgPj4kZmFpbApkaWZmIC0tZ2l0IGEvZ2l0LXJlbmFtZS5wZXJsIGIvZ2l0LXJlbmFtZS5wZXJsCmluZGV4IGEyOGM4YzguLjNiMTEyN2IgMTAwNzU1Ci0tLSBhL2dpdC1yZW5hbWUucGVybAorKysgYi9naXQtcmVuYW1lLnBlcmwKQEAgLTE1LDcgKzE1LDcgQEAKIG15ICRHSVRfRElSID0gJEVOVnsnR0lUX0RJUid9IHx8ICIuZ2l0IjsKIAogdW5sZXNzICggLWQgJEdJVF9ESVIgJiYgLWQgJEdJVF9ESVIgLiAiL29iamVjdHMiICYmIAotCS1kICRHSVRfRElSIC4gIi9vYmplY3RzLzAwIiAmJiAtZCAkR0lUX0RJUiAuICIvcmVmcyIpIHsKKwktZCAkR0lUX0RJUiAuICIvb2JqZWN0cy8iICYmIC1kICRHSVRfRElSIC4gIi9yZWZzIikgewogCXVzYWdlKCJHaXQgcmVwb3NpdG9yeSBub3QgZm91bmQuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2dpdC1yZXBhY2suc2ggYi9naXQtcmVwYWNrLnNoCmluZGV4IGIzOTVkMGUuLmQzNDE5NjYgMTAwNzU1Ci0tLSBhL2dpdC1yZXBhY2suc2gKKysrIGIvZ2l0LXJlcGFjay5zaApAQCAtNSwxMyArNSwxNCBAQAogCiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgogCQotbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0KK25vX3VwZGF0ZV9pbmZvPSBhbGxfaW50b19vbmU9IHJlbW92ZV9yZWR1bmRhbnQ9IGxvY2FsPQogd2hpbGUgY2FzZSAiJCMiIGluIDApIGJyZWFrIDs7IGVzYWMKIGRvCiAJY2FzZSAiJDEiIGluCiAJLW4pCW5vX3VwZGF0ZV9pbmZvPXQgOzsKIAktYSkJYWxsX2ludG9fb25lPXQgOzsKIAktZCkJcmVtb3ZlX3JlZGFuZGFudD10IDs7CisJLWwpCWxvY2FsPXQgOzsKIAkqKQlicmVhayA7OwogCWVzYWMKIAlzaGlmdApAQCAtMzcsNiArMzgsOSBAQAogCSAgICBmaW5kIC4gLXR5cGUgZiBcKCAtbmFtZSAnKi5wYWNrJyAtbyAtbmFtZSAnKi5pZHgnIFwpIC1wcmludGAKIAk7OwogZXNhYworaWYgWyAiJGxvY2FsIiBdOyB0aGVuCisJcGFja19vYmplY3RzPSIkcGFja19vYmplY3RzIC0tbG9jYWwiCitmaQogbmFtZT0kKGdpdC1yZXYtbGlzdCAtLW9iamVjdHMgJHJldl9saXN0ICQoZ2l0LXJldi1wYXJzZSAkcmV2X3BhcnNlKSB8CiAJZ2l0LXBhY2stb2JqZWN0cyAtLW5vbi1lbXB0eSAkcGFja19vYmplY3RzIC50bXAtcGFjaykgfHwKIAlleGl0IDEKQEAgLTU4LDYgKzYyLDcgQEAKIAkjIGFsbC1pbnRvLW9uZSBpcyB1c2VkLgogCWlmIHRlc3QgIiRhbGxfaW50b19vbmUiICE9ICcnICYmIHRlc3QgIiRleGlzdGluZyIgIT0gJycKIAl0aGVuCisJCXN5bmMKIAkJKCBjZCAiJFBBQ0tESVIiICYmCiAJCSAgZm9yIGUgaW4gJGV4aXN0aW5nCiAJCSAgZG8KZGlmZiAtLWdpdCBhL2dpdC1yZXNldC5zaCBiL2dpdC1yZXNldC5zaAppbmRleCBlMDI4ZmY2Li4yMDg2ZDI2IDEwMDc1NQotLS0gYS9naXQtcmVzZXQuc2gKKysrIGIvZ2l0LXJlc2V0LnNoCkBAIC0xLDYgKzEsMTAgQEAKICMhL2Jpbi9zaAogLiBnaXQtc2gtc2V0dXAgfHwgZGllICJOb3QgYSBnaXQgYXJjaGl2ZSIKIAordXNhZ2UgKCkgeworCWRpZSAnVXNhZ2U6IGdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZF0gIFs8Y29tbWl0LWlzaD5dJworfQorCiB0bXA9L3Zhci90bXAvcmVzZXQuJCQKIHRyYXAgJ3JtIC1mICR0bXAtKicgMCAxIDIgMyAxNQogCkBAIC0xMCw2ICsxNCw4IEBACiAJcmVzZXRfdHlwZT0iJDEiCiAJc2hpZnQKIAk7OworLSopCisgICAgICAgIHVzYWdlIDs7CiBlc2FjCiAKIHJldj0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgIiRAIikgfHwgZXhpdApAQCAtNjAsNyArNjYsNyBAQAogZWxzZQogCXJtIC1mICIkR0lUX0RJUi9PUklHX0hFQUQiCiBmaQotZWNobyAiJHJldiIgPiIkR0lUX0RJUi9IRUFEIgorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAiJHJldiIKIAogY2FzZSAiJHJlc2V0X3R5cGUiIGluCiAtLWhhcmQgKQpAQCAtODEsMTAgKzg3LDEyIEBACiAJCXdoaWxlICg8JGZoPikgewogCQkJY2hvbXA7CiAJCQlpZiAoISBleGlzdHMgJGtlZXB7JF99KSB7Ci0JCQkJcHJpbnQgIiRfXDAiOworCQkJCSMgaXQgaXMgb2sgaWYgdGhpcyBmYWlscyAtLSBpdCBtYXkgYWxyZWFkeQorCQkJCSMgaGF2ZSBiZWVuIGN1bGxlZCBieSBjaGVja291dC1pbmRleC4KKwkJCQl1bmxpbmsgJF87CiAJCQl9CiAJCX0KLQknICR0bXAtZXhpc3RzIHwgeGFyZ3MgLTAgcm0gLWYgLS0KKwknICR0bXAtZXhpc3RzCiAJOzsKIC0tc29mdCApCiAJOzsgIyBOb3RoaW5nIGVsc2UgdG8gZG8KZGlmZiAtLWdpdCBhL2dpdC1yZXNvbHZlLnNoIGIvZ2l0LXJlc29sdmUuc2gKaW5kZXggMWY1NTlkOC4uN2Q4ZmI1NCAxMDA3NTUKLS0tIGEvZ2l0LXJlc29sdmUuc2gKKysrIGIvZ2l0LXJlc29sdmUuc2gKQEAgLTQ1LDcgKzQ1LDcgQEAKICIkaGVhZCIpCiAJZWNobyAiVXBkYXRpbmcgZnJvbSAkaGVhZCB0byAkbWVyZ2UuIgogCWdpdC1yZWFkLXRyZWUgLXUgLW0gJGhlYWQgJG1lcmdlIHx8IGV4aXQgMQotCWVjaG8gJG1lcmdlID4gIiRHSVRfRElSIi9IRUFECisJZ2l0LXVwZGF0ZS1yZWYgSEVBRCAiJG1lcmdlIiAiJGhlYWQiCiAJZ2l0LWRpZmYtdHJlZSAtcCAkaGVhZCAkbWVyZ2UgfCBnaXQtYXBwbHkgLS1zdGF0CiAJZHJvcGhlYWRzCiAJZXhpdCAwCkBAIC05OSw2ICs5OSw2IEBACiBmaQogcmVzdWx0X2NvbW1pdD0kKGVjaG8gIiRtZXJnZV9tc2ciIHwgZ2l0LWNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAtcCAkaGVhZCAtcCAkbWVyZ2UpCiBlY2hvICJDb21taXR0ZWQgbWVyZ2UgJHJlc3VsdF9jb21taXQiCi1lY2hvICRyZXN1bHRfY29tbWl0ID4gIiRHSVRfRElSIi9IRUFECitnaXQtdXBkYXRlLXJlZiBIRUFEICIkcmVzdWx0X2NvbW1pdCIgIiRoZWFkIgogZ2l0LWRpZmYtdHJlZSAtcCAkaGVhZCAkcmVzdWx0X2NvbW1pdCB8IGdpdC1hcHBseSAtLXN0YXQKIGRyb3BoZWFkcwpkaWZmIC0tZ2l0IGEvZ2l0LXJldmVydC5zaCBiL2dpdC1yZXZlcnQuc2gKaW5kZXggNzIyYzRmNy4uZGZkOTE0YyAxMDA3NTUKLS0tIGEvZ2l0LXJldmVydC5zaAorKysgYi9naXQtcmV2ZXJ0LnNoCkBAIC01Niw5ICs1NiwxMiBAQAogCQlkaWUgIllvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCiAJOzsKICopCi0JY2hlY2tfY2xlYW5fdHJlZSB8fCBkaWUgIkNhbm5vdCBydW4gJG1lIGZyb20gYSBkaXJ0eSB0cmVlLiIKIAloZWFkPSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAogCQlkaWUgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCisJZmlsZXM9JChnaXQtZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSAkaGVhZCkgfHwgZXhpdAorCWlmIFsgIiRmaWxlcyIgXTsgdGhlbgorCQlkaWUgIkRpcnR5IGluZGV4OiBjYW5ub3QgJG1lIChkaXJ0eTogJGZpbGVzKSIKKwlmaQogCTs7CiBlc2FjCiAKZGlmZiAtLWdpdCBhL2dpdC1zaC1zZXR1cC5zaCBiL2dpdC1zaC1zZXR1cC5zaAppbmRleCBkNWJmYTYyLi5kYmI5ODg0IDEwMDc1NQotLS0gYS9naXQtc2gtc2V0dXAuc2gKKysrIGIvZ2l0LXNoLXNldHVwLnNoCkBAIC0xMywyMSArMTMsMTMgQEAKIHVuc2V0IENEUEFUSAogCiBkaWUoKSB7Ci0JZWNobyAiJEAiID4mMgorCWVjaG8gPiYyICIkQCIKIAlleGl0IDEKIH0KIAotY2hlY2tfY2xlYW5fdHJlZSgpIHsKLSAgICBkaXJ0eTFfPWBnaXQtdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaGAgJiYgewotICAgIGRpcnR5Ml89YGdpdC1kaWZmLWluZGV4IC0tbmFtZS1vbmx5IC0tY2FjaGVkIEhFQURgCi0gICAgY2FzZSAiJGRpcnR5Ml8iIGluICcnKSA6IDs7ICopIChleGl0IDEpIDs7IGVzYWMKLSAgICB9IHx8IHsKLQllY2hvID4mMiAiJGRpcnR5MV8iCi0JZWNobyAiJGRpcnR5Ml8iIHwgc2VkID4mMiAtZSAncy9eL21vZGlmaWVkOiAvJwotCShleGl0IDEpCi0gICAgfQotfQotCi1bIC1oICIkR0lUX0RJUi9IRUFEIiBdICYmCitjYXNlICIkKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQtc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpIiBpbgorcmVmcy8qKQk6IDs7CisqKQlmYWxzZSA7OworZXNhYyAmJgogWyAtZCAiJEdJVF9ESVIvcmVmcyIgXSAmJgotWyAtZCAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZLzAwIiBdCitbIC1kICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkvIiBdCmRpZmYgLS1naXQgYS9naXQtc2hvcnRsb2cucGVybCBiL2dpdC1zaG9ydGxvZy5wZXJsCmluZGV4IDhmMDk4NGIuLjBiMTRmODMgMTAwNzU1Ci0tLSBhL2dpdC1zaG9ydGxvZy5wZXJsCisrKyBiL2dpdC1zaG9ydGxvZy5wZXJsCkBAIC0yLDU1ICsyLDEzIEBACiAKIHVzZSBzdHJpY3Q7CiAKLSMKLSMgRXZlbiB3aXRoIGdpdCwgd2UgZG9uJ3QgYWx3YXlzIGhhdmUgbmFtZSB0cmFuc2xhdGlvbnMuCi0jIFNvIGhhdmUgYW4gZW1haWwtPnJlYWwgbmFtZSB0YWJsZSB0byB0cmFuc2xhdGUgdGhlCi0jIChob3BlZnVsbHkgZmV3KSBtaXNzaW5nIG5hbWVzCi0jCi1teSAlbWFpbG1hcCA9ICgKLQknUi5NYXJla0BzaC5jdnV0LmN6JyA9PiAnUnVkb2xmIE1hcmVrJywKLQknUmFsZi5XaWxkZW5odWVzQGdteC5kZScgPT4gJ1JhbGYgV2lsZGVuaHVlcycsCi0JJ2FoZXJybWFuQGRlLmlibS5jb20nID0+ICdBbmRyZWFzIEhlcnJtYW5uJywKLQknYWtwbUBvc2RsLm9yZycgPT4gJ0FuZHJldyBNb3J0b24nLAotCSdhbmRyZXcudmFzcXVlekBxbG9naWMuY29tJyA9PiAnQW5kcmV3IFZhc3F1ZXonLAotCSdhcXV5bmhAZ21haWwuY29tJyA9PiAnTmd1eWVuIEFuaCBRdXluaCcsCi0JJ2F4Ym9lQHN1c2UuZGUnID0+ICdKZW5zIEF4Ym9lJywKLQknYmxhaXNvcmJsYWRlQHlhaG9vLml0JyA9PiAnUGFvbG8gXCdCbGFpc29yYmxhZGVcJyBHaWFycnVzc28nLAotCSdidW5rQHN0dXN0YS5kZScgPT4gJ0FkcmlhbiBCdW5rJywKLQknZG9tZW5AY29kZXJvY2sub3JnJyA9PiAnRG9tZW4gUHVuY2VyJywKLQknZG91Z2dAdG9ycXVlLm5ldCcgPT4gJ0RvdWdsYXMgR2lsYmVydCcsCi0JJ2R3bXcyQHNoaW55Ym9vay5pbmZyYWRlYWQub3JnJyA9PiAnRGF2aWQgV29vZGhvdXNlJywKLQknZWNhc2hpbkBjb3JhaWQuY29tJyA9PiAnRWQgTCBDYXNoaW4nLAotCSdmZWxpeEBkZXJrbGVja3MuZGUnID0+ICdGZWxpeCBNb2VsbGVyJywKLQknZnphZ29Ac3lzdGVtZmFicmljd29ya3MuY29tJyA9PiAnRnJhbmsgWmFnbycsCi0JJ2dyZWdraEBzdXNlLmRlJyA9PiAnR3JlZyBLcm9haC1IYXJ0bWFuJywKLQknaGNoQGxzdC5kZScgPT4gJ0NocmlzdG9waCBIZWxsd2lnJywKLQknaHRlanVuQGdtYWlsLmNvbScgPT4gJ1RlanVuIEhlbycsCi0JJ2plamJAbXVsZ3JhdmUuKG5vbmUpJyA9PiAnSmFtZXMgQm90dG9tbGV5JywKLQknamVqYkB0aXRhbmljLmlsLnN0ZWVsZXllLmNvbScgPT4gJ0phbWVzIEJvdHRvbWxleScsCi0JJ2pnYXJ6aWtAcHJldHplbC55eXoudXMnID0+ICdKZWZmIEdhcnppaycsCi0JJ2pvaG5wb2xAMmthLm1pcHQucnUnID0+ICdFdmdlbml5IFBvbHlha292JywKLQkna2F5LnNpZXZlcnNAdnJmeS5vcmcnID0+ICdLYXkgU2lldmVycycsCi0JJ21pbnlhcmRAYWNtLm9yZycgPT4gJ0NvcmV5IE1pbnlhcmQnLAotCSdtc2hhaEB0ZWphLmNvbScgPT4gJ01pdGVzaCBzaGFoJywKLQkncGpAbHVkZC5sdHUuc2UnID0+ICdQZXRlciBBIEpvbnNzb24nLAotCSdybXBzQGpvZWwuaXN0LnV0bC5wdCcgPT4gJ1J1aSBTYXJhaXZhJywKLQknc2FudHR1Lmh5cmtrb0BnbWFpbC5jb20nID0+ICdTYW50dHUgSHlya2v2JywKLQknc2ltb25AdGhla2VsbGV5cy5vcmcudWsnID0+ICdTaW1vbiBLZWxsZXknLAotCSdzc2FudEBpbi5pYm0uY29tJyA9PiAnU2FjaGluIFAgU2FudCcsCi0JJ3RlcnJhQGdub21lLm9yZycgPT4gJ01vcnRlbiBXZWxpbmRlcicsCi0JJ3RvbnkubHVja0BpbnRlbC5jb20nID0+ICdUb255IEx1Y2snLAotCSd3ZWxpbmRlckBhbmVtb25lLnJlbnRlYy5jb20nID0+ICdNb3J0ZW4gV2VsaW5kZXInLAotCSd3ZWxpbmRlckBkYXJ0ZXIucmVudGVjLmNvbScgPT4gJ01vcnRlbiBXZWxpbmRlcicsCi0JJ3dlbGluZGVyQHRyb2xsLmNvbScgPT4gJ01vcnRlbiBXZWxpbmRlcicsCi0pOwotCitteSAoJW1haWxtYXApOworbXkgKCVlbWFpbCk7CiBteSAoJW1hcCk7CiBteSAkcHN0YXRlID0gMTsKIG15ICRuX3JlY29yZHMgPSAwOwogbXkgJG5fb3V0cHV0ID0gMDsKIAotCiBzdWIgc2hvcnRsb2dfZW50cnkoJCQpIHsKIAlteSAoJG5hbWUsICRkZXNjKSA9IEBfOwogCW15ICRrZXkgPSAkbmFtZTsKQEAgLTEwOCw0MSArNjYsMzUgQEAKIAkJaWYgKCRwc3RhdGUgPT0gMSkgewogCQkJbXkgKCRlbWFpbCk7CiAKLQkJCW5leHQgdW5sZXNzIC9eW0FhXXV0aG9yOj8gKC4qKTwoLiopPi4qJC87Ci0JCisJCQluZXh0IHVubGVzcyAvXltBYV11dGhvcjo/XHMqKC4qPylccyo8KC4qKT4vOworCiAJCQkkbl9yZWNvcmRzKys7Ci0JCisKIAkJCSRhdXRob3IgPSAkMTsKIAkJCSRlbWFpbCA9ICQyOwogCQkJJGRlc2MgPSB1bmRlZjsKIAotCQkJIyB0cmltIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0JCQkjIHdoeSBkb2Vzbid0IGNob21wIHdvcms/Ci0JCQl3aGlsZSAoJGF1dGhvciAmJiAoJGF1dGhvciA9fiAvXHMkLykpIHsKLQkJCQljaG9wICRhdXRob3I7Ci0JCQl9Ci0JCiAJCQkjIGNzZXQgYXV0aG9yIGZpeHVwcwogCQkJaWYgKGV4aXN0cyAkbWFpbG1hcHskZW1haWx9KSB7CiAJCQkJJGF1dGhvciA9ICRtYWlsbWFweyRlbWFpbH07CiAJCQl9IGVsc2lmIChleGlzdHMgJG1haWxtYXB7JGF1dGhvcn0pIHsKIAkJCQkkYXV0aG9yID0gJG1haWxtYXB7JGF1dGhvcn07Ci0JCQl9IGVsc2lmICgoISRhdXRob3IpIHx8ICgkYXV0aG9yIGVxICIiKSkgeworCQkJfSBlbHNpZiAoISRhdXRob3IpIHsKIAkJCQkkYXV0aG9yID0gJGVtYWlsOwogCQkJfQotCQorCQkJJGVtYWlseyRhdXRob3J9eyRlbWFpbH0rKzsKIAkJCSRwc3RhdGUrKzsKIAkJfQotCQorCiAJCSMgc2tpcCB0byBibGFuayBsaW5lCiAJCWVsc2lmICgkcHN0YXRlID09IDIpIHsKIAkJCW5leHQgdW5sZXNzIC9eXHMqJC87CiAJCQkkcHN0YXRlKys7CiAJCX0KLQkKKwogCQkjIHNraXAgdG8gbm9uLWJsYW5rIGxpbmUKIAkJZWxzaWYgKCRwc3RhdGUgPT0gMykgewotCQkJbmV4dCB1bmxlc3MgL15ccyooXFMuKikkLzsKKwkJCW5leHQgdW5sZXNzIC9eXHMqPyguKikvOwogCiAJCQkjIHNraXAgbGluZXMgdGhhdCBhcmUgb2J2aW91c2x5IG5vdAogCQkJIyBhIDEtbGluZSBjc2V0IGRlc2NyaXB0aW9uCkBAIC0xNTAsOSArMTAyLDkgQEAKIAogCQkJY2hvbXA7CiAJCQkkZGVzYyA9ICQxOwotCQorCiAJCQkmc2hvcnRsb2dfZW50cnkoJGF1dGhvciwgJGRlc2MpOwotCQorCiAJCQkkcHN0YXRlID0gMTsKIAkJfQogCQpAQCAtMTYyLDE2ICsxMTQsODcgQEAKIAl9CiB9CiAKK3N1YiByZWFkX21haWxtYXAgeworCW15ICgkZmgsICRtYWlsbWFwKSA9IEBfOworCXdoaWxlICg8JGZoPikgeworCQljaG9tcDsKKwkJaWYgKC9eKFteI10uKj8pXHMqPCguKik+LykgeworCQkJJG1haWxtYXAtPnskMn0gPSAkMTsKKwkJfQorCX0KK30KKworc3ViIHNldHVwX21haWxtYXAgeworCXJlYWRfbWFpbG1hcChcKkRBVEEsIFwlbWFpbG1hcCk7CisJaWYgKC1mICcubWFpbG1hcCcpIHsKKwkJbXkgJGZoID0gdW5kZWY7CisJCW9wZW4gJGZoLCAnPCcsICcubWFpbG1hcCc7CisJCXJlYWRfbWFpbG1hcCgkZmgsIFwlbWFpbG1hcCk7CisJCWNsb3NlICRmaDsKKwl9Cit9CisKIHN1YiBmaW5hbGl6ZSB7CiAJI3ByaW50ICJcbiRuX3JlY29yZHMgcmVjb3JkcyBwYXJzZWQuXG4iOwogCiAJaWYgKCRuX3JlY29yZHMgIT0gJG5fb3V0cHV0KSB7CiAJCWRpZSAicGFyc2UgZXJyb3I6IGlucHV0IHJlY29yZHMgIT0gb3V0cHV0IHJlY29yZHNcbiI7CiAJfQorCWlmICgwKSB7CisJCWZvciBteSAkYXV0aG9yIChzb3J0IGtleXMgJWVtYWlsKSB7CisJCQlteSAkZSA9ICRlbWFpbHskYXV0aG9yfTsKKwkJCWZvciBteSAkZW1haWwgKHNvcnQga2V5cyAlJGUpIHsKKwkJCQlwcmludCBTVERFUlIgIiRhdXRob3IgPCRlbWFpbD5cbiI7CisJCQl9CisJCX0KKwl9CiB9CiAKKyZzZXR1cF9tYWlsbWFwOwogJmNoYW5nZWxvZ19pbnB1dDsKICZzaG9ydGxvZ19vdXRwdXQ7CiAmZmluYWxpemU7CiBleGl0KDApOwogCisKK19fREFUQV9fCisjCisjIEV2ZW4gd2l0aCBnaXQsIHdlIGRvbid0IGFsd2F5cyBoYXZlIG5hbWUgdHJhbnNsYXRpb25zLgorIyBTbyBoYXZlIGFuIGVtYWlsLT5yZWFsIG5hbWUgdGFibGUgdG8gdHJhbnNsYXRlIHRoZQorIyAoaG9wZWZ1bGx5IGZldykgbWlzc2luZyBuYW1lcworIworQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorQW5kcmVhcyBIZXJybWFubiA8YWhlcnJtYW5AZGUuaWJtLmNvbT4KK0FuZHJldyBNb3J0b24gPGFrcG1Ab3NkbC5vcmc+CitBbmRyZXcgVmFzcXVleiA8YW5kcmV3LnZhc3F1ZXpAcWxvZ2ljLmNvbT4KK0NocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgorQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgorRGF2aWQgV29vZGhvdXNlIDxkd213MkBzaGlueWJvb2suaW5mcmFkZWFkLm9yZz4KK0RvbWVuIFB1bmNlciA8ZG9tZW5AY29kZXJvY2sub3JnPgorRG91Z2xhcyBHaWxiZXJ0IDxkb3VnZ0B0b3JxdWUubmV0PgorRWQgTCBDYXNoaW4gPGVjYXNoaW5AY29yYWlkLmNvbT4KK0V2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CitGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+CitGcmFuayBaYWdvIDxmemFnb0BzeXN0ZW1mYWJyaWN3b3Jrcy5jb20+CitHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorSmFtZXMgQm90dG9tbGV5IDxqZWpiQG11bGdyYXZlLihub25lKT4KK0phbWVzIEJvdHRvbWxleSA8amVqYkB0aXRhbmljLmlsLnN0ZWVsZXllLmNvbT4KK0plZmYgR2FyemlrIDxqZ2FyemlrQHByZXR6ZWwueXl6LnVzPgorSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KK0theSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KK01pdGVzaCBzaGFoIDxtc2hhaEB0ZWphLmNvbT4KK01vcnRlbiBXZWxpbmRlciA8dGVycmFAZ25vbWUub3JnPgorTW9ydGVuIFdlbGluZGVyIDx3ZWxpbmRlckBhbmVtb25lLnJlbnRlYy5jb20+CitNb3J0ZW4gV2VsaW5kZXIgPHdlbGluZGVyQGRhcnRlci5yZW50ZWMuY29tPgorTW9ydGVuIFdlbGluZGVyIDx3ZWxpbmRlckB0cm9sbC5jb20+CitOZ3V5ZW4gQW5oIFF1eW5oIDxhcXV5bmhAZ21haWwuY29tPgorUGFvbG8gJ0JsYWlzb3JibGFkZScgR2lhcnJ1c3NvIDxibGFpc29yYmxhZGVAeWFob28uaXQ+CitQZXRlciBBIEpvbnNzb24gPHBqQGx1ZGQubHR1LnNlPgorUmFsZiBXaWxkZW5odWVzIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorUnVkb2xmIE1hcmVrIDxSLk1hcmVrQHNoLmN2dXQuY3o+CitSdWkgU2FyYWl2YSA8cm1wc0Bqb2VsLmlzdC51dGwucHQ+CitTYWNoaW4gUCBTYW50IDxzc2FudEBpbi5pYm0uY29tPgorU2FudHR1IEh5cmtrGyxBdhsoQiA8c2FudHR1Lmh5cmtrb0BnbWFpbC5jb20+CitTaW1vbiBLZWxsZXkgPHNpbW9uQHRoZWtlbGxleXMub3JnLnVrPgorVGVqdW4gSGVvIDxodGVqdW5AZ21haWwuY29tPgorVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgpkaWZmIC0tZ2l0IGEvZ2l0LXN0YXR1cy5zaCBiL2dpdC1zdGF0dXMuc2gKaW5kZXggNjIxZmE0OS4uODM3ZjMzNCAxMDA3NTUKLS0tIGEvZ2l0LXN0YXR1cy5zaAorKysgYi9naXQtc3RhdHVzLnNoCkBAIC0xMSw3ICsxMSw3IEBACiAjCiAiCiAgIHRyYWlsZXI9IiIKLSAgd2hpbGUgcmVhZCBvbGRtb2RlIG1vZGUgb2xkc2hhIHNoYSBzdGF0dXMgbmFtZSBuZXduYW1lCisgIHdoaWxlIHJlYWQgc3RhdHVzIG5hbWUgbmV3bmFtZQogICBkbwogICAgIGVjaG8gLW4gIiRoZWFkZXIiCiAgICAgaGVhZGVyPSIiCkBAIC0zMSwxOCArMzEsMjEgQEAKICAgWyAiJGhlYWRlciIgXQogfQogCi1icmFuY2g9YHJlYWRsaW5rICIkR0lUX0RJUi9IRUFEImAKK2JyYW5jaD0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQtc3ltYm9saWMtcmVmIEhFQUQpCiBjYXNlICIkYnJhbmNoIiBpbgogcmVmcy9oZWFkcy9tYXN0ZXIpIDs7CiAqKQllY2hvICIjIE9uIGJyYW5jaCAkYnJhbmNoIiA7OwogZXNhYwogCi1naXQtdXBkYXRlLWluZGV4IC0tcmVmcmVzaCA+L2Rldi9udWxsIDI+JjEKK2dpdC11cGRhdGUtaW5kZXggLXEgLS11bm1lcmdlZCAtLXJlZnJlc2ggfHwgZXhpdAogCi1pZiB0ZXN0IC1mICIkR0lUX0RJUi9IRUFEIgoraWYgR0lUX0RJUj0iJEdJVF9ESVIiIGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEKIHRoZW4KLQlnaXQtZGlmZi1pbmRleCAtTSAtLWNhY2hlZCBIRUFEIHwKLQlzZWQgJ3MvXjovLycgfAorCWdpdC1kaWZmLWluZGV4IC1NIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLS1kaWZmLWZpbHRlcj1NRFRDUkEgSEVBRCB8CisJc2VkIC1lICcKKwkJcy9cXC9cXFxcL2cKKwkJcy8gL1xcIC9nCisJJyB8CiAJcmVwb3J0ICJVcGRhdGVkIGJ1dCBub3QgY2hlY2tlZCBpbiIgIndpbGwgY29tbWl0IgogCiAJY29tbWl0dGFibGU9IiQ/IgpAQCAtNTEsMzEgKzU0LDQ5IEBACiAjIEluaXRpYWwgY29tbWl0CiAjJwogCWdpdC1scy1maWxlcyB8Ci0Jc2VkICdzL14vbyBvIG8gbyBBIC8nIHwKKwlzZWQgLWUgJworCQlzL1xcL1xcXFwvZworCQlzLyAvXFwgL2cKKwkJcy9eL0EgLworCScgfAogCXJlcG9ydCAiVXBkYXRlZCBidXQgbm90IGNoZWNrZWQgaW4iICJ3aWxsIGNvbW1pdCIKIAogCWNvbW1pdHRhYmxlPSIkPyIKIGZpCiAKLWdpdC1kaWZmLWZpbGVzIHwKLXNlZCAncy9eOi8vJyB8CitnaXQtZGlmZi1maWxlcyAgLS1uYW1lLXN0YXR1cyB8CitzZWQgLWUgJworCXMvXFwvXFxcXC9nCisJcy8gL1xcIC9nCisnIHwKIHJlcG9ydCAiQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQiICJ1c2UgZ2l0LXVwZGF0ZS1pbmRleCB0byBtYXJrIGZvciBjb21taXQiCiAKLWlmIGdyZXAgLXYgJ14jJyAiJEdJVF9ESVIvaW5mby9leGNsdWRlIiA+L2Rldi9udWxsIDI+JjEKKworaWYgdGVzdCAtZiAiJEdJVF9ESVIvaW5mby9leGNsdWRlIgogdGhlbgotCWdpdC1scy1maWxlcyAtLW90aGVycyBcCi0JICAgIC0tZXhjbHVkZS1mcm9tPSIkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUiIFwKLQkgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSB8Ci0Jc2VkIC1lICcKLQkxaVwKLSNcCi0jIElnbm9yZWQgZmlsZXM6XAotIyAgICh1c2UgImdpdCBhZGQiIHRvIGFkZCB0byBjb21taXQpXAotIwotCXMvXi8jCS8KLQkkYVwKLSMnCi1maQorICAgIGdpdC1scy1maWxlcyAteiAtLW90aGVycyBcCisJLS1leGNsdWRlLWZyb209IiRHSVRfRElSL2luZm8vZXhjbHVkZSIgXAorICAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlCitlbHNlCisgICAgZ2l0LWxzLWZpbGVzIC16IC0tb3RoZXJzIFwKKyAgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZQorZmkgfAorcGVybCAtZSAnJC8gPSAiXDAiOworCW15ICRzaG93biA9IDA7CisJd2hpbGUgKDw+KSB7CisJCWNob21wOworCQlzfFxcfFxcXFx8ZzsKKwkJc3xcdHxcXHR8ZzsKKwkJc3xcbnxcXG58ZzsKKwkJcy9eLyMJLzsKKwkJaWYgKCEkc2hvd24pIHsKKwkJCXByaW50ICIjXG4jIFVudHJhY2tlZCBmaWxlczpcbiI7CisJCQlwcmludCAiIyAgICh1c2UgXCJnaXQgYWRkXCIgdG8gYWRkIHRvIGNvbW1pdClcbiNcbiI7CisJCQkkc2hvd24gPSAxOworCQl9CisJCXByaW50ICIkX1xuIjsKKwl9CisnCiAKIGNhc2UgIiRjb21taXR0YWJsZSIgaW4KIDApCmRpZmYgLS1naXQgYS9naXQtc3ZuaW1wb3J0LnBlcmwgYi9naXQtc3ZuaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDViNmExOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdm5pbXBvcnQucGVybApAQCAtMCwwICsxLDcxNyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKKyMgVGhpcyB0b29sIGlzIGNvcHlyaWdodCAoYykgMjAwNSwgTWF0dGhpYXMgVXJsaWNocy4KKyMgSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdudSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorIworIyBUaGUgYmFzaWMgaWRlYSBpcyB0byBwdWxsIGFuZCBhbmFseXplIFNWTiBjaGFuZ2VzLgorIworIyBDaGVja2luZyBvdXQgdGhlIGZpbGVzIGlzIGRvbmUgYnkgYSBzaW5nbGUgbG9uZy1ydW5uaW5nIFNWTiBjb25uZWN0aW9uLgorIworIyBUaGUgaGVhZCByZXZpc2lvbiBpcyBvbiBicmFuY2ggIm9yaWdpbiIgYnkgZGVmYXVsdC4KKyMgWW91IGNhbiBjaGFuZ2UgdGhhdCB3aXRoIHRoZSAnLW8nIG9wdGlvbi4KKworcmVxdWlyZSA1LjAwODsgIyBmb3Igc2hlbGwtc2FmZSBvcGVuKCItfCIsTElTVCkKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgVGltZTo6TG9jYWw7Cit1c2UgSU86OlBpcGU7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSYTsKKworZGllICJOZWVkIENWTjpDb3JlIDEuMi4xIG9yIGJldHRlciIgaWYgJFNWTjo6Q29yZTo6VkVSU0lPTiBsdCAiMS4yLjEiOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitvdXIoJG9wdF9oLCRvcHRfbywkb3B0X3YsJG9wdF91LCRvcHRfQywkb3B0X2ksJG9wdF9tLCRvcHRfTSwkb3B0X3QsJG9wdF9ULCRvcHRfYiwkb3B0X3MsJG9wdF9sLCRvcHRfZCwkb3B0X0QpOworCitzdWIgdXNhZ2UoKSB7CisJcHJpbnQgU1RERVJSIDw8RU5EOworVXNhZ2U6ICR7XGJhc2VuYW1lICQwfSAgICAgIyBmZXRjaC91cGRhdGUgR0lUIGZyb20gQ1ZTCisgICAgICAgWy1vIGJyYW5jaC1mb3ItSEVBRF0gWy1oXSBbLXZdIFstbCBtYXhfbnVtX2NoYW5nZXNdCisgICAgICAgWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXQgdGFnbmFtZV0gWy1UIHRydW5rbmFtZV0gWy1iIGJyYW5jaG5hbWVdCisgICAgICAgWy1kfC1EXSBbLWldIFstdV0gWy1zIHN0YXJ0X2NoZ10gWy1tXSBbLU0gcmVnZXhdIFtTVk5fVVJMXQorRU5ECisJZXhpdCgxKTsKK30KKworZ2V0b3B0cygiYjpDOmREaGlsOm1NOm86czp0OlQ6dXYiKSBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitteSAkdGFnX25hbWUgPSAkb3B0X3QgfHwgInRhZ3MiOworbXkgJHRydW5rX25hbWUgPSAkb3B0X1QgfHwgInRydW5rIjsKK215ICRicmFuY2hfbmFtZSA9ICRvcHRfYiB8fCAiYnJhbmNoZXMiOworCitAQVJHViA9PSAxIG9yIEBBUkdWID09IDIgb3IgdXNhZ2UoKTsKKworJG9wdF9vIHx8PSAib3JpZ2luIjsKKyRvcHRfcyB8fD0gMTsKKyRvcHRfbCA9IDEwMCB1bmxlc3MgZGVmaW5lZCAkb3B0X2w7CitteSAkZ2l0X3RyZWUgPSAkb3B0X0M7CiskZ2l0X3RyZWUgfHw9ICIuIjsKKworbXkgJHN2bl91cmwgPSAkQVJHVlswXTsKK215ICRzdm5fZGlyID0gJEFSR1ZbMV07CisKK291ciBAbWVyZ2VyeCA9ICgpOworaWYgKCRvcHRfbSkgeworCUBtZXJnZXJ4ID0gKCBxci9cVyg/OmZyb218b2Z8bWVyZ2V8bWVyZ2luZ3xtZXJnZWQpIChcdyspL2kgKTsKK30KK2lmICgkb3B0X00pIHsKKwlwdXNoIChAbWVyZ2VyeCwgcXIvJG9wdF9NLyk7Cit9CisKK3NlbGVjdChTVERFUlIpOyAkfD0xOyBzZWxlY3QoU1RET1VUKTsKKworCitwYWNrYWdlIFNWTmNvbm47CisjIEJhc2ljIFNWTiBjb25uZWN0aW9uLgorIyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gY29ubmVjdGluZyBhbmQgZG93bmxvYWRpbmcsIHNvIC4uLgorCit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBQT1NJWCBxdyhzdHJmdGltZSBkdXAyKTsKKworc3ViIG5ldyB7CisJbXkoJHdoYXQsJHJlcG8pID0gQF87CisJJHdoYXQ9cmVmKCR3aGF0KSBpZiByZWYoJHdoYXQpOworCisJbXkgJHNlbGYgPSB7fTsKKwkkc2VsZi0+eydidWZmZXInfSA9ICIiOworCWJsZXNzKCRzZWxmLCR3aGF0KTsKKworCSRyZXBvID1+IHMjLyskIyM7CisJJHNlbGYtPnsnZnVsbHJlcCd9ID0gJHJlcG87CisJJHNlbGYtPmNvbm4oKTsKKworCXJldHVybiAkc2VsZjsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJbXkgJHMgPSBTVk46OlJhLT5uZXcoJHJlcG8pOworCisJZGllICJTVk4gY29ubmVjdGlvbiB0byAkcmVwbzogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHM7CisJJHNlbGYtPnsnc3ZuJ30gPSAkczsKKwkkc2VsZi0+eydyZXBvJ30gPSAkcmVwbzsKKwkkc2VsZi0+eydtYXhyZXYnfSA9ICRzLT5nZXRfbGF0ZXN0X3Jldm51bSgpOworfQorCitzdWIgZmlsZSB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKworCW15ICgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRzdm4uWFhYWFhYJywKKwkJICAgIERJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCisJcHJpbnQgIi4uLiAkcmV2ICRwYXRoIC4uLlxuIiBpZiAkb3B0X3Y7CisJZXZhbCB7ICRzZWxmLT57J3N2bid9LT5nZXRfZmlsZSgkcGF0aCwkcmV2LCRmaCk7IH07CisJaWYoJEApIHsKKwkJcmV0dXJuIHVuZGVmIGlmICRAID1+IC9BdHRlbXB0ZWQgdG8gZ2V0IGNoZWNrc3VtLzsKKwkJZGllICRAOworCX0KKwljbG9zZSAoJGZoKTsKKworCXJldHVybiAkbmFtZTsKK30KKworcGFja2FnZSBtYWluOwordXNlIFVSSTsKKworbXkgJHN2biA9ICRzdm5fdXJsOworJHN2biAuPSAiLyRzdm5fZGlyIiBpZiBkZWZpbmVkICRzdm5fZGlyOworJHN2biA9IFNWTmNvbm4tPm5ldygkc3ZuKTsKKworbXkgJGx3cF91YTsKK2lmKCRvcHRfZCBvciAkb3B0X0QpIHsKKwkkc3ZuX3VybCA9IFVSSS0+bmV3KCRzdm5fdXJsKS0+Y2Fub25pY2FsOworCWlmKCRvcHRfRCkgeworCQkkc3ZuX2RpciA9fiBzIy8qJCMvIzsKKwl9IGVsc2UgeworCQkkc3ZuX2RpciA9ICIiOworCX0KKwlpZiAoJHN2bl91cmwtPnNjaGVtZSBlcSAiaHR0cCIpIHsKKwkJdXNlIExXUDo6VXNlckFnZW50OworCQkkbHdwX3VhID0gTFdQOjpVc2VyQWdlbnQtPm5ldyhrZWVwX2FsaXZlID0+IDEsIHJlcXVlc3RzX3JlZGlyZWN0YWJsZSA9PiBbXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBub3QgSFRUUDsgdHVybmluZyBvZmYgZGlyZWN0IGZpbGUgYWNjZXNzXG4iOworCQkkb3B0X2Q9MDsKKwl9Cit9CisKK3N1YiBwZGF0ZSgkKSB7CisJbXkoJGQpID0gQF87CisJJGQgPX4gbSMoXGRcZFxkXGQpLShcZFxkKS0oXGRcZClUKFxkXGQpOihcZFxkKTooXGRcZCkjCisJCW9yIGRpZSAiVW5wYXJzZWFibGUgZGF0ZTogJGRcbiI7CisJbXkgJHk9JDE7ICR5LT0xOTAwIGlmICR5PjE5MDA7CisJcmV0dXJuIHRpbWVnbSgkNnx8MCwkNSwkNCwkMywkMi0xLCR5KTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCisKK3N1YiBnZXRfaGVhZHJlZigkJCkgeworICAgIG15ICRuYW1lICAgID0gc2hpZnQ7CisgICAgbXkgJGdpdF9kaXIgPSBzaGlmdDsKKyAgICBteSAkc2hhOworCisgICAgaWYgKG9wZW4oQywiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbmFtZSIpKSB7CisJY2hvbXAoJHNoYSA9IDxDPik7CisJY2xvc2UoQyk7CisJbGVuZ3RoKCRzaGEpID09IDQwCisJICAgIG9yIGRpZSAiQ2Fubm90IGdldCBoZWFkIGlkIGZvciAkbmFtZSAoJHNoYSk6ICQhXG4iOworICAgIH0KKyAgICByZXR1cm4gJHNoYTsKK30KKworCistZCAkZ2l0X3RyZWUKKwlvciBta2RpcigkZ2l0X3RyZWUsMDc3NykKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJGdpdF90cmVlOiAkISI7CitjaGRpcigkZ2l0X3RyZWUpOworCitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICRmb3J3YXJkX21hc3RlciA9IDA7CitteSAlYnJhbmNoZXM7CisKK215ICRnaXRfZGlyID0gJEVOVnsiR0lUX0RJUiJ9IHx8ICIuZ2l0IjsKKyRnaXRfZGlyID0gZ2V0d2QoKS4iLyIuJGdpdF9kaXIgdW5sZXNzICRnaXRfZGlyID1+IG0jXi8jOworJEVOVnsiR0lUX0RJUiJ9ID0gJGdpdF9kaXI7CitteSAkb3JpZ19naXRfaW5kZXg7Ciskb3JpZ19naXRfaW5kZXggPSAkRU5We0dJVF9JTkRFWF9GSUxFfSBpZiBleGlzdHMgJEVOVntHSVRfSU5ERVhfRklMRX07CitteSAoJGdpdF9paCwgJGdpdF9pbmRleCkgPSB0ZW1wZmlsZSgnZ2l0WFhYWFhYJywgU1VGRklYID0+ICcuaWR4JywKKwkJCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKK2Nsb3NlICgkZ2l0X2loKTsKKyRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGdpdF9pbmRleDsKK215ICRtYXhudW0gPSAwOworbXkgJGxhc3RfcmV2ID0gIiI7CitteSAkbGFzdF9icmFuY2g7CitteSAkY3VycmVudF9yZXYgPSAkb3B0X3MtMTsKK3VubGVzcygtZCAkZ2l0X2RpcikgeworCXN5c3RlbSgiZ2l0LWluaXQtZGIiKTsKKwlkaWUgIkNhbm5vdCBpbml0IHRoZSBHSVQgZGIgYXQgJGdpdF90cmVlOiAkP1xuIiBpZiAkPzsKKwlzeXN0ZW0oImdpdC1yZWFkLXRyZWUiKTsKKwlkaWUgIkNhbm5vdCBpbml0IGFuIGVtcHR5IHRyZWU6ICQ/XG4iIGlmICQ/OworCisJJGxhc3RfYnJhbmNoID0gJG9wdF9vOworCSRvcmlnX2JyYW5jaCA9ICIiOworfSBlbHNlIHsKKwktZiAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kb3B0X28iCisJCW9yIGRpZSAiQnJhbmNoICckb3B0X28nIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJFaXRoZXIgdXNlIHRoZSBjb3JyZWN0ICctbyBicmFuY2gnIG9wdGlvbixcbiIuCisJCSAgICAgICAib3IgaW1wb3J0IHRvIGEgbmV3IHJlcG9zaXRvcnkuXG4iOworCisJLWYgIiRnaXRfZGlyL3N2bjJnaXQiCisJCW9yIGRpZSAiJyRnaXRfZGlyL3N2bjJnaXQnIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJZb3UgbmVlZCB0aGF0IGZpbGUgZm9yIGluY3JlbWVudGFsIGltcG9ydHMuXG4iOworCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKHJlYWRsaW5rKCIkZ2l0X2Rpci9IRUFEIikpOworCXVubGVzcygkbGFzdF9icmFuY2gpIHsKKwkJd2FybiAiQ2Fubm90IHJlYWQgdGhlIGxhc3QgYnJhbmNoIG5hbWU6ICQhIC0tIGFzc3VtaW5nICdtYXN0ZXInXG4iOworCQkkbGFzdF9icmFuY2ggPSAibWFzdGVyIjsKKwl9CisJJG9yaWdfYnJhbmNoID0gJGxhc3RfYnJhbmNoOworCSRsYXN0X3JldiA9IGdldF9oZWFkcmVmKCRvcmlnX2JyYW5jaCwgJGdpdF9kaXIpOworCWlmICgtZiAiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIikgeworCQlkaWUgPDxFT007CitTVk4yR0lUX0hFQUQgZXhpc3RzLgorTWFrZSBzdXJlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgY29ycmVzcG9uZHMgdG8gSEVBRCBhbmQgcmVtb3ZlIFNWTjJHSVRfSEVBRC4KK1lvdSBtYXkgbmVlZCB0byBydW4KKworICAgIGdpdC1yZWFkLXRyZWUgLW0gLXUgU1ZOMkdJVF9IRUFEIEhFQUQKK0VPTQorCX0KKwlzeXN0ZW0oJ2NwJywgIiRnaXRfZGlyL0hFQUQiLCAiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIik7CisKKwkkZm9yd2FyZF9tYXN0ZXIgPQorCSAgICAkb3B0X28gbmUgJ21hc3RlcicgJiYgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIiAmJgorCSAgICBzeXN0ZW0oJ2NtcCcsICctcycsICIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIsCisJCQkJIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIikgPT0gMDsKKworCSMgcG9wdWxhdGUgaW5kZXgKKwlzeXN0ZW0oJ2dpdC1yZWFkLXRyZWUnLCAkbGFzdF9yZXYpOworCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisKKwkjIEdldCB0aGUgbGFzdCBpbXBvcnQgdGltZXN0YW1wcworCW9wZW4gbXkgJEIsIjwiLCAiJGdpdF9kaXIvc3ZuMmdpdCI7CisJd2hpbGUoPCRCPikgeworCQljaG9tcDsKKwkJbXkoJG51bSwkYnJhbmNoLCRyZWYpID0gc3BsaXQ7CisJCSRicmFuY2hlc3skYnJhbmNofXskbnVtfSA9ICRyZWY7CisJCSRicmFuY2hlc3skYnJhbmNofXsiTEFTVCJ9ID0gJHJlZjsKKwkJJGN1cnJlbnRfcmV2ID0gJG51bSBpZiAkY3VycmVudF9yZXYgPCAkbnVtOworCX0KKwljbG9zZSgkQik7Cit9CistZCAkZ2l0X2RpcgorCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSBnaXQgc3ViZGlyICgkZ2l0X2RpcikuXG4iOworCitvcGVuIEJSQU5DSEVTLCI+PiIsICIkZ2l0X2Rpci9zdm4yZ2l0IjsKKworc3ViIGdldF9maWxlKCQkJCkgeworCW15KCRyZXYsJGJyYW5jaCwkcGF0aCkgPSBAXzsKKworCSMgcmV2ZXJ0IHNwbGl0X3BhdGgoKSwgYmVsb3cKKwlteSAkc3ZucGF0aDsKKwkkcGF0aCA9ICIiIGlmICRwYXRoIGVxICIvIjsgIyB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgLi4uCisJaWYoJGJyYW5jaCBlcSAiLyIpIHsKKwkJJHN2bnBhdGggPSAiJHRydW5rX25hbWUvJHBhdGgiOworCX0gZWxzaWYoJGJyYW5jaCA9fiBtI14vIykgeworCQkkc3ZucGF0aCA9ICIkdGFnX25hbWUkYnJhbmNoLyRwYXRoIjsKKwl9IGVsc2UgeworCQkkc3ZucGF0aCA9ICIkYnJhbmNoX25hbWUvJGJyYW5jaC8kcGF0aCI7CisJfQorCisJIyBub3cgZ2V0IGl0CisJbXkgJG5hbWU7CisJaWYoJG9wdF9kKSB7CisJCW15KCRyZXEsJHJlcyk7CisKKwkJIyAvc3ZuLyFzdm4vYmMvMi9kamFuZ28vdHJ1bmsvZGphbmdvLWRvY3MvYnVpbGQucHkKKwkJbXkgJHVybD0kc3ZuX3VybC0+Y2xvbmUoKTsKKwkJJHVybC0+cGF0aCgkdXJsLT5wYXRoLiIvIXN2bi9iYy8kcmV2LyRzdm5fZGlyJHN2bnBhdGgiKTsKKwkJcHJpbnQgIi4uLiAkcGF0aC4uLlxuIiBpZiAkb3B0X3Y7CisJCSRyZXEgPSBIVFRQOjpSZXF1ZXN0LT5uZXcoR0VUID0+ICR1cmwpOworCQkkcmVzID0gJGx3cF91YS0+cmVxdWVzdCgkcmVxKTsKKwkJaWYgKCRyZXMtPmlzX3N1Y2Nlc3MpIHsKKwkJCW15ICRmaDsKKwkJCSgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRzdm4uWFhYWFhYJywKKwkJCURJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCQkJcHJpbnQgJGZoICRyZXMtPmNvbnRlbnQ7CisJCQljbG9zZSgkZmgpIG9yIGRpZSAiQ291bGQgbm90IHdyaXRlICRuYW1lOiAkIVxuIjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiB1bmRlZiBpZiAkcmVzLT5jb2RlID09IDMwMTsgIyBkaXJlY3Rvcnk/CisJCQlkaWUgJHJlcy0+c3RhdHVzX2xpbmUuIiBhdCAkdXJsXG4iOworCQl9CisJfSBlbHNlIHsKKwkJJG5hbWUgPSAkc3ZuLT5maWxlKCIvJHN2bnBhdGgiLCRyZXYpOworCQlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJG5hbWU7CisJfQorCisJb3BlbiBteSAkRiwgJy18JywgImdpdC1oYXNoLW9iamVjdCIsICItdyIsICRuYW1lCisJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOworCW15ICRzaGEgPSA8JEY+OworCWNob21wICRzaGE7CisJY2xvc2UgJEY7CisJdW5saW5rICRuYW1lOworCW15ICRtb2RlID0gIjA2NDQiOyAjIFNWIGRvZXMgbm90IHNlZW0gdG8gc3RvcmUgYW55IGZpbGUgbW9kZXMKKwlyZXR1cm4gWyRtb2RlLCAkc2hhLCAkcGF0aF07Cit9CisKK3N1YiBzcGxpdF9wYXRoKCQkKSB7CisJbXkoJHJldiwkcGF0aCkgPSBAXzsKKwlteSAkYnJhbmNoOworCisJaWYoJHBhdGggPX4gcyNeL1xRJHRhZ19uYW1lXEUvKFteL10rKS8/IyMpIHsKKwkJJGJyYW5jaCA9ICIvJDEiOworCX0gZWxzaWYoJHBhdGggPX4gcyNeL1xRJHRydW5rX25hbWVcRS8/IyMpIHsKKwkJJGJyYW5jaCA9ICIvIjsKKwl9IGVsc2lmKCRwYXRoID1+IHMjXi9cUSRicmFuY2hfbmFtZVxFLyhbXi9dKykvPyMjKSB7CisJCSRicmFuY2ggPSAkMTsKKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgIiRyZXY6IFVucmVjb2duaXplZCBwYXRoOiAkcGF0aFxuIjsKKwkJcmV0dXJuICgpCisJfQorCSRwYXRoID0gIi8iIGlmICRwYXRoIGVxICIiOworCXJldHVybiAoJGJyYW5jaCwkcGF0aCk7Cit9CisKK3N1YiBjb3B5X3N1YmRpcigkJCQkJCQpIHsKKwkjIFNvbWVib2R5IGNvcGllZCBhIHdob2xlIHN1YmRpcmVjdG9yeS4KKwkjIFdlIG5lZWQgdG8gZmluZCB0aGUgaW5kZXggZW50cmllcyBmcm9tIHRoZSBvbGQgdmVyc2lvbiB3aGljaCB0aGUKKwkjIFNWTiBsb2cgZW50cnkgcG9pbnRzIHRvLCBhbmQgYWRkIHRoZW0gdG8gdGhlIG5ldyBwbGFjZS4KKworCW15KCRuZXdyZXYsJG5ld2JyYW5jaCwkcGF0aCwkb2xkcGF0aCwkcmV2LCRuZXcpID0gQF87CisJbXkoJGJyYW5jaCwkc3JjcGF0aCkgPSBzcGxpdF9wYXRoKCRyZXYsJG9sZHBhdGgpOworCisJbXkgJGdpdHJldiA9ICRicmFuY2hlc3skYnJhbmNofXskcmV2fTsKKwl1bmxlc3MoJGdpdHJldikgeworCQlwcmludCBTVERFUlIgIiRuZXdyZXY6JG5ld2JyYW5jaDogY291bGQgbm90IGZpbmQgJG9sZHBhdGggXEAgJHJldlxuIjsKKwkJcmV0dXJuOworCX0KKwlwcmludCAiJG5ld3JldjokbmV3YnJhbmNoOiRwYXRoOiBjb3B5aW5nIGZyb20gJGJyYW5jaDokc3JjcGF0aCBAICRyZXZcbiIgaWYgJG9wdF92OworCSRzcmNwYXRoID1+IHMjLyokIy8jOworCW9wZW4gbXkgJGYsIi18IiwiZ2l0LWxzLXRyZWUiLCItciIsIi16IiwkZ2l0cmV2LCRzcmNwYXRoOworCWxvY2FsICQvID0gIlwwIjsKKwl3aGlsZSg8JGY+KSB7CisJCWNob21wOworCQlteSgkbSwkcCkgPSBzcGxpdCgvXHQvLCRfLDIpOworCQlteSgkbW9kZSwkdHlwZSwkc2hhMSkgPSBzcGxpdCgvIC8sJG0pOworCQluZXh0IGlmICR0eXBlIG5lICJibG9iIjsKKwkJJHAgPSBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJcHJpbnQgIi4uLiBmb3VuZCAkcGF0aCRwIC4uLlxuIiBpZiAkb3B0X3Y7CisJCXB1c2goQCRuZXcsWyRtb2RlLCRzaGExLCRwYXRoLiRwXSk7CisJfQorCWNsb3NlKCRmKSBvcgorCQlwcmludCBTVERFUlIgIiRuZXdyZXY6JG5ld2JyYW5jaDogY291bGQgbm90IGxpc3QgZmlsZXMgaW4gJG9sZHBhdGggXEAgJHJldlxuIjsKK30KKworc3ViIGNvbW1pdCB7CisJbXkoJGJyYW5jaCwgJGNoYW5nZWRfcGF0aHMsICRyZXZpc2lvbiwgJGF1dGhvciwgJGRhdGUsICRtZXNzYWdlKSA9IEBfOworCW15KCRhdXRob3JfbmFtZSwkYXV0aG9yX2VtYWlsLCRkZXN0KTsKKwlteShAb2xkLEBuZXcpOworCisJaWYgKG5vdCBkZWZpbmVkICRhdXRob3IpIHsKKwkJJGF1dGhvcl9uYW1lID0gJGF1dGhvcl9lbWFpbCA9ICJ1bmtub3duIjsKKwl9IGVsc2lmICgkYXV0aG9yID1+IC9eKC4qPylccys8KC4qKT4kLykgeworCQkoJGF1dGhvcl9uYW1lLCAkYXV0aG9yX2VtYWlsKSA9ICgkMSwgJDIpOworCX0gZWxzZSB7CisJCSRhdXRob3IgPX4gcy9ePCguKik+JC8kMS87CisJCSRhdXRob3JfbmFtZSA9ICRhdXRob3JfZW1haWwgPSAkYXV0aG9yOworCX0KKwkkZGF0ZSA9IHBkYXRlKCRkYXRlKTsKKworCW15ICR0YWc7CisJbXkgJHBhcmVudDsKKwlpZigkYnJhbmNoIGVxICIvIikgeyAjIHRydW5rCisJCSRwYXJlbnQgPSAkb3B0X287CisJfSBlbHNpZigkYnJhbmNoID1+IG0jXi8oLispIykgeyAjIHRhZworCQkkdGFnID0gMTsKKwkJJHBhcmVudCA9ICQxOworCX0gZWxzZSB7ICMgIm5vcm1hbCIgYnJhbmNoCisJCSMgbm90aGluZyB0byBkbworCQkkcGFyZW50ID0gJGJyYW5jaDsKKwl9CisJJGRlc3QgPSAkcGFyZW50OworCisJbXkgJHByZXYgPSAkY2hhbmdlZF9wYXRocy0+eyIvIn07CisJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisJCWRlbGV0ZSAkY2hhbmdlZF9wYXRocy0+eyIvIn07CisJCW15ICRvbGRwYXRoID0gJHByZXYtPlsxXTsKKwkJbXkgJHJldjsKKwkJaWYoZGVmaW5lZCAkb2xkcGF0aCkgeworCQkJbXkgJHA7CisJCQkoJHBhcmVudCwkcCkgPSBzcGxpdF9wYXRoKCRyZXZpc2lvbiwkb2xkcGF0aCk7CisJCQlpZigkcGFyZW50IGVxICIvIikgeworCQkJCSRwYXJlbnQgPSAkb3B0X287CisJCQl9IGVsc2UgeworCQkJCSRwYXJlbnQgPX4gcyNeLyMjOyAjIGlmIGl0J3MgYSB0YWcKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwYXJlbnQgPSB1bmRlZjsKKwkJfQorCX0KKworCW15ICRyZXY7CisJaWYoJHJldmlzaW9uID4gJG9wdF9zIGFuZCBkZWZpbmVkICRwYXJlbnQpIHsKKwkJb3BlbihILCJnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICRwYXJlbnQgfCIpOworCQkkcmV2ID0gPEg+OworCQljbG9zZShIKSBvciBkbyB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX07CisJCWNob3AgJHJldjsKKwkJaWYobGVuZ3RoKCRyZXYpICE9IDQwKSB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX0KKwkJJHJldiA9ICRicmFuY2hlc3soJHBhcmVudCBlcSAkb3B0X28pID8gIi8iIDogJHBhcmVudH17IkxBU1QifTsKKwkJaWYoJHJldmlzaW9uICE9ICRvcHRfcyBhbmQgbm90ICRyZXYpIHsKKwkJCXByaW50IFNUREVSUiAiJHJldmlzaW9uOiBkbyBub3Qga25vdyBhbmNlc3RvciBmb3IgJyRwYXJlbnQnIVxuIjsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCSRyZXYgPSB1bmRlZjsKKwl9CisKKyMJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisjCQlpZihub3QgJHRhZykgeworIwkJCXVubGVzcyhvcGVuKEgsIj4gJGdpdF9kaXIvcmVmcy9oZWFkcy8kYnJhbmNoIikpIHsKKyMJCQkJcHJpbnQgU1RERVJSICIkcmV2aXNpb246IENvdWxkIG5vdCBjcmVhdGUgYnJhbmNoICRicmFuY2g6ICQhXG4iOworIwkJCQkkc3RhdGU9MTE7CisjCQkJCW5leHQ7CisjCQkJfQorIwkJCXByaW50IEggIiRyZXZcbiIKKyMJCQkJb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgYnJhbmNoICRicmFuY2g6ICQhIjsKKyMJCQljbG9zZShIKQorIwkJCQlvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSBicmFuY2ggJGJyYW5jaDogJCEiOworIwkJfQorIwl9CisJaWYobm90IGRlZmluZWQgJHJldikgeworCQl1bmxpbmsoJGdpdF9pbmRleCk7CisJfSBlbHNpZiAoJHJldiBuZSAkbGFzdF9yZXYpIHsKKwkJcHJpbnQgIlN3aXRjaGluZyBmcm9tICRsYXN0X3JldiB0byAkcmV2ICgkYnJhbmNoKVxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIsICRyZXYpOworCQlkaWUgInJlYWQtdHJlZSBmYWlsZWQgZm9yICRyZXY6ICQ/XG4iIGlmICQ/OworCQkkbGFzdF9yZXYgPSAkcmV2OworCX0KKworCW15ICRjaWQ7CisJaWYoJHRhZyBhbmQgbm90ICUkY2hhbmdlZF9wYXRocykgeworCQkkY2lkID0gJHJldjsKKwl9IGVsc2UgeworCQlteSBAcGF0aHMgPSBzb3J0IGtleXMgJSRjaGFuZ2VkX3BhdGhzOworCQlmb3JlYWNoIG15ICRwYXRoKEBwYXRocykgeworCQkJbXkgJGFjdGlvbiA9ICRjaGFuZ2VkX3BhdGhzLT57JHBhdGh9OworCisJCQlpZiAoJGFjdGlvbi0+WzBdIGVxICJBIikgeworCQkJCW15ICRmID0gZ2V0X2ZpbGUoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgpOworCQkJCWlmKCRmKSB7CisJCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQkJfSBlbHNpZigkYWN0aW9uLT5bMV0pIHsKKwkJCQkJY29weV9zdWJkaXIoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgsJGFjdGlvbi0+WzFdLCRhY3Rpb24tPlsyXSxcQG5ldyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXkgJG9wYXRoID0gJGFjdGlvbi0+WzNdOworCQkJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogJGJyYW5jaDogY291bGQgbm90IGZldGNoICckb3BhdGgnXG4iOworCQkJCX0KKwkJCX0gZWxzaWYgKCRhY3Rpb24tPlswXSBlcSAiRCIpIHsKKwkJCQlwdXNoKEBvbGQsJHBhdGgpOworCQkJfSBlbHNpZiAoJGFjdGlvbi0+WzBdIGVxICJNIikgeworCQkJCW15ICRmID0gZ2V0X2ZpbGUoJHJldmlzaW9uLCRicmFuY2gsJHBhdGgpOworCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQl9IGVsc2lmICgkYWN0aW9uLT5bMF0gZXEgIlIiKSB7CisJCQkJIyByZWZlciB0byBhIGZpbGUvdHJlZSBpbiBhbiBlYXJsaWVyIGNvbW1pdAorCQkJCXB1c2goQG9sZCwkcGF0aCk7ICMgcmVtb3ZlIGFueSBvbGQgc3R1ZmYKKworCQkJCSMgLi4uIGFuZCBhZGQgYW55IG5ldyBzdHVmZgorCQkJCW15KCRiLCRzcmNwYXRoKSA9IHNwbGl0X3BhdGgoJHJldmlzaW9uLCRhY3Rpb24tPlsxXSk7CisJCQkJJHNyY3BhdGggPX4gcyMvKiQjLyM7CisJCQkJb3BlbiBteSAkRiwiLXwiLCJnaXQtbHMtdHJlZSIsIi1yIiwiLXoiLCAkYnJhbmNoZXN7JGJ9eyRhY3Rpb24tPlsyXX0sICRzcmNwYXRoOworCQkJCWxvY2FsICQvID0gIlwwIjsKKwkJCQl3aGlsZSg8JEY+KSB7CisJCQkJCWNob21wOworCQkJCQlteSgkbSwkcCkgPSBzcGxpdCgvXHQvLCRfLDIpOworCQkJCQlteSgkbW9kZSwkdHlwZSwkc2hhMSkgPSBzcGxpdCgvIC8sJG0pOworCQkJCQluZXh0IGlmICR0eXBlIG5lICJibG9iIjsKKwkJCQkJJHAgPSBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJCQkJcHVzaChAbmV3LFskbW9kZSwkc2hhMSwkcGF0aC4kcF0pOworCQkJCX0KKwkJCQljbG9zZSgkRik7CisJCQl9IGVsc2UgeworCQkJCWRpZSAiJHJldmlzaW9uOiB1bmtub3duIGFjdGlvbiAnIi4kYWN0aW9uLT5bMF0uIicgZm9yICRwYXRoXG4iOworCQkJfQorCQl9CisKKwkJaWYoQG9sZCkgeworCQkJb3BlbiBteSAkRiwgIi18IiwgImdpdC1scy1maWxlcyIsICIteiIsIEBvbGQgb3IgZGllICQhOworCQkJQG9sZCA9ICgpOworCQkJbG9jYWwgJC8gPSAiXDAiOworCQkJd2hpbGUoPCRGPikgeworCQkJCWNob21wOworCQkJCXB1c2goQG9sZCwkXyk7CisJCQl9CisJCQljbG9zZSgkRik7CisKKwkJCXdoaWxlKEBvbGQpIHsKKwkJCQlteSBAbzI7CisJCQkJaWYoQG9sZCA+IDU1KSB7CisJCQkJCUBvMiA9IHNwbGljZShAb2xkLDAsNTApOworCQkJCX0gZWxzZSB7CisJCQkJCUBvMiA9IEBvbGQ7CisJCQkJCUBvbGQgPSAoKTsKKwkJCQl9CisJCQkJc3lzdGVtKCJnaXQtdXBkYXRlLWluZGV4IiwiLS1mb3JjZS1yZW1vdmUiLCItLSIsQG8yKTsKKwkJCQlkaWUgIkNhbm5vdCByZW1vdmUgZmlsZXM6ICQ/XG4iIGlmICQ/OworCQkJfQorCQl9CisJCXdoaWxlKEBuZXcpIHsKKwkJCW15IEBuMjsKKwkJCWlmKEBuZXcgPiAxMikgeworCQkJCUBuMiA9IHNwbGljZShAbmV3LDAsMTApOworCQkJfSBlbHNlIHsKKwkJCQlAbjIgPSBAbmV3OworCQkJCUBuZXcgPSAoKTsKKwkJCX0KKwkJCXN5c3RlbSgiZ2l0LXVwZGF0ZS1pbmRleCIsIi0tYWRkIiwKKwkJCQkobWFwIHsgKCctLWNhY2hlaW5mbycsIEAkXykgfSBAbjIpKTsKKwkJCWRpZSAiQ2Fubm90IGFkZCBmaWxlczogJD9cbiIgaWYgJD87CisJCX0KKworCQlteSAkcGlkID0gb3BlbihDLCItfCIpOworCQlkaWUgIkNhbm5vdCBmb3JrOiAkISIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwkJdW5sZXNzKCRwaWQpIHsKKwkJCWV4ZWMoImdpdC13cml0ZS10cmVlIik7CisJCQlkaWUgIkNhbm5vdCBleGVjIGdpdC13cml0ZS10cmVlOiAkIVxuIjsKKwkJfQorCQljaG9tcChteSAkdHJlZSA9IDxDPik7CisJCWxlbmd0aCgkdHJlZSkgPT0gNDAKKwkJCW9yIGRpZSAiQ2Fubm90IGdldCB0cmVlIGlkICgkdHJlZSk6ICQhXG4iOworCQljbG9zZShDKQorCQkJb3IgZGllICJFcnJvciBydW5uaW5nIGdpdC13cml0ZS10cmVlOiAkP1xuIjsKKwkJcHJpbnQgIlRyZWUgSUQgJHRyZWVcbiIgaWYgJG9wdF92OworCisJCW15ICRwciA9IElPOjpQaXBlLT5uZXcoKSBvciBkaWUgIkNhbm5vdCBvcGVuIHBpcGU6ICQhXG4iOworCQlteSAkcHcgPSBJTzo6UGlwZS0+bmV3KCkgb3IgZGllICJDYW5ub3Qgb3BlbiBwaXBlOiAkIVxuIjsKKwkJJHBpZCA9IGZvcmsoKTsKKwkJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQl1bmxlc3MoJHBpZCkgeworCQkJJHByLT53cml0ZXIoKTsKKwkJCSRwdy0+cmVhZGVyKCk7CisJCQlvcGVuKE9VVCwiPiZTVERPVVQiKTsKKwkJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKKwkJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKKwkJCSRwci0+Y2xvc2UoKTsKKwkJCSRwdy0+Y2xvc2UoKTsKKworCQkJbXkgQHBhciA9ICgpOworCQkJQHBhciA9ICgiLXAiLCRyZXYpIGlmIGRlZmluZWQgJHJldjsKKworCQkJIyBsb29zZSBkZXRlY3Rpb24gb2YgbWVyZ2VzCisJCQkjIGJhc2VkIG9uIHRoZSBjb21taXQgbXNnCisJCQlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJCQlpZiAoJG1lc3NhZ2UgPX4gJHJ4KSB7CisJCQkJCW15ICRtcGFyZW50ID0gJDE7CisJCQkJCWlmICgkbXBhcmVudCBlcSAnSEVBRCcpIHsgJG1wYXJlbnQgPSAkb3B0X28gfTsKKwkJCQkJaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbXBhcmVudCIpIHsKKwkJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKKwkJCQkJCXB1c2ggQHBhciwgJy1wJywgJG1wYXJlbnQ7CisJCQkJCQlwcmludCBPVVQgIk1lcmdlIHBhcmVudCBicmFuY2g6ICRtcGFyZW50XG4iIGlmICRvcHRfdjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJZXhlYygiZW52IiwKKwkJCQkiR0lUX0FVVEhPUl9OQU1FPSRhdXRob3JfbmFtZSIsCisJCQkJIkdJVF9BVVRIT1JfRU1BSUw9JGF1dGhvcl9lbWFpbCIsCisJCQkJIkdJVF9BVVRIT1JfREFURT0iLnN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSksCisJCQkJIkdJVF9DT01NSVRURVJfTkFNRT0kYXV0aG9yX25hbWUiLAorCQkJCSJHSVRfQ09NTUlUVEVSX0VNQUlMPSRhdXRob3JfZW1haWwiLAorCQkJCSJHSVRfQ09NTUlUVEVSX0RBVEU9Ii5zdHJmdGltZSgiKzAwMDAgJVktJW0tJWQgJUg6JU06JVMiLGdtdGltZSgkZGF0ZSkpLAorCQkJCSJnaXQtY29tbWl0LXRyZWUiLCAkdHJlZSxAcGFyKTsKKwkJCWRpZSAiQ2Fubm90IGV4ZWMgZ2l0LWNvbW1pdC10cmVlOiAkIVxuIjsKKwkJfQorCQkkcHctPndyaXRlcigpOworCQkkcHItPnJlYWRlcigpOworCisJCSRtZXNzYWdlID1+IHMvW1xzXG5dK1x6Ly87CisKKwkJcHJpbnQgJHB3ICIkbWVzc2FnZVxuIgorCQkJb3IgZGllICJFcnJvciB3cml0aW5nIHRvIGdpdC1jb21taXQtdHJlZTogJCFcbiI7CisJCSRwdy0+Y2xvc2UoKTsKKworCQlwcmludCAiQ29tbWl0dGVkIGNoYW5nZSAkcmV2aXNpb246JGJyYW5jaCAiLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSkuIilcbiIgaWYgJG9wdF92OworCQljaG9tcCgkY2lkID0gPCRwcj4pOworCQlsZW5ndGgoJGNpZCkgPT0gNDAKKwkJCW9yIGRpZSAiQ2Fubm90IGdldCBjb21taXQgaWQgKCRjaWQpOiAkIVxuIjsKKwkJcHJpbnQgIkNvbW1pdCBJRCAkY2lkXG4iIGlmICRvcHRfdjsKKwkJJHByLT5jbG9zZSgpOworCisJCXdhaXRwaWQoJHBpZCwwKTsKKwkJZGllICJFcnJvciBydW5uaW5nIGdpdC1jb21taXQtdHJlZTogJD9cbiIgaWYgJD87CisJfQorCisJaWYobm90IGRlZmluZWQgJGRlc3QpIHsKKwkJcHJpbnQgIi4uLiBubyBrbm93biBwYXJlbnRcbiIgaWYgJG9wdF92OworCX0gZWxzaWYobm90ICR0YWcpIHsKKwkJcHJpbnQgIldyaXRpbmcgdG8gcmVmcy9oZWFkcy8kZGVzdFxuIiBpZiAkb3B0X3Y7CisJCW9wZW4oQywiPiRnaXRfZGlyL3JlZnMvaGVhZHMvJGRlc3QiKSBhbmQKKwkJcHJpbnQgQyAoIiRjaWRcbiIpIGFuZAorCQljbG9zZShDKQorCQkJb3IgZGllICJDYW5ub3Qgd3JpdGUgYnJhbmNoICRkZXN0IGZvciB1cGRhdGU6ICQhXG4iOworCX0KKworCWlmKCR0YWcpIHsKKwkJbXkoJGluLCAkb3V0KSA9ICgnJywnJyk7CisJCSRsYXN0X3JldiA9ICItIiBpZiAlJGNoYW5nZWRfcGF0aHM7CisJCSMgdGhlIHRhZyB3YXMgJ2NvbXBsZXgnLCBpLmUuIGRpZCBub3QgcmVmZXIgdG8gYSAicmVhbCIgcmV2aXNpb24KKworCQkkZGVzdCA9fiB0ci9fL1wuLyBpZiAkb3B0X3U7CisKKwkJbXkgJHBpZCA9IG9wZW4yKCRpbiwgJG91dCwgJ2dpdC1ta3RhZycpOworCQlwcmludCAkb3V0ICgib2JqZWN0ICRjaWRcbiIuCisJCSAgICAidHlwZSBjb21taXRcbiIuCisJCSAgICAidGFnICRkZXN0XG4iLgorCQkgICAgInRhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+XG4iKSBhbmQKKwkJY2xvc2UoJG91dCkKKwkJICAgIG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSB0YWcgb2JqZWN0ICRkZXN0OiAkIVxuIjsKKworCQlteSAkdGFnb2JqID0gPCRpbj47CisJCWNob21wICR0YWdvYmo7CisKKwkJaWYgKCAhY2xvc2UoJGluKSBvciB3YWl0cGlkKCRwaWQsIDApICE9ICRwaWQgb3IKKwkJCQkkPyAhPSAwIG9yICR0YWdvYmogIX4gL15bMDEyMzQ1Njc4OWFiY2RlZl17NDB9JC8gKSB7CisJCQlkaWUgIkNhbm5vdCBjcmVhdGUgdGFnIG9iamVjdCAkZGVzdDogJCFcbiI7CisJCX0KKworCQlvcGVuKEMsIj4kZ2l0X2Rpci9yZWZzL3RhZ3MvJGRlc3QiKSBhbmQKKwkJcHJpbnQgQyAoIiR0YWdvYmpcbiIpIGFuZAorCQljbG9zZShDKQorCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkYnJhbmNoOiAkIVxuIjsKKworCQlwcmludCAiQ3JlYXRlZCB0YWcgJyRkZXN0JyBvbiAnJGJyYW5jaCdcbiIgaWYgJG9wdF92OworCX0KKwkkYnJhbmNoZXN7JGJyYW5jaH17IkxBU1QifSA9ICRjaWQ7CisJJGJyYW5jaGVzeyRicmFuY2h9eyRyZXZpc2lvbn0gPSAkY2lkOworCSRsYXN0X3JldiA9ICRjaWQ7CisJcHJpbnQgQlJBTkNIRVMgIiRyZXZpc2lvbiAkYnJhbmNoICRjaWRcbiI7CisJcHJpbnQgIkRPTkU6ICRyZXZpc2lvbiAkZGVzdCAkY2lkXG4iIGlmICRvcHRfdjsKK30KKworbXkgKCRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSwgJHBvb2wpID0gQF87CitzdWIgX2NvbW1pdF9hbGwgeworCSgkY2hhbmdlZF9wYXRocywgJHJldmlzaW9uLCAkYXV0aG9yLCAkZGF0ZSwgJG1lc3NhZ2UsICRwb29sKSA9IEBfOworCW15ICVwOworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJHB7JHBhdGh9ID0gWyAkYWN0aW9uLT5hY3Rpb24sJGFjdGlvbi0+Y29weWZyb21fcGF0aCwgJGFjdGlvbi0+Y29weWZyb21fcmV2LCAkcGF0aCBdOworCX0KKwkkY2hhbmdlZF9wYXRocyA9IFwlcDsKK30KKworc3ViIGNvbW1pdF9hbGwgeworCW15ICVkb25lOworCW15IEBjb2w7CisJbXkgJHByZWY7CisJbXkgJGJyYW5jaDsKKworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJKCRicmFuY2gsJHBhdGgpID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJHBhdGgpOworCQluZXh0IGlmIG5vdCBkZWZpbmVkICRicmFuY2g7CisJCSRkb25leyRicmFuY2h9eyRwYXRofSA9ICRhY3Rpb247CisJfQorCXdoaWxlKCgkYnJhbmNoLCRjaGFuZ2VkX3BhdGhzKSA9IGVhY2ggJWRvbmUpIHsKKwkJY29tbWl0KCRicmFuY2gsICRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSk7CisJfQorfQorCit3aGlsZSgrKyRjdXJyZW50X3JldiA8PSAkc3ZuLT57J21heHJldid9KSB7CisJJHN2bi0+eydzdm4nfS0+Z2V0X2xvZygiLyIsJGN1cnJlbnRfcmV2LCRjdXJyZW50X3JldiwkY3VycmVudF9yZXYsMSwxLFwmX2NvbW1pdF9hbGwsIiIpOworCWNvbW1pdF9hbGwoKTsKKwlpZigkb3B0X2wgYW5kIG5vdCAtLSRvcHRfbCkgeworCQlwcmludCBTVERFUlIgIlN0b3BwaW5nLCBiZWNhdXNlIHRoZXJlIGlzIGEgbWVtb3J5IGxlYWsgKGluIHRoZSBTVk4gbGlicmFyeSkuXG4iOworCQlwcmludCBTVERFUlIgIlBsZWFzZSByZXBlYXQgdGhpcyBjb21tYW5kOyBpdCB3aWxsIGNvbnRpbnVlIHNhZmVseVxuIjsKKwkJbGFzdDsKKwl9Cit9CisKKwordW5saW5rKCRnaXRfaW5kZXgpOworCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZigkb3JpZ19icmFuY2gpIHsKKwlwcmludCAiRE9ORVxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQlpZiAkZm9yd2FyZF9tYXN0ZXI7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQtcmVhZC10cmVlJywgJy1tJywgJy11JywgJ1NWTjJHSVRfSEVBRCcsICdIRUFEJyk7CisJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfSBlbHNlIHsKKwkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKKwlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQl1bmxlc3MgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIjsKKwl1bmxpbmsoIiRnaXRfZGlyL0hFQUQiKTsKKwlzeW1saW5rKCJyZWZzL2hlYWRzLyRvcmlnX2JyYW5jaCIsIiRnaXRfZGlyL0hFQUQiKTsKKwl1bmxlc3MgKCRvcHRfaSkgeworCQlzeXN0ZW0oJ2dpdCBjaGVja291dCcpOworCQlkaWUgImNoZWNrb3V0IGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfQordW5saW5rKCIkZ2l0X2Rpci9TVk4yR0lUX0hFQUQiKTsKK2Nsb3NlKEJSQU5DSEVTKTsKZGlmZiAtLWdpdCBhL2dpdC10YWcuc2ggYi9naXQtdGFnLnNoCmluZGV4IDc2YzFiY2QuLmJkOTI3NTMgMTAwNzU1Ci0tLSBhL2dpdC10YWcuc2gKKysrIGIvZ2l0LXRhZy5zaApAQCAtNCw3ICs0LDcgQEAKIC4gZ2l0LXNoLXNldHVwIHx8IGRpZSAiTm90IGEgZ2l0IGFyY2hpdmUiCiAKIHVzYWdlICgpIHsKLSAgICBlY2hvID4mMiAiVXNhZ2U6IGdpdC10YWcgWy1hIHwgLXNdIFstZl0gWy1tICJ0YWcgbWVzc2FnZSJdIHRhZ25hbWUiCisgICAgZWNobyA+JjIgIlVzYWdlOiBnaXQtdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDxtc2c+XSA8dGFnbmFtZT4gWzxoZWFkPl0iCiAgICAgZXhpdCAxCiB9CiAKQEAgLTEyLDYgKzEyLDcgQEAKIHNpZ25lZD0KIGZvcmNlPQogbWVzc2FnZT0KK3VzZXJuYW1lPQogd2hpbGUgY2FzZSAiJCMiIGluIDApIGJyZWFrIDs7IGVzYWMKIGRvCiAgICAgY2FzZSAiJDEiIGluCkBAIC0zMCw2ICszMSwxMiBAQAogCXNoaWZ0CiAJbWVzc2FnZT0iJDEiCiAJOzsKKyAgICAtdSkKKwlhbm5vdGF0ZT0xCisJc2lnbmVkPTEKKwlzaGlmdAorCXVzZXJuYW1lPSIkMSIKKwk7OwogICAgIC0qKQogICAgICAgICB1c2FnZQogCTs7CkBAIC00NiwzNiArNTMsNDMgQEAKICAgICBkaWUgInRhZyAnJG5hbWUnIGFscmVhZHkgZXhpc3RzIgogZmkKIHNoaWZ0CitnaXQtY2hlY2stcmVmLWZvcm1hdCAidGFncy8kbmFtZSIgfHwKKwlkaWUgIndlIGRvIG5vdCBsaWtlICckbmFtZScgYXMgYSB0YWcgbmFtZS4iCiAKIG9iamVjdD0kKGdpdC1yZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgIiRAIikgfHwgZXhpdCAxCiB0eXBlPSQoZ2l0LWNhdC1maWxlIC10ICRvYmplY3QpIHx8IGV4aXQgMQogdGFnZ2VyPSQoZ2l0LXZhciBHSVRfQ09NTUlUVEVSX0lERU5UKSB8fCBleGl0IDEKKzogJHt1c2VybmFtZTo9JChleHByICIkdGFnZ2VyIiA6ICdcKC4qPlwpJyl9CiAKLXRyYXAgJ3JtIC1mIC50bXAtdGFnKiAudGFnbXNnIC5lZGl0bXNnJyAwCit0cmFwICdybSAtZiAiJEdJVF9ESVIiL1RBR19UTVAqICIkR0lUX0RJUiIvVEFHX0ZJTkFMTVNHICIkR0lUX0RJUiIvVEFHX0VESVRNU0cnIDAKIAogaWYgWyAiJGFubm90YXRlIiBdOyB0aGVuCiAgICAgaWYgWyAteiAiJG1lc3NhZ2UiIF07IHRoZW4KICAgICAgICAgKCBlY2hvICIjIgogICAgICAgICAgIGVjaG8gIiMgV3JpdGUgYSB0YWcgbWVzc2FnZSIKLSAgICAgICAgICBlY2hvICIjIiApID4gLmVkaXRtc2cKLSAgICAgICAgJHtWSVNVQUw6LSR7RURJVE9SOi12aX19IC5lZGl0bXNnIHx8IGV4aXQKKyAgICAgICAgICBlY2hvICIjIiApID4gIiRHSVRfRElSIi9UQUdfRURJVE1TRworICAgICAgICAke1ZJU1VBTDotJHtFRElUT1I6LXZpfX0gIiRHSVRfRElSIi9UQUdfRURJVE1TRyB8fCBleGl0CiAgICAgZWxzZQotICAgICAgICBlY2hvICIkbWVzc2FnZSIgPiAuZWRpdG1zZworICAgICAgICBlY2hvICIkbWVzc2FnZSIgPiIkR0lUX0RJUiIvVEFHX0VESVRNU0cKICAgICBmaQogCi0gICAgZ3JlcCAtdiAnXiMnIDwgLmVkaXRtc2cgfCBnaXQtc3RyaXBzcGFjZSA+IC50YWdtc2cKKyAgICBncmVwIC12ICdeIycgPCIkR0lUX0RJUiIvVEFHX0VESVRNU0cgfAorICAgIGdpdC1zdHJpcHNwYWNlID4iJEdJVF9ESVIiL1RBR19GSU5BTE1TRwogCi0gICAgWyAtcyAudGFnbXNnIF0gfHwgZXhpdAorICAgIFsgLXMgIiRHSVRfRElSIi9UQUdfRklOQUxNU0cgXSB8fCB7CisJZWNobyA+JjIgIk5vIHRhZyBtZXNzYWdlPyIKKwlleGl0IDEKKyAgICB9CiAKLSAgICAoIGVjaG8gLWUgIm9iamVjdCAkb2JqZWN0XG50eXBlICR0eXBlXG50YWcgJG5hbWVcbnRhZ2dlciAkdGFnZ2VyXG4iOyBjYXQgLnRhZ21zZyApID4gLnRtcC10YWcKLSAgICBybSAtZiAudG1wLXRhZy5hc2MgLnRhZ21zZworICAgICggZWNobyAtZSAib2JqZWN0ICRvYmplY3RcbnR5cGUgJHR5cGVcbnRhZyAkbmFtZVxudGFnZ2VyICR0YWdnZXJcbiI7CisgICAgICBjYXQgIiRHSVRfRElSIi9UQUdfRklOQUxNU0cgKSA+IiRHSVRfRElSIi9UQUdfVE1QCisgICAgcm0gLWYgIiRHSVRfRElSIi9UQUdfVE1QLmFzYyAiJEdJVF9ESVIiL1RBR19GSU5BTE1TRwogICAgIGlmIFsgIiRzaWduZWQiIF07IHRoZW4KLQltZT0kKGV4cHIgIiR0YWdnZXIiIDogJ1woLio+XCknKSAmJgotCWdwZyAtYnNhIC11ICIkbWUiIC50bXAtdGFnICYmCi0JY2F0IC50bXAtdGFnLmFzYyA+Pi50bXAtdGFnIHx8CisJZ3BnIC1ic2EgLXUgIiR1c2VybmFtZSIgIiRHSVRfRElSIi9UQUdfVE1QICYmCisJY2F0ICIkR0lUX0RJUiIvVEFHX1RNUC5hc2MgPj4iJEdJVF9ESVIiL1RBR19UTVAgfHwKIAlkaWUgImZhaWxlZCB0byBzaWduIHRoZSB0YWcgd2l0aCBHUEcuIgogICAgIGZpCi0gICAgb2JqZWN0PSQoZ2l0LW1rdGFnIDwgLnRtcC10YWcpCisgICAgb2JqZWN0PSQoZ2l0LW1rdGFnIDwgIiRHSVRfRElSIi9UQUdfVE1QKQogZmkKIAogbWtkaXIgLXAgIiRHSVRfRElSL3JlZnMvdGFncyIKZGlmZiAtLWdpdCBhL2dpdC12ZXJpZnktdGFnLnNoIGIvZ2l0LXZlcmlmeS10YWcuc2gKaW5kZXggMTU2Yzc1Yi4uZWQ0Yzg5MyAxMDA3NTUKLS0tIGEvZ2l0LXZlcmlmeS10YWcuc2gKKysrIGIvZ2l0LXZlcmlmeS10YWcuc2gKQEAgLTEsOCArMSwxMiBAQAogIyEvYmluL3NoCiAuIGdpdC1zaC1zZXR1cCB8fCBkaWUgIk5vdCBhIGdpdCBhcmNoaXZlIgogCi10YWc9JChnaXQtcmV2LXBhcnNlICQxKSB8fCBleGl0IDEKK3R5cGU9IiQoZ2l0LWNhdC1maWxlIC10ICIkMSIgMj4vZGV2L251bGwpIiB8fAorCWRpZSAiJDE6IG5vIHN1Y2ggb2JqZWN0LiIKIAotZ2l0LWNhdC1maWxlIHRhZyAkdGFnID4gLnRtcC12dGFnIHx8IGV4aXQgMQordGVzdCAiJHR5cGUiID0gdGFnIHx8CisJZGllICIkMTogY2Fubm90IHZlcmlmeSBhIG5vbi10YWcgb2JqZWN0IG9mIHR5cGUgJHR5cGUuIgorCitnaXQtY2F0LWZpbGUgdGFnICIkMSIgPiAudG1wLXZ0YWcgfHwgZXhpdCAxCiBjYXQgLnRtcC12dGFnIHwgc2VkICcvLS0tLS1CRUdJTiBQR1AvUScgfCBncGcgLS12ZXJpZnkgLnRtcC12dGFnIC0gfHwgZXhpdCAxCiBybSAtZiAudG1wLXZ0YWcKZGlmZiAtLWdpdCBhL2dpdC5zaCBiL2dpdC5zaAppbmRleCAxNzhkMGYwLi45NDk0MGFlIDEwMDc1NQotLS0gYS9naXQuc2gKKysrIGIvZ2l0LnNoCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIGNtZD0KLXBhdGg9JChkaXJuYW1lICQwKQorcGF0aD0kKGRpcm5hbWUgIiQwIikKIGNhc2UgIiQjIiBpbgogMCkJOzsKICopCWNtZD0iJDEiCkBAIC0xMSwyMiArMTEsNjYgQEAKIAkJZWNobyAiZ2l0IHZlcnNpb24gQEBHSVRfVkVSU0lPTkBAIgogCQlleGl0IDAgOzsKIAllc2FjCi0JdGVzdCAteCAkcGF0aC9naXQtJGNtZCAmJiBleGVjICRwYXRoL2dpdC0kY21kICIkQCIgOzsKKwkKKwl0ZXN0IC14ICIkcGF0aC9naXQtJGNtZCIgJiYgZXhlYyAiJHBhdGgvZ2l0LSRjbWQiICIkQCIKKwkKKwljYXNlICdAQFhAQCcgaW4KKwkgICAgJycpCisJCTs7CisJICAgICopCisJCXRlc3QgLXggIiRwYXRoL2dpdC0kY21kQEBYQEAiICYmCisJCWV4ZWMgIiRwYXRoL2dpdC0kY21kQEBYQEAiICIkQCIKKwkJOzsKKwllc2FjCisJOzsKIGVzYWMKIAogZWNobyAiVXNhZ2U6IGdpdCBDT01NQU5EIFtPUFRJT05TXSBbVEFSR0VUXSIKIGlmIFsgLW4gIiRjbWQiIF07IHRoZW4KLSAgICBlY2hvICIgZ2l0IGNvbW1hbmQgJyRjbWQnIG5vdCBmb3VuZDogY29tbWFuZHMgYXJlOiIKLWVsc2UKLSAgICBlY2hvICIgZ2l0IGNvbW1hbmRzIGFyZToiCisgICAgZWNobyAiZ2l0IGNvbW1hbmQgJyRjbWQnIG5vdCBmb3VuZC4iCiBmaQorZWNobyAiZ2l0IGNvbW1hbmRzIGFyZToiCiAKLWNhdCA8PFxFT0YKLSAgICBhZGQgYXBwbHkgYXJjaGltcG9ydCBiaXNlY3QgYnJhbmNoIGNoZWNrb3V0IGNoZXJyeSBjbG9uZQotICAgIGNvbW1pdCBjb3VudC1vYmplY3RzIGN2c2ltcG9ydCBkaWZmIGZldGNoIGZvcm1hdC1wYXRjaAotICAgIGZzY2stY2FjaGUgZ2V0LXRhci1jb21taXQtaWQgaW5pdC1kYiBsb2cgbHMtcmVtb3RlIG9jdG9wdXMKLSAgICBwYWNrLW9iamVjdHMgcGFyc2UtcmVtb3RlIHBhdGNoLWlkIHBydW5lIHB1bGwgcHVzaCByZWJhc2UKLSAgICByZWxpbmsgcmVuYW1lIHJlcGFjayByZXF1ZXN0LXB1bGwgcmVzZXQgcmVzb2x2ZSByZXZlcnQKLSAgICBzZW5kLWVtYWlsIHNob3J0bG9nIHNob3ctYnJhbmNoIHN0YXR1cyB0YWcgdmVyaWZ5LXRhZwotICAgIHdoYXRjaGFuZ2VkCitmbXQgPDxcRU9GIHwgc2VkIC1lICdzL14vICAgIC8nCithZGQKK2FwcGx5CithcmNoaW1wb3J0CitiaXNlY3QKK2JyYW5jaAorY2hlY2tvdXQKK2NoZXJyeQorY2xvbmUKK2NvbW1pdAorY291bnQtb2JqZWN0cworY3ZzaW1wb3J0CitkaWZmCitmZXRjaAorZm9ybWF0LXBhdGNoCitmc2NrLW9iamVjdHMKK2dldC10YXItY29tbWl0LWlkCitpbml0LWRiCitsb2cKK2xzLXJlbW90ZQorb2N0b3B1cworcGFjay1vYmplY3RzCitwYXJzZS1yZW1vdGUKK3BhdGNoLWlkCitwcnVuZQorcHVsbAorcHVzaAorcmViYXNlCityZWxpbmsKK3JlbmFtZQorcmVwYWNrCityZXF1ZXN0LXB1bGwKK3Jlc2V0CityZXNvbHZlCityZXZlcnQKK3NlbmQtZW1haWwKK3Nob3J0bG9nCitzaG93LWJyYW5jaAorc3RhdHVzCit0YWcKK3ZlcmlmeS10YWcKK3doYXRjaGFuZ2VkCiBFT0YKZGlmZiAtLWdpdCBhL2dpdE1lcmdlQ29tbW9uLnB5IGIvZ2l0TWVyZ2VDb21tb24ucHkKaW5kZXggN2U4ODU1Yy4uMWI1YmRkZCAxMDA2NDQKLS0tIGEvZ2l0TWVyZ2VDb21tb24ucHkKKysrIGIvZ2l0TWVyZ2VDb21tb24ucHkKQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAjIFdyaXRlIHRoZSBlbXB0eSB0cmVlIHRvIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHJldHVybiBpdHMgU0hBMQogZGVmIHdyaXRlRW1wdHlUcmVlKCk6Ci0gICAgdG1wSW5kZXggPSBvcy5lbnZpcm9uWydHSVRfRElSJ10gKyAnL21lcmdlLXRtcC1pbmRleCcKKyAgICB0bXBJbmRleCA9IG9zLmVudmlyb24uZ2V0KCdHSVRfRElSJywgJy5naXQnKSArICcvbWVyZ2UtdG1wLWluZGV4JwogICAgIGRlZiBkZWxUbXBJbmRleCgpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsodG1wSW5kZXgpCmRpZmYgLS1naXQgYS9naXRrIGIvZ2l0awppbmRleCBkZjg2ZGNlLi5hOWQzN2Q5IDEwMDc1NQotLS0gYS9naXRrCisrKyBiL2dpdGsKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKICMgVGNsIGlnbm9yZXMgdGhlIG5leHQgbGluZSAtKi0gdGNsIC0qLSBcCi1leGVjIHdpc2ggIiQwIiAtLSAiJHsxKyRAfSIKK2V4ZWMgd2lzaCAiJDAiIC0tICIkQCIKIAogIyBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgaXQgbWF5IGJlIHVzZWQsIGNvcGllZCwgbW9kaWZpZWQKQEAgLTQ4Niw2ICs0ODYsOCBAQAogICAgIGJpbmRhbGwgPEIyLU1vdGlvbj4gImFsbGNhbnZzIHNjYW4gZHJhZ3RvIDAgJXkiCiAgICAgYmluZCAuIDxLZXktVXA+ICJzZWxuZXh0bGluZSAtMSIKICAgICBiaW5kIC4gPEtleS1Eb3duPiAic2VsbmV4dGxpbmUgMSIKKyAgICBiaW5kIC4gPEtleS1SaWdodD4gImdvZm9ydyIKKyAgICBiaW5kIC4gPEtleS1MZWZ0PiAiZ29iYWNrIgogICAgIGJpbmQgLiA8S2V5LVByaW9yPiAiYWxsY2FudnMgeXZpZXcgc2Nyb2xsIC0xIHBhZ2VzIgogICAgIGJpbmQgLiA8S2V5LU5leHQ+ICJhbGxjYW52cyB5dmlldyBzY3JvbGwgMSBwYWdlcyIKICAgICBiaW5ka2V5IDxLZXktRGVsZXRlPiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKQEAgLTQ5Myw2ICs0OTUsMTIgQEAKICAgICBiaW5ka2V5IDxLZXktc3BhY2U+ICIkY3RleHQgeXZpZXcgc2Nyb2xsIDEgcGFnZXMiCiAgICAgYmluZGtleSBwICJzZWxuZXh0bGluZSAtMSIKICAgICBiaW5ka2V5IG4gInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSB6ICJnb2JhY2siCisgICAgYmluZGtleSB4ICJnb2ZvcnciCisgICAgYmluZGtleSBpICJzZWxuZXh0bGluZSAtMSIKKyAgICBiaW5ka2V5IGsgInNlbG5leHRsaW5lIDEiCisgICAgYmluZGtleSBqICJnb2JhY2siCisgICAgYmluZGtleSBsICJnb2ZvcnciCiAgICAgYmluZGtleSBiICIkY3RleHQgeXZpZXcgc2Nyb2xsIC0xIHBhZ2VzIgogICAgIGJpbmRrZXkgZCAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAxOCB1bml0cyIKICAgICBiaW5ka2V5IHUgIiRjdGV4dCB5dmlldyBzY3JvbGwgLTE4IHVuaXRzIgpAQCAtMjc5OCw3ICsyODA2LDcgQEAKICAgICBzZXQgdHJlZWRpZmYge30KICAgICBzZXQgaWQgW2xpbmRleCAkaWRzIDBdCiAgICAgc2V0IHAgW2xpbmRleCAkaWRzIDFdCi0gICAgaWYgW2NhdGNoIHtzZXQgZ2R0ZiBbb3BlbiAifGdpdC1kaWZmLXRyZWUgLXIgJHAgJGlkIiByXX1dIHJldHVybgorICAgIGlmIFtjYXRjaCB7c2V0IGdkdGYgW29wZW4gInxnaXQtZGlmZi10cmVlIC1yICRpZCIgcl19XSByZXR1cm4KICAgICBmY29uZmlndXJlICRnZHRmIC1ibG9ja2luZyAwCiAgICAgZmlsZWV2ZW50ICRnZHRmIHJlYWRhYmxlIFtsaXN0IGdldHRyZWVkaWZmbGluZSAkZ2R0ZiAkaWRzXQogfQpAQCAtMjgzNCw3ICsyODQyLDcgQEAKICAgICBzZXQgaWQgW2xpbmRleCAkaWRzIDBdCiAgICAgc2V0IHAgW2xpbmRleCAkaWRzIDFdCiAgICAgc2V0IGVudihHSVRfRElGRl9PUFRTKSAkZGlmZm9wdHMKLSAgICBzZXQgY21kIFtsaXN0IHwgZ2l0LWRpZmYtdHJlZSAtciAtcCAtQyAkcCAkaWRdCisgICAgc2V0IGNtZCBbbGlzdCB8IGdpdC1kaWZmLXRyZWUgLXIgLXAgLUMgJGlkXQogICAgIGlmIHtbY2F0Y2gge3NldCBiZGYgW29wZW4gJGNtZCByXX0gZXJyXX0gewogCXB1dHMgImVycm9yIGdldHRpbmcgZGlmZnM6ICRlcnIiCiAJcmV0dXJuCmRpZmYgLS1naXQgYS9odHRwLWZldGNoLmMgYi9odHRwLWZldGNoLmMKaW5kZXggNTcxNDFhOC4uZWE4YWYxYiAxMDA2NDQKLS0tIGEvaHR0cC1mZXRjaC5jCisrKyBiL2h0dHAtZmV0Y2guYwpAQCAtMSwxMSArMSwxNiBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCi0KKyNpbmNsdWRlICJwYWNrLmgiCiAjaW5jbHVkZSAiZmV0Y2guaCIKIAogI2luY2x1ZGUgPGN1cmwvY3VybC5oPgogI2luY2x1ZGUgPGN1cmwvZWFzeS5oPgogCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorI2RlZmluZSBVU0VfQ1VSTF9NVUxUSQorI2RlZmluZSBERUZBVUxUX01BWF9SRVFVRVNUUyA1CisjZW5kaWYKKwogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDcwNAogI2RlZmluZSBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUoMCkKICNlbmRpZgpAQCAtMTMsMTAgKzE4LDI4IEBACiAjZGVmaW5lIGN1cmxfZ2xvYmFsX2luaXQoYSkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUoMCkKICNlbmRpZgogCi1zdGF0aWMgQ1VSTCAqY3VybDsKLXN0YXRpYyBzdHJ1Y3QgY3VybF9zbGlzdCAqbm9fcHJhZ21hX2hlYWRlcjsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDQKKyNkZWZpbmUgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorI2VuZGlmCiAKLXN0YXRpYyBjaGFyICppbml0aWFsX2Jhc2U7CisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCitzdGF0aWMgaW50IGdvdF9hbHRlcm5hdGVzID0gMDsKK3N0YXRpYyBpbnQgYWN0aXZlX3JlcXVlc3RzID0gMDsKK3N0YXRpYyBpbnQgZGF0YV9yZWNlaXZlZDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IG1heF9yZXF1ZXN0cyA9IC0xOworc3RhdGljIENVUkxNICpjdXJsbTsKKyNlbmRpZgorI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCitzdGF0aWMgQ1VSTCAqY3VybF9kZWZhdWx0OworI2VuZGlmCitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKnByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3JhbmdlX2hlYWRlcjsKK3N0YXRpYyBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKIAogc3RydWN0IGFsdF9iYXNlCiB7CkBAIC0yNiwxNSArNDksNjEgQEAKIAlzdHJ1Y3QgYWx0X2Jhc2UgKm5leHQ7CiB9OwogCi1zdHJ1Y3QgYWx0X2Jhc2UgKmFsdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFsdF9iYXNlICphbHQgPSBOVUxMOwogCi1zdGF0aWMgU0hBX0NUWCBjOwotc3RhdGljIHpfc3RyZWFtIHN0cmVhbTsKK2VudW0gdHJhbnNmZXJfc3RhdGUgeworCVdBSVRJTkcsCisJQUJPUlRFRCwKKwlBQ1RJVkUsCisJQ09NUExFVEUsCit9OwogCi1zdGF0aWMgaW50IGxvY2FsOwotc3RhdGljIGludCB6cmV0Oworc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBhbHRfYmFzZSAqcmVwbzsKKwljaGFyICp1cmw7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKKwlpbnQgbG9jYWw7CisJZW51bSB0cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdW5zaWduZWQgY2hhciByZWFsX3NoYTFbMjBdOworCVNIQV9DVFggYzsKKwl6X3N0cmVhbSBzdHJlYW07CisJaW50IHpyZXQ7CisJaW50IHJlbmFtZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqbmV4dDsKK307CiAKLXN0YXRpYyBpbnQgY3VybF9zc2xfdmVyaWZ5Oworc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QKK3sKKwlDVVJMICpjdXJsOworCUZJTEUgKmxvY2FsOworCWludCBpbl91c2U7CisJaW50IGRvbmU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3RfcXVldWVfaGVhZCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmFjdGl2ZV9xdWV1ZV9oZWFkID0gTlVMTDsKKworc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKK3N0YXRpYyBjaGFyICpzc2xfY2VydCA9IE5VTEw7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorc3RhdGljIGNoYXIgKnNzbF9rZXkgPSBOVUxMOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorc3RhdGljIGNoYXIgKnNzbF9jYXBhdGggPSBOVUxMOworI2VuZGlmCitzdGF0aWMgY2hhciAqc3NsX2NhaW5mbyA9IE5VTEw7CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF9saW1pdCA9IC0xOworc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfdGltZSA9IC0xOwogCiBzdHJ1Y3QgYnVmZmVyCiB7CkBAIC00Myw2ICsxMTIsNzEgQEAKICAgICAgICAgdm9pZCAqYnVmZmVyOwogfTsKIAorc3RhdGljIGludCBodHRwX29wdGlvbnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJpZnkiLCB2YXIpKSB7CisJCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpIHsKKwkJCWN1cmxfc3NsX3ZlcmlmeSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjZXJ0IiwgdmFyKSkgeworCQlpZiAoc3NsX2NlcnQgPT0gTlVMTCkgeworCQkJc3NsX2NlcnQgPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJCQlzdHJjcHkoc3NsX2NlcnQsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorCWlmICghc3RyY21wKCJodHRwLnNzbGtleSIsIHZhcikpIHsKKwkJaWYgKHNzbF9rZXkgPT0gTlVMTCkgeworCQkJc3NsX2tleSA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJCXN0cmNweShzc2xfa2V5LCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCWlmICghc3RyY21wKCJodHRwLnNzbGNhcGF0aCIsIHZhcikpIHsKKwkJaWYgKHNzbF9jYXBhdGggPT0gTlVMTCkgeworCQkJc3NsX2NhcGF0aCA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJCXN0cmNweShzc2xfY2FwYXRoLCB2YWx1ZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FpbmZvIiwgdmFyKSkgeworCQlpZiAoc3NsX2NhaW5mbyA9PSBOVUxMKSB7CisJCQlzc2xfY2FpbmZvID0geG1hbGxvYyhzdHJsZW4odmFsdWUpKzEpOworCQkJc3RyY3B5KHNzbF9jYWluZm8sIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQkKKwlpZiAoIXN0cmNtcCgiaHR0cC5tYXhyZXF1ZXN0cyIsIHZhcikpIHsKKwkJaWYgKG1heF9yZXF1ZXN0cyA9PSAtMSkKKwkJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKworCWlmICghc3RyY21wKCJodHRwLmxvd3NwZWVkbGltaXQiLCB2YXIpKSB7CisJCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA9PSAtMSkKKwkJCWN1cmxfbG93X3NwZWVkX2xpbWl0ID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZHRpbWUiLCB2YXIpKSB7CisJCWlmIChjdXJsX2xvd19zcGVlZF90aW1lID09IC0xKQorCQkJY3VybF9sb3dfc3BlZWRfdGltZSA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgb25lcyAqLworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7Cit9CisKIHN0YXRpYyBzaXplX3QgZndyaXRlX2J1ZmZlcih2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlciAqYnVmZmVyKQogewpAQCAtNTEsNzUgKzE4NSw1NjggQEAKICAgICAgICAgICAgICAgICBzaXplID0gYnVmZmVyLT5zaXplIC0gYnVmZmVyLT5wb3NuOwogICAgICAgICBtZW1jcHkoYnVmZmVyLT5idWZmZXIgKyBidWZmZXItPnBvc24sIHB0ciwgc2l6ZSk7CiAgICAgICAgIGJ1ZmZlci0+cG9zbiArPSBzaXplOworCWRhdGFfcmVjZWl2ZWQrKzsKICAgICAgICAgcmV0dXJuIHNpemU7CiB9CiAKK3N0YXRpYyBzaXplX3QgZndyaXRlX2J1ZmZlcl9keW5hbWljKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCisJCQkJICAgIHNpemVfdCBubWVtYiwgc3RydWN0IGJ1ZmZlciAqYnVmZmVyKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCWlmIChzaXplID4gYnVmZmVyLT5zaXplIC0gYnVmZmVyLT5wb3NuKSB7CisJCWJ1ZmZlci0+c2l6ZSA9IGJ1ZmZlci0+c2l6ZSAqIDMgLyAyOworCQlpZiAoYnVmZmVyLT5zaXplIDwgYnVmZmVyLT5wb3NuICsgc2l6ZSkKKwkJCWJ1ZmZlci0+c2l6ZSA9IGJ1ZmZlci0+cG9zbiArIHNpemU7CisJCWJ1ZmZlci0+YnVmZmVyID0geHJlYWxsb2MoYnVmZmVyLT5idWZmZXIsIGJ1ZmZlci0+c2l6ZSk7CisJfQorCW1lbWNweShidWZmZXItPmJ1ZmZlciArIGJ1ZmZlci0+cG9zbiwgcHRyLCBzaXplKTsKKwlidWZmZXItPnBvc24gKz0gc2l6ZTsKKwlkYXRhX3JlY2VpdmVkKys7CisJcmV0dXJuIHNpemU7Cit9CisKIHN0YXRpYyBzaXplX3QgZndyaXRlX3NoYTFfZmlsZSh2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsCiAJCQkgICAgICAgdm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBjaGFyIGV4cG5bNDA5Nl07CiAJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CiAJaW50IHBvc24gPSAwOworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0ID0gKHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICopZGF0YTsKIAlkbyB7Ci0JCXNzaXplX3QgcmV0dmFsID0gd3JpdGUobG9jYWwsIHB0ciArIHBvc24sIHNpemUgLSBwb3NuKTsKKwkJc3NpemVfdCByZXR2YWwgPSB3cml0ZShyZXF1ZXN0LT5sb2NhbCwKKwkJCQkgICAgICAgcHRyICsgcG9zbiwgc2l6ZSAtIHBvc24pOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCXJldHVybiBwb3NuOwogCQlwb3NuICs9IHJldHZhbDsKIAl9IHdoaWxlIChwb3NuIDwgc2l6ZSk7CiAKLQlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOwotCXN0cmVhbS5uZXh0X2luID0gcHRyOworCXJlcXVlc3QtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJcmVxdWVzdC0+c3RyZWFtLm5leHRfaW4gPSBwdHI7CiAJZG8gewotCQlzdHJlYW0ubmV4dF9vdXQgPSBleHBuOwotCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGV4cG4pOwotCQl6cmV0ID0gaW5mbGF0ZSgmc3RyZWFtLCBaX1NZTkNfRkxVU0gpOwotCQlTSEExX1VwZGF0ZSgmYywgZXhwbiwgc2l6ZW9mKGV4cG4pIC0gc3RyZWFtLmF2YWlsX291dCk7Ci0JfSB3aGlsZSAoc3RyZWFtLmF2YWlsX2luICYmIHpyZXQgPT0gWl9PSyk7CisJCXJlcXVlc3QtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47CisJCXJlcXVlc3QtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7CisJCXJlcXVlc3QtPnpyZXQgPSBpbmZsYXRlKCZyZXF1ZXN0LT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJCVNIQTFfVXBkYXRlKCZyZXF1ZXN0LT5jLCBleHBuLAorCQkJICAgIHNpemVvZihleHBuKSAtIHJlcXVlc3QtPnN0cmVhbS5hdmFpbF9vdXQpOworCX0gd2hpbGUgKHJlcXVlc3QtPnN0cmVhbS5hdmFpbF9pbiAmJiByZXF1ZXN0LT56cmV0ID09IFpfT0spOworCWRhdGFfcmVjZWl2ZWQrKzsKIAlyZXR1cm4gc2l6ZTsKIH0KIAotdm9pZCBwcmVmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgdm9pZCBwcm9jZXNzX2N1cmxfbWVzc2FnZXModm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX3JlcXVlc3RfcXVldWUodm9pZCk7CisjZW5kaWYKK3N0YXRpYyBpbnQgZmV0Y2hfYWx0ZXJuYXRlcyhjaGFyICpiYXNlKTsKKworc3RhdGljIENVUkwqIGdldF9jdXJsX2hhbmRsZSh2b2lkKQogeworCUNVUkwqIHJlc3VsdCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgY3VybF9zc2xfdmVyaWZ5KTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA3CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfT1BUSU9OQUwpOworI2VuZGlmCisKKwlpZiAoc3NsX2NlcnQgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMQ0VSVCwgc3NsX2NlcnQpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKKwlpZiAoc3NsX2tleSAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xLRVksIHNzbF9rZXkpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCWlmIChzc2xfY2FwYXRoICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBUEFUSCwgc3NsX2NhcGF0aCk7CisjZW5kaWYKKwlpZiAoc3NsX2NhaW5mbyAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQUlORk8sIHNzbF9jYWluZm8pOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKKworCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA+IDAgJiYgY3VybF9sb3dfc3BlZWRfdGltZSA+IDApIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULAorCQkJCSBjdXJsX2xvd19zcGVlZF9saW1pdCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLAorCQkJCSBjdXJsX2xvd19zcGVlZF90aW1lKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGdvdF9hbHRlcm5hdGVzID0gMDsKK3N0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqZ2V0X2FjdGl2ZV9zbG90KHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV3c2xvdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaW50IG51bV90cmFuc2ZlcnM7CisKKwkvKiBXYWl0IGZvciBhIHNsb3QgdG8gb3BlbiB1cCBpZiB0aGUgcXVldWUgaXMgZnVsbCAqLworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPj0gbWF4X3JlcXVlc3RzKSB7CisJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQlpZiAobnVtX3RyYW5zZmVycyA8IGFjdGl2ZV9yZXF1ZXN0cykgeworCQkJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisJCX0KKwl9CisjZW5kaWYKKworCXdoaWxlIChzbG90ICE9IE5VTEwgJiYgc2xvdC0+aW5fdXNlKSB7CisJCXNsb3QgPSBzbG90LT5uZXh0OworCX0KKwlpZiAoc2xvdCA9PSBOVUxMKSB7CisJCW5ld3Nsb3QgPSB4bWFsbG9jKHNpemVvZigqbmV3c2xvdCkpOworCQluZXdzbG90LT5jdXJsID0gTlVMTDsKKwkJbmV3c2xvdC0+aW5fdXNlID0gMDsKKwkJbmV3c2xvdC0+bmV4dCA9IE5VTEw7CisKKwkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQlpZiAoc2xvdCA9PSBOVUxMKSB7CisJCQlhY3RpdmVfcXVldWVfaGVhZCA9IG5ld3Nsb3Q7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAoc2xvdC0+bmV4dCAhPSBOVUxMKSB7CisJCQkJc2xvdCA9IHNsb3QtPm5leHQ7CisJCQl9CisJCQlzbG90LT5uZXh0ID0gbmV3c2xvdDsKKwkJfQorCQlzbG90ID0gbmV3c2xvdDsKKwl9CisKKwlpZiAoc2xvdC0+Y3VybCA9PSBOVUxMKSB7CisjaWZkZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorCQlzbG90LT5jdXJsID0gZ2V0X2N1cmxfaGFuZGxlKCk7CisjZWxzZQorCQlzbG90LT5jdXJsID0gY3VybF9lYXN5X2R1cGhhbmRsZShjdXJsX2RlZmF1bHQpOworI2VuZGlmCisJfQorCisJYWN0aXZlX3JlcXVlc3RzKys7CisJc2xvdC0+aW5fdXNlID0gMTsKKwlzbG90LT5kb25lID0gMDsKKwlzbG90LT5sb2NhbCA9IE5VTEw7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHByYWdtYV9oZWFkZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19yYW5nZV9oZWFkZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY3VybF9lcnJvcnN0cik7CisKKwlyZXR1cm4gc2xvdDsKK30KKworc3RhdGljIGludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCisJaWYgKGN1cmxtX3Jlc3VsdCAhPSBDVVJMTV9PSyAmJgorCSAgICBjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7CisJCWFjdGl2ZV9yZXF1ZXN0cy0tOworCQlzbG90LT5pbl91c2UgPSAwOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcnVuX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaW50IG51bV90cmFuc2ZlcnM7CisJbG9uZyBsYXN0X3BvcyA9IDA7CisJbG9uZyBjdXJyZW50X3BvczsKKwlmZF9zZXQgcmVhZGZkczsKKwlmZF9zZXQgd3JpdGVmZHM7CisJZmRfc2V0IGV4Y2ZkczsKKwlpbnQgbWF4X2ZkOworCXN0cnVjdCB0aW1ldmFsIHNlbGVjdF90aW1lb3V0OworCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQ7CisKKwl3aGlsZSAoIXNsb3QtPmRvbmUpIHsKKwkJZGF0YV9yZWNlaXZlZCA9IDA7CisJCWRvIHsKKwkJCWN1cmxtX3Jlc3VsdCA9IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwKKwkJCQkJCQkgICZudW1fdHJhbnNmZXJzKTsKKwkJfSB3aGlsZSAoY3VybG1fcmVzdWx0ID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSk7CisJCWlmIChudW1fdHJhbnNmZXJzIDwgYWN0aXZlX3JlcXVlc3RzKSB7CisJCQlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKKwkJCXByb2Nlc3NfcmVxdWVzdF9xdWV1ZSgpOworCQl9CisKKwkJaWYgKCFkYXRhX3JlY2VpdmVkICYmIHNsb3QtPmxvY2FsICE9IE5VTEwpIHsKKwkJCWN1cnJlbnRfcG9zID0gZnRlbGwoc2xvdC0+bG9jYWwpOworCQkJaWYgKGN1cnJlbnRfcG9zID4gbGFzdF9wb3MpCisJCQkJZGF0YV9yZWNlaXZlZCsrOworCQkJbGFzdF9wb3MgPSBjdXJyZW50X3BvczsKKwkJfQorCisJCWlmICghc2xvdC0+ZG9uZSAmJiAhZGF0YV9yZWNlaXZlZCkgeworCQkJbWF4X2ZkID0gMDsKKwkJCUZEX1pFUk8oJnJlYWRmZHMpOworCQkJRkRfWkVSTygmd3JpdGVmZHMpOworCQkJRkRfWkVSTygmZXhjZmRzKTsKKwkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyA9IDA7CisJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisJCQlzZWxlY3QobWF4X2ZkLCAmcmVhZGZkcywgJndyaXRlZmRzLAorCQkJICAgICAgICZleGNmZHMsICZzZWxlY3RfdGltZW91dCk7CisJCX0KKwl9CisjZWxzZQorCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJYWN0aXZlX3JlcXVlc3RzLS07CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3RhcnRfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5zaGExKTsKKwljaGFyIHByZXZmaWxlW1BBVEhfTUFYXTsKKwljaGFyICp1cmw7CisJY2hhciAqcG9zbjsKKwlpbnQgcHJldmxvY2FsOworCXVuc2lnbmVkIGNoYXIgcHJldl9idWZbUFJFVl9CVUZfU0laRV07CisJc3NpemVfdCBwcmV2X3JlYWQgPSAwOworCWxvbmcgcHJldl9wb3NuID0gMDsKKwljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKworCXNucHJpbnRmKHByZXZmaWxlLCBzaXplb2YocHJldmZpbGUpLCAiJXMucHJldiIsIHJlcXVlc3QtPmZpbGVuYW1lKTsKKwl1bmxpbmsocHJldmZpbGUpOworCXJlbmFtZShyZXF1ZXN0LT50bXBmaWxlLCBwcmV2ZmlsZSk7CisJdW5saW5rKHJlcXVlc3QtPnRtcGZpbGUpOworCisJcmVxdWVzdC0+bG9jYWwgPSBvcGVuKHJlcXVlc3QtPnRtcGZpbGUsCisJCQkgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCS8qIFRoaXMgY291bGQgaGF2ZSBmYWlsZWQgZHVlIHRvIHRoZSAibGF6eSBkaXJlY3RvcnkgY3JlYXRpb24iOworCSAqIHRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudC4KKwkgKi8KKwlpZiAocmVxdWVzdC0+bG9jYWwgPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworCQljaGFyICpkaXIgPSBzdHJyY2hyKHJlcXVlc3QtPnRtcGZpbGUsICcvJyk7CisJCWlmIChkaXIpIHsKKwkJCSpkaXIgPSAwOworCQkJbWtkaXIocmVxdWVzdC0+dG1wZmlsZSwgMDc3Nyk7CisJCQkqZGlyID0gJy8nOworCQl9CisJCXJlcXVlc3QtPmxvY2FsID0gb3BlbihyZXF1ZXN0LT50bXBmaWxlLAorCQkJCSAgICAgIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJfQorCisJaWYgKHJlcXVlc3QtPmxvY2FsIDwgMCkgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCWVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlc1xuIiwKKwkJICAgICAgcmVxdWVzdC0+dG1wZmlsZSwgcmVxdWVzdC0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoJnJlcXVlc3QtPnN0cmVhbSwgMCwgc2l6ZW9mKHJlcXVlc3QtPnN0cmVhbSkpOworCisJaW5mbGF0ZUluaXQoJnJlcXVlc3QtPnN0cmVhbSk7CisKKwlTSEExX0luaXQoJnJlcXVlc3QtPmMpOworCisJdXJsID0geG1hbGxvYyhzdHJsZW4ocmVxdWVzdC0+cmVwby0+YmFzZSkgKyA1MCk7CisJcmVxdWVzdC0+dXJsID0geG1hbGxvYyhzdHJsZW4ocmVxdWVzdC0+cmVwby0+YmFzZSkgKyA1MCk7CisJc3RyY3B5KHVybCwgcmVxdWVzdC0+cmVwby0+YmFzZSk7CisJcG9zbiA9IHVybCArIHN0cmxlbihyZXF1ZXN0LT5yZXBvLT5iYXNlKTsKKwlzdHJjcHkocG9zbiwgIm9iamVjdHMvIik7CisJcG9zbiArPSA4OworCW1lbWNweShwb3NuLCBoZXgsIDIpOworCXBvc24gKz0gMjsKKwkqKHBvc24rKykgPSAnLyc7CisJc3RyY3B5KHBvc24sIGhleCArIDIpOworCXN0cmNweShyZXF1ZXN0LT51cmwsIHVybCk7CisKKwkvKiBJZiBhIHByZXZpb3VzIHRlbXAgZmlsZSBpcyBwcmVzZW50LCBwcm9jZXNzIHdoYXQgd2FzIGFscmVhZHkKKwkgICBmZXRjaGVkLiAqLworCXByZXZsb2NhbCA9IG9wZW4ocHJldmZpbGUsIE9fUkRPTkxZKTsKKwlpZiAocHJldmxvY2FsICE9IC0xKSB7CisJCWRvIHsKKwkJCXByZXZfcmVhZCA9IHJlYWQocHJldmxvY2FsLCBwcmV2X2J1ZiwgUFJFVl9CVUZfU0laRSk7CisJCQlpZiAocHJldl9yZWFkPjApIHsKKwkJCQlpZiAoZndyaXRlX3NoYTFfZmlsZShwcmV2X2J1ZiwKKwkJCQkJCSAgICAgMSwKKwkJCQkJCSAgICAgcHJldl9yZWFkLAorCQkJCQkJICAgICByZXF1ZXN0KSA9PSBwcmV2X3JlYWQpIHsKKwkJCQkJcHJldl9wb3NuICs9IHByZXZfcmVhZDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2X3JlYWQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKHByZXZfcmVhZCA+IDApOworCQljbG9zZShwcmV2bG9jYWwpOworCX0KKwl1bmxpbmsocHJldmZpbGUpOworCisJLyogUmVzZXQgaW5mbGF0ZS9TSEExIGlmIHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBwcmV2aW91cyB0ZW1wCisJICAgZmlsZTsgYWxzbyByZXdpbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9jYWwgZmlsZS4gKi8KKwlpZiAocHJldl9yZWFkID09IC0xKSB7CisJCW1lbXNldCgmcmVxdWVzdC0+c3RyZWFtLCAwLCBzaXplb2YocmVxdWVzdC0+c3RyZWFtKSk7CisJCWluZmxhdGVJbml0KCZyZXF1ZXN0LT5zdHJlYW0pOworCQlTSEExX0luaXQoJnJlcXVlc3QtPmMpOworCQlpZiAocHJldl9wb3NuPjApIHsKKwkJCXByZXZfcG9zbiA9IDA7CisJCQlsc2VlayhyZXF1ZXN0LT5sb2NhbCwgU0VFS19TRVQsIDApOworCQkJZnRydW5jYXRlKHJlcXVlc3QtPmxvY2FsLCAwKTsKKwkJfQorCX0KKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcmVxdWVzdCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9zaGExX2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgcmVxdWVzdC0+ZXJyb3JzdHIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOworCisJLyogSWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGRhdGEgZnJvbSBhIHByZXZpb3VzIGZldGNoCisJICAgYXR0ZW1wdCwgb25seSBmZXRjaCB0aGUgZGF0YSB3ZSBkb24ndCBhbHJlYWR5IGhhdmUuICovCisJaWYgKHByZXZfcG9zbj4wKSB7CisJCWlmIChnZXRfdmVyYm9zZWx5KQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQloZXgsIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsCisJCQkJIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKKwl9CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCWNsb3NlKHJlcXVlc3QtPmxvY2FsKTsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXR1cm47CisJfQorCQorCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCXJlcXVlc3QtPnN0YXRlID0gQUNUSVZFOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWZjaG1vZChyZXF1ZXN0LT5sb2NhbCwgMDQ0NCk7CisJY2xvc2UocmVxdWVzdC0+bG9jYWwpOworCisJaWYgKHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiByZXF1ZXN0ZWQgcmFuZ2UgaW52YWxpZDsgd2UgbWF5IGFscmVhZHkgaGF2ZSBhbGwgdGhlIGRhdGEuXG4iKTsKKwl9IGVsc2UgaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmIChzdGF0KHJlcXVlc3QtPnRtcGZpbGUsICZzdCkgPT0gMCkKKwkJCWlmIChzdC5zdF9zaXplID09IDApCisJCQkJdW5saW5rKHJlcXVlc3QtPnRtcGZpbGUpOworCQlyZXR1cm47CisJfQorCisJaW5mbGF0ZUVuZCgmcmVxdWVzdC0+c3RyZWFtKTsKKwlTSEExX0ZpbmFsKHJlcXVlc3QtPnJlYWxfc2hhMSwgJnJlcXVlc3QtPmMpOworCWlmIChyZXF1ZXN0LT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQl1bmxpbmsocmVxdWVzdC0+dG1wZmlsZSk7CisJCXJldHVybjsKKwl9CisJaWYgKG1lbWNtcChyZXF1ZXN0LT5zaGExLCByZXF1ZXN0LT5yZWFsX3NoYTEsIDIwKSkgeworCQl1bmxpbmsocmVxdWVzdC0+dG1wZmlsZSk7CisJCXJldHVybjsKKwl9CisJcmVxdWVzdC0+cmVuYW1lID0KKwkJbW92ZV90ZW1wX3RvX2ZpbGUocmVxdWVzdC0+dG1wZmlsZSwgcmVxdWVzdC0+ZmlsZW5hbWUpOworCisJaWYgKHJlcXVlc3QtPnJlbmFtZSA9PSAwKQorCQlwdWxsX3NheSgiZ290ICVzXG4iLCBzaGExX3RvX2hleChyZXF1ZXN0LT5zaGExKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqZW50cnkgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisKKwlpZiAocmVxdWVzdCA9PSByZXF1ZXN0X3F1ZXVlX2hlYWQpIHsKKwkJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdC0+bmV4dDsKKwl9IGVsc2UgeworCQl3aGlsZSAoZW50cnktPm5leHQgIT0gTlVMTCAmJiBlbnRyeS0+bmV4dCAhPSByZXF1ZXN0KQorCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwkJaWYgKGVudHJ5LT5uZXh0ID09IHJlcXVlc3QpCisJCQllbnRyeS0+bmV4dCA9IGVudHJ5LT5uZXh0LT5uZXh0OworCX0KKworCWZyZWUocmVxdWVzdC0+dXJsKTsKKwlmcmVlKHJlcXVlc3QpOworfQorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK3ZvaWQgcHJvY2Vzc19jdXJsX21lc3NhZ2VzKHZvaWQpCit7CisJaW50IG51bV9tZXNzYWdlczsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IE5VTEw7CisJQ1VSTE1zZyAqY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCisJd2hpbGUgKGN1cmxfbWVzc2FnZSAhPSBOVUxMKSB7CisJCWlmIChjdXJsX21lc3NhZ2UtPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKwkJCWludCBjdXJsX3Jlc3VsdCA9IGN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCQl3aGlsZSAoc2xvdCAhPSBOVUxMICYmCisJCQkgICAgICAgc2xvdC0+Y3VybCAhPSBjdXJsX21lc3NhZ2UtPmVhc3lfaGFuZGxlKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJaWYgKHNsb3QgIT0gTlVMTCkgeworCQkJCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CisJCQkJYWN0aXZlX3JlcXVlc3RzLS07CisJCQkJc2xvdC0+ZG9uZSA9IDE7CisJCQkJc2xvdC0+aW5fdXNlID0gMDsKKwkJCQlzbG90LT5jdXJsX3Jlc3VsdCA9IGN1cmxfcmVzdWx0OworCQkJCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsCisJCQkJCQkgIENVUkxJTkZPX0hUVFBfQ09ERSwKKwkJCQkJCSAgJnNsb3QtPmh0dHBfY29kZSk7CisJCQkJcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwkJCQl3aGlsZSAocmVxdWVzdCAhPSBOVUxMICYmCisJCQkJICAgICAgIHJlcXVlc3QtPnNsb3QgIT0gc2xvdCkKKwkJCQkJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiUmVjZWl2ZWQgRE9ORSBtZXNzYWdlIGZvciB1bmtub3duIHJlcXVlc3QhXG4iKTsKKwkJCX0KKwkJCWlmIChyZXF1ZXN0ICE9IE5VTEwpIHsKKwkJCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9IGN1cmxfcmVzdWx0OworCQkJCXJlcXVlc3QtPmh0dHBfY29kZSA9IHNsb3QtPmh0dHBfY29kZTsKKwkJCQlyZXF1ZXN0LT5zbG90ID0gTlVMTDsKKwkJCQlyZXF1ZXN0LT5zdGF0ZSA9IENPTVBMRVRFOworCisJCQkJLyogVXNlIGFsdGVybmF0ZXMgaWYgbmVjZXNzYXJ5ICovCisJCQkJaWYgKHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MDQpIHsKKwkJCQkJZmV0Y2hfYWx0ZXJuYXRlcyhhbHQtPmJhc2UpOworCQkJCQlpZiAocmVxdWVzdC0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CisJCQkJCQlyZXF1ZXN0LT5yZXBvID0KKwkJCQkJCQlyZXF1ZXN0LT5yZXBvLT5uZXh0OworCQkJCQkJc3RhcnRfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBDVVJMIG1lc3NhZ2UgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJCShpbnQpY3VybF9tZXNzYWdlLT5tc2cpOworCQl9CisJCWN1cmxfbWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxtLCAmbnVtX21lc3NhZ2VzKTsKKwl9Cit9CisKK3ZvaWQgcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHZvaWQpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwlpbnQgbnVtX3RyYW5zZmVyczsKKworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPCBtYXhfcmVxdWVzdHMgJiYgcmVxdWVzdCAhPSBOVUxMKSB7CisJCWlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBXQUlUSU5HKSB7CisJCQlpZiAoaGFzX3NoYTFfZmlsZShyZXF1ZXN0LT5zaGExKSkKKwkJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCQllbHNlCisJCQkJc3RhcnRfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQl9CisJCXJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCX0KKworCXdoaWxlIChzbG90ICE9IE5VTEwpIHsKKwkJaWYgKCFzbG90LT5pbl91c2UgJiYgc2xvdC0+Y3VybCAhPSBOVUxMKSB7CisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJCXNsb3QtPmN1cmwgPSBOVUxMOworCQl9CisJCXNsb3QgPSBzbG90LT5uZXh0OworCX0JCQkJCit9CisjZW5kaWYKKwordm9pZCBwcmVmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXdyZXE7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnRhaWw7CisJY2hhciAqZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKworCW5ld3JlcSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdyZXEpKTsKKwltZW1jcHkobmV3cmVxLT5zaGExLCBzaGExLCAyMCk7CisJbmV3cmVxLT5yZXBvID0gYWx0OworCW5ld3JlcS0+dXJsID0gTlVMTDsKKwluZXdyZXEtPmxvY2FsID0gLTE7CisJbmV3cmVxLT5zdGF0ZSA9IFdBSVRJTkc7CisJc25wcmludGYobmV3cmVxLT5maWxlbmFtZSwgc2l6ZW9mKG5ld3JlcS0+ZmlsZW5hbWUpLCAiJXMiLCBmaWxlbmFtZSk7CisJc25wcmludGYobmV3cmVxLT50bXBmaWxlLCBzaXplb2YobmV3cmVxLT50bXBmaWxlKSwKKwkJICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCW5ld3JlcS0+bmV4dCA9IE5VTEw7CisKKwlpZiAocmVxdWVzdF9xdWV1ZV9oZWFkID09IE5VTEwpIHsKKwkJcmVxdWVzdF9xdWV1ZV9oZWFkID0gbmV3cmVxOworCX0gZWxzZSB7CisJCXRhaWwgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJCXdoaWxlICh0YWlsLT5uZXh0ICE9IE5VTEwpIHsKKwkJCXRhaWwgPSB0YWlsLT5uZXh0OworCQl9CisJCXRhaWwtPm5leHQgPSBuZXdyZXE7CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKCk7CisJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisjZW5kaWYKK30KIAogc3RhdGljIGludCBmZXRjaF9pbmRleChzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CiAJY2hhciAqZmlsZW5hbWU7CiAJY2hhciAqdXJsOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJbG9uZyBwcmV2X3Bvc24gPSAwOworCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOworCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOwogCiAJRklMRSAqaW5kZXhmaWxlOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogCiAJaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKQogCQlyZXR1cm4gMDsKIAogCWlmIChnZXRfdmVyYm9zZWx5KQotCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsCi0JCQlzaGExX3RvX2hleChzaGExKSk7CisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBpbmRleCBmb3IgcGFjayAlc1xuIiwgaGV4KTsKIAkKIAl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZXBvLT5iYXNlKSArIDY0KTsKLQlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsCi0JCXJlcG8tPmJhc2UsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlzcHJpbnRmKHVybCwgIiVzL29iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIHJlcG8tPmJhc2UsIGhleCk7CiAJCiAJZmlsZW5hbWUgPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKLQlpbmRleGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCWluZGV4ZmlsZSA9IGZvcGVuKHRtcGZpbGUsICJhIik7CiAJaWYgKCFpbmRleGZpbGUpCiAJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayBpbmRleCIsCiAJCQkgICAgIGZpbGVuYW1lKTsKIAotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCBpbmRleGZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOwotCQotCWlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKSkgewotCQlmY2xvc2UoaW5kZXhmaWxlKTsKLQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXMiLCB1cmwpOworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKwlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKKwkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KKwlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoZ2V0X3ZlcmJvc2VseSkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBpbmRleCBmb3IgcGFjayAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQloZXgsIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAoc2xvdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZjbG9zZShpbmRleGZpbGUpOworCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXNcbiVzIiwgdXJsLAorCQkJCSAgICAgY3VybF9lcnJvcnN0cik7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CiAJfQogCiAJZmNsb3NlKGluZGV4ZmlsZSk7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOwogfQogCiBzdGF0aWMgaW50IHNldHVwX2luZGV4KHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTE0NSwxMCArNzcyLDE2IEBACiAJY2hhciAqZGF0YTsKIAlpbnQgaSA9IDA7CiAJaW50IGh0dHBfc3BlY2lmaWMgPSAxOworCXN0cnVjdCBhbHRfYmFzZSAqdGFpbCA9IGFsdDsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsX2J5dGUgPSAnXDAnOworCisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisKIAlpZiAoZ290X2FsdGVybmF0ZXMpCiAJCXJldHVybiAwOworCiAJZGF0YSA9IHhtYWxsb2MoNDA5Nik7Ci0JYnVmZmVyLnNpemUgPSA0MDk1OworCWJ1ZmZlci5zaXplID0gNDA5NjsKIAlidWZmZXIucG9zbiA9IDA7CiAJYnVmZmVyLmJ1ZmZlciA9IGRhdGE7CiAKQEAgLTE1OCwyNSArNzkxLDQxIEBACiAJdXJsID0geG1hbGxvYyhzdHJsZW4oYmFzZSkgKyAzMSk7CiAJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIiwgYmFzZSk7CiAKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCSBmd3JpdGVfYnVmZmVyX2R5bmFtaWMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LIHx8ICFidWZmZXIucG9zbikgeworCQkJaHR0cF9zcGVjaWZpYyA9IDA7CiAKLQlpZiAoY3VybF9lYXN5X3BlcmZvcm0oY3VybCkgfHwgIWJ1ZmZlci5wb3NuKSB7Ci0JCWh0dHBfc3BlY2lmaWMgPSAwOworCQkJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIsIGJhc2UpOwogCi0JCXNwcmludGYodXJsLCAiJXMvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiLCBiYXNlKTsKLQkJCi0JCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOwotCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCQkKLQkJaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpKSB7Ci0JCQlyZXR1cm4gMDsKKwkJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJCQkgZndyaXRlX2J1ZmZlcl9keW5hbWljKTsKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQkJCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CisJCQkJCWlmIChzbG90LT5odHRwX2NvZGUgPT0gNDA0KQorCQkJCQkJZ290X2FsdGVybmF0ZXMgPSAxOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQl9CiAJCX0KKwl9IGVsc2UgeworCQlmcmVlKGJ1ZmZlci5idWZmZXIpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlkYXRhW2J1ZmZlci5wb3NuXSA9ICdcMCc7CisJZndyaXRlX2J1ZmZlcl9keW5hbWljKCZudWxsX2J5dGUsIDEsIDEsICZidWZmZXIpOworCWJ1ZmZlci5wb3NuLS07CisJZGF0YSA9IGJ1ZmZlci5idWZmZXI7CiAKIAl3aGlsZSAoaSA8IGJ1ZmZlci5wb3NuKSB7CiAJCWludCBwb3NuID0gaTsKQEAgLTIyMywxOCArODcyLDIxIEBACiAJCQkJCWZwcmludGYoc3RkZXJyLCAKIAkJCQkJCSJBbHNvIGxvb2sgYXQgJXNcbiIsIHRhcmdldCk7CiAJCQkJbmV3YWx0ID0geG1hbGxvYyhzaXplb2YoKm5ld2FsdCkpOwotCQkJCW5ld2FsdC0+bmV4dCA9IGFsdDsKKwkJCQluZXdhbHQtPm5leHQgPSBOVUxMOwogCQkJCW5ld2FsdC0+YmFzZSA9IHRhcmdldDsKIAkJCQluZXdhbHQtPmdvdF9pbmRpY2VzID0gMDsKIAkJCQluZXdhbHQtPnBhY2tzID0gTlVMTDsKLQkJCQlhbHQgPSBuZXdhbHQ7CisJCQkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKKwkJCQkJdGFpbCA9IHRhaWwtPm5leHQ7CisJCQkJdGFpbC0+bmV4dCA9IG5ld2FsdDsKIAkJCQlyZXQrKzsKIAkJCX0KIAkJfQogCQlpID0gcG9zbiArIDE7CiAJfQorCiAJZ290X2FsdGVybmF0ZXMgPSAxOwotCQorCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjQ2LDYgKzg5OCw4IEBACiAJY2hhciAqZGF0YTsKIAlpbnQgaSA9IDA7CiAKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwogCWlmIChyZXBvLT5nb3RfaW5kaWNlcykKIAkJcmV0dXJuIDA7CiAKQEAgLTI2MCwxNSArOTE0LDI0IEBACiAJdXJsID0geG1hbGxvYyhzdHJsZW4ocmVwby0+YmFzZSkgKyAyMSk7CiAJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vcGFja3MiLCByZXBvLT5iYXNlKTsKIAotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7Ci0JCi0JaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpKSB7Ci0JCXJldHVybiAtMTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJIGZ3cml0ZV9idWZmZXJfZHluYW1pYyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcmVlKGJ1ZmZlci5idWZmZXIpOworCQkJcmV0dXJuIGVycm9yKCIlcyIsIGN1cmxfZXJyb3JzdHIpOworCQl9CisJfSBlbHNlIHsKKwkJZnJlZShidWZmZXIuYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwogCX0KIAorCWRhdGEgPSBidWZmZXIuYnVmZmVyOwogCXdoaWxlIChpIDwgYnVmZmVyLnBvc24pIHsKIAkJc3dpdGNoIChkYXRhW2ldKSB7CiAJCWNhc2UgJ1AnOgpAQCAtMjg4LDYgKzk1MSw3IEBACiAJCWkrKzsKIAl9CiAKKwlmcmVlKGJ1ZmZlci5idWZmZXIpOwogCXJlcG8tPmdvdF9pbmRpY2VzID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5OSw2ICs5NjMsMTMgQEAKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKIAlGSUxFICpwYWNrZmlsZTsKIAljaGFyICpmaWxlbmFtZTsKKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOworCWludCByZXQ7CisJbG9uZyBwcmV2X3Bvc24gPSAwOworCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOworCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOworCisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CiAKIAlpZiAoZmV0Y2hfaW5kaWNlcyhyZXBvKSkKIAkJcmV0dXJuIC0xOwpAQCAtMzE4LDE1MyArOTg5LDIzNyBAQAogCQlyZXBvLT5iYXNlLCBzaGExX3RvX2hleCh0YXJnZXQtPnNoYTEpKTsKIAogCWZpbGVuYW1lID0gc2hhMV9wYWNrX25hbWUodGFyZ2V0LT5zaGExKTsKLQlwYWNrZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOworCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisJcGFja2ZpbGUgPSBmb3Blbih0bXBmaWxlLCAiYSIpOwogCWlmICghcGFja2ZpbGUpCiAJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCiAJCQkgICAgIGZpbGVuYW1lKTsKIAotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9GSUxFLCBwYWNrZmlsZSk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZSk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7Ci0JCi0JaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmwpKSB7Ci0JCWZjbG9zZShwYWNrZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXMiLCB1cmwpOworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcGFja2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIG5vX3ByYWdtYV9oZWFkZXIpOworCXNsb3QtPmxvY2FsID0gcGFja2ZpbGU7CisKKwkvKiBJZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQgZnJvbSBhIHByZXZpb3VzIHRyYW5zZmVyIGF0dGVtcHQsCisJICAgcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmICovCisJcHJldl9wb3NuID0gZnRlbGwocGFja2ZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoZ2V0X3ZlcmJvc2VseSkKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXN1bWluZyBmZXRjaCBvZiBwYWNrICVzIGF0IGJ5dGUgJWxkXG4iLAorCQkJCXNoYTFfdG9faGV4KHRhcmdldC0+c2hhMSksIHByZXZfcG9zbik7CisJCXNwcmludGYocmFuZ2UsICJSYW5nZTogYnl0ZXM9JWxkLSIsIHByZXZfcG9zbik7CisJCXJhbmdlX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHJhbmdlX2hlYWRlciwgcmFuZ2UpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgcmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAoc2xvdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZjbG9zZShwYWNrZmlsZSk7CisJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsIHVybCwKKwkJCQkgICAgIGN1cmxfZXJyb3JzdHIpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwogCX0KIAogCWZjbG9zZShwYWNrZmlsZSk7CiAKKwlyZXQgPSBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCWxzdCA9ICZyZXBvLT5wYWNrczsKIAl3aGlsZSAoKmxzdCAhPSB0YXJnZXQpCiAJCWxzdCA9ICYoKCpsc3QpLT5uZXh0KTsKIAkqbHN0ID0gKCpsc3QpLT5uZXh0OwogCisJaWYgKHZlcmlmeV9wYWNrKHRhcmdldCwgMCkpCisJCXJldHVybiAtMTsKIAlpbnN0YWxsX3BhY2tlZF9naXQodGFyZ2V0KTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgZmV0Y2hfb2JqZWN0KHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgZmV0Y2hfb2JqZWN0KHN0cnVjdCBhbHRfYmFzZSAqcmVwbywgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAljaGFyICpoZXggPSBzaGExX3RvX2hleChzaGExKTsKLQljaGFyICpmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwotCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKLQljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwogCWludCByZXQ7Ci0JY2hhciAqdXJsOwotCWNoYXIgKnBvc247CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CiAKLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy9vYmpfWFhYWFhYIiwKLQkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCXdoaWxlIChyZXF1ZXN0ICE9IE5VTEwgJiYgbWVtY21wKHJlcXVlc3QtPnNoYTEsIHNoYTEsIDIwKSkKKwkJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisJaWYgKHJlcXVlc3QgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CiAKLQlsb2NhbCA9IG1rc3RlbXAodG1wZmlsZSk7Ci0JaWYgKGxvY2FsIDwgMCkKLQkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMgZm9yICVzOiAlc1xuIiwKLQkJCSAgICAgdG1wZmlsZSwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0KLQltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOwotCi0JaW5mbGF0ZUluaXQoJnN0cmVhbSk7Ci0KLQlTSEExX0luaXQoJmMpOwotCi0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfRklMRSwgTlVMTCk7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9zaGExX2ZpbGUpOwotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKLQotCXVybCA9IHhtYWxsb2Moc3RybGVuKHJlcG8tPmJhc2UpICsgNTApOwotCXN0cmNweSh1cmwsIHJlcG8tPmJhc2UpOwotCXBvc24gPSB1cmwgKyBzdHJsZW4ocmVwby0+YmFzZSk7Ci0Jc3RyY3B5KHBvc24sICJvYmplY3RzLyIpOwotCXBvc24gKz0gODsKLQltZW1jcHkocG9zbiwgaGV4LCAyKTsKLQlwb3NuICs9IDI7Ci0JKihwb3NuKyspID0gJy8nOwotCXN0cmNweShwb3NuLCBoZXggKyAyKTsKLQotCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7Ci0KLQlpZiAoY3VybF9lYXN5X3BlcmZvcm0oY3VybCkpIHsKLQkJdW5saW5rKGZpbGVuYW1lKTsKLQkJcmV0dXJuIC0xOworCWlmIChoYXNfc2hhMV9maWxlKHJlcXVlc3QtPnNoYTEpKSB7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JZmNobW9kKGxvY2FsLCAwNDQ0KTsKLQljbG9zZShsb2NhbCk7Ci0JaW5mbGF0ZUVuZCgmc3RyZWFtKTsKLQlTSEExX0ZpbmFsKHJlYWxfc2hhMSwgJmMpOwotCWlmICh6cmV0ICE9IFpfU1RSRUFNX0VORCkgewotCQl1bmxpbmsodG1wZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHRcbiIsIGhleCwgdXJsKTsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChyZXF1ZXN0LT5zdGF0ZSA9PSBXQUlUSU5HKSB7CisJCWludCBudW1fdHJhbnNmZXJzOworCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCQkJcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKCk7CisJCX0KIAl9Ci0JaWYgKG1lbWNtcChzaGExLCByZWFsX3NoYTEsIDIwKSkgewotCQl1bmxpbmsodG1wZmlsZSk7CisjZWxzZQorCXN0YXJ0X3JlcXVlc3QocmVxdWVzdCk7CisjZW5kaWYKKworCXdoaWxlIChyZXF1ZXN0LT5zdGF0ZSA9PSBBQ1RJVkUpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHJlcXVlc3QtPnNsb3QpOworI2lmbmRlZiBVU0VfQ1VSTF9NVUxUSQorCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9IHJlcXVlc3QtPnNsb3QtPmN1cmxfcmVzdWx0OworCQlyZXF1ZXN0LT5odHRwX2NvZGUgPSByZXF1ZXN0LT5zbG90LT5odHRwX2NvZGU7CisJCXJlcXVlc3QtPnNsb3QgPSBOVUxMOworCisJCS8qIFVzZSBhbHRlcm5hdGVzIGlmIG5lY2Vzc2FyeSAqLworCQlpZiAocmVxdWVzdC0+aHR0cF9jb2RlID09IDQwNCkgeworCQkJZmV0Y2hfYWx0ZXJuYXRlcyhhbHQtPmJhc2UpOworCQkJaWYgKHJlcXVlc3QtPnJlcG8tPm5leHQgIT0gTlVMTCkgeworCQkJCXJlcXVlc3QtPnJlcG8gPSByZXF1ZXN0LT5yZXBvLT5uZXh0OworCQkJCXN0YXJ0X3JlcXVlc3QocmVxdWVzdCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmaW5pc2hfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCXJlcXVlc3QtPnN0YXRlID0gQ09NUExFVEU7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBBQk9SVEVEKSB7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJcmV0dXJuIGVycm9yKCJSZXF1ZXN0IGZvciAlcyBhYm9ydGVkIiwgaGV4KTsKKwl9CisKKwlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYgcmVxdWVzdC0+aHR0cF9jb2RlICE9IDQxNikgeworCQlpZiAocmVxdWVzdC0+aHR0cF9jb2RlID09IDQwNCkKKwkJCXJldCA9IC0xOyAvKiBCZSBzaWxlbnQsIGl0IGlzIHByb2JhYmx5IGluIGEgcGFjay4gKi8KKwkJZWxzZQorCQkJcmV0ID0gZXJyb3IoIiVzIChjdXJsX3Jlc3VsdCA9ICVkLCBodHRwX2NvZGUgPSAlbGQsIHNoYTEgPSAlcykiLAorCQkJCSAgICByZXF1ZXN0LT5lcnJvcnN0ciwgcmVxdWVzdC0+Y3VybF9yZXN1bHQsCisJCQkJICAgIHJlcXVlc3QtPmh0dHBfY29kZSwgaGV4KTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZXF1ZXN0LT56cmV0ICE9IFpfU1RSRUFNX0VORCkgeworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyAoJXMpIGNvcnJ1cHRcbiIsIGhleCwgcmVxdWVzdC0+dXJsKTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChtZW1jbXAocmVxdWVzdC0+c2hhMSwgcmVxdWVzdC0+cmVhbF9zaGExLCAyMCkpIHsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOwogCQlyZXR1cm4gZXJyb3IoIkZpbGUgJXMgaGFzIGJhZCBoYXNoXG4iLCBoZXgpOwogCX0KLQlyZXQgPSBsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKTsKLQlpZiAocmV0IDwgMCkgewotCQkvKiBTYW1lIENvZGEgaGFjayBhcyBpbiB3cml0ZV9zaGExX2ZpbGUoc2hhMV9maWxlLmMpICovCi0JCXJldCA9IGVycm5vOwotCQlpZiAocmV0ID09IEVYREVWICYmICFyZW5hbWUodG1wZmlsZSwgZmlsZW5hbWUpKQotCQkJZ290byBvdXQ7CisKKwlpZiAocmVxdWVzdC0+cmVuYW1lIDwgMCkgeworCQlyZXQgPSBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXM6ICVzIiwKKwkJCSAgICByZXF1ZXN0LT5maWxlbmFtZSwKKwkJCSAgICBzdHJlcnJvcihyZXF1ZXN0LT5yZW5hbWUpKTsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXR1cm4gcmV0OwogCX0KLQl1bmxpbmsodG1wZmlsZSk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9IEVFWElTVCkKLQkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXM6ICVzIiwKLQkJCQkgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihyZXQpKTsKLQl9Ci0gb3V0OgotCXB1bGxfc2F5KCJnb3QgJXNcbiIsIGhleCk7CisKKwlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmZXRjaCh1bnNpZ25lZCBjaGFyICpzaGExKQogewogCXN0cnVjdCBhbHRfYmFzZSAqYWx0YmFzZSA9IGFsdDsKKworCWlmICghZmV0Y2hfb2JqZWN0KGFsdGJhc2UsIHNoYTEpKQorCQlyZXR1cm4gMDsKIAl3aGlsZSAoYWx0YmFzZSkgewotCQlpZiAoIWZldGNoX29iamVjdChhbHRiYXNlLCBzaGExKSkKLQkJCXJldHVybiAwOwogCQlpZiAoIWZldGNoX3BhY2soYWx0YmFzZSwgc2hhMSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKGZldGNoX2FsdGVybmF0ZXMoYWx0YmFzZS0+YmFzZSkgPiAwKSB7Ci0JCQlhbHRiYXNlID0gYWx0OwotCQkJY29udGludWU7Ci0JCX0KKwkJZmV0Y2hfYWx0ZXJuYXRlcyhhbHQtPmJhc2UpOwogCQlhbHRiYXNlID0gYWx0YmFzZS0+bmV4dDsKIAl9CiAJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZmluZCAlcyB1bmRlciAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIAotCQkgICAgIGluaXRpYWxfYmFzZSk7CisJCSAgICAgYWx0LT5iYXNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVlZHNfcXVvdGUoaW50IGNoKQoreworCXN3aXRjaCAoY2gpIHsKKwljYXNlICcvJzogY2FzZSAnLSc6IGNhc2UgJy4nOgorCWNhc2UgJ0EnLi4uJ1onOgljYXNlICdhJy4uLid6JzoJY2FzZSAnMCcuLi4nOSc6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgaGV4KGludCB2KQoreworCWlmICh2IDwgMTApIHJldHVybiAnMCcgKyB2OworCWVsc2UgcmV0dXJuICdBJyArIHYgLSAxMDsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3JlZl91cmwoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVmKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgKmRwLCAqcXJlZjsKKwlpbnQgbGVuLCBiYXNlbGVuLCBjaDsKKworCWJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJbGVuID0gYmFzZWxlbiArIDY7IC8qICJyZWZzLyIgKyBOVUwgKi8KKwlmb3IgKGNwID0gcmVmOyAoY2ggPSAqY3ApICE9IDA7IGNwKyssIGxlbisrKQorCQlpZiAobmVlZHNfcXVvdGUoY2gpKQorCQkJbGVuICs9IDI7IC8qIGV4dHJhIHR3byBoZXggcGx1cyByZXBsYWNlbWVudCAlICovCisJcXJlZiA9IHhtYWxsb2MobGVuKTsKKwltZW1jcHkocXJlZiwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KHFyZWYgKyBiYXNlbGVuLCAicmVmcy8iLCA1KTsKKwlmb3IgKGNwID0gcmVmLCBkcCA9IHFyZWYgKyBiYXNlbGVuICsgNTsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKSB7CisJCWlmIChuZWVkc19xdW90ZShjaCkpIHsKKwkJCSpkcCsrID0gJyUnOworCQkJKmRwKysgPSBoZXgoKGNoID4+IDQpICYgMHhGKTsKKwkJCSpkcCsrID0gaGV4KGNoICYgMHhGKTsKKwkJfQorCQllbHNlCisJCQkqZHArKyA9IGNoOworCX0KKwkqZHAgPSAwOworCisJcmV0dXJuIHFyZWY7CiB9CiAKIGludCBmZXRjaF9yZWYoY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotICAgICAgICBjaGFyICp1cmwsICpwb3NuOworICAgICAgICBjaGFyICp1cmw7CiAgICAgICAgIGNoYXIgaGV4WzQyXTsKICAgICAgICAgc3RydWN0IGJ1ZmZlciBidWZmZXI7Ci0JY2hhciAqYmFzZSA9IGluaXRpYWxfYmFzZTsKKwljaGFyICpiYXNlID0gYWx0LT5iYXNlOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OwogICAgICAgICBidWZmZXIuc2l6ZSA9IDQxOwogICAgICAgICBidWZmZXIucG9zbiA9IDA7CiAgICAgICAgIGJ1ZmZlci5idWZmZXIgPSBoZXg7CiAgICAgICAgIGhleFs0MV0gPSAnXDAnOwogICAgICAgICAKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIE5VTEwpOwotCi0gICAgICAgIHVybCA9IHhtYWxsb2Moc3RybGVuKGJhc2UpICsgNiArIHN0cmxlbihyZWYpKTsKLSAgICAgICAgc3RyY3B5KHVybCwgYmFzZSk7Ci0gICAgICAgIHBvc24gPSB1cmwgKyBzdHJsZW4oYmFzZSk7Ci0gICAgICAgIHN0cmNweShwb3NuLCAicmVmcy8iKTsKLSAgICAgICAgcG9zbiArPSA1OwotICAgICAgICBzdHJjcHkocG9zbiwgcmVmKTsKLQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOwotCi0gICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoIkNvdWxkbid0IGdldCAlcyBmb3IgJXNcbiIsIHVybCwgcmVmKTsKKwl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZik7CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKQorCQkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBnZXQgJXMgZm9yICVzXG4lcyIsCisJCQkJICAgICB1cmwsIHJlZiwgY3VybF9lcnJvcnN0cik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOworCX0KIAogICAgICAgICBoZXhbNDBdID0gJ1wwJzsKICAgICAgICAgZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSk7CkBAIC00NzYsNiArMTIzMSwxMSBAQAogCWNoYXIgKmNvbW1pdF9pZDsKIAljaGFyICp1cmw7CiAJaW50IGFyZyA9IDE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJY2hhciAqbG93X3NwZWVkX2xpbWl0OworCWNoYXIgKmxvd19zcGVlZF90aW1lOworCWNoYXIgKndhaXRfdXJsOworCWludCByYyA9IDA7CiAKIAl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CiAJCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CkBAIC00OTEsNiArMTI1MSw4IEBACiAJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICd3JykgewogCQkJd3JpdGVfcmVmID0gYXJndlthcmcgKyAxXTsKIAkJCWFyZysrOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1yZWNvdmVyIikpIHsKKwkJCWdldF9yZWNvdmVyID0gMTsKIAkJfQogCQlhcmcrKzsKIAl9CkBAIC01MDMsMTMgKzEyNjUsNTUgQEAKIAogCWN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKIAotCWN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwotCW5vX3ByYWdtYV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChub19wcmFnbWFfaGVhZGVyLCAiUHJhZ21hOiIpOworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJeworCQljaGFyICpodHRwX21heF9yZXF1ZXN0cyA9IGdldGVudigiR0lUX0hUVFBfTUFYX1JFUVVFU1RTIik7CisJCWlmIChodHRwX21heF9yZXF1ZXN0cyAhPSBOVUxMKQorCQkJbWF4X3JlcXVlc3RzID0gYXRvaShodHRwX21heF9yZXF1ZXN0cyk7CisJfQogCi0JY3VybF9zc2xfdmVyaWZ5ID0gZ2V0ZW52KCJHSVRfU1NMX05PX1ZFUklGWSIpID8gMCA6IDE7Ci0JY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBjdXJsX3NzbF92ZXJpZnkpOwotI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDcKLQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfT1BUSU9OQUwpOworCWN1cmxtID0gY3VybF9tdWx0aV9pbml0KCk7CisJaWYgKGN1cmxtID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBjcmVhdGluZyBjdXJsIG11bHRpIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDA7CisKKwlzc2xfY2VydCA9IGdldGVudigiR0lUX1NTTF9DRVJUIik7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorCXNzbF9rZXkgPSBnZXRlbnYoIkdJVF9TU0xfS0VZIik7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJc3NsX2NhcGF0aCA9IGdldGVudigiR0lUX1NTTF9DQVBBVEgiKTsKKyNlbmRpZgorCXNzbF9jYWluZm8gPSBnZXRlbnYoIkdJVF9TU0xfQ0FJTkZPIik7CisKKwlsb3dfc3BlZWRfbGltaXQgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVCIpOworCWlmIChsb3dfc3BlZWRfbGltaXQgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSBzdHJ0b2wobG93X3NwZWVkX2xpbWl0LCBOVUxMLCAxMCk7CisJbG93X3NwZWVkX3RpbWUgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9USU1FIik7CisJaWYgKGxvd19zcGVlZF90aW1lICE9IE5VTEwpCisJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSBzdHJ0b2wobG93X3NwZWVkX3RpbWUsIE5VTEwsIDEwKTsKKworCWdpdF9jb25maWcoaHR0cF9vcHRpb25zKTsKKworCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDE7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlmIChtYXhfcmVxdWVzdHMgPCAxKQorCQltYXhfcmVxdWVzdHMgPSBERUZBVUxUX01BWF9SRVFVRVNUUzsKKyNlbmRpZgorCisJcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKHByYWdtYV9oZWFkZXIsICJQcmFnbWE6IG5vLWNhY2hlIik7CisJbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKG5vX3ByYWdtYV9oZWFkZXIsICJQcmFnbWE6Iik7CisJbm9fcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQobm9fcmFuZ2VfaGVhZGVyLCAiUmFuZ2U6Iik7CisKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorCWN1cmxfZGVmYXVsdCA9IGdldF9jdXJsX2hhbmRsZSgpOwogI2VuZGlmCiAKIAlhbHQgPSB4bWFsbG9jKHNpemVvZigqYWx0KSk7CkBAIC01MTcsMTIgKzEzMjEsMzQgQEAKIAlhbHQtPmdvdF9pbmRpY2VzID0gMDsKIAlhbHQtPnBhY2tzID0gTlVMTDsKIAlhbHQtPm5leHQgPSBOVUxMOwotCWluaXRpYWxfYmFzZSA9IHVybDsKIAogCWlmIChwdWxsKGNvbW1pdF9pZCkpCi0JCXJldHVybiAxOworCQlyYyA9IDE7CiAKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKHByYWdtYV9oZWFkZXIpOwogCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7CisJY3VybF9zbGlzdF9mcmVlX2FsbChub19yYW5nZV9oZWFkZXIpOworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9lYXN5X2NsZWFudXAoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKSB7CisJCWlmIChzbG90LT5pbl91c2UpIHsKKwkJCWlmIChnZXRfdmVyYm9zZWx5KSB7CisJCQkJY3VybF9lYXN5X2dldGluZm8oc2xvdC0+Y3VybCwKKwkJCQkJCSAgQ1VSTElORk9fRUZGRUNUSVZFX1VSTCwKKwkJCQkJCSAgJndhaXRfdXJsKTsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIldhaXRpbmcgZm9yICVzXG4iLCB3YWl0X3VybCk7CisJCQl9CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCX0KKwkJaWYgKHNsb3QtPmN1cmwgIT0gTlVMTCkKKwkJCWN1cmxfZWFzeV9jbGVhbnVwKHNsb3QtPmN1cmwpOworCQlzbG90ID0gc2xvdC0+bmV4dDsKKwl9CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwljdXJsX211bHRpX2NsZWFudXAoY3VybG0pOworI2VuZGlmCiAJY3VybF9nbG9iYWxfY2xlYW51cCgpOwotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2h0dHAtcHVzaC5jIGIvaHR0cC1wdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmZGE0MgotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtcHVzaC5jCkBAIC0wLDAgKzEsMTgxMSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImZldGNoLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+CisjaW5jbHVkZSA8ZXhwYXQuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgaHR0cF9wdXNoX3VzYWdlW10gPQorImdpdC1odHRwLXB1c2ggWy0tY29tcGxldGVdIFstLWZvcmNlXSBbLS12ZXJib3NlXSA8dXJsPiA8cmVmPiBbPHJlZj4uLi5dXG4iOworCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorI2RlZmluZSBVU0VfQ1VSTF9NVUxUSQorI2RlZmluZSBERUZBVUxUX01BWF9SRVFVRVNUUyA1CisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDcwNAorI2RlZmluZSBjdXJsX2dsb2JhbF9jbGVhbnVwKCkgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUoMCkKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDgwMAorI2RlZmluZSBjdXJsX2dsb2JhbF9pbml0KGEpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlKDApCisjZW5kaWYKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MGMwNAorI2RlZmluZSBOT19DVVJMX0VBU1lfRFVQSEFORExFCisjZW5kaWYKKworI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCisvKiBEQVYgbWV0aG9kIG5hbWVzIGFuZCByZXF1ZXN0IGJvZHkgdGVtcGxhdGVzICovCisjZGVmaW5lIERBVl9MT0NLICJMT0NLIgorI2RlZmluZSBEQVZfTUtDT0wgIk1LQ09MIgorI2RlZmluZSBEQVZfTU9WRSAiTU9WRSIKKyNkZWZpbmUgREFWX1BST1BGSU5EICJQUk9QRklORCIKKyNkZWZpbmUgREFWX1BVVCAiUFVUIgorI2RlZmluZSBEQVZfVU5MT0NLICJVTkxPQ0siCisjZGVmaW5lIFBST1BGSU5EX1JFUVVFU1QgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgPz5cbjxEOnByb3BmaW5kIHhtbG5zOkQ9XCJEQVY6XCI+XG48RDpwcm9wIHhtbG5zOlI9XCIlc1wiPlxuPEQ6c3VwcG9ydGVkbG9jay8+XG48L0Q6cHJvcD5cbjwvRDpwcm9wZmluZD4iCisjZGVmaW5lIExPQ0tfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6bG9ja2luZm8geG1sbnM6RD1cIkRBVjpcIj5cbjxEOmxvY2tzY29wZT48RDpleGNsdXNpdmUvPjwvRDpsb2Nrc2NvcGU+XG48RDpsb2NrdHlwZT48RDp3cml0ZS8+PC9EOmxvY2t0eXBlPlxuPEQ6b3duZXI+XG48RDpocmVmPm1haWx0bzolczwvRDpocmVmPlxuPC9EOm93bmVyPlxuPC9EOmxvY2tpbmZvPiIKKworI2RlZmluZSBMT0NLX1RJTUUgNjAwCisjZGVmaW5lIExPQ0tfUkVGUkVTSCAzMAorCitzdGF0aWMgaW50IGFjdGl2ZV9yZXF1ZXN0cyA9IDA7CitzdGF0aWMgaW50IGRhdGFfcmVjZWl2ZWQ7CitzdGF0aWMgaW50IHB1c2hpbmcgPSAwOworc3RhdGljIGludCBhYm9ydGVkID0gMDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IG1heF9yZXF1ZXN0cyA9IC0xOworc3RhdGljIENVUkxNICpjdXJsbTsKKyNlbmRpZgorI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCitzdGF0aWMgQ1VSTCAqY3VybF9kZWZhdWx0OworI2VuZGlmCitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKmRlZmF1bHRfaGVhZGVyczsKK3N0YXRpYyBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKworc3RhdGljIGludCBwdXNoX3ZlcmJvc2VseSA9IDA7CitzdGF0aWMgaW50IHB1c2hfYWxsID0gMDsKK3N0YXRpYyBpbnQgZm9yY2VfYWxsID0gMDsKKworc3RydWN0IGJ1ZmZlcgoreworICAgICAgICBzaXplX3QgcG9zbjsKKyAgICAgICAgc2l6ZV90IHNpemU7CisgICAgICAgIHZvaWQgKmJ1ZmZlcjsKK307CisKK3N0cnVjdCByZXBvCit7CisJY2hhciAqdXJsOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVwbyAqcmVtb3RlID0gTlVMTDsKKworZW51bSB0cmFuc2Zlcl9zdGF0ZSB7CisJTkVFRF9DSEVDSywKKwlSVU5fSEVBRCwKKwlORUVEX1BVU0gsCisJUlVOX01LQ09MLAorCVJVTl9QVVQsCisJUlVOX01PVkUsCisJQUJPUlRFRCwKKwlDT01QTEVURSwKK307CisKK3N0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0Cit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICp1cmw7CisJY2hhciAqZGVzdDsKKwlzdHJ1Y3QgYWN0aXZlX2xvY2sgKmxvY2s7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7CisJc3RydWN0IGJ1ZmZlciBidWZmZXI7CisJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKKwllbnVtIHRyYW5zZmVyX3N0YXRlIHN0YXRlOworCUNVUkxjb2RlIGN1cmxfcmVzdWx0OworCWNoYXIgZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKwlsb25nIGh0dHBfY29kZTsKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJU0hBX0NUWCBjOworCXpfc3RyZWFtIHN0cmVhbTsKKwlpbnQgenJldDsKKwlpbnQgcmVuYW1lOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpuZXh0OworfTsKKworc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QKK3sKKwlDVVJMICpjdXJsOworCUZJTEUgKmxvY2FsOworCWludCBpbl91c2U7CisJaW50IGRvbmU7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3RfcXVldWVfaGVhZCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmFjdGl2ZV9xdWV1ZV9oZWFkID0gTlVMTDsKKworc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKK3N0YXRpYyBjaGFyICpzc2xfY2VydCA9IE5VTEw7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorc3RhdGljIGNoYXIgKnNzbF9rZXkgPSBOVUxMOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorc3RhdGljIGNoYXIgKnNzbF9jYXBhdGggPSBOVUxMOworI2VuZGlmCitzdGF0aWMgY2hhciAqc3NsX2NhaW5mbyA9IE5VTEw7CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF9saW1pdCA9IC0xOworc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfdGltZSA9IC0xOworCitzdHJ1Y3QgYWN0aXZlX2xvY2sKK3sKKwlpbnQgY3R4X2FjdGl2ZWxvY2s7CisJaW50IGN0eF9vd25lcjsKKwlpbnQgY3R4X293bmVyX2hyZWY7CisJaW50IGN0eF90aW1lb3V0OworCWludCBjdHhfbG9ja3Rva2VuOworCWludCBjdHhfbG9ja3Rva2VuX2hyZWY7CisJY2hhciAqdXJsOworCWNoYXIgKm93bmVyOworCWNoYXIgKnRva2VuOworCXRpbWVfdCBzdGFydF90aW1lOworCWxvbmcgdGltZW91dDsKKwlpbnQgcmVmcmVzaGluZzsKK307CisKK3N0cnVjdCBsb2NrcHJvcAoreworCWludCBzdXBwb3J0ZWRfbG9jazsKKwlpbnQgbG9ja19lbnRyeTsKKwlpbnQgbG9ja19zY29wZTsKKwlpbnQgbG9ja190eXBlOworCWludCBsb2NrX2V4Y2x1c2l2ZTsKKwlpbnQgbG9ja19leGNsdXNpdmVfd3JpdGU7Cit9OworCitzdGF0aWMgaW50IGh0dHBfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKCJodHRwLnNzbHZlcmlmeSIsIHZhcikpIHsKKwkJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkgeworCQkJY3VybF9zc2xfdmVyaWZ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLnNzbGNlcnQiLCB2YXIpKSB7CisJCWlmIChzc2xfY2VydCA9PSBOVUxMKSB7CisJCQlzc2xfY2VydCA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSsxKTsKKwkJCXN0cmNweShzc2xfY2VydCwgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAyCisJaWYgKCFzdHJjbXAoImh0dHAuc3Nsa2V5IiwgdmFyKSkgeworCQlpZiAoc3NsX2tleSA9PSBOVUxMKSB7CisJCQlzc2xfa2V5ID0geG1hbGxvYyhzdHJsZW4odmFsdWUpKzEpOworCQkJc3RyY3B5KHNzbF9rZXksIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FwYXRoIiwgdmFyKSkgeworCQlpZiAoc3NsX2NhcGF0aCA9PSBOVUxMKSB7CisJCQlzc2xfY2FwYXRoID0geG1hbGxvYyhzdHJsZW4odmFsdWUpKzEpOworCQkJc3RyY3B5KHNzbF9jYXBhdGgsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYWluZm8iLCB2YXIpKSB7CisJCWlmIChzc2xfY2FpbmZvID09IE5VTEwpIHsKKwkJCXNzbF9jYWluZm8gPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkrMSk7CisJCQlzdHJjcHkoc3NsX2NhaW5mbywgdmFsdWUpOworCQl9CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCQorCWlmICghc3RyY21wKCJodHRwLm1heHJlcXVlc3RzIiwgdmFyKSkgeworCQlpZiAobWF4X3JlcXVlc3RzID09IC0xKQorCQkJbWF4X3JlcXVlc3RzID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWRsaW1pdCIsIHZhcikpIHsKKwkJaWYgKGN1cmxfbG93X3NwZWVkX2xpbWl0ID09IC0xKQorCQkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSAobG9uZylnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLmxvd3NwZWVkdGltZSIsIHZhcikpIHsKKwkJaWYgKGN1cmxfbG93X3NwZWVkX3RpbWUgPT0gLTEpCisJCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEZhbGwgYmFjayBvbiB0aGUgZGVmYXVsdCBvbmVzICovCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKK30KKworc3RhdGljIHNpemVfdCBmcmVhZF9idWZmZXIodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAorCQkJICAgc3RydWN0IGJ1ZmZlciAqYnVmZmVyKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCWlmIChzaXplID4gYnVmZmVyLT5zaXplIC0gYnVmZmVyLT5wb3NuKQorCQlzaXplID0gYnVmZmVyLT5zaXplIC0gYnVmZmVyLT5wb3NuOworCW1lbWNweShwdHIsIGJ1ZmZlci0+YnVmZmVyICsgYnVmZmVyLT5wb3NuLCBzaXplKTsKKwlidWZmZXItPnBvc24gKz0gc2l6ZTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNpemVfdCBmd3JpdGVfYnVmZmVyX2R5bmFtaWMoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKKwkJCQkgICAgc2l6ZV90IG5tZW1iLCBzdHJ1Y3QgYnVmZmVyICpidWZmZXIpCit7CisJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJaWYgKHNpemUgPiBidWZmZXItPnNpemUgLSBidWZmZXItPnBvc24pIHsKKwkJYnVmZmVyLT5zaXplID0gYnVmZmVyLT5zaXplICogMyAvIDI7CisJCWlmIChidWZmZXItPnNpemUgPCBidWZmZXItPnBvc24gKyBzaXplKQorCQkJYnVmZmVyLT5zaXplID0gYnVmZmVyLT5wb3NuICsgc2l6ZTsKKwkJYnVmZmVyLT5idWZmZXIgPSB4cmVhbGxvYyhidWZmZXItPmJ1ZmZlciwgYnVmZmVyLT5zaXplKTsKKwl9CisJbWVtY3B5KGJ1ZmZlci0+YnVmZmVyICsgYnVmZmVyLT5wb3NuLCBwdHIsIHNpemUpOworCWJ1ZmZlci0+cG9zbiArPSBzaXplOworCWRhdGFfcmVjZWl2ZWQrKzsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNpemVfdCBmd3JpdGVfbnVsbChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLAorCQkJICBzaXplX3Qgbm1lbWIsIHN0cnVjdCBidWZmZXIgKmJ1ZmZlcikKK3sKKwlkYXRhX3JlY2VpdmVkKys7CisJcmV0dXJuIGVsdHNpemUgKiBubWVtYjsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgdm9pZCBwcm9jZXNzX2N1cmxfbWVzc2FnZXModm9pZCk7CitzdGF0aWMgdm9pZCBwcm9jZXNzX3JlcXVlc3RfcXVldWUodm9pZCk7CisjZW5kaWYKKworc3RhdGljIENVUkwqIGdldF9jdXJsX2hhbmRsZSh2b2lkKQoreworCUNVUkwqIHJlc3VsdCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgY3VybF9zc2xfdmVyaWZ5KTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA3CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfT1BUSU9OQUwpOworI2VuZGlmCisKKwlpZiAoc3NsX2NlcnQgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMQ0VSVCwgc3NsX2NlcnQpOworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKKwlpZiAoc3NsX2tleSAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xLRVksIHNzbF9rZXkpOworI2VuZGlmCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwOAorCWlmIChzc2xfY2FwYXRoICE9IE5VTEwpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0NBUEFUSCwgc3NsX2NhcGF0aCk7CisjZW5kaWYKKwlpZiAoc3NsX2NhaW5mbyAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQUlORk8sIHNzbF9jYWluZm8pOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKKworCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA+IDAgJiYgY3VybF9sb3dfc3BlZWRfdGltZSA+IDApIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULAorCQkJCSBjdXJsX2xvd19zcGVlZF9saW1pdCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLAorCQkJCSBjdXJsX2xvd19zcGVlZF90aW1lKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5ld3Nsb3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWludCBudW1fdHJhbnNmZXJzOworCisJLyogV2FpdCBmb3IgYSBzbG90IHRvIG9wZW4gdXAgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgKi8KKwl3aGlsZSAoYWN0aXZlX3JlcXVlc3RzID49IG1heF9yZXF1ZXN0cykgeworCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpIHsKKwkJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCQl9CisJfQorI2VuZGlmCisKKwl3aGlsZSAoc2xvdCAhPSBOVUxMICYmIHNsb3QtPmluX3VzZSkgeworCQlzbG90ID0gc2xvdC0+bmV4dDsKKwl9CisJaWYgKHNsb3QgPT0gTlVMTCkgeworCQluZXdzbG90ID0geG1hbGxvYyhzaXplb2YoKm5ld3Nsb3QpKTsKKwkJbmV3c2xvdC0+Y3VybCA9IE5VTEw7CisJCW5ld3Nsb3QtPmluX3VzZSA9IDA7CisJCW5ld3Nsb3QtPm5leHQgPSBOVUxMOworCisJCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwkJaWYgKHNsb3QgPT0gTlVMTCkgeworCQkJYWN0aXZlX3F1ZXVlX2hlYWQgPSBuZXdzbG90OworCQl9IGVsc2UgeworCQkJd2hpbGUgKHNsb3QtPm5leHQgIT0gTlVMTCkgeworCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJfQorCQkJc2xvdC0+bmV4dCA9IG5ld3Nsb3Q7CisJCX0KKwkJc2xvdCA9IG5ld3Nsb3Q7CisJfQorCisJaWYgKHNsb3QtPmN1cmwgPT0gTlVMTCkgeworI2lmZGVmIE5PX0NVUkxfRUFTWV9EVVBIQU5ETEUKKwkJc2xvdC0+Y3VybCA9IGdldF9jdXJsX2hhbmRsZSgpOworI2Vsc2UKKwkJc2xvdC0+Y3VybCA9IGN1cmxfZWFzeV9kdXBoYW5kbGUoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCX0KKworCWFjdGl2ZV9yZXF1ZXN0cysrOworCXNsb3QtPmluX3VzZSA9IDE7CisJc2xvdC0+ZG9uZSA9IDA7CisJc2xvdC0+bG9jYWwgPSBOVUxMOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkZWZhdWx0X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgY3VybF9lcnJvcnN0cik7CisKKwlyZXR1cm4gc2xvdDsKK30KKworc3RhdGljIGludCBzdGFydF9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCisJaWYgKGN1cmxtX3Jlc3VsdCAhPSBDVVJMTV9PSyAmJgorCSAgICBjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7CisJCWFjdGl2ZV9yZXF1ZXN0cy0tOworCQlzbG90LT5pbl91c2UgPSAwOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcnVuX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaW50IG51bV90cmFuc2ZlcnM7CisJbG9uZyBsYXN0X3BvcyA9IDA7CisJbG9uZyBjdXJyZW50X3BvczsKKwlmZF9zZXQgcmVhZGZkczsKKwlmZF9zZXQgd3JpdGVmZHM7CisJZmRfc2V0IGV4Y2ZkczsKKwlpbnQgbWF4X2ZkOworCXN0cnVjdCB0aW1ldmFsIHNlbGVjdF90aW1lb3V0OworCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQ7CisKKwl3aGlsZSAoIXNsb3QtPmRvbmUpIHsKKwkJZGF0YV9yZWNlaXZlZCA9IDA7CisJCWRvIHsKKwkJCWN1cmxtX3Jlc3VsdCA9IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwKKwkJCQkJCQkgICZudW1fdHJhbnNmZXJzKTsKKwkJfSB3aGlsZSAoY3VybG1fcmVzdWx0ID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSk7CisJCWlmIChudW1fdHJhbnNmZXJzIDwgYWN0aXZlX3JlcXVlc3RzKSB7CisJCQlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKKwkJCXByb2Nlc3NfcmVxdWVzdF9xdWV1ZSgpOworCQl9CisKKwkJaWYgKCFkYXRhX3JlY2VpdmVkICYmIHNsb3QtPmxvY2FsICE9IE5VTEwpIHsKKwkJCWN1cnJlbnRfcG9zID0gZnRlbGwoc2xvdC0+bG9jYWwpOworCQkJaWYgKGN1cnJlbnRfcG9zID4gbGFzdF9wb3MpCisJCQkJZGF0YV9yZWNlaXZlZCsrOworCQkJbGFzdF9wb3MgPSBjdXJyZW50X3BvczsKKwkJfQorCisJCWlmICghc2xvdC0+ZG9uZSAmJiAhZGF0YV9yZWNlaXZlZCkgeworCQkJbWF4X2ZkID0gMDsKKwkJCUZEX1pFUk8oJnJlYWRmZHMpOworCQkJRkRfWkVSTygmd3JpdGVmZHMpOworCQkJRkRfWkVSTygmZXhjZmRzKTsKKwkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyA9IDA7CisJCQlzZWxlY3RfdGltZW91dC50dl91c2VjID0gNTAwMDA7CisJCQlzZWxlY3QobWF4X2ZkLCAmcmVhZGZkcywgJndyaXRlZmRzLAorCQkJICAgICAgICZleGNmZHMsICZzZWxlY3RfdGltZW91dCk7CisJCX0KKwl9CisjZWxzZQorCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9lYXN5X3BlcmZvcm0oc2xvdC0+Y3VybCk7CisJYWN0aXZlX3JlcXVlc3RzLS07CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3RhcnRfY2hlY2soc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+c2hhMSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJY2hhciAqcG9zbjsKKworCXJlcXVlc3QtPnVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArIDU1KTsKKwlzdHJjcHkocmVxdWVzdC0+dXJsLCByZW1vdGUtPnVybCk7CisJcG9zbiA9IHJlcXVlc3QtPnVybCArIHN0cmxlbihyZW1vdGUtPnVybCk7CisJc3RyY3B5KHBvc24sICJvYmplY3RzLyIpOworCXBvc24gKz0gODsKKwltZW1jcHkocG9zbiwgaGV4LCAyKTsKKwlwb3NuICs9IDI7CisJKihwb3NuKyspID0gJy8nOworCXN0cmNweShwb3NuLCBoZXggKyAyKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIHJlcXVlc3QtPmVycm9yc3RyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCByZXF1ZXN0LT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDEpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCQlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9IRUFEOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RhcnRfbWtjb2woc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+c2hhMSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJY2hhciAqcG9zbjsKKworCXJlcXVlc3QtPnVybCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZS0+dXJsKSArIDEzKTsKKwlzdHJjcHkocmVxdWVzdC0+dXJsLCByZW1vdGUtPnVybCk7CisJcG9zbiA9IHJlcXVlc3QtPnVybCArIHN0cmxlbihyZW1vdGUtPnVybCk7CisJc3RyY3B5KHBvc24sICJvYmplY3RzLyIpOworCXBvc24gKz0gODsKKwltZW1jcHkocG9zbiwgaGV4LCAyKTsKKwlwb3NuICs9IDI7CisJc3RyY3B5KHBvc24sICIvIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOyAvKiB1bmRvIFBVVCBzZXR1cCAqLworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlcXVlc3QtPnVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCByZXF1ZXN0LT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9NS0NPTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9udWxsKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwkJcmVxdWVzdC0+c3RhdGUgPSBSVU5fTUtDT0w7CisJfSBlbHNlIHsKKwkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQlmcmVlKHJlcXVlc3QtPnVybCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9wdXQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+c2hhMSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJY2hhciAqcG9zbjsKKwljaGFyIHR5cGVbMjBdOworCWNoYXIgaGRyWzUwXTsKKwl2b2lkICp1bnBhY2tlZDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlpbnQgaGRybGVuOworCXNzaXplX3Qgc2l6ZTsKKwl6X3N0cmVhbSBzdHJlYW07CisKKwl1bnBhY2tlZCA9IHJlYWRfc2hhMV9maWxlKHJlcXVlc3QtPnNoYTEsIHR5cGUsICZsZW4pOworCWhkcmxlbiA9IHNwcmludGYoaGRyLCAiJXMgJWx1IiwgdHlwZSwgbGVuKSArIDE7CisKKwkvKiBTZXQgaXQgdXAgKi8KKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWRlZmxhdGVJbml0KCZzdHJlYW0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisJc2l6ZSA9IGRlZmxhdGVCb3VuZCgmc3RyZWFtLCBsZW4gKyBoZHJsZW4pOworCXJlcXVlc3QtPmJ1ZmZlci5idWZmZXIgPSB4bWFsbG9jKHNpemUpOworCisJLyogQ29tcHJlc3MgaXQgKi8KKwlzdHJlYW0ubmV4dF9vdXQgPSByZXF1ZXN0LT5idWZmZXIuYnVmZmVyOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCisJLyogRmlyc3QgaGVhZGVyLi4gKi8KKwlzdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopaGRyOworCXN0cmVhbS5hdmFpbF9pbiA9IGhkcmxlbjsKKwl3aGlsZSAoZGVmbGF0ZSgmc3RyZWFtLCAwKSA9PSBaX09LKQorCQkvKiBub3RoaW5nICovOworCisJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLworCXN0cmVhbS5uZXh0X2luID0gdW5wYWNrZWQ7CisJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCXdoaWxlIChkZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQorCQkvKiBub3RoaW5nICovOworCWRlZmxhdGVFbmQoJnN0cmVhbSk7CisJZnJlZSh1bnBhY2tlZCk7CisKKwlyZXF1ZXN0LT5idWZmZXIuc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisJcmVxdWVzdC0+YnVmZmVyLnBvc24gPSAwOworCisJaWYgKHJlcXVlc3QtPnVybCAhPSBOVUxMKQorCQlmcmVlKHJlcXVlc3QtPnVybCk7CisJcmVxdWVzdC0+dXJsID0geG1hbGxvYyhzdHJsZW4ocmVtb3RlLT51cmwpICsgCisJCQkgICAgICAgc3RybGVuKHJlcXVlc3QtPmxvY2stPnRva2VuKSArIDUxKTsKKwlzdHJjcHkocmVxdWVzdC0+dXJsLCByZW1vdGUtPnVybCk7CisJcG9zbiA9IHJlcXVlc3QtPnVybCArIHN0cmxlbihyZW1vdGUtPnVybCk7CisJc3RyY3B5KHBvc24sICJvYmplY3RzLyIpOworCXBvc24gKz0gODsKKwltZW1jcHkocG9zbiwgaGV4LCAyKTsKKwlwb3NuICs9IDI7CisJKihwb3NuKyspID0gJy8nOworCXN0cmNweShwb3NuLCBoZXggKyAyKTsKKwlyZXF1ZXN0LT5kZXN0ID0geG1hbGxvYyhzdHJsZW4ocmVxdWVzdC0+dXJsKSArIDE0KTsKKwlzcHJpbnRmKHJlcXVlc3QtPmRlc3QsICJEZXN0aW5hdGlvbjogJXMiLCByZXF1ZXN0LT51cmwpOworCXBvc24gKz0gMzg7CisJKihwb3NuKyspID0gJy4nOworCXN0cmNweShwb3NuLCByZXF1ZXN0LT5sb2NrLT50b2tlbik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRSwgJnJlcXVlc3QtPmJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIHJlcXVlc3QtPmJ1ZmZlci5zaXplKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9QVVQpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUExPQUQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QVVQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlcXVlc3QtPnVybCk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX1BVVDsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCWZyZWUocmVxdWVzdC0+dXJsKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21vdmUoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7IC8qIHVuZG8gUFVUIHNldHVwICovCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9NT1ZFKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCByZXF1ZXN0LT5kZXN0KTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiT3ZlcndyaXRlOiBUIik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX251bGwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlcXVlc3QtPnVybCk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX01PVkU7CisJfSBlbHNlIHsKKwkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQlmcmVlKHJlcXVlc3QtPnVybCk7CisJfQorfQorCitpbnQgcmVmcmVzaF9sb2NrKHN0cnVjdCBhY3RpdmVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwljaGFyICppZl9oZWFkZXI7CisJY2hhciB0aW1lb3V0X2hlYWRlclsyNV07CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCisJbG9jay0+cmVmcmVzaGluZyA9IDE7CisKKwlpZl9oZWFkZXIgPSB4bWFsbG9jKHN0cmxlbihsb2NrLT50b2tlbikgKyAyNSk7CisJc3ByaW50ZihpZl9oZWFkZXIsICJJZjogKDxvcGFxdWVsb2NrdG9rZW46JXM+KSIsIGxvY2stPnRva2VuKTsKKwlzcHJpbnRmKHRpbWVvdXRfaGVhZGVyLCAiVGltZW91dDogU2Vjb25kLSVsZCIsIGxvY2stPnRpbWVvdXQpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGlmX2hlYWRlcik7CisJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgdGltZW91dF9oZWFkZXIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX251bGwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIGxvY2stPnVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkdvdCBIVFRQIGVycm9yICVsZFxuIiwgc2xvdC0+aHR0cF9jb2RlKTsKKwkJfSBlbHNlIHsKKwkJCWxvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOworCQkJcmMgPSAxOworCQl9CisJfQorCisJbG9jay0+cmVmcmVzaGluZyA9IDA7CisJY3VybF9zbGlzdF9mcmVlX2FsbChkYXZfaGVhZGVycyk7CisJZnJlZShpZl9oZWFkZXIpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwl0aW1lX3QgY3VycmVudF90aW1lID0gdGltZShOVUxMKTsKKwlpbnQgdGltZV9yZW1haW5pbmc7CisKKwlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9CXJlcXVlc3QtPnNsb3QtPmN1cmxfcmVzdWx0OworCXJlcXVlc3QtPmh0dHBfY29kZSA9IHJlcXVlc3QtPnNsb3QtPmh0dHBfY29kZTsKKwlyZXF1ZXN0LT5zbG90ID0gTlVMTDsKKworCS8qIFJlZnJlc2ggdGhlIGxvY2sgaWYgaXQgaXMgY2xvc2UgdG8gdGltaW5nIG91dCAqLworCXRpbWVfcmVtYWluaW5nID0gcmVxdWVzdC0+bG9jay0+c3RhcnRfdGltZSArIHJlcXVlc3QtPmxvY2stPnRpbWVvdXQKKwkJLSBjdXJyZW50X3RpbWU7CisJaWYgKHRpbWVfcmVtYWluaW5nIDwgTE9DS19SRUZSRVNIICYmICFyZXF1ZXN0LT5sb2NrLT5yZWZyZXNoaW5nKSB7CisJCWlmICghcmVmcmVzaF9sb2NrKHJlcXVlc3QtPmxvY2spKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZWZyZXNoIHJlbW90ZSBsb2NrXG4iKTsKKwkJCWFib3J0ZWQgPSAxOworCQl9CisJfQorCisJaWYgKHJlcXVlc3QtPmhlYWRlcnMgIT0gTlVMTCkKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChyZXF1ZXN0LT5oZWFkZXJzKTsKKwlpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX0hFQUQpIHsKKwkJaWYgKHJlcXVlc3QtPmh0dHBfY29kZSA9PSA0MDQpIHsKKwkJCXJlcXVlc3QtPnN0YXRlID0gTkVFRF9QVVNIOworCQl9IGVsc2UgaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlyZXF1ZXN0LT5zdGF0ZSA9IENPTVBMRVRFOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJIRUFEICVzIGZhaWxlZCwgYWJvcnRpbmcgKCVkLyVsZClcbiIsCisJCQkJc2hhMV90b19oZXgocmVxdWVzdC0+c2hhMSksCisJCQkJcmVxdWVzdC0+Y3VybF9yZXN1bHQsIHJlcXVlc3QtPmh0dHBfY29kZSk7CisJCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCQlhYm9ydGVkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAocmVxdWVzdC0+c3RhdGUgPT0gUlVOX01LQ09MKSB7CisJCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSyB8fAorCQkgICAgcmVxdWVzdC0+aHR0cF9jb2RlID09IDQwNSkgeworCQkJc3RhcnRfcHV0KHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJNS0NPTCAlcyBmYWlsZWQsIGFib3J0aW5nICglZC8lbGQpXG4iLAorCQkJCXNoYTFfdG9faGV4KHJlcXVlc3QtPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9QVVQpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlzdGFydF9tb3ZlKHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsCSJQVVQgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5zaGExKSwKKwkJCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCwgcmVxdWVzdC0+aHR0cF9jb2RlKTsKKwkJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJCWFib3J0ZWQgPSAxOworCQl9CisJfSBlbHNlIGlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fTU9WRSkgeworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJCWlmIChwdXNoX3ZlcmJvc2VseSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJInNlbnQgJXNcbiIsCisJCQkJCXNoYTFfdG9faGV4KHJlcXVlc3QtPnNoYTEpKTsKKwkJCXJlcXVlc3QtPnN0YXRlID0gQ09NUExFVEU7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1PVkUgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5zaGExKSwKKwkJCQlyZXF1ZXN0LT5jdXJsX3Jlc3VsdCwgcmVxdWVzdC0+aHR0cF9jb2RlKTsKKwkJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJCWFib3J0ZWQgPSAxOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKmVudHJ5ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCisJaWYgKHJlcXVlc3QgPT0gcmVxdWVzdF9xdWV1ZV9oZWFkKSB7CisJCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3QtPm5leHQ7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGVudHJ5LT5uZXh0ICE9IE5VTEwgJiYgZW50cnktPm5leHQgIT0gcmVxdWVzdCkKKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCWlmIChlbnRyeS0+bmV4dCA9PSByZXF1ZXN0KQorCQkJZW50cnktPm5leHQgPSBlbnRyeS0+bmV4dC0+bmV4dDsKKwl9CisKKwlmcmVlKHJlcXVlc3QtPnVybCk7CisJZnJlZShyZXF1ZXN0KTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCit2b2lkIHByb2Nlc3NfY3VybF9tZXNzYWdlcyh2b2lkKQoreworCWludCBudW1fbWVzc2FnZXM7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPSBOVUxMOworCUNVUkxNc2cgKmN1cmxfbWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxtLCAmbnVtX21lc3NhZ2VzKTsKKworCXdoaWxlIChjdXJsX21lc3NhZ2UgIT0gTlVMTCkgeworCQlpZiAoY3VybF9tZXNzYWdlLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisJCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCQl3aGlsZSAoc2xvdCAhPSBOVUxMICYmCisJCQkgICAgICAgc2xvdC0+Y3VybCAhPSBjdXJsX21lc3NhZ2UtPmVhc3lfaGFuZGxlKQorCQkJCXNsb3QgPSBzbG90LT5uZXh0OworCQkJaWYgKHNsb3QgIT0gTlVMTCkgeworCQkJCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CisJCQkJYWN0aXZlX3JlcXVlc3RzLS07CisJCQkJc2xvdC0+ZG9uZSA9IDE7CisJCQkJc2xvdC0+aW5fdXNlID0gMDsKKwkJCQlzbG90LT5jdXJsX3Jlc3VsdCA9IGN1cmxfbWVzc2FnZS0+ZGF0YS5yZXN1bHQ7CisJCQkJY3VybF9lYXN5X2dldGluZm8oc2xvdC0+Y3VybCwKKwkJCQkJCSAgQ1VSTElORk9fSFRUUF9DT0RFLAorCQkJCQkJICAmc2xvdC0+aHR0cF9jb2RlKTsKKwkJCQlyZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCQkJCXdoaWxlIChyZXF1ZXN0ICE9IE5VTEwgJiYKKwkJCQkgICAgICAgcmVxdWVzdC0+c2xvdCAhPSBzbG90KQorCQkJCQlyZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dDsKKwkJCQlpZiAocmVxdWVzdCAhPSBOVUxMKQorCQkJCQlmaW5pc2hfcmVxdWVzdChyZXF1ZXN0KTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJSZWNlaXZlZCBET05FIG1lc3NhZ2UgZm9yIHVua25vd24gcmVxdWVzdCFcbiIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIENVUkwgbWVzc2FnZSByZWNlaXZlZDogJWRcbiIsCisJCQkJKGludCljdXJsX21lc3NhZ2UtPm1zZyk7CisJCX0KKwkJY3VybF9tZXNzYWdlID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybG0sICZudW1fbWVzc2FnZXMpOworCX0KK30KKwordm9pZCBwcm9jZXNzX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCWludCBudW1fdHJhbnNmZXJzOworCisJaWYgKGFib3J0ZWQpCisJCXJldHVybjsKKworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPCBtYXhfcmVxdWVzdHMgJiYgcmVxdWVzdCAhPSBOVUxMKSB7CisJCWlmICghcHVzaGluZyAmJiByZXF1ZXN0LT5zdGF0ZSA9PSBORUVEX0NIRUNLKSB7CisJCQlzdGFydF9jaGVjayhyZXF1ZXN0KTsKKwkJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQl9IGVsc2UgaWYgKHB1c2hpbmcgJiYgcmVxdWVzdC0+c3RhdGUgPT0gTkVFRF9QVVNIKSB7CisJCQlzdGFydF9ta2NvbChyZXF1ZXN0KTsKKwkJCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCQl9CisJCXJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCX0KKworCXdoaWxlIChzbG90ICE9IE5VTEwpIHsKKwkJaWYgKCFzbG90LT5pbl91c2UgJiYgc2xvdC0+Y3VybCAhPSBOVUxMKSB7CisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJCXNsb3QtPmN1cmwgPSBOVUxMOworCQl9CisJCXNsb3QgPSBzbG90LT5uZXh0OworCX0JCQkJCit9CisjZW5kaWYKKwordm9pZCBwcm9jZXNzX3dhaXRpbmdfcmVxdWVzdHModm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkKKwkJaWYgKHNsb3QtPmluX3VzZSkgeworCQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQl9IGVsc2UgeworCQkJc2xvdCA9IHNsb3QtPm5leHQ7CisJCX0KK30KKwordm9pZCBhZGRfcmVxdWVzdCh1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgYWN0aXZlX2xvY2sgKmxvY2spCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwkKKwl3aGlsZSAocmVxdWVzdCAhPSBOVUxMICYmIG1lbWNtcChyZXF1ZXN0LT5zaGExLCBzaGExLCAyMCkpCisJCXJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCWlmIChyZXF1ZXN0ICE9IE5VTEwpCisJCXJldHVybjsKKworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKHNoYTEsIHJlbW90ZS0+cGFja3MpOworCWlmICh0YXJnZXQpCisJCXJldHVybjsKKworCXJlcXVlc3QgPSB4bWFsbG9jKHNpemVvZigqcmVxdWVzdCkpOworCW1lbWNweShyZXF1ZXN0LT5zaGExLCBzaGExLCAyMCk7CisJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwlyZXF1ZXN0LT5sb2NrID0gbG9jazsKKwlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKKwlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfQ0hFQ0s7CisJcmVxdWVzdC0+bmV4dCA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKwlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0OworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKCk7CisJcHJvY2Vzc19jdXJsX21lc3NhZ2VzKCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBmZXRjaF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOworCWNoYXIgKmZpbGVuYW1lOworCWNoYXIgKnVybDsKKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOworCWxvbmcgcHJldl9wb3NuID0gMDsKKwljaGFyIHJhbmdlW1JBTkdFX0hFQURFUl9TSVpFXTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqcmFuZ2VfaGVhZGVyID0gTlVMTDsKKworCUZJTEUgKmluZGV4ZmlsZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKworCS8qIERvbid0IHVzZSB0aGUgaW5kZXggaWYgdGhlIHBhY2sgaXNuJ3QgdGhlcmUgKi8KKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyA2NSk7CisJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwgcmVtb3RlLT51cmwsIGhleCk7CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcmVlKHVybCk7CisJCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byB2ZXJpZnkgcGFjayAlcyBpcyBhdmFpbGFibGUiLAorCQkJCSAgICAgaGV4KTsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwl9CisKKwlpZiAoaGFzX3BhY2tfaW5kZXgoc2hhMSkpCisJCXJldHVybiAwOworCisJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIGhleCk7CisJCisJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL3BhY2svcGFjay0lcy5pZHgiLCByZW1vdGUtPnVybCwgaGV4KTsKKwkKKwlmaWxlbmFtZSA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOworCXNucHJpbnRmKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisJaW5kZXhmaWxlID0gZm9wZW4odG1wZmlsZSwgImEiKTsKKwlpZiAoIWluZGV4ZmlsZSkKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIGZvciBwYWNrIGluZGV4IiwKKwkJCSAgICAgZmlsZW5hbWUpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgaW5kZXhmaWxlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBub19wcmFnbWFfaGVhZGVyKTsKKwlzbG90LT5sb2NhbCA9IGluZGV4ZmlsZTsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgcHJlc2VudCBmcm9tIGEgcHJldmlvdXMgdHJhbnNmZXIgYXR0ZW1wdCwKKwkgICByZXN1bWUgd2hlcmUgaXQgbGVmdCBvZmYgKi8KKwlwcmV2X3Bvc24gPSBmdGVsbChpbmRleGZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAocHVzaF92ZXJib3NlbHkpCisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVzdW1pbmcgZmV0Y2ggb2YgaW5kZXggZm9yIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCisJCQkJaGV4LCBwcmV2X3Bvc24pOworCQlzcHJpbnRmKHJhbmdlLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOworCQlyYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChyYW5nZV9oZWFkZXIsIHJhbmdlKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIHJhbmdlX2hlYWRlcik7CisJfQorCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcmVlKHVybCk7CisJCQlmY2xvc2UoaW5kZXhmaWxlKTsKKwkJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGdldCBwYWNrIGluZGV4ICVzXG4lcyIsIHVybCwKKwkJCQkgICAgIGN1cmxfZXJyb3JzdHIpOworCQl9CisJfSBlbHNlIHsKKwkJZnJlZSh1cmwpOworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJfQorCisJZnJlZSh1cmwpOworCWZjbG9zZShpbmRleGZpbGUpOworCisJcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKK30KKworc3RhdGljIGludCBzZXR1cF9pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKworCWlmIChmZXRjaF9pbmRleChzaGExKSkKKwkJcmV0dXJuIC0xOworCisJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOworCW5ld19wYWNrLT5uZXh0ID0gcmVtb3RlLT5wYWNrczsKKwlyZW1vdGUtPnBhY2tzID0gbmV3X3BhY2s7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcygpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICp1cmw7CisJc3RydWN0IGJ1ZmZlciBidWZmZXI7CisJY2hhciAqZGF0YTsKKwlpbnQgaSA9IDA7CisKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKworCWRhdGEgPSB4bWFsbG9jKDQwOTYpOworCW1lbXNldChkYXRhLCAwLCA0MDk2KTsKKwlidWZmZXIuc2l6ZSA9IDQwOTY7CisJYnVmZmVyLnBvc24gPSAwOworCWJ1ZmZlci5idWZmZXIgPSBkYXRhOworCisJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgcGFjayBsaXN0XG4iKTsKKwkKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyAyMSk7CisJc3ByaW50Zih1cmwsICIlcy9vYmplY3RzL2luZm8vcGFja3MiLCByZW1vdGUtPnVybCk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZidWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJIGZ3cml0ZV9idWZmZXJfZHluYW1pYyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7CisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcmVlKGJ1ZmZlci5idWZmZXIpOworCQkJZnJlZSh1cmwpOworCQkJaWYgKHNsb3QtPmh0dHBfY29kZSA9PSA0MDQpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKCIlcyIsIGN1cmxfZXJyb3JzdHIpOworCQl9CisJfSBlbHNlIHsKKwkJZnJlZShidWZmZXIuYnVmZmVyKTsKKwkJZnJlZSh1cmwpOworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJfQorCWZyZWUodXJsKTsKKworCWRhdGEgPSBidWZmZXIuYnVmZmVyOworCXdoaWxlIChpIDwgYnVmZmVyLnBvc24pIHsKKwkJc3dpdGNoIChkYXRhW2ldKSB7CisJCWNhc2UgJ1AnOgorCQkJaSsrOworCQkJaWYgKGkgKyA1MiA8IGJ1ZmZlci5wb3NuICYmCisJCQkgICAgIXN0cm5jbXAoZGF0YSArIGksICIgcGFjay0iLCA2KSAmJgorCQkJICAgICFzdHJuY21wKGRhdGEgKyBpICsgNDYsICIucGFja1xuIiwgNikpIHsKKwkJCQlnZXRfc2hhMV9oZXgoZGF0YSArIGkgKyA2LCBzaGExKTsKKwkJCQlzZXR1cF9pbmRleChzaGExKTsKKwkJCQlpICs9IDUxOworCQkJCWJyZWFrOworCQkJfQorCQlkZWZhdWx0OgorCQkJd2hpbGUgKGRhdGFbaV0gIT0gJ1xuJykKKwkJCQlpKys7CisJCX0KKwkJaSsrOworCX0KKworCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRzX3F1b3RlKGludCBjaCkKK3sKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnLyc6IGNhc2UgJy0nOiBjYXNlICcuJzoKKwljYXNlICdBJy4uLidaJzoJY2FzZSAnYScuLi4neic6CWNhc2UgJzAnLi4uJzknOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGhleChpbnQgdikKK3sKKwlpZiAodiA8IDEwKSByZXR1cm4gJzAnICsgdjsKKwllbHNlIHJldHVybiAnQScgKyB2IC0gMTA7Cit9CisKK3N0YXRpYyBjaGFyICpxdW90ZV9yZWZfdXJsKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwljb25zdCBjaGFyICpjcDsKKwljaGFyICpkcCwgKnFyZWY7CisJaW50IGxlbiwgYmFzZWxlbiwgY2g7CisKKwliYXNlbGVuID0gc3RybGVuKGJhc2UpOworCWxlbiA9IGJhc2VsZW4gKyAxMjsgLyogInJlZnMvaGVhZHMvIiArIE5VTCAqLworCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKywgbGVuKyspCisJCWlmIChuZWVkc19xdW90ZShjaCkpCisJCQlsZW4gKz0gMjsgLyogZXh0cmEgdHdvIGhleCBwbHVzIHJlcGxhY2VtZW50ICUgKi8KKwlxcmVmID0geG1hbGxvYyhsZW4pOworCW1lbWNweShxcmVmLCBiYXNlLCBiYXNlbGVuKTsKKwltZW1jcHkocXJlZiArIGJhc2VsZW4sICJyZWZzL2hlYWRzLyIsIDExKTsKKwlmb3IgKGNwID0gcmVmLCBkcCA9IHFyZWYgKyBiYXNlbGVuICsgMTE7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykgeworCQlpZiAobmVlZHNfcXVvdGUoY2gpKSB7CisJCQkqZHArKyA9ICclJzsKKwkJCSpkcCsrID0gaGV4KChjaCA+PiA0KSAmIDB4Rik7CisJCQkqZHArKyA9IGhleChjaCAmIDB4Rik7CisJCX0KKwkJZWxzZQorCQkJKmRwKysgPSBjaDsKKwl9CisJKmRwID0gMDsKKworCXJldHVybiBxcmVmOworfQorCitpbnQgZmV0Y2hfcmVmKGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKyAgICAgICAgY2hhciAqdXJsOworICAgICAgICBjaGFyIGhleFs0Ml07CisgICAgICAgIHN0cnVjdCBidWZmZXIgYnVmZmVyOworCWNoYXIgKmJhc2UgPSByZW1vdGUtPnVybDsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKyAgICAgICAgYnVmZmVyLnNpemUgPSA0MTsKKyAgICAgICAgYnVmZmVyLnBvc24gPSAwOworICAgICAgICBidWZmZXIuYnVmZmVyID0gaGV4OworICAgICAgICBoZXhbNDFdID0gJ1wwJzsKKyAgICAgICAgCisJdXJsID0gcXVvdGVfcmVmX3VybChiYXNlLCByZWYpOworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sCisJCQkgZndyaXRlX2J1ZmZlcl9keW5hbWljKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgdXJsKTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAoc2xvdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkbid0IGdldCAlcyBmb3IgJXNcbiVzIiwKKwkJCQkgICAgIHVybCwgcmVmLCBjdXJsX2Vycm9yc3RyKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7CisJfQorCisgICAgICAgIGhleFs0MF0gPSAnXDAnOworICAgICAgICBnZXRfc2hhMV9oZXgoaGV4LCBzaGExKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzdGFydF9hY3RpdmVsb2NrX2VsZW1lbnQodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiphdHRzKQoreworCXN0cnVjdCBhY3RpdmVfbG9jayAqbG9jayA9IChzdHJ1Y3QgYWN0aXZlX2xvY2sgKil1c2VyRGF0YTsKKworCWlmIChsb2NrLT5jdHhfYWN0aXZlbG9jayAmJiAhc3RyY21wKG5hbWUsICJEOnRpbWVvdXQiKSkKKwkJbG9jay0+Y3R4X3RpbWVvdXQgPSAxOworCWVsc2UgaWYgKGxvY2stPmN0eF9vd25lciAmJiBzdHJzdHIobmFtZSwgImhyZWYiKSkKKwkJbG9jay0+Y3R4X293bmVyX2hyZWYgPSAxOworCWVsc2UgaWYgKGxvY2stPmN0eF9hY3RpdmVsb2NrICYmIHN0cnN0cihuYW1lLCAib3duZXIiKSkKKwkJbG9jay0+Y3R4X293bmVyID0gMTsKKwllbHNlIGlmIChsb2NrLT5jdHhfbG9ja3Rva2VuICYmICFzdHJjbXAobmFtZSwgIkQ6aHJlZiIpKQorCQlsb2NrLT5jdHhfbG9ja3Rva2VuX2hyZWYgPSAxOworCWVsc2UgaWYgKGxvY2stPmN0eF9hY3RpdmVsb2NrICYmICFzdHJjbXAobmFtZSwgIkQ6bG9ja3Rva2VuIikpCisJCWxvY2stPmN0eF9sb2NrdG9rZW4gPSAxOworCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIkQ6YWN0aXZlbG9jayIpKQorCQlsb2NrLT5jdHhfYWN0aXZlbG9jayA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitlbmRfYWN0aXZlbG9ja19lbGVtZW50KHZvaWQgKnVzZXJEYXRhLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhY3RpdmVfbG9jayAqbG9jayA9IChzdHJ1Y3QgYWN0aXZlX2xvY2sgKil1c2VyRGF0YTsKKworCWlmIChsb2NrLT5jdHhfdGltZW91dCAmJiAhc3RyY21wKG5hbWUsICJEOnRpbWVvdXQiKSkgeworCQlsb2NrLT5jdHhfdGltZW91dCA9IDA7CisJfSBlbHNlIGlmIChsb2NrLT5jdHhfb3duZXJfaHJlZiAmJiBzdHJzdHIobmFtZSwgImhyZWYiKSkgeworCQlsb2NrLT5jdHhfb3duZXJfaHJlZiA9IDA7CisJfSBlbHNlIGlmIChsb2NrLT5jdHhfb3duZXIgJiYgc3Ryc3RyKG5hbWUsICJvd25lciIpKSB7CisJCWxvY2stPmN0eF9vd25lciA9IDA7CisJfSBlbHNlIGlmIChsb2NrLT5jdHhfbG9ja3Rva2VuX2hyZWYgJiYgIXN0cmNtcChuYW1lLCAiRDpocmVmIikpIHsKKwkJbG9jay0+Y3R4X2xvY2t0b2tlbl9ocmVmID0gMDsKKwl9IGVsc2UgaWYgKGxvY2stPmN0eF9sb2NrdG9rZW4gJiYgIXN0cmNtcChuYW1lLCAiRDpsb2NrdG9rZW4iKSkgeworCQlsb2NrLT5jdHhfbG9ja3Rva2VuID0gMDsKKwl9IGVsc2UgaWYgKGxvY2stPmN0eF9hY3RpdmVsb2NrICYmICFzdHJjbXAobmFtZSwgIkQ6YWN0aXZlbG9jayIpKSB7CisJCWxvY2stPmN0eF9hY3RpdmVsb2NrID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithY3RpdmVsb2NrX2NkYXRhKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqcywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgYWN0aXZlX2xvY2sgKmxvY2sgPSAoc3RydWN0IGFjdGl2ZV9sb2NrICopdXNlckRhdGE7CisJY2hhciAqdGhpcyA9IG1hbGxvYyhsZW4rMSk7CisJc3RybmNweSh0aGlzLCBzLCBsZW4pOworCisJaWYgKGxvY2stPmN0eF9vd25lcl9ocmVmKSB7CisJCWxvY2stPm93bmVyID0gbWFsbG9jKGxlbisxKTsKKwkJc3RyY3B5KGxvY2stPm93bmVyLCB0aGlzKTsKKwl9IGVsc2UgaWYgKGxvY2stPmN0eF9sb2NrdG9rZW5faHJlZikgeworCQlpZiAoIXN0cm5jbXAodGhpcywgIm9wYXF1ZWxvY2t0b2tlbjoiLCAxNikpIHsKKwkJCWxvY2stPnRva2VuID0gbWFsbG9jKGxlbi0xNSk7CisJCQlzdHJjcHkobG9jay0+dG9rZW4sIHRoaXMrMTYpOworCQl9CisJfSBlbHNlIGlmIChsb2NrLT5jdHhfdGltZW91dCkgeworCQlpZiAoIXN0cm5jbXAodGhpcywgIlNlY29uZC0iLCA3KSkKKwkJCWxvY2stPnRpbWVvdXQgPSBzdHJ0b2wodGhpcys3LCBOVUxMLCAxMCk7CisJfQorCisJZnJlZSh0aGlzKTsKK30KKworc3RhdGljIHZvaWQKK3N0YXJ0X2xvY2twcm9wX2VsZW1lbnQodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiphdHRzKQoreworCXN0cnVjdCBsb2NrcHJvcCAqcHJvcCA9IChzdHJ1Y3QgbG9ja3Byb3AgKil1c2VyRGF0YTsKKworCWlmIChwcm9wLT5sb2NrX3R5cGUgJiYgIXN0cmNtcChuYW1lLCAiRDp3cml0ZSIpKSB7CisJCWlmIChwcm9wLT5sb2NrX2V4Y2x1c2l2ZSkgeworCQkJcHJvcC0+bG9ja19leGNsdXNpdmVfd3JpdGUgPSAxOworCQl9CisJfSBlbHNlIGlmIChwcm9wLT5sb2NrX3Njb3BlICYmICFzdHJjbXAobmFtZSwgIkQ6ZXhjbHVzaXZlIikpIHsKKwkJcHJvcC0+bG9ja19leGNsdXNpdmUgPSAxOworCX0gZWxzZSBpZiAocHJvcC0+bG9ja19lbnRyeSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCAiRDpsb2Nrc2NvcGUiKSkgeworCQkJcHJvcC0+bG9ja19zY29wZSA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiRDpsb2NrdHlwZSIpKSB7CisJCQlwcm9wLT5sb2NrX3R5cGUgPSAxOworCQl9CisJfSBlbHNlIGlmIChwcm9wLT5zdXBwb3J0ZWRfbG9jaykgeworCQlpZiAoIXN0cmNtcChuYW1lLCAiRDpsb2NrZW50cnkiKSkgeworCQkJcHJvcC0+bG9ja19lbnRyeSA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIkQ6c3VwcG9ydGVkbG9jayIpKSB7CisJCXByb3AtPnN1cHBvcnRlZF9sb2NrID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitlbmRfbG9ja3Byb3BfZWxlbWVudCh2b2lkICp1c2VyRGF0YSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbG9ja3Byb3AgKnByb3AgPSAoc3RydWN0IGxvY2twcm9wICopdXNlckRhdGE7CisKKwlpZiAoIXN0cmNtcChuYW1lLCAiRDpsb2NrZW50cnkiKSkgeworCQlwcm9wLT5sb2NrX2VudHJ5ID0gMDsKKwkJcHJvcC0+bG9ja19zY29wZSA9IDA7CisJCXByb3AtPmxvY2tfdHlwZSA9IDA7CisJCXByb3AtPmxvY2tfZXhjbHVzaXZlID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIkQ6c3VwcG9ydGVkbG9jayIpKSB7CisJCXByb3AtPnN1cHBvcnRlZF9sb2NrID0gMDsKKwl9Cit9CisKK3N0cnVjdCBhY3RpdmVfbG9jayAqbG9ja19yZW1vdGUoY2hhciAqZmlsZSwgbG9uZyB0aW1lb3V0KQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgYnVmZmVyIGluX2J1ZmZlcjsKKwljaGFyICpvdXRfZGF0YTsKKwljaGFyICppbl9kYXRhOworCWNoYXIgKnVybDsKKwljaGFyICplcDsKKwljaGFyIHRpbWVvdXRfaGVhZGVyWzI1XTsKKwlzdHJ1Y3QgYWN0aXZlX2xvY2sgKm5ld19sb2NrOworCVhNTF9QYXJzZXIgcGFyc2VyID0gWE1MX1BhcnNlckNyZWF0ZShOVUxMKTsKKwllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisKKwl1cmwgPSB4bWFsbG9jKHN0cmxlbihyZW1vdGUtPnVybCkgKyBzdHJsZW4oZmlsZSkgKyAxKTsKKwlzcHJpbnRmKHVybCwgIiVzJXMiLCByZW1vdGUtPnVybCwgZmlsZSk7CisKKwkvKiBNYWtlIHN1cmUgbGVhZGluZyBkaXJlY3RvcmllcyBleGlzdCBmb3IgdGhlIHJlbW90ZSByZWYgKi8KKwllcCA9IHN0cmNocih1cmwgKyBzdHJsZW4ocmVtb3RlLT51cmwpICsgMTEsICcvJyk7CisJd2hpbGUgKGVwKSB7CisJCSplcCA9IDA7CisJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgREFWX01LQ09MKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9udWxsKTsKKwkJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQlpZiAoc2xvdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0sgJiYKKwkJCSAgICBzbG90LT5odHRwX2NvZGUgIT0gNDA1KSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJVbmFibGUgdG8gY3JlYXRlIGJyYW5jaCBwYXRoICVzXG4iLAorCQkJCQl1cmwpOworCQkJCWZyZWUodXJsKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3RcbiIpOworCQkJZnJlZSh1cmwpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJKmVwID0gJy8nOworCQllcCA9IHN0cmNocihlcCArIDEsICcvJyk7CisJfQorCisJb3V0X2J1ZmZlci5zaXplID0gc3RybGVuKExPQ0tfUkVRVUVTVCkgKyBzdHJsZW4oZ2l0X2RlZmF1bHRfZW1haWwpIC0gMjsKKwlvdXRfZGF0YSA9IHhtYWxsb2Mob3V0X2J1ZmZlci5zaXplICsgMSk7CisJc25wcmludGYob3V0X2RhdGEsIG91dF9idWZmZXIuc2l6ZSArIDEsIExPQ0tfUkVRVUVTVCwgZ2l0X2RlZmF1bHRfZW1haWwpOworCW91dF9idWZmZXIucG9zbiA9IDA7CisJb3V0X2J1ZmZlci5idWZmZXIgPSBvdXRfZGF0YTsKKworCWluX2J1ZmZlci5zaXplID0gNDA5NjsKKwlpbl9kYXRhID0geG1hbGxvYyhpbl9idWZmZXIuc2l6ZSk7CisJaW5fYnVmZmVyLnBvc24gPSAwOworCWluX2J1ZmZlci5idWZmZXIgPSBpbl9kYXRhOworCisJbmV3X2xvY2sgPSB4bWFsbG9jKHNpemVvZigqbmV3X2xvY2spKTsKKwluZXdfbG9jay0+b3duZXIgPSBOVUxMOworCW5ld19sb2NrLT50b2tlbiA9IE5VTEw7CisJbmV3X2xvY2stPnRpbWVvdXQgPSAtMTsKKwluZXdfbG9jay0+cmVmcmVzaGluZyA9IDA7CisKKwlzcHJpbnRmKHRpbWVvdXRfaGVhZGVyLCAiVGltZW91dDogU2Vjb25kLSVsZCIsIHRpbWVvdXQpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIHRpbWVvdXRfaGVhZGVyKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsICZvdXRfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFU0laRSwgb3V0X2J1ZmZlci5zaXplKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCSBmd3JpdGVfYnVmZmVyX2R5bmFtaWMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VQTE9BRCwgMSk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIERBVl9MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkdvdCBIVFRQIGVycm9yICVsZFxuIiwgc2xvdC0+aHR0cF9jb2RlKTsKKwkJCWZyZWUobmV3X2xvY2spOworCQkJZnJlZSh1cmwpOworCQkJZnJlZShvdXRfZGF0YSk7CisJCQlmcmVlKGluX2RhdGEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlmcmVlKG5ld19sb2NrKTsKKwkJZnJlZSh1cmwpOworCQlmcmVlKG91dF9kYXRhKTsKKwkJZnJlZShpbl9kYXRhKTsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWZyZWUob3V0X2RhdGEpOworCisJWE1MX1NldFVzZXJEYXRhKHBhcnNlciwgbmV3X2xvY2spOworCVhNTF9TZXRFbGVtZW50SGFuZGxlcihwYXJzZXIsIHN0YXJ0X2FjdGl2ZWxvY2tfZWxlbWVudCwKKwkJCQkgICAgICBlbmRfYWN0aXZlbG9ja19lbGVtZW50KTsKKwlYTUxfU2V0Q2hhcmFjdGVyRGF0YUhhbmRsZXIocGFyc2VyLCBhY3RpdmVsb2NrX2NkYXRhKTsKKwlyZXN1bHQgPSBYTUxfUGFyc2UocGFyc2VyLCBpbl9idWZmZXIuYnVmZmVyLCBpbl9idWZmZXIucG9zbiwgMSk7CisJZnJlZShpbl9kYXRhKTsKKwlpZiAocmVzdWx0ICE9IFhNTF9TVEFUVVNfT0spIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIFhNTF9FcnJvclN0cmluZygKKwkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJZnJlZSh1cmwpOworCQlmcmVlKG5ld19sb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKG5ld19sb2NrLT50b2tlbiA9PSBOVUxMIHx8IG5ld19sb2NrLT50aW1lb3V0IDw9IDApIHsKKwkJaWYgKG5ld19sb2NrLT50b2tlbiAhPSBOVUxMKQorCQkJZnJlZShuZXdfbG9jay0+dG9rZW4pOworCQlpZiAobmV3X2xvY2stPm93bmVyICE9IE5VTEwpCisJCQlmcmVlKG5ld19sb2NrLT5vd25lcik7CisJCWZyZWUodXJsKTsKKwkJZnJlZShuZXdfbG9jayk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5ld19sb2NrLT51cmwgPSB1cmw7CisJbmV3X2xvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOworCXJldHVybiBuZXdfbG9jazsKK30KKworaW50IHVubG9ja19yZW1vdGUoc3RydWN0IGFjdGl2ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCWNoYXIgKmxvY2tfdG9rZW5faGVhZGVyOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisJaW50IHJjID0gMDsKKworCWxvY2tfdG9rZW5faGVhZGVyID0geG1hbGxvYyhzdHJsZW4obG9jay0+dG9rZW4pICsgMzEpOworCXNwcmludGYobG9ja190b2tlbl9oZWFkZXIsICJMb2NrLVRva2VuOiA8b3BhcXVlbG9ja3Rva2VuOiVzPiIsCisJCWxvY2stPnRva2VuKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBsb2NrX3Rva2VuX2hlYWRlcik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9udWxsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBsb2NrLT51cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBEQVZfVU5MT0NLKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKQorCQkJcmMgPSAxOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIkdvdCBIVFRQIGVycm9yICVsZFxuIiwKKwkJCQlzbG90LT5odHRwX2NvZGUpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3RcbiIpOworCX0KKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCWZyZWUobG9ja190b2tlbl9oZWFkZXIpOworCisJaWYgKGxvY2stPm93bmVyICE9IE5VTEwpCisJCWZyZWUobG9jay0+b3duZXIpOworCWZyZWUobG9jay0+dXJsKTsKKwlmcmVlKGxvY2stPnRva2VuKTsKKwlmcmVlKGxvY2spOworCisJcmV0dXJuIHJjOworfQorCitpbnQgY2hlY2tfbG9ja2luZygpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGJ1ZmZlciBpbl9idWZmZXI7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyOworCWNoYXIgKmluX2RhdGE7CisJY2hhciAqb3V0X2RhdGE7CisJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCWVudW0gWE1MX1N0YXR1cyByZXN1bHQ7CisJc3RydWN0IGxvY2twcm9wIHN1cHBvcnRlZF9sb2NrOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisKKwlvdXRfYnVmZmVyLnNpemUgPSBzdHJsZW4oUFJPUEZJTkRfUkVRVUVTVCkgKyBzdHJsZW4ocmVtb3RlLT51cmwpIC0gMjsKKwlvdXRfZGF0YSA9IHhtYWxsb2Mob3V0X2J1ZmZlci5zaXplICsgMSk7CisJc25wcmludGYob3V0X2RhdGEsIG91dF9idWZmZXIuc2l6ZSArIDEsIFBST1BGSU5EX1JFUVVFU1QsIHJlbW90ZS0+dXJsKTsKKwlvdXRfYnVmZmVyLnBvc24gPSAwOworCW91dF9idWZmZXIuYnVmZmVyID0gb3V0X2RhdGE7CisKKwlpbl9idWZmZXIuc2l6ZSA9IDQwOTY7CisJaW5fZGF0YSA9IHhtYWxsb2MoaW5fYnVmZmVyLnNpemUpOworCWluX2J1ZmZlci5wb3NuID0gMDsKKwlpbl9idWZmZXIuYnVmZmVyID0gaW5fZGF0YTsKKworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMCIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisJCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEUsICZvdXRfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFU0laRSwgb3V0X2J1ZmZlci5zaXplKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBmcmVhZF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCSBmd3JpdGVfYnVmZmVyX2R5bmFtaWMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJlbW90ZS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVBMT0FELCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgREFWX1BST1BGSU5EKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJZnJlZShvdXRfZGF0YSk7CisJCWlmIChzbG90LT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZnJlZShpbl9idWZmZXIuYnVmZmVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZzdXBwb3J0ZWRfbG9jayk7CisJCVhNTF9TZXRFbGVtZW50SGFuZGxlcihwYXJzZXIsIHN0YXJ0X2xvY2twcm9wX2VsZW1lbnQsCisJCQkJICAgICAgZW5kX2xvY2twcm9wX2VsZW1lbnQpOworCQlyZXN1bHQgPSBYTUxfUGFyc2UocGFyc2VyLCBpbl9idWZmZXIuYnVmZmVyLCBpbl9idWZmZXIucG9zbiwgMSk7CisJCWZyZWUoaW5fYnVmZmVyLmJ1ZmZlcik7CisJCWlmIChyZXN1bHQgIT0gWE1MX1NUQVRVU19PSykKKwkJCXJldHVybiBlcnJvcigiJXMiLCBYTUxfRXJyb3JTdHJpbmcoCisJCQkJCSAgICAgWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7CisJfSBlbHNlIHsKKwkJZnJlZShvdXRfZGF0YSk7CisJCWZyZWUoaW5fYnVmZmVyLmJ1ZmZlcik7CisJCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKKwl9CisKKwlpZiAoc3VwcG9ydGVkX2xvY2subG9ja19leGNsdXNpdmVfd3JpdGUpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBpc19hbmNlc3Rvcih1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gMDsKKwlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCWZvciAoOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQlpZiAoIW1lbWNtcChzaGExLCBwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSwgMjApKSB7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChwYXJlbnRzLT5pdGVtLT5vYmplY3QudHlwZSA9PSBjb21taXRfdHlwZSkgeworCQkJaWYgKGlzX2FuY2VzdG9yKAorCQkJCSAgICBzaGExLAorCQkJCSAgICAoc3RydWN0IGNvbW1pdCAqKSZwYXJlbnRzLT5pdGVtLT5vYmplY3QKKwkJCQkgICAgKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBnZXRfZGVsdGEodW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IG9iamVjdCAqb2JqLAorCSAgICAgICBzdHJ1Y3QgYWN0aXZlX2xvY2sgKmxvY2spCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbnRyeTsKKworCWlmIChzaGExICYmICFtZW1jbXAoc2hhMSwgb2JqLT5zaGExLCAyMCkpCisJCXJldHVybjsKKworCWlmIChhYm9ydGVkKQorCQlyZXR1cm47CisKKwlpZiAob2JqLT50eXBlID09IGNvbW1pdF90eXBlKSB7CisJCWlmIChwdXNoX3ZlcmJvc2VseSkKKwkJCWZwcmludGYoc3RkZXJyLCAid2FsayAlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCWFkZF9yZXF1ZXN0KG9iai0+c2hhMSwgbG9jayk7CisJCWNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2JqOworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgcGFyc2luZyBjb21taXQgJXNcbiIsCisJCQkJc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCQlhYm9ydGVkID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQlmb3IgKDsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQlpZiAoc2hhMSA9PSBOVUxMIHx8CisJCQkgICAgbWVtY21wKHNoYTEsIHBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExLCAyMCkpCisJCQkJZ2V0X2RlbHRhKHNoYTEsICZwYXJlbnRzLT5pdGVtLT5vYmplY3QsCisJCQkJCSAgbG9jayk7CisJCWdldF9kZWx0YShzaGExLCAmY29tbWl0LT50cmVlLT5vYmplY3QsIGxvY2spOworCX0gZWxzZSBpZiAob2JqLT50eXBlID09IHRyZWVfdHlwZSkgeworCQlpZiAocHVzaF92ZXJib3NlbHkpCisJCQlmcHJpbnRmKHN0ZGVyciwgIndhbGsgJXNcbiIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlhZGRfcmVxdWVzdChvYmotPnNoYTEsIGxvY2spOworCQl0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqOworCQlpZiAocGFyc2VfdHJlZSh0cmVlKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBwYXJzaW5nIHRyZWUgJXNcbiIsCisJCQkJc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCQlhYm9ydGVkID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQllbnRyeSA9IHRyZWUtPmVudHJpZXM7CisJCXRyZWUtPmVudHJpZXMgPSBOVUxMOworCQl3aGlsZSAoZW50cnkpIHsKKwkJCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKm5leHQgPSBlbnRyeS0+bmV4dDsKKwkJCWdldF9kZWx0YShzaGExLCBlbnRyeS0+aXRlbS5hbnksIGxvY2spOworCQkJZnJlZShlbnRyeS0+bmFtZSk7CisJCQlmcmVlKGVudHJ5KTsKKwkJCWVudHJ5ID0gbmV4dDsKKwkJfQorCX0gZWxzZSBpZiAob2JqLT50eXBlID09IGJsb2JfdHlwZSB8fCBvYmotPnR5cGUgPT0gdGFnX3R5cGUpIHsKKwkJYWRkX3JlcXVlc3Qob2JqLT5zaGExLCBsb2NrKTsKKwl9Cit9CisKK2ludCB1cGRhdGVfcmVtb3RlKHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBhY3RpdmVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwljaGFyICpvdXRfZGF0YTsKKwljaGFyICppZl9oZWFkZXI7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyOworCXN0cnVjdCBjdXJsX3NsaXN0ICpkYXZfaGVhZGVycyA9IE5VTEw7CisJaW50IGk7CisKKwlpZl9oZWFkZXIgPSB4bWFsbG9jKHN0cmxlbihsb2NrLT50b2tlbikgKyAyNSk7CisJc3ByaW50ZihpZl9oZWFkZXIsICJJZjogKDxvcGFxdWVsb2NrdG9rZW46JXM+KSIsIGxvY2stPnRva2VuKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCBpZl9oZWFkZXIpOworCisJb3V0X2J1ZmZlci5zaXplID0gNDE7CisJb3V0X2RhdGEgPSB4bWFsbG9jKG91dF9idWZmZXIuc2l6ZSArIDEpOworCWkgPSBzbnByaW50ZihvdXRfZGF0YSwgb3V0X2J1ZmZlci5zaXplICsgMSwgIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKGkgIT0gb3V0X2J1ZmZlci5zaXplKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgUFVUIHJlcXVlc3QgYm9keVxuIik7CisJCXJldHVybiAwOworCX0KKwlvdXRfYnVmZmVyLnBvc24gPSAwOworCW91dF9idWZmZXIuYnVmZmVyID0gb3V0X2RhdGE7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0lORklMRSwgJm91dF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JTkZJTEVTSVpFLCBvdXRfYnVmZmVyLnNpemUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIGZyZWFkX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9udWxsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgREFWX1BVVCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVBMT0FELCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUFVULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBsb2NrLT51cmwpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJZnJlZShvdXRfZGF0YSk7CisJCWZyZWUoaWZfaGVhZGVyKTsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUFVUIGVycm9yOiBjdXJsIHJlc3VsdD0lZCwgSFRUUCBjb2RlPSVsZFxuIiwKKwkJCQlzbG90LT5jdXJsX3Jlc3VsdCwgc2xvdC0+aHR0cF9jb2RlKTsKKwkJCS8qIFdlIHNob3VsZCBhdHRlbXB0IHJlY292ZXJ5PyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlmcmVlKG91dF9kYXRhKTsKKwkJZnJlZShpZl9oZWFkZXIpOworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBQVVQgcmVxdWVzdFxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5leHRfc2xvdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqbmV4dF9yZXF1ZXN0OworCWludCBucl9yZWZzcGVjID0gMDsKKwljaGFyICoqcmVmc3BlYyA9IE5VTEw7CisJaW50IGRvX3JlbW90ZV91cGRhdGU7CisJaW50IG5ld19icmFuY2g7CisJaW50IGZvcmNlX3RoaXM7CisJY2hhciAqbG9jYWxfcmVmOworCXVuc2lnbmVkIGNoYXIgbG9jYWxfc2hhMVsyMF07CisJc3RydWN0IG9iamVjdCAqbG9jYWxfb2JqZWN0ID0gTlVMTDsKKwljaGFyICpyZW1vdGVfcmVmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHJlbW90ZV9zaGExWzIwXTsKKwlzdHJ1Y3QgYWN0aXZlX2xvY2sgKnJlbW90ZV9sb2NrOworCWNoYXIgKnJlbW90ZV9wYXRoID0gTlVMTDsKKwljaGFyICpsb3dfc3BlZWRfbGltaXQ7CisJY2hhciAqbG93X3NwZWVkX3RpbWU7CisJaW50IHJjID0gMDsKKwlpbnQgaTsKKworCXNldHVwX2lkZW50KCk7CisKKwlyZW1vdGUgPSB4bWFsbG9jKHNpemVvZigqcmVtb3RlKSk7CisJcmVtb3RlLT51cmwgPSBOVUxMOworCXJlbW90ZS0+cGFja3MgPSBOVUxMOworCisJYXJndisrOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyssIGFyZ3YrKykgeworCQljaGFyICphcmcgPSAqYXJndjsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tY29tcGxldGUiKSkgeworCQkJCXB1c2hfYWxsID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZm9yY2UiKSkgeworCQkJCWZvcmNlX2FsbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJCXB1c2hfdmVyYm9zZWx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXVzYWdlKGh0dHBfcHVzaF91c2FnZSk7CisJCX0KKwkJaWYgKCFyZW1vdGUtPnVybCkgeworCQkJcmVtb3RlLT51cmwgPSBhcmc7CisJCQljb250aW51ZTsKKwkJfQorCQlyZWZzcGVjID0gYXJndjsKKwkJbnJfcmVmc3BlYyA9IGFyZ2MgLSBpOworCQlicmVhazsKKwl9CisKKwljdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXsKKwkJY2hhciAqaHR0cF9tYXhfcmVxdWVzdHMgPSBnZXRlbnYoIkdJVF9IVFRQX01BWF9SRVFVRVNUUyIpOworCQlpZiAoaHR0cF9tYXhfcmVxdWVzdHMgIT0gTlVMTCkKKwkJCW1heF9yZXF1ZXN0cyA9IGF0b2koaHR0cF9tYXhfcmVxdWVzdHMpOworCX0KKworCWN1cmxtID0gY3VybF9tdWx0aV9pbml0KCk7CisJaWYgKGN1cmxtID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBjcmVhdGluZyBjdXJsIG11bHRpIGhhbmRsZS5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9TU0xfTk9fVkVSSUZZIikpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDA7CisKKwlzc2xfY2VydCA9IGdldGVudigiR0lUX1NTTF9DRVJUIik7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMgorCXNzbF9rZXkgPSBnZXRlbnYoIkdJVF9TU0xfS0VZIik7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJc3NsX2NhcGF0aCA9IGdldGVudigiR0lUX1NTTF9DQVBBVEgiKTsKKyNlbmRpZgorCXNzbF9jYWluZm8gPSBnZXRlbnYoIkdJVF9TU0xfQ0FJTkZPIik7CisKKwlsb3dfc3BlZWRfbGltaXQgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9MSU1JVCIpOworCWlmIChsb3dfc3BlZWRfbGltaXQgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfbGltaXQgPSBzdHJ0b2wobG93X3NwZWVkX2xpbWl0LCBOVUxMLCAxMCk7CisJbG93X3NwZWVkX3RpbWUgPSBnZXRlbnYoIkdJVF9IVFRQX0xPV19TUEVFRF9USU1FIik7CisJaWYgKGxvd19zcGVlZF90aW1lICE9IE5VTEwpCisJCWN1cmxfbG93X3NwZWVkX3RpbWUgPSBzdHJ0b2wobG93X3NwZWVkX3RpbWUsIE5VTEwsIDEwKTsKKworCWdpdF9jb25maWcoaHR0cF9vcHRpb25zKTsKKworCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpCisJCWN1cmxfc3NsX3ZlcmlmeSA9IDE7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlmIChtYXhfcmVxdWVzdHMgPCAxKQorCQltYXhfcmVxdWVzdHMgPSBERUZBVUxUX01BWF9SRVFVRVNUUzsKKyNlbmRpZgorCisJbm9fcHJhZ21hX2hlYWRlciA9IGN1cmxfc2xpc3RfYXBwZW5kKG5vX3ByYWdtYV9oZWFkZXIsICJQcmFnbWE6Iik7CisJZGVmYXVsdF9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGVmYXVsdF9oZWFkZXJzLCAiUmFuZ2U6Iik7CisJZGVmYXVsdF9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGVmYXVsdF9oZWFkZXJzLCAiRGVzdGluYXRpb246Iik7CisJZGVmYXVsdF9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGVmYXVsdF9oZWFkZXJzLCAiSWY6Iik7CisJZGVmYXVsdF9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGVmYXVsdF9oZWFkZXJzLAorCQkJCQkgICAgIlByYWdtYTogbm8tY2FjaGUiKTsKKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9kZWZhdWx0ID0gZ2V0X2N1cmxfaGFuZGxlKCk7CisjZW5kaWYKKworCS8qIFZlcmlmeSBEQVYgY29tcGxpYW5jZS9sb2NrIHN1cHBvcnQgKi8KKwlpZiAoY2hlY2tfbG9ja2luZygpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogbm8gREFWIGxvY2tpbmcgc3VwcG9ydCBvbiByZW1vdGUgcmVwbyAlc1xuIiwgcmVtb3RlLT51cmwpOworCQlyYyA9IDE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBQcm9jZXNzIGVhY2ggcmVmc3BlYyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjOyBpKyspIHsKKwkJY2hhciAqZXA7CisJCWZvcmNlX3RoaXMgPSAwOworCQlkb19yZW1vdGVfdXBkYXRlID0gMDsKKwkJbmV3X2JyYW5jaCA9IDA7CisJCWxvY2FsX3JlZiA9IHJlZnNwZWNbaV07CisJCWlmICgqbG9jYWxfcmVmID09ICcrJykgeworCQkJZm9yY2VfdGhpcyA9IDE7CisJCQlsb2NhbF9yZWYrKzsKKwkJfQorCQllcCA9IHN0cmNocihsb2NhbF9yZWYsICc6Jyk7CisJCWlmIChlcCkgeworCQkJcmVtb3RlX3JlZiA9IGVwICsgMTsKKwkJCSplcCA9IDA7CisJCX0KKwkJZWxzZQorCQkJcmVtb3RlX3JlZiA9IGxvY2FsX3JlZjsKKworCQkvKiBMb2NrIHJlbW90ZSBicmFuY2ggcmVmICovCisJCWlmIChyZW1vdGVfcGF0aCkKKwkJCWZyZWUocmVtb3RlX3BhdGgpOworCQlyZW1vdGVfcGF0aCA9IHhtYWxsb2Moc3RybGVuKHJlbW90ZV9yZWYpICsgMTIpOworCQlzcHJpbnRmKHJlbW90ZV9wYXRoLCAicmVmcy9oZWFkcy8lcyIsIHJlbW90ZV9yZWYpOworCQlyZW1vdGVfbG9jayA9IGxvY2tfcmVtb3RlKHJlbW90ZV9wYXRoLCBMT0NLX1RJTUUpOworCQlpZiAocmVtb3RlX2xvY2sgPT0gTlVMTCkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9jayByZW1vdGUgYnJhbmNoICVzXG4iLAorCQkJCXJlbW90ZV9yZWYpOworCQkJcmMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZXNvbHZlIGxvY2FsIGFuZCByZW1vdGUgcmVmcyAqLworCQlpZiAoZmV0Y2hfcmVmKHJlbW90ZV9yZWYsIHJlbW90ZV9zaGExKSAhPSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVtb3RlIGJyYW5jaCAlcyBkb2VzIG5vdCBleGlzdCBvbiAlc1xuIiwKKwkJCQlyZW1vdGVfcmVmLCByZW1vdGUtPnVybCk7CisJCQluZXdfYnJhbmNoID0gMTsKKwkJfQorCQlpZiAoZ2V0X3NoYTEobG9jYWxfcmVmLCBsb2NhbF9zaGExKSAhPSAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHJlc29sdmluZyBsb2NhbCBicmFuY2ggJXNcbiIsCisJCQkJbG9jYWxfcmVmKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCisJCS8qIEZpbmQgcmVsYXRpb25zaGlwIGJldHdlZW4gbG9jYWwgYW5kIHJlbW90ZSAqLworCQlsb2NhbF9vYmplY3QgPSBwYXJzZV9vYmplY3QobG9jYWxfc2hhMSk7CisJCWlmICghbG9jYWxfb2JqZWN0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBwYXJzZSBsb2NhbCBvYmplY3QgJXNcbiIsCisJCQkJc2hhMV90b19oZXgobG9jYWxfc2hhMSkpOworCQkJcmMgPSAxOworCQkJZ290byB1bmxvY2s7CisJCX0gZWxzZSBpZiAobmV3X2JyYW5jaCkgeworCQkJZG9fcmVtb3RlX3VwZGF0ZSA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoIW1lbWNtcChsb2NhbF9zaGExLCByZW1vdGVfc2hhMSwgMjApKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIqICVzOiBzYW1lIGFzIGJyYW5jaCAnJXMnIG9mICVzXG4iLAorCQkJCQlsb2NhbF9yZWYsIHJlbW90ZV9yZWYsIHJlbW90ZS0+dXJsKTsKKwkJCX0gZWxzZSBpZiAoaXNfYW5jZXN0b3IocmVtb3RlX3NoYTEsCisJCQkJCSAgICAgICAoc3RydWN0IGNvbW1pdCAqKWxvY2FsX29iamVjdCkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlJlbW90ZSAlcyB3aWxsIGZhc3QtZm9yd2FyZCB0byBsb2NhbCAlc1xuIiwKKwkJCQkJcmVtb3RlX3JlZiwgbG9jYWxfcmVmKTsKKwkJCQlkb19yZW1vdGVfdXBkYXRlID0gMTsKKwkJCX0gZWxzZSBpZiAoZm9yY2VfYWxsIHx8IGZvcmNlX3RoaXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiogJXMgb24gJXMgZG9lcyBub3QgZmFzdCBmb3J3YXJkIHRvIGxvY2FsIGJyYW5jaCAnJXMnLCBvdmVyd3JpdGluZ1xuIiwKKwkJCQkJcmVtb3RlX3JlZiwgcmVtb3RlLT51cmwsIGxvY2FsX3JlZik7CisJCQkJZG9fcmVtb3RlX3VwZGF0ZSA9IDE7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiKiAlcyBvbiAlcyBkb2VzIG5vdCBmYXN0IGZvcndhcmQgdG8gbG9jYWwgYnJhbmNoICclcydcbiIsCisJCQkJCXJlbW90ZV9yZWYsIHJlbW90ZS0+dXJsLCBsb2NhbF9yZWYpOworCQkJCXJjID0gMTsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKwkJfQorCisJCS8qIEdlbmVyYXRlIGFuZCBjaGVjayBsaXN0IG9mIHJlcXVpcmVkIG9iamVjdHMgKi8KKwkJcHVzaGluZyA9IDA7CisJCWlmIChkb19yZW1vdGVfdXBkYXRlIHx8IHB1c2hfYWxsKQorCQkJZmV0Y2hfaW5kaWNlcygpOworCQlnZXRfZGVsdGEocHVzaF9hbGwgPyBOVUxMIDogcmVtb3RlX3NoYTEsCisJCQkgIGxvY2FsX29iamVjdCwgcmVtb3RlX2xvY2spOworCQlwcm9jZXNzX3dhaXRpbmdfcmVxdWVzdHMoKTsKKworCQkvKiBQdXNoIG1pc3Npbmcgb2JqZWN0cyB0byByZW1vdGUsIHRoaXMgd291bGQgYmUgYQorCQkgICBjb252ZW5pZW50IHRpbWUgdG8gcGFjayB0aGVtIGZpcnN0IGlmIGFwcHJvcHJpYXRlLiAqLworCQlwdXNoaW5nID0gMTsKKwkJcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKCk7CisJCXByb2Nlc3Nfd2FpdGluZ19yZXF1ZXN0cygpOworCisJCS8qIFVwZGF0ZSB0aGUgcmVtb3RlIGJyYW5jaCBpZiBhbGwgd2VudCB3ZWxsICovCisJCWlmIChkb19yZW1vdGVfdXBkYXRlKSB7CisJCQlpZiAoIWFib3J0ZWQgJiYgdXBkYXRlX3JlbW90ZShsb2NhbF9zaGExLAorCQkJCQkJICAgICAgcmVtb3RlX2xvY2spKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlcyByZW1vdGUgYnJhbmNoICVzXG4iLAorCQkJCQluZXdfYnJhbmNoID8gIkNyZWF0ZWQiIDogIlVwZGF0ZWQiLAorCQkJCQlyZW1vdGVfcmVmKTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJVbmFibGUgdG8gJXMgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQkJbmV3X2JyYW5jaCA/ICJjcmVhdGUiIDogInVwZGF0ZSIsCisJCQkJCXJlbW90ZV9yZWYpOworCQkJCXJjID0gMTsKKwkJCQlnb3RvIHVubG9jazsKKwkJCX0KKwkJfQorCisJdW5sb2NrOgorCQl1bmxvY2tfcmVtb3RlKHJlbW90ZV9sb2NrKTsKKwkJZnJlZShyZW1vdGVfcGF0aCk7CisJfQorCisgY2xlYW51cDoKKwlmcmVlKHJlbW90ZSk7CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKG5vX3ByYWdtYV9oZWFkZXIpOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGVmYXVsdF9oZWFkZXJzKTsKKworCXNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKwl3aGlsZSAoc2xvdCAhPSBOVUxMKSB7CisJCW5leHRfc2xvdCA9IHNsb3QtPm5leHQ7CisJCWlmIChzbG90LT5jdXJsICE9IE5VTEwpCisJCQljdXJsX2Vhc3lfY2xlYW51cChzbG90LT5jdXJsKTsKKwkJZnJlZShzbG90KTsKKwkJc2xvdCA9IG5leHRfc2xvdDsKKwl9CisKKwlyZXF1ZXN0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXdoaWxlIChyZXF1ZXN0ICE9IE5VTEwpIHsKKwkJbmV4dF9yZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dDsKKwkJcmVsZWFzZV9yZXF1ZXN0KHJlcXVlc3QpOworCQlyZXF1ZXN0ID0gbmV4dF9yZXF1ZXN0OworCX0KKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9lYXN5X2NsZWFudXAoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJY3VybF9tdWx0aV9jbGVhbnVwKGN1cmxtKTsKKyNlbmRpZgorCWN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwppbmRleCBhMmQyNDFmLi5iYzg5ZTFkIDEwMDY0NAotLS0gYS9pZGVudC5jCisrKyBiL2lkZW50LmMKQEAgLTgsMTIgKzgsNDMgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCiAjaW5jbHVkZSA8cHdkLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KIAotc3RhdGljIGNoYXIgcmVhbF9lbWFpbFsxMDAwXTsKLXN0YXRpYyBjaGFyIHJlYWxfbmFtZVsxMDAwXTsKLXN0YXRpYyBjaGFyIHJlYWxfZGF0ZVs1MF07CitzdGF0aWMgY2hhciBnaXRfZGVmYXVsdF9kYXRlWzUwXTsKKworc3RhdGljIHZvaWQgY29weV9nZWNvcyhzdHJ1Y3QgcGFzc3dkICp3LCBjaGFyICpuYW1lLCBpbnQgc3opCit7CisJY2hhciAqc3JjLCAqZHN0OworCWludCBsZW4sIG5sZW47CisKKwlubGVuID0gc3RybGVuKHctPnB3X25hbWUpOworCisJLyogVHJhZGl0aW9uYWxseSBHRUNPUyBmaWVsZCBoYWQgb2ZmaWNlIHBob25lIG51bWJlcnMgZXRjLCBzZXBhcmF0ZWQKKwkgKiB3aXRoIGNvbW1hcy4gIEFsc28gJiBzdGFuZHMgZm9yIGNhcGl0YWxpemVkIGZvcm0gb2YgdGhlIGxvZ2luIG5hbWUuCisJICovCisKKwlmb3IgKGxlbiA9IDAsIGRzdCA9IG5hbWUsIHNyYyA9IHctPnB3X2dlY29zOyBsZW4gPCBzejsgc3JjKyspIHsKKwkJaW50IGNoID0gKnNyYzsKKwkJaWYgKGNoICE9ICcmJykgeworCQkJKmRzdCsrID0gY2g7CisJCQlpZiAoY2ggPT0gMCB8fCBjaCA9PSAnLCcpCisJCQkJYnJlYWs7CisJCQlsZW4rKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsZW4gKyBubGVuIDwgc3opIHsKKwkJCS8qIFNvcnJ5LCBNci4gTWNEb25hbGQuLi4gKi8KKwkJCSpkc3QrKyA9IHRvdXBwZXIoKnctPnB3X25hbWUpOworCQkJbWVtY3B5KGRzdCwgdy0+cHdfbmFtZSArIDEsIG5sZW4gLSAxKTsKKwkJCWRzdCArPSBubGVuIC0gMTsKKwkJfQorCX0KKwlpZiAobGVuIDwgc3opCisJCW5hbWVbbGVuXSA9IDA7CisJZWxzZQorCQlkaWUoIllvdXIgcGFyZW50cyBtdXN0IGhhdmUgaGF0ZWQgeW91ISIpOworCit9CiAKIGludCBzZXR1cF9pZGVudCh2b2lkKQogewpAQCAtMjQsMjUgKzU1LDI5IEBACiAJCWRpZSgiWW91IGRvbid0IGV4aXN0LiBHbyBhd2F5ISIpOwogCiAJLyogR2V0IHRoZSBuYW1lICgiZ2Vjb3MiKSAqLwotCWxlbiA9IHN0cmxlbihwdy0+cHdfZ2Vjb3MpOwotCWlmIChsZW4gPj0gc2l6ZW9mKHJlYWxfbmFtZSkpCi0JCWRpZSgiWW91ciBwYXJlbnRzIG11c3QgaGF2ZSBoYXRlZCB5b3UhIik7Ci0JbWVtY3B5KHJlYWxfbmFtZSwgcHctPnB3X2dlY29zLCBsZW4rMSk7CisJY29weV9nZWNvcyhwdywgZ2l0X2RlZmF1bHRfbmFtZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X25hbWUpKTsKIAogCS8qIE1ha2UgdXAgYSBmYWtlIGVtYWlsIGFkZHJlc3MgKG5hbWUgKyAnQCcgKyBob3N0bmFtZSBbKyAnLicgKyBkb21haW5uYW1lXSkgKi8KIAlsZW4gPSBzdHJsZW4ocHctPnB3X25hbWUpOwotCWlmIChsZW4gPiBzaXplb2YocmVhbF9lbWFpbCkvMikKKwlpZiAobGVuID4gc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKS8yKQogCQlkaWUoIllvdXIgc3lzYWRtaW4gbXVzdCBoYXRlIHlvdSEiKTsKLQltZW1jcHkocmVhbF9lbWFpbCwgcHctPnB3X25hbWUsIGxlbik7Ci0JcmVhbF9lbWFpbFtsZW4rK10gPSAnQCc7Ci0JZ2V0aG9zdG5hbWUocmVhbF9lbWFpbCArIGxlbiwgc2l6ZW9mKHJlYWxfZW1haWwpIC0gbGVuKTsKLQlpZiAoIXN0cmNocihyZWFsX2VtYWlsK2xlbiwgJy4nKSkgewotCQlsZW4gPSBzdHJsZW4ocmVhbF9lbWFpbCk7Ci0JCXJlYWxfZW1haWxbbGVuKytdID0gJy4nOwotCQlnZXRkb21haW5uYW1lKHJlYWxfZW1haWwrbGVuLCBzaXplb2YocmVhbF9lbWFpbCktbGVuKTsKKwltZW1jcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHB3LT5wd19uYW1lLCBsZW4pOworCWdpdF9kZWZhdWx0X2VtYWlsW2xlbisrXSA9ICdAJzsKKwlnZXRob3N0bmFtZShnaXRfZGVmYXVsdF9lbWFpbCArIGxlbiwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSAtIGxlbik7CisJaWYgKCFzdHJjaHIoZ2l0X2RlZmF1bHRfZW1haWwrbGVuLCAnLicpKSB7CisJCXN0cnVjdCBob3N0ZW50ICpoZSA9IGdldGhvc3RieW5hbWUoZ2l0X2RlZmF1bHRfZW1haWwgKyBsZW4pOworCQljaGFyICpkb21haW5uYW1lOworCisJCWxlbiA9IHN0cmxlbihnaXRfZGVmYXVsdF9lbWFpbCk7CisJCWdpdF9kZWZhdWx0X2VtYWlsW2xlbisrXSA9ICcuJzsKKwkJaWYgKGhlICYmIChkb21haW5uYW1lID0gc3RyY2hyKGhlLT5oX25hbWUsICcuJykpKQorCQkJc3RybmNweShnaXRfZGVmYXVsdF9lbWFpbCArIGxlbiwgZG9tYWlubmFtZSArIDEsIHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkgLSBsZW4pOworCQllbHNlCisJCQlzdHJuY3B5KGdpdF9kZWZhdWx0X2VtYWlsICsgbGVuLCAiKG5vbmUpIiwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSAtIGxlbik7CisJCWdpdF9kZWZhdWx0X2VtYWlsW3NpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkgLSAxXSA9IDA7CiAJfQogCS8qIEFuZCBzZXQgdGhlIGRlZmF1bHQgZGF0ZSAqLwotCWRhdGVzdGFtcChyZWFsX2RhdGUsIHNpemVvZihyZWFsX2RhdGUpKTsKKwlkYXRlc3RhbXAoZ2l0X2RlZmF1bHRfZGF0ZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X2RhdGUpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI4LDEwICsxNjMsMTAgQEAKIAlpbnQgaTsKIAogCWlmICghbmFtZSkKLQkJbmFtZSA9IHJlYWxfbmFtZTsKKwkJbmFtZSA9IGdpdF9kZWZhdWx0X25hbWU7CiAJaWYgKCFlbWFpbCkKLQkJZW1haWwgPSByZWFsX2VtYWlsOwotCXN0cmNweShkYXRlLCByZWFsX2RhdGUpOworCQllbWFpbCA9IGdpdF9kZWZhdWx0X2VtYWlsOworCXN0cmNweShkYXRlLCBnaXRfZGVmYXVsdF9kYXRlKTsKIAlpZiAoZGF0ZV9zdHIpCiAJCXBhcnNlX2RhdGUoZGF0ZV9zdHIsIGRhdGUsIHNpemVvZihkYXRlKSk7CiAKZGlmZiAtLWdpdCBhL2luZGV4LXBhY2suYyBiL2luZGV4LXBhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODVmZTcxCi0tLSAvZGV2L251bGwKKysrIGIvaW5kZXgtcGFjay5jCkBAIC0wLDAgKzEsNDYyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgaW5kZXhfcGFja191c2FnZVtdID0KKyJnaXQtaW5kZXgtcGFjayBbLW8gaW5kZXgtZmlsZV0gcGFjay1maWxlIjsKKworc3RydWN0IG9iamVjdF9lbnRyeQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwllbnVtIG9iamVjdF90eXBlIHJlYWxfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworfTsKKworc3RydWN0IGRlbHRhX2VudHJ5Cit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWNrX25hbWU7CitzdGF0aWMgdW5zaWduZWQgY2hhciAqcGFja19iYXNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFja19zaXplOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CitzdGF0aWMgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YXM7CitzdGF0aWMgaW50IG5yX29iamVjdHM7CitzdGF0aWMgaW50IG5yX2RlbHRhczsKKworc3RhdGljIHZvaWQgb3Blbl9wYWNrX2ZpbGUodm9pZCkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlmZCA9IG9wZW4ocGFja19uYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnOiAlcyIsIHBhY2tfbmFtZSwKKwkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2UoZmQpOworCQlkaWUoImNhbm5vdCBmc3RhdCBwYWNrZmlsZSAnJXMnOiAlcyIsIHBhY2tfbmFtZSwKKwkJICAgIHN0cmVycm9yKGVycikpOworCX0KKwlwYWNrX3NpemUgPSBzdC5zdF9zaXplOworCXBhY2tfYmFzZSA9IG1tYXAoTlVMTCwgcGFja19zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKHBhY2tfYmFzZSA9PSBNQVBfRkFJTEVEKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2UoZmQpOworCQlkaWUoImNhbm5vdCBtbWFwIHBhY2tmaWxlICclcyc6ICVzIiwgcGFja19uYW1lLAorCQkgICAgc3RyZXJyb3IoZXJyKSk7CisJfQorCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGFja19oZWFkZXIodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcGFja19oZWFkZXIgKmhkcjsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCVNIQV9DVFggY3R4OworCisJLyogRW5zdXJlIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgZm9yIHRoZSBoZWFkZXIgYW5kIGZpbmFsIFNIQTEgKi8KKwlpZiAocGFja19zaXplIDwgc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikgKyAyMCkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIGlzIHRvbyBzbWFsbCIsIHBhY2tfbmFtZSk7CisKKwkvKiBIZWFkZXIgY29uc2lzdGVuY3kgY2hlY2sgKi8KKwloZHIgPSAodm9pZCAqKXBhY2tfYmFzZTsKKwlpZiAoaGRyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKSkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIHNpZ25hdHVyZSBtaXNtYXRjaCIsIHBhY2tfbmFtZSk7CisJaWYgKGhkci0+aGRyX3ZlcnNpb24gIT0gaHRvbmwoUEFDS19WRVJTSU9OKSkKKwkJZGllKCJwYWNrZmlsZSAnJXMnIHZlcnNpb24gJWQgZGlmZmVyZW50IGZyb20gb3VycyAlZCIsCisJCSAgICBwYWNrX25hbWUsIG50b2hsKGhkci0+aGRyX3ZlcnNpb24pLCBQQUNLX1ZFUlNJT04pOworCisJbnJfb2JqZWN0cyA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOworCisJLyogQ2hlY2sgcGFja2ZpbGUgaW50ZWdyaXR5ICovCisJU0hBMV9Jbml0KCZjdHgpOworCVNIQTFfVXBkYXRlKCZjdHgsIHBhY2tfYmFzZSwgcGFja19zaXplIC0gMjApOworCVNIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJaWYgKG1lbWNtcChzaGExLCBwYWNrX2Jhc2UgKyBwYWNrX3NpemUgLSAyMCwgMjApKQorCQlkaWUoInBhY2tmaWxlICclcycgU0hBMSBtaXNtYXRjaCIsIHBhY2tfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJICAgICAgIC4uLikgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKK3N0YXRpYyB2b2lkIGJhZF9vYmplY3QodW5zaWduZWQgbG9uZyBvZmZzZXQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCWNoYXIgYnVmWzEwMjRdOworCisJdmFfc3RhcnQocGFyYW1zLCBmb3JtYXQpOworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZGllKCJwYWNrZmlsZSAnJXMnOiBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIiwKKwkgICAgcGFja19uYW1lLCBvZmZzZXQsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfZW50cnlfZGF0YSh1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpjdXJyZW50X3BvcywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcGFja19saW1pdCA9IHBhY2tfc2l6ZSAtIDIwOworCXVuc2lnbmVkIGxvbmcgcG9zID0gKmN1cnJlbnRfcG9zOworCXpfc3RyZWFtIHN0cmVhbTsKKwl2b2lkICpidWYgPSB4bWFsbG9jKHNpemUpOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemU7CisJc3RyZWFtLm5leHRfaW4gPSBwYWNrX2Jhc2UgKyBwb3M7CisJc3RyZWFtLmF2YWlsX2luID0gcGFja19saW1pdCAtIHBvczsKKwlpbmZsYXRlSW5pdCgmc3RyZWFtKTsKKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IGluZmxhdGUoJnN0cmVhbSwgMCk7CisJCWlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7CisJCWlmIChyZXQgIT0gWl9PSykKKwkJCWJhZF9vYmplY3Qob2Zmc2V0LCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIsIHJldCk7CisJfQorCWluZmxhdGVFbmQoJnN0cmVhbSk7CisJaWYgKHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSkKKwkJYmFkX29iamVjdChvZmZzZXQsICJzaXplIG1pc21hdGNoIChleHBlY3RlZCAlbHUsIGdvdCAlbHUpIiwKKwkJCSAgIHNpemUsIHN0cmVhbS50b3RhbF9vdXQpOworCSpjdXJyZW50X3BvcyA9IHBhY2tfbGltaXQgLSBzdHJlYW0uYXZhaWxfaW47CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkodW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlICpvYmpfdHlwZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm9ial9zaXplLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqZGVsdGFfYmFzZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm5leHRfb2JqX29mZnNldCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhY2tfbGltaXQgPSBwYWNrX3NpemUgLSAyMDsKKwl1bnNpZ25lZCBsb25nIHBvcyA9IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIHNoaWZ0OworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCisJYyA9IHBhY2tfYmFzZVtwb3MrK107CisJdHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlpZiAocG9zID49IHBhY2tfbGltaXQpCisJCQliYWRfb2JqZWN0KG9mZnNldCwgIm9iamVjdCBleHRlbmRzIHBhc3QgZW5kIG9mIHBhY2siKTsKKwkJYyA9IHBhY2tfYmFzZVtwb3MrK107CisJCXNpemUgKz0gKGMgJiAweDdmVUwpIDw8IHNoaWZ0OworCQlzaGlmdCArPSA3OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0RFTFRBOgorCQlpZiAocG9zICsgMjAgPj0gcGFja19saW1pdCkKKwkJCWJhZF9vYmplY3Qob2Zmc2V0LCAib2JqZWN0IGV4dGVuZHMgcGFzdCBlbmQgb2YgcGFjayIpOworCQltZW1jcHkoZGVsdGFfYmFzZSwgcGFja19iYXNlICsgcG9zLCAyMCk7CisJCXBvcyArPSAyMDsKKwkJLyogZmFsbHRocnUgKi8KKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJZGF0YSA9IHVucGFja19lbnRyeV9kYXRhKG9mZnNldCwgJnBvcywgc2l6ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhZF9vYmplY3Qob2Zmc2V0LCAiYmFkIG9iamVjdCB0eXBlICVkIiwgdHlwZSk7CisJfQorCisJKm9ial90eXBlID0gdHlwZTsKKwkqb2JqX3NpemUgPSBzaXplOworCSpuZXh0X29ial9vZmZzZXQgPSBwb3M7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9kZWx0YShjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX3NoYTEpCit7CisJaW50IGZpcnN0ID0gMCwgbGFzdCA9IG5yX2RlbHRhczsKKworICAgICAgICB3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgaW50IG5leHQgPSAoZmlyc3QgKyBsYXN0KSAvIDI7CisgICAgICAgICAgICAgICAgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9ICZkZWx0YXNbbmV4dF07CisgICAgICAgICAgICAgICAgaW50IGNtcDsKKworICAgICAgICAgICAgICAgIGNtcCA9IG1lbWNtcChiYXNlX3NoYTEsIGRlbHRhLT5iYXNlX3NoYTEsIDIwKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0OworICAgICAgICAgICAgICAgIGlmIChjbXAgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaXJzdCA9IG5leHQrMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLWZpcnN0LTE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9kZWx0YXNfYmFzZWRfb25fc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX3NoYTEsCisJCQkJICAgICBpbnQgKmZpcnN0X2luZGV4LCBpbnQgKmxhc3RfaW5kZXgpCit7CisJaW50IGZpcnN0ID0gZmluZF9kZWx0YShiYXNlX3NoYTEpOworCWludCBsYXN0ID0gZmlyc3Q7CisJaW50IGVuZCA9IG5yX2RlbHRhcyAtIDE7CisKKwlpZiAoZmlyc3QgPCAwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGZpcnN0ID4gMCAmJiAhbWVtY21wKGRlbHRhc1tmaXJzdC0xXS5iYXNlX3NoYTEsIGJhc2Vfc2hhMSwgMjApKQorCQktLWZpcnN0OworCXdoaWxlIChsYXN0IDwgZW5kICYmICFtZW1jbXAoZGVsdGFzW2xhc3QrMV0uYmFzZV9zaGExLCBiYXNlX3NoYTEsIDIwKSkKKwkJKytsYXN0OworCSpmaXJzdF9pbmRleCA9IGZpcnN0OworCSpsYXN0X2luZGV4ID0gbGFzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hhMV9vYmplY3QoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCVNIQV9DVFggY3R4OworCWNoYXIgaGVhZGVyWzUwXTsKKwlpbnQgaGVhZGVyX3NpemU7CisJY29uc3QgY2hhciAqdHlwZV9zdHI7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6IHR5cGVfc3RyID0gImNvbW1pdCI7IGJyZWFrOworCWNhc2UgT0JKX1RSRUU6ICAgdHlwZV9zdHIgPSAidHJlZSI7IGJyZWFrOworCWNhc2UgT0JKX0JMT0I6ICAgdHlwZV9zdHIgPSAiYmxvYiI7IGJyZWFrOworCWNhc2UgT0JKX1RBRzogICAgdHlwZV9zdHIgPSAidGFnIjsgYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJiYWQgdHlwZSAlZCIsIHR5cGUpOworCX0KKworCWhlYWRlcl9zaXplID0gc3ByaW50ZihoZWFkZXIsICIlcyAlbHUiLCB0eXBlX3N0ciwgc2l6ZSkgKyAxOworCisJU0hBMV9Jbml0KCZjdHgpOworCVNIQTFfVXBkYXRlKCZjdHgsIGhlYWRlciwgaGVhZGVyX3NpemUpOworCVNIQTFfVXBkYXRlKCZjdHgsIGRhdGEsIHNpemUpOworCVNIQTFfRmluYWwoc2hhMSwgJmN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEoc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSwgdm9pZCAqYmFzZV9kYXRhLAorCQkJICB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9IGRlbHRhLT5vYmo7CisJdm9pZCAqZGVsdGFfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemU7CisJdm9pZCAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemU7CisJZW51bSBvYmplY3RfdHlwZSBkZWx0YV90eXBlOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIG5leHRfb2JqX29mZnNldDsKKwlpbnQgaiwgZmlyc3QsIGxhc3Q7CisKKwlvYmotPnJlYWxfdHlwZSA9IHR5cGU7CisJZGVsdGFfZGF0YSA9IHVucGFja19yYXdfZW50cnkob2JqLT5vZmZzZXQsICZkZWx0YV90eXBlLAorCQkJCSAgICAgICZkZWx0YV9zaXplLCBiYXNlX3NoYTEsCisJCQkJICAgICAgJm5leHRfb2JqX29mZnNldCk7CisJcmVzdWx0ID0gcGF0Y2hfZGVsdGEoYmFzZV9kYXRhLCBiYXNlX3NpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUsCisJCQkgICAgICZyZXN1bHRfc2l6ZSk7CisJZnJlZShkZWx0YV9kYXRhKTsKKwlpZiAoIXJlc3VsdCkKKwkJYmFkX29iamVjdChvYmotPm9mZnNldCwgImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOworCXNoYTFfb2JqZWN0KHJlc3VsdCwgcmVzdWx0X3NpemUsIHR5cGUsIG9iai0+c2hhMSk7CisJaWYgKCFmaW5kX2RlbHRhc19iYXNlZF9vbl9zaGExKG9iai0+c2hhMSwgJmZpcnN0LCAmbGFzdCkpIHsKKwkJZm9yIChqID0gZmlyc3Q7IGogPD0gbGFzdDsgaisrKQorCQkJcmVzb2x2ZV9kZWx0YSgmZGVsdGFzW2pdLCByZXN1bHQsIHJlc3VsdF9zaXplLCB0eXBlKTsKKwl9CisJZnJlZShyZXN1bHQpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZGVsdGFfZW50cnkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhX2EgPSBhOworCWNvbnN0IHN0cnVjdCBkZWx0YV9lbnRyeSAqZGVsdGFfYiA9IGI7CisJcmV0dXJuIG1lbWNtcChkZWx0YV9hLT5iYXNlX3NoYTEsIGRlbHRhX2ItPmJhc2Vfc2hhMSwgMjApOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wYWNrX29iamVjdHModm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpOworCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZGF0YV9zaXplOworCisJLyoKKwkgKiBGaXJzdCBwYXNzOgorCSAqIC0gZmluZCBsb2NhdGlvbnMgb2YgYWxsIG9iamVjdHM7CisJICogLSBjYWxjdWxhdGUgU0hBMSBvZiBhbGwgbm9uLWRlbHRhIG9iamVjdHM7CisJICogLSByZW1lbWJlciBiYXNlIFNIQTEgZm9yIGFsbCBkZWx0YXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKwkJb2JqLT5vZmZzZXQgPSBvZmZzZXQ7CisJCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9mZnNldCwgJm9iai0+dHlwZSwgJmRhdGFfc2l6ZSwKKwkJCQkJYmFzZV9zaGExLCAmb2Zmc2V0KTsKKwkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0RFTFRBKSB7CisJCQlzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhID0gJmRlbHRhc1tucl9kZWx0YXMrK107CisJCQlkZWx0YS0+b2JqID0gb2JqOworCQkJbWVtY3B5KGRlbHRhLT5iYXNlX3NoYTEsIGJhc2Vfc2hhMSwgMjApOworCQl9IGVsc2UKKwkJCXNoYTFfb2JqZWN0KGRhdGEsIGRhdGFfc2l6ZSwgb2JqLT50eXBlLCBvYmotPnNoYTEpOworCQlmcmVlKGRhdGEpOworCX0KKwlpZiAob2Zmc2V0ICE9IHBhY2tfc2l6ZSAtIDIwKQorCQlkaWUoInBhY2tmaWxlICclcycgaGFzIGp1bmsgYXQgdGhlIGVuZCIsIHBhY2tfbmFtZSk7CisKKwkvKiBTb3J0IGRlbHRhcyBieSBiYXNlIFNIQTEgZm9yIGZhc3Qgc2VhcmNoaW5nICovCisJcXNvcnQoZGVsdGFzLCBucl9kZWx0YXMsIHNpemVvZihzdHJ1Y3QgZGVsdGFfZW50cnkpLAorCSAgICAgIGNvbXBhcmVfZGVsdGFfZW50cnkpOworCisJLyoKKwkgKiBTZWNvbmQgcGFzczoKKwkgKiAtIGZvciBhbGwgbm9uLWRlbHRhIG9iamVjdHMsIGxvb2sgaWYgaXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9yCisJICogICBkZWx0YXM7CisJICogLSBpZiB1c2VkIGFzIGEgYmFzZSwgdW5jb21wcmVzcyB0aGUgb2JqZWN0IGFuZCBhcHBseSBhbGwgZGVsdGFzLAorCSAqICAgcmVjdXJzaXZlbHkgY2hlY2tpbmcgaWYgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgdXNlZCBhcyBhIGJhc2UKKwkgKiAgIGZvciBzb21lIG1vcmUgZGVsdGFzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CisJCWludCBqLCBmaXJzdCwgbGFzdDsKKworCQlpZiAob2JqLT50eXBlID09IE9CSl9ERUxUQSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZmluZF9kZWx0YXNfYmFzZWRfb25fc2hhMShvYmotPnNoYTEsICZmaXJzdCwgJmxhc3QpKQorCQkJY29udGludWU7CisJCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iai0+b2Zmc2V0LCAmb2JqLT50eXBlLCAmZGF0YV9zaXplLAorCQkJCQliYXNlX3NoYTEsICZvZmZzZXQpOworCQlmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyBqKyspCisJCQlyZXNvbHZlX2RlbHRhKCZkZWx0YXNbal0sIGRhdGEsIGRhdGFfc2l6ZSwgb2JqLT50eXBlKTsKKwkJZnJlZShkYXRhKTsKKwl9CisKKwkvKiBDaGVjayBmb3IgdW5yZXNvbHZlZCBkZWx0YXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfZGVsdGFzOyBpKyspIHsKKwkJaWYgKGRlbHRhc1tpXS5vYmotPnJlYWxfdHlwZSA9PSBPQkpfREVMVEEpCisJCQlkaWUoInBhY2tmaWxlICclcycgaGFzIHVucmVzb2x2ZWQgZGVsdGFzIiwgIHBhY2tfbmFtZSk7CisJfQorfQorCitzdGF0aWMgaW50IHNoYTFfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqYSA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiID0gKihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqKV9iOworCXJldHVybiBtZW1jbXAoYS0+c2hhMSwgYi0+c2hhMSwgMjApOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9pbmRleF9maWxlKGNvbnN0IGNoYXIgKmluZGV4X25hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHNoYTFmaWxlICpmOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipzb3J0ZWRfYnlfc2hhID0KKwkJeGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSAqKSk7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqKmxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipsYXN0ID0gc29ydGVkX2J5X3NoYSArIG5yX29iamVjdHM7CisJdW5zaWduZWQgaW50IGFycmF5WzI1Nl07CisJaW50IGk7CisJU0hBX0NUWCBjdHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgKytpKQorCQlzb3J0ZWRfYnlfc2hhW2ldID0gJm9iamVjdHNbaV07CisJcXNvcnQoc29ydGVkX2J5X3NoYSwgbnJfb2JqZWN0cywgc2l6ZW9mKHNvcnRlZF9ieV9zaGFbMF0pLAorCSAgICAgIHNoYTFfY29tcGFyZSk7CisKKwl1bmxpbmsoaW5kZXhfbmFtZSk7CisJZiA9IHNoYTFjcmVhdGUoIiVzIiwgaW5kZXhfbmFtZSk7CisKKwkvKgorCSAqIFdyaXRlIHRoZSBmaXJzdC1sZXZlbCB0YWJsZSAodGhlIGxpc3QgaXMgc29ydGVkLAorCSAqIGJ1dCB3ZSB1c2UgYSAyNTYtZW50cnkgbG9va3VwIHRvIGJlIGFibGUgdG8gYXZvaWQKKwkgKiBoYXZpbmcgdG8gZG8gZWlnaHQgZXh0cmEgYmluYXJ5IHNlYXJjaCBpdGVyYXRpb25zKS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqKm5leHQgPSBsaXN0OworCQl3aGlsZSAobmV4dCA8IGxhc3QpIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICpuZXh0OworCQkJaWYgKG9iai0+c2hhMVswXSAhPSBpKQorCQkJCWJyZWFrOworCQkJbmV4dCsrOworCQl9CisJCWFycmF5W2ldID0gaHRvbmwobmV4dCAtIHNvcnRlZF9ieV9zaGEpOworCQlsaXN0ID0gbmV4dDsKKwl9CisJc2hhMXdyaXRlKGYsIGFycmF5LCAyNTYgKiBzaXplb2YoaW50KSk7CisKKwkvKiByZWNvbXB1dGUgdGhlIFNIQTEgaGFzaCBvZiBzb3J0ZWQgb2JqZWN0IG5hbWVzLgorCSAqIGN1cnJlbnRseSBwYWNrLW9iamVjdHMgZG9lcyBub3QgZG8gdGhpcywgYnV0IHRoYXQKKwkgKiBjYW4gYmUgZml4ZWQuCisJICovCisJU0hBMV9Jbml0KCZjdHgpOworCS8qCisJICogV3JpdGUgdGhlIGFjdHVhbCBTSEExIGVudHJpZXMuLgorCSAqLworCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gKmxpc3QrKzsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IGh0b25sKG9iai0+b2Zmc2V0KTsKKwkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQlzaGExd3JpdGUoZiwgb2JqLT5zaGExLCAyMCk7CisJCVNIQTFfVXBkYXRlKCZjdHgsIG9iai0+c2hhMSwgMjApOworCX0KKwlzaGExd3JpdGUoZiwgcGFja19iYXNlICsgcGFja19zaXplIC0gMjAsIDIwKTsKKwlzaGExY2xvc2UoZiwgTlVMTCwgMSk7CisJZnJlZShzb3J0ZWRfYnlfc2hhKTsKKwlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGk7CisJY2hhciAqaW5kZXhfbmFtZSA9IE5VTEw7CisJY2hhciAqaW5kZXhfbmFtZV9idWYgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItbyIpKSB7CisJCQkJaWYgKGluZGV4X25hbWUgfHwgKGkrMSkgPj0gYXJnYykKKwkJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCQkJaW5kZXhfbmFtZSA9IGFyZ3ZbKytpXTsKKwkJCX0gZWxzZQorCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGFja19uYW1lKQorCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCXBhY2tfbmFtZSA9IGFyZzsKKwl9CisKKwlpZiAoIXBhY2tfbmFtZSkKKwkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJaWYgKCFpbmRleF9uYW1lKSB7CisJCWludCBsZW4gPSBzdHJsZW4ocGFja19uYW1lKTsKKwkJaWYgKGxlbiA8IDUgfHwgc3RyY21wKHBhY2tfbmFtZSArIGxlbiAtIDUsICIucGFjayIpKQorCQkJZGllKCJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIsCisJCQkgICAgcGFja19uYW1lKTsKKwkJaW5kZXhfbmFtZV9idWYgPSB4bWFsbG9jKGxlbiAtIDEpOworCQltZW1jcHkoaW5kZXhfbmFtZV9idWYsIHBhY2tfbmFtZSwgbGVuIC0gNSk7CisJCXN0cmNweShpbmRleF9uYW1lX2J1ZiArIGxlbiAtIDUsICIuaWR4Iik7CisJCWluZGV4X25hbWUgPSBpbmRleF9uYW1lX2J1ZjsKKwl9CisKKwlvcGVuX3BhY2tfZmlsZSgpOworCXBhcnNlX3BhY2tfaGVhZGVyKCk7CisJb2JqZWN0cyA9IHhjYWxsb2MobnJfb2JqZWN0cywgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwlkZWx0YXMgPSB4Y2FsbG9jKG5yX29iamVjdHMsIHNpemVvZihzdHJ1Y3QgZGVsdGFfZW50cnkpKTsKKwlwYXJzZV9wYWNrX29iamVjdHMoKTsKKwlmcmVlKGRlbHRhcyk7CisJd3JpdGVfaW5kZXhfZmlsZShpbmRleF9uYW1lLCBzaGExKTsKKwlmcmVlKG9iamVjdHMpOworCWZyZWUoaW5kZXhfbmFtZV9idWYpOworCisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9pbmRleC5jIGIvaW5kZXguYwppbmRleCA4N2ZjN2IwLi5hZDBlYWZlIDEwMDY0NAotLS0gYS9pbmRleC5jCisrKyBiL2luZGV4LmMKQEAgLTIyLDE0ICsyMiwxNiBAQAogCiBpbnQgaG9sZF9pbmRleF9maWxlX2Zvcl91cGRhdGUoc3RydWN0IGNhY2hlX2ZpbGUgKmNmLCBjb25zdCBjaGFyICpwYXRoKQogeworCWludCBmZDsKIAlzcHJpbnRmKGNmLT5sb2NrZmlsZSwgIiVzLmxvY2siLCBwYXRoKTsKLQljZi0+bmV4dCA9IGNhY2hlX2ZpbGVfbGlzdDsKLQljYWNoZV9maWxlX2xpc3QgPSBjZjsKLQlpZiAoIWNmLT5uZXh0KSB7CisJZmQgPSBvcGVuKGNmLT5sb2NrZmlsZSwgT19SRFdSIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJaWYgKGZkID49MCAmJiAhY2YtPm5leHQpIHsKKwkJY2YtPm5leHQgPSBjYWNoZV9maWxlX2xpc3Q7CisJCWNhY2hlX2ZpbGVfbGlzdCA9IGNmOwogCQlzaWduYWwoU0lHSU5ULCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7CiAJCWF0ZXhpdChyZW1vdmVfbG9ja19maWxlKTsKIAl9Ci0JcmV0dXJuIG9wZW4oY2YtPmxvY2tmaWxlLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19FWENMLCAwNjAwKTsKKwlyZXR1cm4gZmQ7CiB9CiAKIGludCBjb21taXRfaW5kZXhfZmlsZShzdHJ1Y3QgY2FjaGVfZmlsZSAqY2YpCmRpZmYgLS1naXQgYS9pbml0LWRiLmMgYi9pbml0LWRiLmMKaW5kZXggZGEyYmM4Zi4uYmQ4ODI5MSAxMDA2NDQKLS0tIGEvaW5pdC1kYi5jCisrKyBiL2luaXQtZGIuYwpAQCAtMjEsNyArMjEsNyBAQAogCiBzdGF0aWMgaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IG1vZGUpCiB7Ci0JaW50IGZkaSwgZmRvOworCWludCBmZGksIGZkbywgc3RhdHVzOwogCiAJbW9kZSA9IChtb2RlICYgMDExMSkgPyAwNzc3IDogMDY2NjsKIAlpZiAoKGZkaSA9IG9wZW4oc3JjLCBPX1JET05MWSkpIDwgMCkKQEAgLTMwLDMwICszMCw5IEBACiAJCWNsb3NlKGZkaSk7CiAJCXJldHVybiBmZG87CiAJfQotCXdoaWxlICgxKSB7Ci0JCWNoYXIgYnVmW0JVRlNJWl07Ci0JCXNzaXplX3QgbGVuaSwgbGVubywgb2ZzOwotCQlsZW5pID0gcmVhZChmZGksIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAobGVuaSA8IDApIHsKLQkJZXJyb3JfcmV0dXJuOgotCQkJY2xvc2UoZmRvKTsKLQkJCWNsb3NlKGZkaSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJaWYgKCFsZW5pKQotCQkJYnJlYWs7Ci0JCW9mcyA9IDA7Ci0JCWRvIHsKLQkJCWxlbm8gPSB3cml0ZShmZG8sIGJ1ZitvZnMsIGxlbmkpOwotCQkJaWYgKGxlbm8gPCAwKQotCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJbGVuaSAtPSBsZW5vOwotCQkJb2ZzICs9IGxlbm87Ci0JCX0gd2hpbGUgKDAgPCBsZW5pKTsKLQl9CisJc3RhdHVzID0gY29weV9mZChmZGksIGZkbyk7CiAJY2xvc2UoZmRvKTsKLQljbG9zZShmZGkpOwotCXJldHVybiAwOworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfdGVtcGxhdGVzXzEoY2hhciAqcGF0aCwgaW50IGJhc2VsZW4sCkBAIC0xNjYsNiArMTQ1LDcgQEAKIHsKIAl1bnNpZ25lZCBsZW4gPSBzdHJsZW4oZ2l0X2Rpcik7CiAJc3RhdGljIGNoYXIgcGF0aFtQQVRIX01BWF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAogCWlmIChsZW4gPiBzaXplb2YocGF0aCktNTApCiAJCWRpZSgiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiLCBnaXRfZGlyKTsKQEAgLTE4NiwxNiArMTY2LDUyIEBACiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgZGVmYXVsdCBzeW1saW5rIGZyb20gIi5naXQvSEVBRCIgdG8gdGhlICJtYXN0ZXIiCi0JICogYnJhbmNoCisJICogYnJhbmNoLCBpZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQuCiAJICovCiAJc3RyY3B5KHBhdGggKyBsZW4sICJIRUFEIik7Ci0JaWYgKHN5bWxpbmsoInJlZnMvaGVhZHMvbWFzdGVyIiwgcGF0aCkgPCAwKSB7Ci0JCWlmIChlcnJubyAhPSBFRVhJU1QpIHsKLQkJCXBlcnJvcihwYXRoKTsKKwlpZiAocmVhZF9yZWYocGF0aCwgc2hhMSkgPCAwKSB7CisJCWlmIChjcmVhdGVfc3ltcmVmKHBhdGgsICJyZWZzL2hlYWRzL21hc3RlciIpIDwgMCkKIAkJCWV4aXQoMSk7CisJfQorCXBhdGhbbGVuXSA9IDA7CisJY29weV90ZW1wbGF0ZXMocGF0aCwgbGVuLCB0ZW1wbGF0ZV9wYXRoKTsKKworCS8qCisJICogRmluZCBvdXQgaWYgd2UgY2FuIHRydXN0IHRoZSBleGVjdXRhYmxlIGJpdC4KKwkgKi8KKwlzYWZlX2NyZWF0ZV9kaXIocGF0aCk7CisJc3RyY3B5KHBhdGggKyBsZW4sICJjb25maWciKTsKKwlpZiAoYWNjZXNzKHBhdGgsIFJfT0spIDwgMCkgeworCQlzdGF0aWMgY29uc3QgY2hhciBjb250ZW50c1tdID0KKwkJCSIjXG4iCisJCQkiIyBUaGlzIGlzIHRoZSBjb25maWcgZmlsZVxuIgorCQkJIiNcbiIKKwkJCSJcbiIKKwkJCSI7IGNvcmUgdmFyaWFibGVzXG4iCisJCQkiW2NvcmVdXG4iCisJCQkiCTsgRG9uJ3QgdHJ1c3QgZmlsZSBtb2Rlc1xuIgorCQkJIglmaWxlbW9kZSA9IGZhbHNlXG4iCisJCQkiXG4iOworCQlGSUxFICpjb25maWcgPSBmb3BlbihwYXRoLCAidyIpOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoIWNvbmZpZykKKwkJCWRpZSgiQ2FuIG5vdCB3cml0ZSB0byAlcz8iLCBwYXRoKTsKKworCQlmd3JpdGUoY29udGVudHMsIHNpemVvZihjb250ZW50cyktMSwgMSwgY29uZmlnKTsKKworCQlmY2xvc2UoY29uZmlnKTsKKworCQlpZiAoIWxzdGF0KHBhdGgsICZzdCkpIHsKKwkJCXN0cnVjdCBzdGF0IHN0MjsKKwkJCWlmICghY2htb2QocGF0aCwgc3Quc3RfbW9kZSBeIFNfSVhVU1IpICYmCisJCQkJCSFsc3RhdChwYXRoLCAmc3QyKSAmJgorCQkJCQlzdC5zdF9tb2RlICE9IHN0Mi5zdF9tb2RlKQorCQkJCXVubGluayhwYXRoKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklnbm9yaW5nIGZpbGUgbW9kZXNcbiIpOwogCQl9CiAJfQotCWNvcHlfdGVtcGxhdGVzKHBhdGgsIGxlbiwgdGVtcGxhdGVfcGF0aCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGluaXRfZGJfdXNhZ2VbXSA9CkBAIC0yNDQsMTAgKzI2MCw2IEBACiAJbWVtY3B5KHBhdGgsIHNoYTFfZGlyLCBsZW4pOwogCiAJc2FmZV9jcmVhdGVfZGlyKHNoYTFfZGlyKTsKLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLQkJc3ByaW50ZihwYXRoK2xlbiwgIi8lMDJ4IiwgaSk7Ci0JCXNhZmVfY3JlYXRlX2RpcihwYXRoKTsKLQl9CiAJc3RyY3B5KHBhdGgrbGVuLCAiL3BhY2siKTsKIAlzYWZlX2NyZWF0ZV9kaXIocGF0aCk7CiAJc3RyY3B5KHBhdGgrbGVuLCAiL2luZm8iKTsKZGlmZiAtLWdpdCBhL2xvY2FsLWZldGNoLmMgYi9sb2NhbC1mZXRjaC5jCmluZGV4IDBkYmVkODkuLjA5MzExMDkgMTAwNjQ0Ci0tLSBhL2xvY2FsLWZldGNoLmMKKysrIGIvbG9jYWwtZmV0Y2guYwpAQCAtNTIsOSArNTIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqc291cmNlLCBjb25zdCBjaGFyICpkZXN0LCBjb25zdCBjaGFyICpoZXgsCitzdGF0aWMgaW50IGNvcHlfZmlsZShjb25zdCBjaGFyICpzb3VyY2UsIGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKmhleCwKIAkJICAgICBpbnQgd2Fybl9pZl9ub3RfZXhpc3RzKQogeworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoZGVzdCk7CiAJaWYgKHVzZV9saW5rKSB7CiAJCWlmICghbGluayhzb3VyY2UsIGRlc3QpKSB7CiAJCQlwdWxsX3NheSgibGluayAlc1xuIiwgaGV4KTsKQEAgLTgyLDMxICs4MywyMyBAQAogCQl9CiAJfQogCWlmICh1c2VfZmlsZWNvcHkpIHsKLQkJaW50IGlmZCwgb2ZkLCBzdGF0dXM7Ci0JCXN0cnVjdCBzdGF0IHN0OwotCQl2b2lkICptYXA7CisJCWludCBpZmQsIG9mZCwgc3RhdHVzID0gMDsKKwogCQlpZmQgPSBvcGVuKHNvdXJjZSwgT19SRE9OTFkpOwotCQlpZiAoaWZkIDwgMCB8fCBmc3RhdChpZmQsICZzdCkgPCAwKSB7Ci0JCQlpbnQgZXJyID0gZXJybm87Ci0JCQlpZiAoaWZkID49IDApCi0JCQkJY2xvc2UoaWZkKTsKLQkJCWlmICghd2Fybl9pZl9ub3RfZXhpc3RzICYmIGVyciA9PSBFTk9FTlQpCisJCWlmIChpZmQgPCAwKSB7CisJCQlpZiAoIXdhcm5faWZfbm90X2V4aXN0cyAmJiBlcnJubyA9PSBFTk9FTlQpCiAJCQkJcmV0dXJuIC0xOwogCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3Qgb3BlbiAlc1xuIiwgc291cmNlKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQltYXAgPSBtbWFwKE5VTEwsIHN0LnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGlmZCwgMCk7Ci0JCWNsb3NlKGlmZCk7Ci0JCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3QgbW1hcCAlc1xuIiwgc291cmNlKTsKKwkJb2ZkID0gb3BlbihkZXN0LCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCQlpZiAob2ZkIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3Qgb3BlbiAlc1xuIiwgZGVzdCk7CisJCQljbG9zZShpZmQpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCW9mZCA9IG9wZW4oZGVzdCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKLQkJc3RhdHVzID0gKChvZmQgPCAwKSB8fAotCQkJICAod3JpdGUob2ZkLCBtYXAsIHN0LnN0X3NpemUpICE9IHN0LnN0X3NpemUpKTsKLQkJbXVubWFwKG1hcCwgc3Quc3Rfc2l6ZSk7Ci0JCWlmIChvZmQgPj0gMCkKLQkJCWNsb3NlKG9mZCk7CisJCXN0YXR1cyA9IGNvcHlfZmQoaWZkLCBvZmQpOworCQljbG9zZShvZmQpOwogCQlpZiAoc3RhdHVzKQogCQkJZnByaW50ZihzdGRlcnIsICJjYW5ub3Qgd3JpdGUgJXNcbiIsIGRlc3QpOwogCQllbHNlCkBAIC0xNTAsNyArMTQzLDcgQEAKIAlzdGF0aWMgaW50IG9iamVjdF9uYW1lX3N0YXJ0ID0gLTE7CiAJc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwogCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOwotCWNvbnN0IGNoYXIgKmRlc3RfZmlsZW5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwljaGFyICpkZXN0X2ZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CiAKICAJaWYgKG9iamVjdF9uYW1lX3N0YXJ0IDwgMCkgewogCQlzdHJjcHkoZmlsZW5hbWUsIHBhdGgpOyAvKiBlLmcuIGdpdC5naXQgKi8KQEAgLTE2Niw3ICsxNTksMTAgQEAKIAogaW50IGZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0JcmV0dXJuIGZldGNoX2ZpbGUoc2hhMSkgJiYgZmV0Y2hfcGFjayhzaGExKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gZmV0Y2hfZmlsZShzaGExKSAmJiBmZXRjaF9wYWNrKHNoYTEpOwogfQogCiBpbnQgZmV0Y2hfcmVmKGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTIzMSw2ICsyMjcsOCBAQAogCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CiAJCWVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndycpCiAJCQl3cml0ZV9yZWYgPSBhcmd2WysrYXJnXTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkKKwkJCWdldF9yZWNvdmVyID0gMTsKIAkJZWxzZQogCQkJdXNhZ2UobG9jYWxfcHVsbF91c2FnZSk7CiAJCWFyZysrOwpkaWZmIC0tZ2l0IGEvbHMtZmlsZXMuYyBiL2xzLWZpbGVzLmMKaW5kZXggZTUzZDI0NS4uZjc2NTNlNyAxMDA2NDQKLS0tIGEvbHMtZmlsZXMuYworKysgYi9scy1maWxlcy5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGZubWF0Y2guaD4KIAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogc3RhdGljIGludCBzaG93X2RlbGV0ZWQgPSAwOwogc3RhdGljIGludCBzaG93X2NhY2hlZCA9IDA7CkBAIC0xNiw2ICsxNyw3IEBACiBzdGF0aWMgaW50IHNob3dfaWdub3JlZCA9IDA7CiBzdGF0aWMgaW50IHNob3dfc3RhZ2UgPSAwOwogc3RhdGljIGludCBzaG93X3VubWVyZ2VkID0gMDsKK3N0YXRpYyBpbnQgc2hvd19tb2RpZmllZCA9IDA7CiBzdGF0aWMgaW50IHNob3dfa2lsbGVkID0gMDsKIHN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdG9yID0gJ1xuJzsKIApAQCAtMjgsOCArMzAsOSBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZW1vdmVkID0gIiI7CiBzdGF0aWMgY29uc3QgY2hhciAqdGFnX290aGVyID0gIiI7CiBzdGF0aWMgY29uc3QgY2hhciAqdGFnX2tpbGxlZCA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19tb2RpZmllZCA9ICIiOwogCi1zdGF0aWMgY2hhciAqZXhjbHVkZV9wZXJfZGlyID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpleGNsdWRlX3Blcl9kaXIgPSBOVUxMOwogCiAvKiBXZSBtYWludGFpbiB0aHJlZSBleGNsdWRlIHBhdHRlcm4gbGlzdHM6CiAgKiBFWENfQ01ETCBsaXN0cyBwYXR0ZXJucyBleHBsaWNpdGx5IGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCkBAIC05NCw3ICs5Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQlpZiAoYnVmW2ldID09ICdcbicpIHsKIAkJCWlmIChlbnRyeSAhPSBidWYgKyBpICYmIGVudHJ5WzBdICE9ICcjJykgewotCQkJCWJ1ZltpXSA9IDA7CisJCQkJYnVmW2kgLSAoaSAmJiBidWZbaS0xXSA9PSAnXHInKV0gPSAwOwogCQkJCWFkZF9leGNsdWRlKGVudHJ5LCBiYXNlLCBiYXNlbGVuLCB3aGljaCk7CiAJCQl9CiAJCQllbnRyeSA9IGJ1ZiArIGkgKyAxOwpAQCAtMzQwLDcgKzM0MywzMiBAQAogCWlmIChwYXRoc3BlYyAmJiAhbWF0Y2gocGF0aHNwZWMsIGVudC0+bmFtZSwgbGVuKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRmKCIlcyVzJWMiLCB0YWcsIGVudC0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yKTsKKwlmcHV0cyh0YWcsIHN0ZG91dCk7CisJd3JpdGVfbmFtZV9xdW90ZWQoIiIsIGVudC0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yLCBzdGRvdXQpOworCXB1dGNoYXIobGluZV90ZXJtaW5hdG9yKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vdGhlcl9maWxlcyh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBucl9kaXI7IGkrKykgeworCQkvKiBXZSBzaG91bGQgbm90IGhhdmUgYSBtYXRjaGluZyBlbnRyeSwgYnV0IHdlCisJCSAqIG1heSBoYXZlIGFuIHVubWVyZ2VkIGVudHJ5IGZvciB0aGlzIHBhdGguCisJCSAqLworCQlzdHJ1Y3Qgbm9uZF9vbl9mcyAqZW50ID0gZGlyW2ldOworCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MoZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCWlmICgwIDw9IHBvcykKKwkJCWRpZSgiYnVnIGluIHNob3ctb3RoZXItZmlsZXMiKTsKKwkJcG9zID0gLXBvcyAtIDE7CisJCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsgCisJCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJaWYgKGNlX25hbWVsZW4oY2UpID09IGVudC0+bGVuICYmCisJCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgZW50LT5uYW1lLCBlbnQtPmxlbikpCisJCQkJY29udGludWU7IC8qIFl1cCwgdGhpcyBvbmUgZXhpc3RzIHVubWVyZ2VkICovCisJCX0KKwkJc2hvd19kaXJfZW50cnkodGFnX290aGVyLCBlbnQpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2hvd19raWxsZWRfZmlsZXModm9pZCkKQEAgLTQwMywxNSArNDMxLDIwIEBACiAJaWYgKHBhdGhzcGVjICYmICFtYXRjaChwYXRoc3BlYywgY2UtPm5hbWUsIGxlbikpCiAJCXJldHVybjsKIAotCWlmICghc2hvd19zdGFnZSkKLQkJcHJpbnRmKCIlcyVzJWMiLCB0YWcsIGNlLT5uYW1lICsgb2Zmc2V0LCBsaW5lX3Rlcm1pbmF0b3IpOwotCWVsc2UKLQkJcHJpbnRmKCIlcyUwNm8gJXMgJWRcdCVzJWMiLAorCWlmICghc2hvd19zdGFnZSkgeworCQlmcHV0cyh0YWcsIHN0ZG91dCk7CisJCXdyaXRlX25hbWVfcXVvdGVkKCIiLCBjZS0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yLCBzdGRvdXQpOworCQlwdXRjaGFyKGxpbmVfdGVybWluYXRvcik7CisJfQorCWVsc2UgeworCQlwcmludGYoIiVzJTA2byAlcyAlZFx0IiwKIAkJICAgICAgIHRhZywKIAkJICAgICAgIG50b2hsKGNlLT5jZV9tb2RlKSwKIAkJICAgICAgIHNoYTFfdG9faGV4KGNlLT5zaGExKSwKLQkJICAgICAgIGNlX3N0YWdlKGNlKSwKLQkJICAgICAgIGNlLT5uYW1lICsgb2Zmc2V0LCBsaW5lX3Rlcm1pbmF0b3IpOyAKKwkJICAgICAgIGNlX3N0YWdlKGNlKSk7CisJCXdyaXRlX25hbWVfcXVvdGVkKCIiLCBjZS0+bmFtZSArIG9mZnNldCwgbGluZV90ZXJtaW5hdG9yLCBzdGRvdXQpOworCQlwdXRjaGFyKGxpbmVfdGVybWluYXRvcik7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzaG93X2ZpbGVzKHZvaWQpCkBAIC00MjgsOCArNDYxLDcgQEAKIAkJcmVhZF9kaXJlY3RvcnkocGF0aCwgYmFzZSwgYmFzZWxlbik7CiAJCXFzb3J0KGRpciwgbnJfZGlyLCBzaXplb2Yoc3RydWN0IG5vbmRfb25fZnMgKiksIGNtcF9uYW1lKTsKIAkJaWYgKHNob3dfb3RoZXJzKQotCQkJZm9yIChpID0gMDsgaSA8IG5yX2RpcjsgaSsrKQotCQkJCXNob3dfZGlyX2VudHJ5KHRhZ19vdGhlciwgZGlyW2ldKTsKKwkJCXNob3dfb3RoZXJfZmlsZXMoKTsKIAkJaWYgKHNob3dfa2lsbGVkKQogCQkJc2hvd19raWxsZWRfZmlsZXMoKTsKIAl9CkBAIC00NDMsMTUgKzQ3NSwxOCBAQAogCQkJc2hvd19jZV9lbnRyeShjZV9zdGFnZShjZSkgPyB0YWdfdW5tZXJnZWQgOiB0YWdfY2FjaGVkLCBjZSk7CiAJCX0KIAl9Ci0JaWYgKHNob3dfZGVsZXRlZCkgeworCWlmIChzaG93X2RlbGV0ZWQgfCBzaG93X21vZGlmaWVkKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgewogCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJCXN0cnVjdCBzdGF0IHN0OworCQkJaW50IGVycjsKIAkJCWlmIChleGNsdWRlZChjZS0+bmFtZSkgIT0gc2hvd19pZ25vcmVkKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFsc3RhdChjZS0+bmFtZSwgJnN0KSkKLQkJCQljb250aW51ZTsKLQkJCXNob3dfY2VfZW50cnkodGFnX3JlbW92ZWQsIGNlKTsKKwkJCWVyciA9IGxzdGF0KGNlLT5uYW1lLCAmc3QpOworCQkJaWYgKHNob3dfZGVsZXRlZCAmJiBlcnIpCisJCQkJc2hvd19jZV9lbnRyeSh0YWdfcmVtb3ZlZCwgY2UpOworCQkJaWYgKHNob3dfbW9kaWZpZWQgJiYgY2VfbW9kaWZpZWQoY2UsICZzdCkpCisJCQkJc2hvd19jZV9lbnRyeSh0YWdfbW9kaWZpZWQsIGNlKTsKIAkJfQogCX0KIH0KQEAgLTUyMywxMSArNTU4LDExIEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGxzX2ZpbGVzX3VzYWdlW10gPQotCSJnaXQtbHMtZmlsZXMgWy16XSBbLXRdICgtLVtjYWNoZWR8ZGVsZXRlZHxvdGhlcnN8c3RhZ2V8dW5tZXJnZWR8a2lsbGVkXSkqICIKKwkiZ2l0LWxzLWZpbGVzIFstel0gWy10XSAoLS1bY2FjaGVkfGRlbGV0ZWR8b3RoZXJzfHN0YWdlfHVubWVyZ2VkfGtpbGxlZHxtb2RpZmllZF0pKiAiCiAJIlsgLS1pZ25vcmVkIF0gWy0tZXhjbHVkZT08cGF0dGVybj5dIFstLWV4Y2x1ZGUtZnJvbT08ZmlsZT5dICIKLQkiWyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZW5hbWU+IF0iOworCSJbIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxmaWxlbmFtZT4gXSBbLS1dIFs8ZmlsZT5dKiI7CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpbnQgaTsKIAlpbnQgZXhjX2dpdmVuID0gMDsKQEAgLTUzNyw4ICs1NzIsMTIgQEAKIAkJcHJlZml4X29mZnNldCA9IHN0cmxlbihwcmVmaXgpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljaGFyICphcmcgPSBhcmd2W2ldOworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CiAJCWlmICghc3RyY21wKGFyZywgIi16IikpIHsKIAkJCWxpbmVfdGVybWluYXRvciA9IDA7CiAJCQljb250aW51ZTsKQEAgLTU0Nyw2ICs1ODYsNyBAQAogCQkJdGFnX2NhY2hlZCA9ICJIICI7CiAJCQl0YWdfdW5tZXJnZWQgPSAiTSAiOwogCQkJdGFnX3JlbW92ZWQgPSAiUiAiOworCQkJdGFnX21vZGlmaWVkID0gIkMgIjsKIAkJCXRhZ19vdGhlciA9ICI/ICI7CiAJCQl0YWdfa2lsbGVkID0gIksgIjsKIAkJCWNvbnRpbnVlOwpAQCAtNTU5LDYgKzU5OSwxMCBAQAogCQkJc2hvd19kZWxldGVkID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi1tIikgfHwgIXN0cmNtcChhcmcsICItLW1vZGlmaWVkIikpIHsKKwkJCXNob3dfbW9kaWZpZWQgPSAxOworCQkJY29udGludWU7CisJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLW8iKSB8fCAhc3RyY21wKGFyZywgIi0tb3RoZXJzIikpIHsKIAkJCXNob3dfb3RoZXJzID0gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNjMwLDcgKzY3NCw4IEBACiAJfQogCiAJLyogV2l0aCBubyBmbGFncywgd2UgZGVmYXVsdCB0byBzaG93aW5nIHRoZSBjYWNoZWQgZmlsZXMgKi8KLQlpZiAoIShzaG93X3N0YWdlIHwgc2hvd19kZWxldGVkIHwgc2hvd19vdGhlcnMgfCBzaG93X3VubWVyZ2VkIHwgc2hvd19raWxsZWQpKQorCWlmICghKHNob3dfc3RhZ2UgfCBzaG93X2RlbGV0ZWQgfCBzaG93X290aGVycyB8IHNob3dfdW5tZXJnZWQgfAorCSAgICAgIHNob3dfa2lsbGVkIHwgc2hvd19tb2RpZmllZCkpCiAJCXNob3dfY2FjaGVkID0gMTsKIAogCXJlYWRfY2FjaGUoKTsKZGlmZiAtLWdpdCBhL2xzLXRyZWUuYyBiL2xzLXRyZWUuYwppbmRleCBlMTk4YTIwLi5kOWYxNWUzIDEwMDY0NAotLS0gYS9scy10cmVlLmMKKysrIGIvbHMtdHJlZS5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgogI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgogCiBzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOwogI2RlZmluZSBMU19SRUNVUlNJVkUgMQpAQCAtNTQsMTEgKzU1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgpCitzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZmluZF9lbnRyeShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpwYXRoYnVmKQogewogCWNvbnN0IGNoYXIgKm5leHQsICpzbGFzaDsKIAlpbnQgbGVuOwotCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0gPSAmcm9vdF9lbnRyeTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtID0gJnJvb3RfZW50cnksICpvbGRlbGVtID0gTlVMTDsKKworCSoocGF0aGJ1ZikgPSAnXDAnOwogCiAJLyogRmluZCB0cmVlIGVsZW1lbnQsIGRlc2NlbmRpbmcgZnJvbSByb290LCB0aGF0CiAJICogY29ycmVzcG9uZHMgdG8gdGhlIG5hbWVkIHBhdGgsIGxhemlseSBleHBhbmRpbmcKQEAgLTg2LDYgKzg5LDEwIEBACiAJCQlsZW4gPSBzbGFzaCAtIHBhdGg7CiAJCX0KIAkJaWYgKGxlbikgeworCQkJaWYgKG9sZGVsZW0pIHsKKwkJCQlwYXRoYnVmICs9IHNwcmludGYocGF0aGJ1ZiwgIiVzLyIsIG9sZGVsZW0tPm5hbWUpOworCQkJfQorCiAJCQkvKiAobGVuID09IDApIGlmIHRoZSBvcmlnaW5hbCBwYXRoIHdhcyAiZHJpdmVycy9jaGFyLyIKIAkJCSAqIGFuZCB3ZSBoYXZlIHJ1biBhbHJlYWR5IHR3byByb3VuZHMsIGhhdmluZyBlbGVtCiAJCQkgKiBwb2ludGluZyBhdCB0aGUgZHJpdmVycy9jaGFyIGRpcmVjdG9yeS4KQEAgLTEwMSw2ICsxMDgsOCBAQAogCQkJfQogCQkJaWYgKCFlbGVtKQogCQkJCXJldHVybiBOVUxMOworCisJCQlvbGRlbGVtID0gZWxlbTsKIAkJfQogCQlwYXRoID0gbmV4dDsKIAl9CkBAIC0xMDgsMTkgKzExNyw2IEBACiAJcmV0dXJuIGVsZW07CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfZW50cnlfbmFtZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQotewotCS8qIFRoaXMgaXMgeXVja3kuICBUaGUgcm9vdCBsZXZlbCBpcyB0aGVyZSBmb3IKLQkgKiBvdXIgY29udmVuaWVuY2UgYnV0IHdlIHJlYWxseSB3YW50IHRvIGRvIGEKLQkgKiBmb3Jlc3QuCi0JICovCi0JaWYgKGUtPnBhcmVudCAmJiBlLT5wYXJlbnQgIT0gJnJvb3RfZW50cnkpIHsKLQkJc2hvd19lbnRyeV9uYW1lKGUtPnBhcmVudCk7Ci0JCXB1dGNoYXIoJy8nKTsKLQl9Ci0JcHJpbnRmKCIlcyIsIGUtPm5hbWUpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqZW50cnlfdHlwZShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplKQogewogCXJldHVybiAoZS0+ZGlyZWN0b3J5ID8gInRyZWUiIDogImJsb2IiKTsKQEAgLTEzNCwyOCArMTMwLDM2IEBACiB9CiAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIG11dHVhbGx5IHJlY3Vyc2l2ZSByb3V0aW5lcyAqLwotc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICosIGludCwgY2hhciAqcGF0aGJ1Zik7CiAKLXN0YXRpYyBpbnQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW50IHNob3dfY2hpbGRyZW4oc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsLCBjaGFyICpwYXRoYnVmKQogeworCWludCBvbGRsZW4gPSBzdHJsZW4ocGF0aGJ1Zik7CisKKwlpZiAoZSAhPSAmcm9vdF9lbnRyeSkKKwkJc3ByaW50ZihwYXRoYnVmICsgb2xkbGVuLCAiJXMvIiwgZS0+bmFtZSk7CisKIAlpZiAocHJlcGFyZV9jaGlsZHJlbihlKSkKIAkJZGllKCJpbnRlcm5hbCBlcnJvcjogbHMtdHJlZSBzaG93X2NoaWxkcmVuIGNhbGxlZCB3aXRoIG5vbiB0cmVlIik7CiAJZSA9IGUtPml0ZW0udHJlZS0+ZW50cmllczsKIAl3aGlsZSAoZSkgewotCQlzaG93X2VudHJ5KGUsIGxldmVsKTsKKwkJc2hvd19lbnRyeShlLCBsZXZlbCwgcGF0aGJ1Zik7CiAJCWUgPSBlLT5uZXh0OwogCX0KKworCXBhdGhidWZbb2xkbGVuXSA9ICdcMCc7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKK3N0YXRpYyBpbnQgc2hvd19lbnRyeShzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwsIGNoYXIgKnBhdGhidWYpCiB7CiAJaW50IGVyciA9IDA7IAogCiAJaWYgKGUgIT0gJnJvb3RfZW50cnkpIHsKLQkJcHJpbnRmKCIlMDZvICVzICVzCSIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCi0JCSAgICAgICBlbnRyeV9oZXgoZSkpOwotCQlzaG93X2VudHJ5X25hbWUoZSk7CisJCXByaW50ZigiJTA2byAlcyAlcwkiLAorCQkgICAgICAgZS0+bW9kZSwgZW50cnlfdHlwZShlKSwgZW50cnlfaGV4KGUpKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQocGF0aGJ1ZiwgZS0+bmFtZSwgbGluZV90ZXJtaW5hdGlvbiwgc3Rkb3V0KTsKIAkJcHV0Y2hhcihsaW5lX3Rlcm1pbmF0aW9uKTsKIAl9CiAKQEAgLTE3NiwxMCArMTgwLDEwIEBACiAJCSAqLwogCQlpZiAobGV2ZWwgPT0gMCAmJiAhKGxzX29wdGlvbnMgJiBMU19UUkVFX09OTFkpKQogCQkJLyogY2FzZSAoMSktYSBhbmQgKDEpLWIgKi8KLQkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEsIHBhdGhidWYpOwogCQllbHNlIGlmIChsZXZlbCAmJiBsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQogCQkJLyogY2FzZSAoMiktYiAqLwotCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSwgcGF0aGJ1Zik7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC0xODcsNyArMTkxLDggQEAKIHN0YXRpYyBpbnQgbGlzdF9vbmUoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplID0gZmluZF9lbnRyeShwYXRoKTsKKwljaGFyIHBhdGhidWZbTUFYUEFUSExFTiArIDFdOworCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUgPSBmaW5kX2VudHJ5KHBhdGgsIHBhdGhidWYpOwogCWlmICghZSkgewogCQkvKiB0cmFkaXRpb25hbGx5IGxzLXRyZWUgZG9lcyBub3QgY29tcGxhaW4gYWJvdXQKIAkJICogbWlzc2luZyBwYXRoLiAgV2UgbWF5IGNoYW5nZSB0aGlzIGxhdGVyIHRvIG1hdGNoCkBAIC0xOTUsNyArMjAwLDcgQEAKIAkJICovCiAJCXJldHVybiBlcnI7CiAJfQotCWVyciA9IGVyciB8IHNob3dfZW50cnkoZSwgMCk7CisJZXJyID0gZXJyIHwgc2hvd19lbnRyeShlLCAwLCBwYXRoYnVmKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9tYWlsaW5mby5jIGIvbWFpbGluZm8uYwppbmRleCBkZjQ3MGJiLi5jYjg1M2RmIDEwMDY0NAotLS0gYS9tYWlsaW5mby5jCisrKyBiL21haWxpbmZvLmMKQEAgLTksNiArOSwxMCBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8aWNvbnYuaD4KIAorI2lmZGVmIE5PX1NUUkNBU0VTVFIKK2V4dGVybiBjaGFyICpnaXRzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpOworI2VuZGlmCisKIHN0YXRpYyBGSUxFICpjbWl0bXNnLCAqcGF0Y2hmaWxlOwogCiBzdGF0aWMgaW50IGtlZXBfc3ViamVjdCA9IDA7CmRpZmYgLS1naXQgYS9tYWlsc3BsaXQuYyBiL21haWxzcGxpdC5jCmluZGV4IGEzMjM4YzIuLjE4OWY0ZWQgMTAwNjQ0Ci0tLSBhL21haWxzcGxpdC5jCisrKyBiL21haWxzcGxpdC5jCkBAIC05LDMwICs5LDEzIEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImNhY2hlLmgiCiAKLXN0YXRpYyBpbnQgdXNhZ2Uodm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIm1haWxzcGxpdCA8bWJveD4gPGRpcmVjdG9yeT5cbiIpOwotCWV4aXQoMSk7Ci19Ci0KLXN0YXRpYyBpbnQgbGluZWxlbihjb25zdCBjaGFyICptYXAsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpbnQgbGVuID0gMCwgYzsKLQotCWRvIHsKLQkJYyA9ICptYXA7Ci0JCW1hcCsrOwotCQlzaXplLS07Ci0JCWxlbisrOwotCX0gd2hpbGUgKHNpemUgJiYgYyAhPSAnXG4nKTsKLQlyZXR1cm4gbGVuOwotfQorc3RhdGljIGNvbnN0IGNoYXIgZ2l0X21haWxzcGxpdF91c2FnZVtdID0KKyJnaXQtbWFpbHNwbGl0IFstZDxwcmVjPl0gWzxtYm94Pl0gPGRpcmVjdG9yeT4iOwogCiBzdGF0aWMgaW50IGlzX2Zyb21fbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQogewpAQCAtNjUsODEgKzQ4LDExMCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2VtYWlsKGNvbnN0IHZvaWQgKm1hcCwgdW5zaWduZWQgbG9uZyBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworLyogQ291bGQgYmUgYXMgc21hbGwgYXMgNjQsIGVub3VnaCB0byBob2xkIGEgVW5peCAiRnJvbSAiIGxpbmUuICovCitzdGF0aWMgY2hhciBidWZbNDA5Nl07CiAKLQlpZiAoc2l6ZSA8IDYgfHwgbWVtY21wKCJGcm9tICIsIG1hcCwgNSkpCisvKiBDYWxsZWQgd2l0aCB0aGUgZmlyc3QgbGluZSAocG90ZW50aWFsbHkgcGFydGlhbCkKKyAqIGFscmVhZHkgaW4gYnVmW10gLS0gbm9ybWFsbHkgdGhhdCBzaG91bGQgYmVnaW4gd2l0aAorICogdGhlIFVuaXggIkZyb20gIiBsaW5lLiAgV3JpdGUgaXQgaW50byB0aGUgc3BlY2lmaWVkCisgKiBmaWxlLgorICovCitzdGF0aWMgaW50IHNwbGl0X29uZShGSUxFICptYm94LCBjb25zdCBjaGFyICpuYW1lKQoreworCUZJTEUgKm91dHB1dCA9IE5VTEw7CisJaW50IGxlbiA9IHN0cmxlbihidWYpOworCWludCBmZDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghaXNfZnJvbV9saW5lKGJ1ZiwgbGVuKSkKIAkJZ290byBjb3JydXB0OwogCi0JLyogTWFrZSBzdXJlIHdlIGRvbid0IHRyaWdnZXIgb24gdGhpcyBmaXJzdCBsaW5lICovCi0JbWFwKys7IHNpemUtLTsgb2Zmc2V0PTE7CisJZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAlcyIsIG5hbWUpOworCW91dHB1dCA9IGZkb3BlbihmZCwgInciKTsKIAotCS8qCi0JICogU2VhcmNoIGZvciBhIGxpbmUgYmVnaW5uaW5nIHdpdGggIkZyb20gIiwgYW5kIAotCSAqIGhhdmluZyBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgZGF0ZSBmb3JtYXQuCisJLyogQ29weSBpdCBvdXQsIHdoaWxlIHNlYXJjaGluZyBmb3IgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGgKKwkgKiAiRnJvbSAiIGFuZCBoYXZpbmcgc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhIGRhdGUgZm9ybWF0LgogCSAqLwotCWRvIHsKLQkJaW50IGxlbiA9IGxpbmVsZW4obWFwLCBzaXplKTsKLQkJaWYgKGlzX2Zyb21fbGluZShtYXAsIGxlbikpCi0JCQlyZXR1cm4gb2Zmc2V0OwotCQltYXAgKz0gbGVuOwotCQlzaXplIC09IGxlbjsKLQkJb2Zmc2V0ICs9IGxlbjsKLQl9IHdoaWxlIChzaXplKTsKLQlyZXR1cm4gb2Zmc2V0OworCWZvciAoOzspIHsKKwkJaW50IGlzX3BhcnRpYWwgPSAoYnVmW2xlbi0xXSAhPSAnXG4nKTsKIAotY29ycnVwdDoKKwkJaWYgKGZwdXRzKGJ1Ziwgb3V0cHV0KSA9PSBFT0YpCisJCQlkaWUoImNhbm5vdCB3cml0ZSBvdXRwdXQiKTsKKworCQlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbWJveCkgPT0gTlVMTCkgeworCQkJaWYgKGZlb2YobWJveCkpIHsKKwkJCQlzdGF0dXMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJZGllKCJjYW5ub3QgcmVhZCBtYm94Iik7CisJCX0KKwkJbGVuID0gc3RybGVuKGJ1Zik7CisJCWlmICghaXNfcGFydGlhbCAmJiBpc19mcm9tX2xpbmUoYnVmLCBsZW4pKQorCQkJYnJlYWs7IC8qIGRvbmUgd2l0aCBvbmUgbWVzc2FnZSAqLworCX0KKwlmY2xvc2Uob3V0cHV0KTsKKwlyZXR1cm4gc3RhdHVzOworCisgY29ycnVwdDoKKwlpZiAob3V0cHV0KQorCQlmY2xvc2Uob3V0cHV0KTsKKwl1bmxpbmsobmFtZSk7CiAJZnByaW50ZihzdGRlcnIsICJjb3JydXB0IG1haWxib3hcbiIpOwogCWV4aXQoMSk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKLQlpbnQgZmQsIG5yOwotCXN0cnVjdCBzdGF0IHN0OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQl2b2lkICptYXA7CisJaW50IGksIG5yLCBucl9wcmVjID0gNDsKKwlGSUxFICptYm94ID0gTlVMTDsKIAotCWlmIChhcmdjICE9IDMpCi0JCXVzYWdlKCk7Ci0JZmQgPSBvcGVuKGFyZ3ZbMV0sIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXBlcnJvcihhcmd2WzFdKTsKLQkJZXhpdCgxKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJLyogZG8gZmxhZ3MgaGVyZSAqLworCQlpZiAoIXN0cm5jbXAoYXJnLCAiLWQiLCAyKSkgeworCQkJbnJfcHJlYyA9IHN0cnRvbChhcmcgKyAyLCBOVUxMLCAxMCk7CisJCQlpZiAobnJfcHJlYyA8IDMgfHwgMTAgPD0gbnJfcHJlYykKKwkJCQl1c2FnZShnaXRfbWFpbHNwbGl0X3VzYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CiAJfQotCWlmIChjaGRpcihhcmd2WzJdKSA8IDApCi0JCXVzYWdlKCk7Ci0JaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgewotCQlwZXJyb3IoInN0YXQiKTsKLQkJZXhpdCgxKTsKKworCS8qIEVpdGhlciBvbmUgcmVtYWluaW5nIGFyZyAoZGlyKSwgb3IgdHdvIChtYm94IGFuZCBkaXIpICovCisJc3dpdGNoIChhcmdjIC0gaSkgeworCWNhc2UgMToKKwkJbWJveCA9IHN0ZGluOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICgobWJveCA9IGZvcGVuKGFyZ3ZbaV0sICJyIikpID09IE5VTEwpCisJCQlkaWUoImNhbm5vdCBvcGVuIG1ib3ggJXMgZm9yIHJlYWRpbmciLCBhcmd2W2ldKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CiAJfQotCXNpemUgPSBzdC5zdF9zaXplOwotCW1hcCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOwotCWlmIChtYXAgPT0gTUFQX0ZBSUxFRCkgewotCQlwZXJyb3IoIm1tYXAiKTsKLQkJY2xvc2UoZmQpOwotCQlleGl0KDEpOwotCX0KLQljbG9zZShmZCk7CisJaWYgKGNoZGlyKGFyZ3ZbYXJnYyAtIDFdKSA8IDApCisJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCiAJbnIgPSAwOwotCWRvIHsKKwlpZiAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgbWJveCkgPT0gTlVMTCkKKwkJZGllKCJjYW5ub3QgcmVhZCBtYm94Iik7CisKKwlmb3IgKDs7KSB7CiAJCWNoYXIgbmFtZVsxMF07Ci0JCXVuc2lnbmVkIGxvbmcgbGVuID0gcGFyc2VfZW1haWwobWFwLCBzaXplKTsKLQkJYXNzZXJ0KGxlbiA8PSBzaXplKTsKLQkJc3ByaW50ZihuYW1lLCAiJTA0ZCIsICsrbnIpOwotCQlmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjAwKTsKLQkJaWYgKGZkIDwgMCkgewotCQkJcGVycm9yKG5hbWUpOworCisJCXNwcmludGYobmFtZSwgIiUwKmQiLCBucl9wcmVjLCArK25yKTsKKwkJc3dpdGNoIChzcGxpdF9vbmUobWJveCwgbmFtZSkpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXByaW50ZigiJWRcbiIsIG5yKTsKKwkJCXJldHVybiAwOworCQlkZWZhdWx0OgogCQkJZXhpdCgxKTsKIAkJfQotCQlpZiAod3JpdGUoZmQsIG1hcCwgbGVuKSAhPSBsZW4pIHsKLQkJCXBlcnJvcigid3JpdGUiKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJY2xvc2UoZmQpOwotCQltYXAgKz0gbGVuOwotCQlzaXplIC09IGxlbjsKLQl9IHdoaWxlIChzaXplID4gMCk7Ci0JcmV0dXJuIDA7CisJfQogfQpkaWZmIC0tZ2l0IGEvbW96aWxsYS1zaGExL3NoYTEuYyBiL21vemlsbGEtc2hhMS9zaGExLmMKaW5kZXggN2Y2ZmMwNS4uODQ3NTMxZCAxMDA2NDQKLS0tIGEvbW96aWxsYS1zaGExL3NoYTEuYworKysgYi9tb3ppbGxhLXNoYTEvc2hhMS5jCkBAIC01Niw4ICs1Niw4IEBACiB9CiAKIAotdm9pZCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjdHgsIHZvaWQgKl9kYXRhSW4sIGludCBsZW4pIHsKLSAgdW5zaWduZWQgY2hhciAqZGF0YUluID0gX2RhdGFJbjsKK3ZvaWQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqY3R4LCBjb25zdCB2b2lkICpfZGF0YUluLCBpbnQgbGVuKSB7CisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGFJbiA9IF9kYXRhSW47CiAgIGludCBpOwogCiAgIC8qIFJlYWQgdGhlIGRhdGEgaW50byBXIGFuZCBwcm9jZXNzIGJsb2NrcyBhcyB0aGV5IGdldCBmdWxsCmRpZmYgLS1naXQgYS9tb3ppbGxhLXNoYTEvc2hhMS5oIGIvbW96aWxsYS1zaGExL3NoYTEuaAppbmRleCBmNWRlY2JmLi41ZDgyYWZhIDEwMDY0NAotLS0gYS9tb3ppbGxhLXNoYTEvc2hhMS5oCisrKyBiL21vemlsbGEtc2hhMS9zaGExLmgKQEAgLTQxLDUgKzQxLDUgQEAKIH0gU0hBX0NUWDsKIAogdm9pZCBTSEExX0luaXQoU0hBX0NUWCAqY3R4KTsKLXZvaWQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqY3R4LCB2b2lkICpkYXRhSW4sIGludCBsZW4pOwordm9pZCBTSEExX1VwZGF0ZShTSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGFJbiwgaW50IGxlbik7CiB2b2lkIFNIQTFfRmluYWwodW5zaWduZWQgY2hhciBoYXNob3V0WzIwXSwgU0hBX0NUWCAqY3R4KTsKZGlmZiAtLWdpdCBhL25hbWUtcmV2LmMgYi9uYW1lLXJldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MTk0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9uYW1lLXJldi5jCkBAIC0wLDAgKzEsMjQ2IEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfcmV2X3VzYWdlW10gPQorCSJnaXQtbmFtZS1yZXYgWy0tdGFnc10gKCAtLWFsbCB8IC0tc3RkaW4gfCBjb21taXRpc2ggW2NvbW1pdGlzaC4uLl0gKVxuIjsKKwordHlwZWRlZiBzdHJ1Y3QgcmV2X25hbWUgeworCWNvbnN0IGNoYXIgKnRpcF9uYW1lOworCWludCBtZXJnZV90cmF2ZXJzYWxzOworCWludCBnZW5lcmF0aW9uOworfSByZXZfbmFtZTsKKworc3RhdGljIGxvbmcgY3V0b2ZmID0gTE9OR19NQVg7CisKK3N0YXRpYyB2b2lkIG5hbWVfcmV2KHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJY29uc3QgY2hhciAqdGlwX25hbWUsIGludCBtZXJnZV90cmF2ZXJzYWxzLCBpbnQgZ2VuZXJhdGlvbiwKKwkJaW50IGRlcmVmKQoreworCXN0cnVjdCByZXZfbmFtZSAqbmFtZSA9IChzdHJ1Y3QgcmV2X25hbWUgKiljb21taXQtPm9iamVjdC51dGlsOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlpbnQgcGFyZW50X251bWJlciA9IDA7CisKKwlpZiAoIWNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisKKwlpZiAoY29tbWl0LT5kYXRlIDwgY3V0b2ZmKQorCQlyZXR1cm47CisKKwlpZiAoZGVyZWYpIHsKKwkJY2hhciAqbmV3X25hbWUgPSB4bWFsbG9jKHN0cmxlbih0aXBfbmFtZSkrMyk7CisJCXN0cmNweShuZXdfbmFtZSwgdGlwX25hbWUpOworCQlzdHJjYXQobmV3X25hbWUsICJeMCIpOworCQl0aXBfbmFtZSA9IG5ld19uYW1lOworCisJCWlmIChnZW5lcmF0aW9uKQorCQkJZGllKCJnZW5lcmF0aW9uOiAlZCwgYnV0IGRlcmVmPyIsIGdlbmVyYXRpb24pOworCX0KKworCWlmIChuYW1lID09IE5VTEwpIHsKKwkJbmFtZSA9IHhtYWxsb2Moc2l6ZW9mKHJldl9uYW1lKSk7CisJCWNvbW1pdC0+b2JqZWN0LnV0aWwgPSBuYW1lOworCQlnb3RvIGNvcHlfZGF0YTsKKwl9IGVsc2UgaWYgKG5hbWUtPm1lcmdlX3RyYXZlcnNhbHMgPiBtZXJnZV90cmF2ZXJzYWxzIHx8CisJCQkobmFtZS0+bWVyZ2VfdHJhdmVyc2FscyA9PSBtZXJnZV90cmF2ZXJzYWxzICYmCisJCQkgbmFtZS0+Z2VuZXJhdGlvbiA+IGdlbmVyYXRpb24pKSB7Citjb3B5X2RhdGE6CisJCW5hbWUtPnRpcF9uYW1lID0gdGlwX25hbWU7CisJCW5hbWUtPm1lcmdlX3RyYXZlcnNhbHMgPSBtZXJnZV90cmF2ZXJzYWxzOworCQluYW1lLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkJcGFyZW50czsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0LCBwYXJlbnRfbnVtYmVyKyspIHsKKwkJaWYgKHBhcmVudF9udW1iZXIgPiAwKSB7CisJCQljaGFyICpuZXdfbmFtZSA9IHhtYWxsb2Moc3RybGVuKHRpcF9uYW1lKSs4KTsKKworCQkJaWYgKGdlbmVyYXRpb24gPiAwKQorCQkJCXNwcmludGYobmV3X25hbWUsICIlc34lZF4lZCIsIHRpcF9uYW1lLAorCQkJCQkJZ2VuZXJhdGlvbiwgcGFyZW50X251bWJlcik7CisJCQllbHNlCisJCQkJc3ByaW50ZihuZXdfbmFtZSwgIiVzXiVkIiwgdGlwX25hbWUsIHBhcmVudF9udW1iZXIpOworCisJCQluYW1lX3JldihwYXJlbnRzLT5pdGVtLCBuZXdfbmFtZSwKKwkJCQltZXJnZV90cmF2ZXJzYWxzICsgMSAsIDAsIDApOworCQl9IGVsc2UgeworCQkJbmFtZV9yZXYocGFyZW50cy0+aXRlbSwgdGlwX25hbWUsIG1lcmdlX3RyYXZlcnNhbHMsCisJCQkJZ2VuZXJhdGlvbiArIDEsIDApOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHRhZ3Nfb25seSA9IDA7CisKK3N0YXRpYyBpbnQgbmFtZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWludCBkZXJlZiA9IDA7CisKKwlpZiAodGFnc19vbmx5ICYmIHN0cm5jbXAocGF0aCwgInJlZnMvdGFncy8iLCAxMCkpCisJCXJldHVybiAwOworCisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSB0YWdfdHlwZSkgeworCQlzdHJ1Y3QgdGFnICp0ID0gKHN0cnVjdCB0YWcgKikgbzsKKwkJaWYgKCF0LT50YWdnZWQpCisJCQlicmVhazsgLyogYnJva2VuIHJlcG9zaXRvcnkgKi8KKwkJbyA9IHBhcnNlX29iamVjdCh0LT50YWdnZWQtPnNoYTEpOworCQlkZXJlZiA9IDE7CisJfQorCWlmIChvICYmIG8tPnR5cGUgPT0gY29tbWl0X3R5cGUpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQljb25zdCBjaGFyICpwOworCisJCXdoaWxlICgocCA9IHN0cmNocihwYXRoLCAnLycpKSkKKwkJCXBhdGggPSBwKzE7CisKKwkJbmFtZV9yZXYoY29tbWl0LCBzdHJkdXAocGF0aCksIDAsIDAsIGRlcmVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgYSBzdGF0aWMgYnVmZmVyICovCitzdGF0aWMgY29uc3QgY2hhciogZ2V0X3Jldl9uYW1lKHN0cnVjdCBvYmplY3QgKm8pCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzEwMjRdOworCXN0cnVjdCByZXZfbmFtZSAqbiA9IChzdHJ1Y3QgcmV2X25hbWUgKilvLT51dGlsOworCWlmICghbikKKwkJcmV0dXJuICJ1bmRlZmluZWQiOworCisJaWYgKCFuLT5nZW5lcmF0aW9uKQorCQlyZXR1cm4gbi0+dGlwX25hbWU7CisKKwlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXN+JWQiLCBuLT50aXBfbmFtZSwgbi0+Z2VuZXJhdGlvbik7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBvYmplY3RfbGlzdCAqcmV2cyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9saXN0ICoqd2Fsa2VyID0gJnJldnM7CisJaW50IGFzX2lzID0gMCwgYWxsID0gMCwgdHJhbnNmb3JtX3N0ZGluID0gMDsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2UobmFtZV9yZXZfdXNhZ2UpOworCisJZm9yICgtLWFyZ2MsICsrYXJndjsgYXJnYzsgLS1hcmdjLCArK2FyZ3YpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdCAqbzsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWlmICghYXNfaXMgJiYgKCphcmd2KVswXSA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKCphcmd2LCAiLS0iKSkgeworCQkJCWFzX2lzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgIi0tdGFncyIpKSB7CisJCQkJdGFnc19vbmx5ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCgqYXJndiwgIi0tYWxsIikpIHsKKwkJCQlpZiAoYXJnYyA+IDEpCisJCQkJCWRpZSgiU3BlY2lmeSBlaXRoZXIgYSBsaXN0LCBvciAtLWFsbCwgbm90IGJvdGghIik7CisJCQkJYWxsID0gMTsKKwkJCQljdXRvZmYgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICghc3RyY21wKCphcmd2LCAiLS1zdGRpbiIpKSB7CisJCQkJaWYgKGFyZ2MgPiAxKQorCQkJCQlkaWUoIlNwZWNpZnkgZWl0aGVyIGEgbGlzdCwgb3IgLS1zdGRpbiwgbm90IGJvdGghIik7CisJCQkJdHJhbnNmb3JtX3N0ZGluID0gMTsKKwkJCQljdXRvZmYgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJdXNhZ2UobmFtZV9yZXZfdXNhZ2UpOworCQl9CisKKwkJaWYgKGdldF9zaGExKCphcmd2LCBzaGExKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgZ2V0IHNoYTEgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksICphcmd2LCAwKTsKKwkJaWYgKCFvIHx8IG8tPnR5cGUgIT0gY29tbWl0X3R5cGUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGdldCBjb21taXQgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCisJCWlmIChjdXRvZmYgPiBjb21taXQtPmRhdGUpCisJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CisKKwkJb2JqZWN0X2xpc3RfYXBwZW5kKChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0LCB3YWxrZXIpOworCQkoKndhbGtlciktPm5hbWUgPSAqYXJndjsKKwkJd2Fsa2VyID0gJigoKndhbGtlciktPm5leHQpOworCX0KKworCWZvcl9lYWNoX3JlZihuYW1lX3JlZik7CisKKwlpZiAodHJhbnNmb3JtX3N0ZGluKSB7CisJCWNoYXIgYnVmZmVyWzIwNDhdOworCQljaGFyICpwLCAqcF9zdGFydDsKKworCQl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7CisJCQlpbnQgZm9ydHkgPSAwOworCQkJcCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKwkJCWlmICghcCkKKwkJCQlicmVhazsKKworCQkJZm9yIChwX3N0YXJ0ID0gcDsgKnA7IHArKykgeworI2RlZmluZSBpc2hleCh4KSAoaXNkaWdpdCgoeCkpIHx8ICgoeCkgPj0gJ2EnICYmICh4KSA8PSAnZicpKQorCQkJCWlmICghaXNoZXgoKnApKQorCQkJCQlmb3J0eSA9IDA7CisJCQkJZWxzZSBpZiAoKytmb3J0eSA9PSA0MCAmJgorCQkJCQkJIWlzaGV4KCoocCsxKSkpIHsKKwkJCQkJdW5zaWduZWQgY2hhciBzaGExWzQwXTsKKwkJCQkJY29uc3QgY2hhciAqbmFtZSA9ICJ1bmRlZmluZWQiOworCQkJCQljaGFyIGMgPSAqKHArMSk7CisKKwkJCQkJZm9ydHkgPSAwOworCisJCQkJCSoocCsxKSA9IDA7CisJCQkJCWlmICghZ2V0X3NoYTEocCAtIDM5LCBzaGExKSkgeworCQkJCQkJc3RydWN0IG9iamVjdCAqbyA9CisJCQkJCQkJbG9va3VwX29iamVjdChzaGExKTsKKwkJCQkJCWlmIChvKQorCQkJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobyk7CisJCQkJCX0KKwkJCQkJKihwKzEpID0gYzsKKworCQkJCQlpZiAoIXN0cmNtcChuYW1lLCAidW5kZWZpbmVkIikpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlmd3JpdGUocF9zdGFydCwgcCAtIHBfc3RhcnQsIDEsIHN0ZG91dCk7CisJCQkJCWZwdXRjKCcoJywgc3Rkb3V0KTsKKwkJCQkJZnB1dHMobmFtZSwgc3Rkb3V0KTsKKwkJCQkJZnB1dGMoJyknLCBzdGRvdXQpOworCQkJCQlwX3N0YXJ0ID0gcCArIDE7CisJCQkJfQorCQkJfQorCisJCQkvKiBmbHVzaCAqLworCQkJaWYgKHBfc3RhcnQgIT0gcCkKKwkJCQlmd3JpdGUocF9zdGFydCwgcCAtIHBfc3RhcnQsIDEsIHN0ZG91dCk7CisJCX0KKwl9IGVsc2UgaWYgKGFsbCkgeworCQlleHRlcm4gc3RydWN0IG9iamVjdCAqKm9ianM7CisJCWV4dGVybiBpbnQgbnJfb2JqczsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IG5yX29ianM7IGkrKykKKwkJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KG9ianNbaV0tPnNoYTEpLAorCQkJCQlnZXRfcmV2X25hbWUob2Jqc1tpXSkpOworCX0gZWxzZQorCQlmb3IgKCA7IHJldnM7IHJldnMgPSByZXZzLT5uZXh0KQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgcmV2cy0+bmFtZSwgZ2V0X3Jldl9uYW1lKHJldnMtPml0ZW0pKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9wYWNrLW9iamVjdHMuYyBiL3BhY2stb2JqZWN0cy5jCmluZGV4IDNkNjIyNzguLjRlOTQxZTcgMTAwNjQ0Ci0tLSBhL3BhY2stb2JqZWN0cy5jCisrKyBiL3BhY2stb2JqZWN0cy5jCkBAIC0xLDExICsxLDEwIEBACi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgImRlbHRhLmgiCiAjaW5jbHVkZSAicGFjay5oIgogI2luY2x1ZGUgImNzdW0tZmlsZS5oIgogCi1zdGF0aWMgY29uc3QgY2hhciBwYWNrX3VzYWdlW10gPSAiZ2l0LXBhY2stb2JqZWN0cyBbLS1pbmNyZW1lbnRhbF0gWy0td2luZG93PU5dIFstLWRlcHRoPU5dIHstLXN0ZG91dCB8IGJhc2UtbmFtZX0gPCBvYmplY3QtbGlzdCI7CitzdGF0aWMgY29uc3QgY2hhciBwYWNrX3VzYWdlW10gPSAiZ2l0LXBhY2stb2JqZWN0cyBbLS1sb2NhbF0gWy0taW5jcmVtZW50YWxdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXSB7LS1zdGRvdXQgfCBiYXNlLW5hbWV9IDwgb2JqZWN0LWxpc3QiOwogCiBzdHJ1Y3Qgb2JqZWN0X2VudHJ5IHsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwpAQCAtMjAsNiArMTksNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBvYmplY3RfbGlzdF9zaGExWzIwXTsKIHN0YXRpYyBpbnQgbm9uX2VtcHR5ID0gMDsKK3N0YXRpYyBpbnQgbG9jYWwgPSAwOwogc3RhdGljIGludCBpbmNyZW1lbnRhbCA9IDA7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqKnNvcnRlZF9ieV9zaGEsICoqc29ydGVkX2J5X3R5cGU7CiBzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0cyA9IE5VTEw7CkBAIC0xOTUsOCArMTk1LDIwIEBACiAJdW5zaWduZWQgaW50IGlkeCA9IG5yX29iamVjdHM7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CiAKLQlpZiAoaW5jcmVtZW50YWwgJiYgaGFzX3NoYTFfcGFjayhzaGExKSkKLQkJcmV0dXJuIDA7CisJaWYgKGluY3JlbWVudGFsIHx8IGxvY2FsKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlzdHJ1Y3QgcGFja19lbnRyeSBlOworCisJCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCAmZSwgcCkpIHsKKwkJCQlpZiAoaW5jcmVtZW50YWwpCisJCQkJCXJldHVybiAwOworCQkJCWlmIChsb2NhbCAmJiAhcC0+cGFja19sb2NhbCkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CiAKIAlpZiAoaWR4ID49IG5yX2FsbG9jKSB7CiAJCXVuc2lnbmVkIGludCBuZWVkZWQgPSAoaWR4ICsgMTAyNCkgKiAzIC8gMjsKQEAgLTM4OCwxMSArNDAwLDc3IEBACiAJZnJlZShhcnJheSk7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFjayhpbnQgd2luZG93LCBpbnQgZGVwdGgpCit7CisJZ2V0X29iamVjdF9kZXRhaWxzKCk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlBhY2tpbmcgJWQgb2JqZWN0c1xuIiwgbnJfb2JqZWN0cyk7CisKKwlzb3J0ZWRfYnlfdHlwZSA9IGNyZWF0ZV9zb3J0ZWRfbGlzdCh0eXBlX3NpemVfc29ydCk7CisJaWYgKHdpbmRvdyAmJiBkZXB0aCkKKwkJZmluZF9kZWx0YXMoc29ydGVkX2J5X3R5cGUsIHdpbmRvdysxLCBkZXB0aCk7CisJd3JpdGVfcGFja19maWxlKCk7Cit9CisKK3N0YXRpYyBpbnQgcmV1c2VfY2FjaGVkX3BhY2sodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHBhY2tfdG9fc3Rkb3V0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIGNhY2hlW10gPSAicGFjay1jYWNoZS9wYWNrLSVzLiVzIjsKKwljaGFyICpjYWNoZWRfcGFjaywgKmNhY2hlZF9pZHg7CisJaW50IGlmZCwgb2ZkLCBpZmRfaXggPSAtMTsKKworCWNhY2hlZF9wYWNrID0gZ2l0X3BhdGgoY2FjaGUsIHNoYTFfdG9faGV4KHNoYTEpLCAicGFjayIpOworCWlmZCA9IG9wZW4oY2FjaGVkX3BhY2ssIE9fUkRPTkxZKTsKKwlpZiAoaWZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBhY2tfdG9fc3Rkb3V0KSB7CisJCWNhY2hlZF9pZHggPSBnaXRfcGF0aChjYWNoZSwgc2hhMV90b19oZXgoc2hhMSksICJpZHgiKTsKKwkJaWZkX2l4ID0gb3BlbihjYWNoZWRfaWR4LCBPX1JET05MWSk7CisJCWlmIChpZmRfaXggPCAwKSB7CisJCQljbG9zZShpZmQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgIlJldXNpbmcgJWQgb2JqZWN0cyBwYWNrICVzXG4iLCBucl9vYmplY3RzLAorCQlzaGExX3RvX2hleChzaGExKSk7CisKKwlpZiAocGFja190b19zdGRvdXQpIHsKKwkJaWYgKGNvcHlfZmQoaWZkLCAxKSkKKwkJCWV4aXQoMSk7CisJCWNsb3NlKGlmZCk7CisJfQorCWVsc2UgeworCQljaGFyIG5hbWVbUEFUSF9NQVhdOworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCisJCQkgIiVzLSVzLiVzIiwgYmFzZV9uYW1lLCBzaGExX3RvX2hleChzaGExKSwgInBhY2siKTsKKwkJb2ZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOworCQlpZiAob2ZkIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIG9wZW4gJXMgKCVzKSIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChjb3B5X2ZkKGlmZCwgb2ZkKSkKKwkJCWV4aXQoMSk7CisJCWNsb3NlKGlmZCk7CisKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAorCQkJICIlcy0lcy4lcyIsIGJhc2VfbmFtZSwgc2hhMV90b19oZXgoc2hhMSksICJpZHgiKTsKKwkJb2ZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOworCQlpZiAob2ZkIDwgMCkKKwkJCWRpZSgidW5hYmxlIHRvIG9wZW4gJXMgKCVzKSIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChjb3B5X2ZkKGlmZF9peCwgb2ZkKSkKKwkJCWV4aXQoMSk7CisJCWNsb3NlKGlmZF9peCk7CisJCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCXJldHVybiAxOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJU0hBX0NUWCBjdHg7CiAJY2hhciBsaW5lW1BBVEhfTUFYICsgMjBdOwogCWludCB3aW5kb3cgPSAxMCwgZGVwdGggPSAxMCwgcGFja190b19zdGRvdXQgPSAwOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0OwogCWludCBpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewpAQCAtNDAzLDYgKzQ4MSwxMCBAQAogCQkJCW5vbl9lbXB0eSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1sb2NhbCIsIGFyZykpIHsKKwkJCQlsb2NhbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcCgiLS1pbmNyZW1lbnRhbCIsIGFyZykpIHsKIAkJCQlpbmNyZW1lbnRhbCA9IDE7CiAJCQkJY29udGludWU7CkBAIC00MzUsNyArNTE3LDcgQEAKIAlpZiAocGFja190b19zdGRvdXQgIT0gIWJhc2VfbmFtZSkKIAkJdXNhZ2UocGFja191c2FnZSk7CiAKLQlTSEExX0luaXQoJmN0eCk7CisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CiAJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IGhhc2g7CiAJCWNoYXIgKnA7CkBAIC00NTEsMjUgKzUzMywyOCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaGFzaCA9IGhhc2ggKiAxMSArIGM7CiAJCX0KLQkJaWYgKGFkZF9vYmplY3RfZW50cnkoc2hhMSwgaGFzaCkpCi0JCQlTSEExX1VwZGF0ZSgmY3R4LCBzaGExLCAyMCk7CisJCWFkZF9vYmplY3RfZW50cnkoc2hhMSwgaGFzaCk7CiAJfQotCVNIQTFfRmluYWwob2JqZWN0X2xpc3Rfc2hhMSwgJmN0eCk7CiAJaWYgKG5vbl9lbXB0eSAmJiAhbnJfb2JqZWN0cykKIAkJcmV0dXJuIDA7Ci0JZ2V0X29iamVjdF9kZXRhaWxzKCk7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIlBhY2tpbmcgJWQgb2JqZWN0c1xuIiwgbnJfb2JqZWN0cyk7CiAKIAlzb3J0ZWRfYnlfc2hhID0gY3JlYXRlX3NvcnRlZF9saXN0KHNoYTFfc29ydCk7Ci0Jc29ydGVkX2J5X3R5cGUgPSBjcmVhdGVfc29ydGVkX2xpc3QodHlwZV9zaXplX3NvcnQpOwotCWlmICh3aW5kb3cgJiYgZGVwdGgpCi0JCWZpbmRfZGVsdGFzKHNvcnRlZF9ieV90eXBlLCB3aW5kb3crMSwgZGVwdGgpOworCVNIQTFfSW5pdCgmY3R4KTsKKwlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKmxpc3QrKzsKKwkJU0hBMV9VcGRhdGUoJmN0eCwgZW50cnktPnNoYTEsIDIwKTsKKwl9CisJU0hBMV9GaW5hbChvYmplY3RfbGlzdF9zaGExLCAmY3R4KTsKIAotCXdyaXRlX3BhY2tfZmlsZSgpOwotCWlmICghcGFja190b19zdGRvdXQpIHsKLQkJd3JpdGVfaW5kZXhfZmlsZSgpOwotCQlwdXRzKHNoYTFfdG9faGV4KG9iamVjdF9saXN0X3NoYTEpKTsKKwlpZiAocmV1c2VfY2FjaGVkX3BhY2sob2JqZWN0X2xpc3Rfc2hhMSwgcGFja190b19zdGRvdXQpKQorCQk7CisJZWxzZSB7CisJCXByZXBhcmVfcGFjayh3aW5kb3csIGRlcHRoKTsKKwkJaWYgKCFwYWNrX3RvX3N0ZG91dCkgeworCQkJd3JpdGVfaW5kZXhfZmlsZSgpOworCQkJcHV0cyhzaGExX3RvX2hleChvYmplY3RfbGlzdF9zaGExKSk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9wYXRjaC1pZC5jIGIvcGF0Y2gtaWQuYwppbmRleCA1YThkYzc1Li5lZGJjNGFhIDEwMDY0NAotLS0gYS9wYXRjaC1pZC5jCisrKyBiL3BhdGNoLWlkLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlICJjYWNoZS5oIgogCiBzdGF0aWMgdm9pZCBmbHVzaF9jdXJyZW50X2lkKGludCBwYXRjaGxlbiwgdW5zaWduZWQgY2hhciAqaWQsIFNIQV9DVFggKmMpCkBAIC01NSw2ICs1NCwxMCBAQAogCQlpZiAoIXBhdGNobGVuICYmIG1lbWNtcChsaW5lLCAiZGlmZiAiLCA1KSkKIAkJCWNvbnRpbnVlOwogCisJCS8qIElnbm9yZSBnaXQtZGlmZiBpbmRleCBoZWFkZXIgKi8KKwkJaWYgKCFtZW1jbXAobGluZSwgImluZGV4ICIsIDYpKQorCQkJY29udGludWU7CisKIAkJLyogSWdub3JlIGxpbmUgbnVtYmVycyB3aGVuIGNvbXB1dGluZyB0aGUgU0hBMSBvZiB0aGUgcGF0Y2ggKi8KIAkJaWYgKCFtZW1jbXAobGluZSwgIkBAIC0iLCA0KSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvcGF0aC5jIGIvcGF0aC5jCmluZGV4IGY3ODgwMjguLjQ5NWQxN2MgMTAwNjQ0Ci0tLSBhL3BhdGguYworKysgYi9wYXRoLmMKQEAgLTQxLDEyICs0MSwxMCBAQAogCiBjaGFyICpnaXRfcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbnN0IGNoYXIgKmdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOwogCXZhX2xpc3QgYXJnczsKIAl1bnNpZ25lZCBsZW47CiAKLQlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2RpcikgZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKIAlsZW4gPSBzdHJsZW4oZ2l0X2Rpcik7CiAJaWYgKGxlbiA+IFBBVEhfTUFYLTEwMCkKIAkJcmV0dXJuIGJhZF9wYXRoOwpkaWZmIC0tZ2l0IGEvcGVlay1yZW1vdGUuYyBiL3BlZWstcmVtb3RlLmMKaW5kZXggNGIxZDBkNS4uZWU0OWJmMyAxMDA2NDQKLS0tIGEvcGVlay1yZW1vdGUuYworKysgYi9wZWVrLXJlbW90ZS5jCkBAIC0xMSw3ICsxMSw3IEBACiB7CiAJc3RydWN0IHJlZiAqcmVmOwogCi0JZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgJnJlZiwgMCwgTlVMTCk7CisJZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgJnJlZiwgMCwgTlVMTCwgMCk7CiAJcGFja2V0X2ZsdXNoKGZkWzFdKTsKIAogCXdoaWxlIChyZWYpIHsKZGlmZiAtLWdpdCBhL3BydW5lLXBhY2tlZC5jIGIvcHJ1bmUtcGFja2VkLmMKaW5kZXggNTMwNmU4ZS4uMjYxMjNmNyAxMDA2NDQKLS0tIGEvcHJ1bmUtcGFja2VkLmMKKysrIGIvcHJ1bmUtcGFja2VkLmMKQEAgLTI2LDYgKzI2LDggQEAKIAkJZWxzZSBpZiAodW5saW5rKHBhdGhuYW1lKSA8IDApCiAJCQllcnJvcigidW5hYmxlIHRvIHVubGluayAlcyIsIHBhdGhuYW1lKTsKIAl9CisJcGF0aG5hbWVbbGVuXSA9IDA7CisJcm1kaXIocGF0aG5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBwcnVuZV9wYWNrZWRfb2JqZWN0cyh2b2lkKQpAQCAtNDYsNyArNDgsNyBAQAogCQlzcHJpbnRmKHBhdGhuYW1lICsgbGVuLCAiJTAyeC8iLCBpKTsKIAkJZCA9IG9wZW5kaXIocGF0aG5hbWUpOwogCQlpZiAoIWQpCi0JCQlkaWUoInVuYWJsZSB0byBvcGVuICVzIiwgcGF0aG5hbWUpOworCQkJY29udGludWU7CiAJCXBydW5lX2RpcihpLCBkLCBwYXRobmFtZSwgbGVuICsgMyk7CiAJCWNsb3NlZGlyKGQpOwogCX0KQEAgLTY5LDYgKzcxLDcgQEAKIAkJLyogSGFuZGxlIGFyZ3VtZW50cyBoZXJlIC4uICovCiAJCXVzYWdlKHBydW5lX3BhY2tlZF91c2FnZSk7CiAJfQorCXN5bmMoKTsKIAlwcnVuZV9wYWNrZWRfb2JqZWN0cygpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKaW5kZXggNWU2ZmRhMy4uZTY2MmE3ZCAxMDA2NDQKLS0tIGEvcXVvdGUuYworKysgYi9xdW90ZS5jCkBAIC0yLDQwICsyLDI1NiBAQAogI2luY2x1ZGUgInF1b3RlLmgiCiAKIC8qIEhlbHAgdG8gY29weSB0aGUgdGhpbmcgcHJvcGVybHkgcXVvdGVkIGZvciB0aGUgc2hlbGwgc2FmZXR5LgotICogYW55IHNpbmdsZSBxdW90ZSBpcyByZXBsYWNlZCB3aXRoICdcJycsIGFuZCB0aGUgY2FsbGVyIGlzCi0gKiBleHBlY3RlZCB0byBlbmNsb3NlIHRoZSByZXN1bHQgd2l0aGluIGEgc2luZ2xlIHF1b3RlIHBhaXIuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQogICoKICAqIEUuZy4KICAqICBvcmlnaW5hbCAgICAgc3FfcXVvdGUgICAgIHJlc3VsdAogICogIG5hbWUgICAgID09PiBuYW1lICAgICAgPT0+ICduYW1lJwogICogIGEgYiAgICAgID09PiBhIGIgICAgICAgPT0+ICdhIGInCiAgKiAgYSdiICAgICAgPT0+IGEnXCcnYiAgICA9PT4gJ2EnXCcnYicKKyAqICBhIWIgICAgICA9PT4gYSdcISdiICAgID09PiAnYSdcISdiJwogICovCi1jaGFyICpzcV9xdW90ZShjb25zdCBjaGFyICpzcmMpCisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKHgpICggKCsrbGVuIDwgbikgJiYgKCpicCsrID0gKHgpKSApCisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfYnNfcXVvdGUoY2hhciBjKQogewotCXN0YXRpYyBjaGFyICpidWYgPSBOVUxMOwotCWludCBjbnQsIGM7Ci0JY29uc3QgY2hhciAqY3A7Ci0JY2hhciAqYnA7CisJcmV0dXJuIChjID09ICdcJycgfHwgYyA9PSAnIScpOworfQogCi0JLyogY291bnQgYnl0ZXMgbmVlZGVkIHRvIHN0b3JlIHRoZSBxdW90ZWQgc3RyaW5nLiAqLwotCWZvciAoY250ID0gMywgY3AgPSBzcmM7ICpjcDsgY250KyssIGNwKyspCi0JCWlmICgqY3AgPT0gJ1wnJykKLQkJCWNudCArPSAzOworc2l6ZV90IHNxX3F1b3RlX2J1ZihjaGFyICpkc3QsIHNpemVfdCBuLCBjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciBjOworCWNoYXIgKmJwID0gZHN0OworCXNpemVfdCBsZW4gPSAwOwogCi0JYnVmID0geG1hbGxvYyhjbnQpOwotCWJwID0gYnVmOwotCSpicCsrID0gJ1wnJzsKKwlFTUlUKCdcJycpOwogCXdoaWxlICgoYyA9ICpzcmMrKykpIHsKLQkJaWYgKGMgIT0gJ1wnJykKLQkJCSpicCsrID0gYzsKLQkJZWxzZSB7Ci0JCQlicCA9IHN0cmNweShicCwgIidcXCcnIik7Ci0JCQlicCArPSA0OworCQlpZiAobmVlZF9ic19xdW90ZShjKSkgeworCQkJRU1JVCgnXCcnKTsKKwkJCUVNSVQoJ1xcJyk7CisJCQlFTUlUKGMpOworCQkJRU1JVCgnXCcnKTsKKwkJfSBlbHNlIHsKKwkJCUVNSVQoYyk7CiAJCX0KIAl9Ci0JKmJwKysgPSAnXCcnOwotCSpicCA9IDA7CisJRU1JVCgnXCcnKTsKKworCWlmICggbiApCisJCSpicCA9IDA7CisKKwlyZXR1cm4gbGVuOworfQorCitjaGFyICpzcV9xdW90ZShjb25zdCBjaGFyICpzcmMpCit7CisJY2hhciAqYnVmOworCXNpemVfdCBjbnQ7CisKKwljbnQgPSBzcV9xdW90ZV9idWYoTlVMTCwgMCwgc3JjKSArIDE7CisJYnVmID0geG1hbGxvYyhjbnQpOworCXNxX3F1b3RlX2J1ZihidWYsIGNudCwgc3JjKTsKKwogCXJldHVybiBidWY7CiB9CiAKK2NoYXIgKnNxX2RlcXVvdGUoY2hhciAqYXJnKQoreworCWNoYXIgKmRzdCA9IGFyZzsKKwljaGFyICpzcmMgPSBhcmc7CisJY2hhciBjOworCisJaWYgKCpzcmMgIT0gJ1wnJykKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7OykgeworCQljID0gKisrc3JjOworCQlpZiAoIWMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgIT0gJ1wnJykgeworCQkJKmRzdCsrID0gYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdlIHN0ZXBwZWQgb3V0IG9mIHNxICovCisJCXN3aXRjaCAoKisrc3JjKSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpkc3QgPSAwOworCQkJcmV0dXJuIGFyZzsKKwkJY2FzZSAnXFwnOgorCQkJYyA9ICorK3NyYzsKKwkJCWlmIChuZWVkX2JzX3F1b3RlKGMpICYmICorK3NyYyA9PSAnXCcnKSB7CisJCQkJKmRzdCsrID0gYzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJLyogRmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorfQorCisvKgorICogQy1zdHlsZSBuYW1lIHF1b3RpbmcuCisgKgorICogRG9lcyBvbmUgb2YgdGhyZWUgdGhpbmdzOgorICoKKyAqICgxKSBpZiBvdXRidWYgYW5kIG91dGZwIGFyZSBib3RoIE5VTEwsIGluc3BlY3QgdGhlIGlucHV0IG5hbWUgYW5kCisgKiAgICAgY291bnRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgbmVlZGVkIHRvIGhvbGQgY19zdHlsZQorICogICAgIHF1b3RlZCB2ZXJzaW9uIG9mIG5hbWUsIGNvdW50aW5nIHRoZSBkb3VibGUgcXVvdGVzIGFyb3VuZAorICogICAgIGl0IGJ1dCBub3QgdGVybWluYXRpbmcgTlVMLCBhbmQgcmV0dXJucyBpdC4gIEhvd2V2ZXIsIGlmIG5hbWUKKyAqICAgICBkb2VzIG5vdCBuZWVkIGNfc3R5bGUgcXVvdGluZywgaXQgcmV0dXJucyAwLgorICoKKyAqICgyKSBpZiBvdXRidWYgaXMgbm90IE5VTEwsIGl0IG11c3QgcG9pbnQgYXQgYSBidWZmZXIgbGFyZ2UgZW5vdWdoCisgKiAgICAgdG8gaG9sZCB0aGUgY19zdHlsZSBxdW90ZWQgdmVyc2lvbiBvZiBuYW1lLCBlbmNsb3NpbmcgZG91YmxlCisgKiAgICAgcXVvdGVzLCBhbmQgdGVybWluYXRpbmcgTlVMLiAgRmlsbHMgb3V0YnVmIHdpdGggY19zdHlsZSBxdW90ZWQKKyAqICAgICB2ZXJzaW9uIG9mIG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlLXF1b3RlIHBhaXIuICBSZXR1cm4gdmFsdWUKKyAqICAgICBpcyB1bmRlZmluZWQuCisgKgorICogKDMpIGlmIG91dGZwIGlzIG5vdCBOVUxMLCBvdXRwdXRzIGNfc3R5bGUgcXVvdGVkIHZlcnNpb24gb2YgbmFtZSwKKyAqICAgICBidXQgbm90IGVuY2xvc2VkIGluIGRvdWJsZS1xdW90ZSBwYWlyLiAgUmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAqLworCitpbnQgcXVvdGVfY19zdHlsZShjb25zdCBjaGFyICpuYW1lLCBjaGFyICpvdXRidWYsIEZJTEUgKm91dGZwLCBpbnQgbm9fZHEpCit7CisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKGMpIFwKKwkob3V0YnVmID8gKCpvdXRidWYrKyA9IChjKSkgOiBvdXRmcCA/IGZwdXRjKGMsIG91dGZwKSA6IChjb3VudCsrKSkKKworI2RlZmluZSBFTUlUUSgpIEVNSVQoJ1xcJykKKworCWNvbnN0IGNoYXIgKnNwOworCWludCBjaCwgY291bnQgPSAwLCBuZWVkcXVvdGUgPSAwOworCisJaWYgKCFub19kcSkKKwkJRU1JVCgnIicpOworCWZvciAoc3AgPSBuYW1lOyAoY2ggPSAqc3ArKyk7ICkgeworCisJCWlmICgoY2ggPCAnICcpIHx8IChjaCA9PSAnIicpIHx8IChjaCA9PSAnXFwnKSB8fAorCQkgICAgKGNoID09IDAxNzcpKSB7CisJCQluZWVkcXVvdGUgPSAxOworCQkJc3dpdGNoIChjaCkgeworCQkJY2FzZSAnXGEnOiBFTUlUUSgpOyBjaCA9ICdhJzsgYnJlYWs7CisJCQljYXNlICdcYic6IEVNSVRRKCk7IGNoID0gJ2InOyBicmVhazsKKwkJCWNhc2UgJ1xmJzogRU1JVFEoKTsgY2ggPSAnZic7IGJyZWFrOworCQkJY2FzZSAnXG4nOiBFTUlUUSgpOyBjaCA9ICduJzsgYnJlYWs7CisJCQljYXNlICdccic6IEVNSVRRKCk7IGNoID0gJ3InOyBicmVhazsKKwkJCWNhc2UgJ1x0JzogRU1JVFEoKTsgY2ggPSAndCc7IGJyZWFrOworCQkJY2FzZSAnXHYnOiBFTUlUUSgpOyBjaCA9ICd2JzsgYnJlYWs7CisKKwkJCWNhc2UgJ1xcJzogLyogZmFsbHRocnUgKi8KKwkJCWNhc2UgJyInOiBFTUlUUSgpOyBicmVhazsKKwkJCWNhc2UgJyAnOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBvY3RhbCAqLworCQkJCUVNSVRRKCk7CisJCQkJRU1JVCgoKGNoID4+IDYpICYgMDMpICsgJzAnKTsKKwkJCQlFTUlUKCgoY2ggPj4gMykgJiAwNykgKyAnMCcpOworCQkJCWNoID0gKGNoICYgMDcpICsgJzAnOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCUVNSVQoY2gpOworCX0KKwlpZiAoIW5vX2RxKQorCQlFTUlUKCciJyk7CisJaWYgKG91dGJ1ZikKKwkJKm91dGJ1ZiA9IDA7CisKKwlyZXR1cm4gbmVlZHF1b3RlID8gY291bnQgOiAwOworfQorCisvKgorICogQy1zdHlsZSBuYW1lIHVucXVvdGluZy4KKyAqCisgKiBRdW90ZWQgc2hvdWxkIHBvaW50IGF0IHRoZSBvcGVuaW5nIGRvdWJsZSBxdW90ZS4gIFJldHVybnMKKyAqIGFuIGFsbG9jYXRlZCBtZW1vcnkgdGhhdCBob2xkcyB1bnF1b3RlZCBuYW1lLCB3aGljaCB0aGUgY2FsbGVyCisgKiBzaG91bGQgZnJlZSB3aGVuIGRvbmUuICBVcGRhdGVzIGVuZHAgcG9pbnRlciB0byBwb2ludCBhdAorICogb25lIHBhc3QgdGhlIGVuZGluZyBkb3VibGUgcXVvdGUgaWYgZ2l2ZW4uCisgKi8KKworY2hhciAqdW5xdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKnF1b3RlZCwgY29uc3QgY2hhciAqKmVuZHApCit7CisJY29uc3QgY2hhciAqc3A7CisJY2hhciAqbmFtZSA9IE5VTEwsICpvdXRwID0gTlVMTDsKKwlpbnQgY291bnQgPSAwLCBjaCwgYWM7CisKKyN1bmRlZiBFTUlUCisjZGVmaW5lIEVNSVQoYykgKG91dHAgPyAoKm91dHArKyA9IChjKSkgOiAoY291bnQrKykpCisKKwlpZiAoKnF1b3RlZCsrICE9ICciJykKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoMSkgeworCQkvKiBmaXJzdCBwYXNzIGNvdW50cyBhbmQgYWxsb2NhdGVzLCBzZWNvbmQgcGFzcyBmaWxscyAqLworCQlmb3IgKHNwID0gcXVvdGVkOyAoY2ggPSAqc3ArKykgIT0gJyInOyApIHsKKwkJCWlmIChjaCA9PSAnXFwnKSB7CisJCQkJc3dpdGNoIChjaCA9ICpzcCsrKSB7CisJCQkJY2FzZSAnYSc6IGNoID0gJ1xhJzsgYnJlYWs7CisJCQkJY2FzZSAnYic6IGNoID0gJ1xiJzsgYnJlYWs7CisJCQkJY2FzZSAnZic6IGNoID0gJ1xmJzsgYnJlYWs7CisJCQkJY2FzZSAnbic6IGNoID0gJ1xuJzsgYnJlYWs7CisJCQkJY2FzZSAncic6IGNoID0gJ1xyJzsgYnJlYWs7CisJCQkJY2FzZSAndCc6IGNoID0gJ1x0JzsgYnJlYWs7CisJCQkJY2FzZSAndic6IGNoID0gJ1x2JzsgYnJlYWs7CisKKwkJCQljYXNlICdcXCc6IGNhc2UgJyInOgorCQkJCQlicmVhazsgLyogdmVyYmF0aW0gKi8KKworCQkJCWNhc2UgJzAnLi4uJzcnOgorCQkJCQkvKiBvY3RhbCAqLworCQkJCQlhYyA9ICgoY2ggLSAnMCcpIDw8IDYpOworCQkJCQlpZiAoKGNoID0gKnNwKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCQkJcmV0dXJuIE5VTEw7CisJCQkJCWFjIHw9ICgoY2ggLSAnMCcpIDw8IDMpOworCQkJCQlpZiAoKGNoID0gKnNwKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCQkJcmV0dXJuIE5VTEw7CisJCQkJCWFjIHw9IChjaCAtICcwJyk7CisJCQkJCWNoID0gYWM7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiBOVUxMOyAvKiBtYWxmb3JtZWQgKi8KKwkJCQl9CisJCQl9CisJCQlFTUlUKGNoKTsKKwkJfQorCisJCWlmIChuYW1lKSB7CisJCQkqb3V0cCA9IDA7CisJCQlpZiAoZW5kcCkKKwkJCQkqZW5kcCA9IHNwOworCQkJcmV0dXJuIG5hbWU7CisJCX0KKwkJb3V0cCA9IG5hbWUgPSB4bWFsbG9jKGNvdW50ICsgMSk7CisJfQorfQorCit2b2lkIHdyaXRlX25hbWVfcXVvdGVkKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGludCBxdW90ZSwgRklMRSAqb3V0KQoreworCWludCBuZWVkcXVvdGU7CisKKwlpZiAoIXF1b3RlKSB7CisJbm9fcXVvdGU6CisJCWlmIChwcmVmaXggJiYgcHJlZml4WzBdKQorCQkJZnB1dHMocHJlZml4LCBvdXQpOworCQlmcHV0cyhuYW1lLCBvdXQpOworCQlyZXR1cm47CisJfQorCisJbmVlZHF1b3RlID0gMDsKKwlpZiAocHJlZml4ICYmIHByZWZpeFswXSkKKwkJbmVlZHF1b3RlID0gcXVvdGVfY19zdHlsZShwcmVmaXgsIE5VTEwsIE5VTEwsIDApOworCWlmICghbmVlZHF1b3RlKQorCQluZWVkcXVvdGUgPSBxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIE5VTEwsIDApOworCWlmIChuZWVkcXVvdGUpIHsKKwkJZnB1dGMoJyInLCBvdXQpOworCQlpZiAocHJlZml4ICYmIHByZWZpeFswXSkKKwkJCXF1b3RlX2Nfc3R5bGUocHJlZml4LCBOVUxMLCBvdXQsIDEpOworCQlxdW90ZV9jX3N0eWxlKG5hbWUsIE5VTEwsIG91dCwgMSk7CisJCWZwdXRjKCciJywgb3V0KTsKKwl9CisJZWxzZQorCQlnb3RvIG5vX3F1b3RlOworfQpkaWZmIC0tZ2l0IGEvcXVvdGUuaCBiL3F1b3RlLmgKaW5kZXggYzhjZmIzYS4uMjQ4NmU2ZSAxMDA2NDQKLS0tIGEvcXVvdGUuaAorKysgYi9xdW90ZS5oCkBAIC0xLDEwICsxLDEzIEBACiAjaWZuZGVmIFFVT1RFX0gKICNkZWZpbmUgUVVPVEVfSAogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KIAogLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCi0gKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW5kIHRoZSB3aG9sZSB0aGluZwotICogaXMgZW5jbG9zZWQgaW4gYSBzaW5nbGUgcXVvdGUgcGFpci4KKyAqIGFueSBzaW5nbGUgcXVvdGUgaXMgcmVwbGFjZWQgd2l0aCAnXCcnLCBhbnkgZXhjbGFtYXRpb24gcG9pbnQKKyAqIGlzIHJlcGxhY2VkIHdpdGggJ1whJywgYW5kIHRoZSB3aG9sZSB0aGluZyBpcyBlbmNsb3NlZCBpbiBhCisgKiBzaW5nbGUgcXVvdGUgcGFpci4KICAqCiAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSBwYXNzaW5nIHRoZSByZXN1bHQgdG8gc3lzdGVtKCkgYXMgYW4KICAqIGFyZ3VtZW50OgpAQCAtMTksOCArMjIsMjYgQEAKICAqCiAgKiBOb3RlIHRoYXQgdGhlIGFib3ZlIGV4YW1wbGVzIGxlYWsgbWVtb3J5ISAgUmVtZW1iZXIgdG8gZnJlZSByZXN1bHQgZnJvbQogICogc3FfcXVvdGUoKSBpbiBhIHJlYWwgYXBwbGljYXRpb24uCisgKgorICogc3FfcXVvdGVfYnVmKCkgd3JpdGVzIHRvIGFuIGV4aXN0aW5nIGJ1ZmZlciBvZiBzcGVjaWZpZWQgc2l6ZTsgaXQKKyAqIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGhhdmUgYmVlbiB3cml0dGVuCisgKiBleGNsdWRpbmcgdGhlIGZpbmFsIG51bGwgcmVnYXJkbGVzcyBvZiB0aGUgYnVmZmVyIHNpemUuCiAgKi8KIAotY2hhciAqc3FfcXVvdGUoY29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiBjaGFyICpzcV9xdW90ZShjb25zdCBjaGFyICpzcmMpOworZXh0ZXJuIHNpemVfdCBzcV9xdW90ZV9idWYoY2hhciAqZHN0LCBzaXplX3QgbiwgY29uc3QgY2hhciAqc3JjKTsKKworLyogVGhpcyB1bndyYXBzIHdoYXQgc3FfcXVvdGUoKSBwcm9kdWNlcyBpbiBwbGFjZSwgYnV0IHJldHVybnMKKyAqIE5VTEwgaWYgdGhlIGlucHV0IGRvZXMgbm90IGxvb2sgbGlrZSB3aGF0IHNxX3F1b3RlIHdvdWxkIGhhdmUKKyAqIHByb2R1Y2VkLgorICovCitleHRlcm4gY2hhciAqc3FfZGVxdW90ZShjaGFyICopOworCitleHRlcm4gaW50IHF1b3RlX2Nfc3R5bGUoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqb3V0YnVmLCBGSUxFICpvdXRmcCwKKwkJCSBpbnQgbm9kcSk7CitleHRlcm4gY2hhciAqdW5xdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKnF1b3RlZCwgY29uc3QgY2hhciAqKmVuZHApOworCitleHRlcm4gdm9pZCB3cml0ZV9uYW1lX3F1b3RlZChjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBpbnQgcXVvdGUsIEZJTEUgKm91dCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVhZC1jYWNoZS5jIGIvcmVhZC1jYWNoZS5jCmluZGV4IDZlZmY0YzguLjY5MzI3MzYgMTAwNjQ0Ci0tLSBhL3JlYWQtY2FjaGUuYworKysgYi9yZWFkLWNhY2hlLmMKQEAgLTM1LDggKzM1LDExIEBACiAJc3dpdGNoIChudG9obChjZS0+Y2VfbW9kZSkgJiBTX0lGTVQpIHsKIAljYXNlIFNfSUZSRUc6CiAJCWNoYW5nZWQgfD0gIVNfSVNSRUcoc3QtPnN0X21vZGUpID8gVFlQRV9DSEFOR0VEIDogMDsKLQkJLyogV2UgY29uc2lkZXIgb25seSB0aGUgb3duZXIgeCBiaXQgdG8gYmUgcmVsZXZhbnQgZm9yICJtb2RlIGNoYW5nZXMiICovCi0JCWlmICgwMTAwICYgKG50b2hsKGNlLT5jZV9tb2RlKSBeIHN0LT5zdF9tb2RlKSkKKwkJLyogV2UgY29uc2lkZXIgb25seSB0aGUgb3duZXIgeCBiaXQgdG8gYmUgcmVsZXZhbnQgZm9yCisJCSAqICJtb2RlIGNoYW5nZXMiCisJCSAqLworCQlpZiAodHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYKKwkJICAgICgwMTAwICYgKG50b2hsKGNlLT5jZV9tb2RlKSBeIHN0LT5zdF9tb2RlKSkpCiAJCQljaGFuZ2VkIHw9IE1PREVfQ0hBTkdFRDsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGTE5LOgpAQCAtODMsNiArODYsODMgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAorc3RhdGljIGludCBjZV9jb21wYXJlX2RhdGEoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCWludCBtYXRjaCA9IC0xOworCWludCBmZCA9IG9wZW4oY2UtPm5hbWUsIE9fUkRPTkxZKTsKKworCWlmIChmZCA+PSAwKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWlmICghaW5kZXhfZmQoc2hhMSwgZmQsIHN0LCAwLCBOVUxMKSkKKwkJCW1hdGNoID0gbWVtY21wKHNoYTEsIGNlLT5zaGExLCAyMCk7CisJCWNsb3NlKGZkKTsKKwl9CisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfbGluayhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBsb25nIGV4cGVjdGVkX3NpemUpCit7CisJaW50IG1hdGNoID0gLTE7CisJY2hhciAqdGFyZ2V0OworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciB0eXBlWzEwXTsKKwlpbnQgbGVuOworCisJdGFyZ2V0ID0geG1hbGxvYyhleHBlY3RlZF9zaXplKTsKKwlsZW4gPSByZWFkbGluayhjZS0+bmFtZSwgdGFyZ2V0LCBleHBlY3RlZF9zaXplKTsKKwlpZiAobGVuICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJZnJlZSh0YXJnZXQpOworCQlyZXR1cm4gLTE7CisJfQorCWJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKGNlLT5zaGExLCB0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpIHsKKwkJZnJlZSh0YXJnZXQpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzaXplID09IGV4cGVjdGVkX3NpemUpCisJCW1hdGNoID0gbWVtY21wKGJ1ZmZlciwgdGFyZ2V0LCBzaXplKTsKKwlmcmVlKGJ1ZmZlcik7CisJZnJlZSh0YXJnZXQpOworCXJldHVybiBtYXRjaDsKK30KKworaW50IGNlX21vZGlmaWVkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpbnQgY2hhbmdlZDsKKwljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChjZSwgc3QpOworCWlmICghY2hhbmdlZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHRoZSBtb2RlIG9yIHR5cGUgaGFzIGNoYW5nZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJ5aW5nCisJICogdG8gcmVmcmVzaCB0aGUgZW50cnkgLSBpdCdzIG5vdCBnb2luZyB0byBtYXRjaAorCSAqLworCWlmIChjaGFuZ2VkICYgKE1PREVfQ0hBTkdFRCB8IFRZUEVfQ0hBTkdFRCkpCisJCXJldHVybiBjaGFuZ2VkOworCisJLyogSW1tZWRpYXRlbHkgYWZ0ZXIgcmVhZC10cmVlIG9yIHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbywKKwkgKiB0aGUgbGVuZ3RoIGZpZWxkIGlzIHplcm8uICBGb3Igb3RoZXIgY2FzZXMgdGhlIGNlX3NpemUKKwkgKiBzaG91bGQgbWF0Y2ggdGhlIFNIQTEgcmVjb3JkZWQgaW4gdGhlIGluZGV4IGVudHJ5LgorCSAqLworCWlmICgoY2hhbmdlZCAmIERBVEFfQ0hBTkdFRCkgJiYgY2UtPmNlX3NpemUgIT0gaHRvbmwoMCkpCisJCXJldHVybiBjaGFuZ2VkOworCisJc3dpdGNoIChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwkJaWYgKGNlX2NvbXBhcmVfZGF0YShjZSwgc3QpKQorCQkJcmV0dXJuIGNoYW5nZWQgfCBEQVRBX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaWYgKGNlX2NvbXBhcmVfbGluayhjZSwgc3QtPnN0X3NpemUpKQorCQkJcmV0dXJuIGNoYW5nZWQgfCBEQVRBX0NIQU5HRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBjaGFuZ2VkIHwgVFlQRV9DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IGJhc2VfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMikKIHsKQEAgLTE1NSw3ICsyMzUsNyBAQAogCXJldHVybiAxOwogfQogCi1pbnQgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShjaGFyICpwYXRoKQoraW50IHJlbW92ZV9maWxlX2Zyb21fY2FjaGUoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKIAlpZiAocG9zIDwgMCkKQEAgLTMxNSw3ICszOTUsNyBAQAogCWludCBza2lwX2RmX2NoZWNrID0gb3B0aW9uICYgQUREX0NBQ0hFX1NLSVBfREZDSEVDSzsKIAlwb3MgPSBjYWNoZV9uYW1lX3BvcyhjZS0+bmFtZSwgbnRvaHMoY2UtPmNlX2ZsYWdzKSk7CiAKLQkvKiBleGlzdGluZyBtYXRjaD8gSnVzdCByZXBsYWNlIGl0ICovCisJLyogZXhpc3RpbmcgbWF0Y2g/IEp1c3QgcmVwbGFjZSBpdC4gKi8KIAlpZiAocG9zID49IDApIHsKIAkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOwogCQlhY3RpdmVfY2FjaGVbcG9zXSA9IGNlOwpAQCAtMzM4LDcgKzQxOCw4IEBACiAJaWYgKCFva190b19hZGQpCiAJCXJldHVybiAtMTsKIAotCWlmICghc2tpcF9kZl9jaGVjayAmJiBjaGVja19maWxlX2RpcmVjdG9yeV9jb25mbGljdChjZSwgcG9zLCBva190b19yZXBsYWNlKSkgeworCWlmICghc2tpcF9kZl9jaGVjayAmJgorCSAgICBjaGVja19maWxlX2RpcmVjdG9yeV9jb25mbGljdChjZSwgcG9zLCBva190b19yZXBsYWNlKSkgewogCQlpZiAoIW9rX3RvX3JlcGxhY2UpCiAJCQlyZXR1cm4gLTE7CiAJCXBvcyA9IGNhY2hlX25hbWVfcG9zKGNlLT5uYW1lLCBudG9ocyhjZS0+Y2VfZmxhZ3MpKTsKQEAgLTM4NywxMSArNDY4LDE1IEBACiAKIAllcnJubyA9IEVCVVNZOwogCWlmIChhY3RpdmVfY2FjaGUpCi0JCXJldHVybiBlcnJvcigibW9yZSB0aGFuIG9uZSBjYWNoZWZpbGUiKTsKKwkJcmV0dXJuIGFjdGl2ZV9ucjsKKwogCWVycm5vID0gRU5PRU5UOwogCWZkID0gb3BlbihnZXRfaW5kZXhfZmlsZSgpLCBPX1JET05MWSk7Ci0JaWYgKGZkIDwgMCkKLQkJcmV0dXJuIChlcnJubyA9PSBFTk9FTlQpID8gMCA6IGVycm9yKCJvcGVuIGZhaWxlZCIpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAwOworCQlkaWUoImluZGV4IGZpbGUgb3BlbiBmYWlsZWQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJfQogCiAJc2l6ZSA9IDA7IC8vIGF2b2lkIGdjYyB3YXJuaW5nCiAJbWFwID0gTUFQX0ZBSUxFRDsKQEAgLTQwMyw3ICs0ODgsNyBAQAogCX0KIAljbG9zZShmZCk7CiAJaWYgKG1hcCA9PSBNQVBfRkFJTEVEKQotCQlyZXR1cm4gZXJyb3IoIm1tYXAgZmFpbGVkIik7CisJCWRpZSgiaW5kZXggZmlsZSBtbWFwIGZhaWxlZCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKIAogCWhkciA9IG1hcDsKIAlpZiAodmVyaWZ5X2hkcihoZHIsIHNpemUpIDwgMCkKQEAgLTQyNCw3ICs1MDksNyBAQAogdW5tYXA6CiAJbXVubWFwKG1hcCwgc2l6ZSk7CiAJZXJybm8gPSBFSU5WQUw7Ci0JcmV0dXJuIGVycm9yKCJ2ZXJpZnkgaGVhZGVyIGZhaWxlZCIpOworCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CiB9CiAKICNkZWZpbmUgV1JJVEVfQlVGRkVSX1NJWkUgODE5MgpkaWZmIC0tZ2l0IGEvcmVhZC10cmVlLmMgYi9yZWFkLXRyZWUuYwppbmRleCA2YTVjMDhjLi42YTQ1NmFlIDEwMDY0NAotLS0gYS9yZWFkLXRyZWUuYworKysgYi9yZWFkLXRyZWUuYwpAQCAtMTMsNiArMTMsOCBAQAogc3RhdGljIGludCBtZXJnZSA9IDA7CiBzdGF0aWMgaW50IHVwZGF0ZSA9IDA7CiBzdGF0aWMgaW50IGluZGV4X29ubHkgPSAwOworc3RhdGljIGludCBub250cml2aWFsX21lcmdlID0gMDsKK3N0YXRpYyBpbnQgdHJpdmlhbF9tZXJnZXNfb25seSA9IDA7CiAKIHN0YXRpYyBpbnQgaGVhZF9pZHggPSAtMTsKIHN0YXRpYyBpbnQgbWVyZ2Vfc2l6ZSA9IDA7CkBAIC0yMzUsNiArMjM3LDM1IEBACiAJICAgIGNlLT5uYW1lKTsKIH0KIAorLyogVW5saW5rIHRoZSBsYXN0IGNvbXBvbmVudCBhbmQgYXR0ZW1wdCB0byByZW1vdmUgbGVhZGluZworICogZGlyZWN0b3JpZXMsIGluIGNhc2UgdGhpcyB1bmxpbmsgaXMgdGhlIHJlbW92YWwgb2YgdGhlCisgKiBsYXN0IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgLS0gZW1wdHkgZGlyZWN0b3JpZXMgYXJlIHJlbW92ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHVubGlua19lbnRyeShjaGFyICpuYW1lKQoreworCWNoYXIgKmNwLCAqcHJldjsKKworCWlmICh1bmxpbmsobmFtZSkpCisJCXJldHVybjsKKwlwcmV2ID0gTlVMTDsKKwl3aGlsZSAoMSkgeworCQlpbnQgc3RhdHVzOworCQljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKwkJaWYgKHByZXYpCisJCQkqcHJldiA9ICcvJzsKKwkJaWYgKCFjcCkKKwkJCWJyZWFrOworCisJCSpjcCA9IDA7CisJCXN0YXR1cyA9IHJtZGlyKG5hbWUpOworCQlpZiAoc3RhdHVzKSB7CisJCQkqY3AgPSAnLyc7CisJCQlicmVhazsKKwkJfQorCQlwcmV2ID0gY3A7CisJfQorfQorCiBzdGF0aWMgdm9pZCBjaGVja191cGRhdGVzKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywgaW50IG5yKQogewogCXN0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGUgPSB7CkBAIC0yNDgsNyArMjc5LDcgQEAKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpzcmMrKzsKIAkJaWYgKCFjZS0+Y2VfbW9kZSkgewogCQkJaWYgKHVwZGF0ZSkKLQkJCQl1bmxpbmsoY2UtPm5hbWUpOworCQkJCXVubGlua19lbnRyeShjZS0+bmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoY2UtPmNlX2ZsYWdzICYgbWFzaykgewpAQCAtMjc1LDYgKzMwNiw5IEBACiAJaWYgKHVucGFja190cmVlc19yZWMocG9zbnMsIGxlbiwgIiIsIGZuLCAmaW5kcG9zKSkKIAkJcmV0dXJuIC0xOwogCisJaWYgKHRyaXZpYWxfbWVyZ2VzX29ubHkgJiYgbm9udHJpdmlhbF9tZXJnZSkKKwkJZGllKCJNZXJnZSByZXF1aXJlcyBmaWxlLWxldmVsIG1lcmdpbmciKTsKKwogCWNoZWNrX3VwZGF0ZXMoYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpOwogCXJldHVybiAwOwogfQpAQCAtNDYwLDYgKzQ5NCw4IEBACiAJCXZlcmlmeV91cHRvZGF0ZShpbmRleCk7CiAJfQogCisJbm9udHJpdmlhbF9tZXJnZSA9IDE7CisKIAkvKiAjMiwgIzMsICM0LCAjNiwgIzcsICM5LCAjMTEuICovCiAJY291bnQgPSAwOwogCWlmICghaGVhZF9tYXRjaCB8fCAhcmVtb3RlX21hdGNoKSB7CkBAIC02MjksOSArNjY1LDkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWFkIikpIHsKLQkJCWhlYWRfaWR4ID0gc3RhZ2UgLSAxOwotCQkJZm4gPSB0aHJlZXdheV9tZXJnZTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS10cml2aWFsIikpIHsKKwkJCXRyaXZpYWxfbWVyZ2VzX29ubHkgPSAxOworCQkJY29udGludWU7CiAJCX0KIAogCQkvKiAiLW0iIHN0YW5kcyBmb3IgIm1lcmdlIiwgbWVhbmluZyB3ZSBzdGFydCBpbiBzdGFnZSAxICovCkBAIC02NTUsOSArNjkxLDEwIEBACiAJCQlkaWUoImZhaWxlZCB0byB1bnBhY2sgdHJlZSBvYmplY3QgJXMiLCBhcmcpOwogCQlzdGFnZSsrOwogCX0KLQlpZiAodXBkYXRlICYmICFtZXJnZSkKKwlpZiAoKHVwZGF0ZXx8aW5kZXhfb25seSkgJiYgIW1lcmdlKQogCQl1c2FnZShyZWFkX3RyZWVfdXNhZ2UpOwotCWlmIChtZXJnZSAmJiAhZm4pIHsKKworCWlmIChtZXJnZSkgewogCQlpZiAoc3RhZ2UgPCAyKQogCQkJZGllKCJqdXN0IGhvdyBkbyB5b3UgZXhwZWN0IG1lIHRvIG1lcmdlICVkIHRyZWVzPyIsIHN0YWdlLTEpOwogCQlzd2l0Y2ggKHN0YWdlIC0gMSkgewpAQCAtNjc0LDkgKzcxMSw3IEBACiAJCQlmbiA9IHRocmVld2F5X21lcmdlOwogCQkJYnJlYWs7CiAJCX0KLQl9CiAKLQlpZiAoaGVhZF9pZHggPCAwKSB7CiAJCWlmIChzdGFnZSAtIDEgPj0gMykKIAkJCWhlYWRfaWR4ID0gc3RhZ2UgLSAyOwogCQllbHNlCmRpZmYgLS1naXQgYS9yZWNlaXZlLXBhY2suYyBiL3JlY2VpdmUtcGFjay5jCmluZGV4IDA2ODU3ZWIuLjhmMTU3YmMgMTAwNjQ0Ci0tLSBhL3JlY2VpdmUtcGFjay5jCisrKyBiL3JlY2VpdmUtcGFjay5jCkBAIC05NSw2ICs5NSwxMCBAQAogCWNoYXIgbmV3X2hleFs2MF0sICpvbGRfaGV4LCAqbG9ja19uYW1lOwogCWludCBuZXdmZCwgbmFtZWxlbiwgd3JpdHRlbjsKIAorCWlmICghc3RybmNtcChuYW1lLCAicmVmcy8iLCA1KSAmJiBjaGVja19yZWZfZm9ybWF0KG5hbWUgKyA1KSkKKwkJcmV0dXJuIGVycm9yKCJyZWZ1c2luZyB0byBjcmVhdGUgZnVubnkgcmVmICclcycgbG9jYWxseSIsCisJCQkgICAgIG5hbWUpOworCiAJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKIAlsb2NrX25hbWUgPSB4bWFsbG9jKG5hbWVsZW4gKyAxMCk7CiAJbWVtY3B5KGxvY2tfbmFtZSwgbmFtZSwgbmFtZWxlbik7CmRpZmYgLS1naXQgYS9yZWZzLmMgYi9yZWZzLmMKaW5kZXggMTYxMDE4MC4uYTUyYjAzOCAxMDA2NDQKLS0tIGEvcmVmcy5jCisrKyBiL3JlZnMuYwpAQCAtMywxOCArMywxNTcgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKLXN0YXRpYyBpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlpbnQgcmV0ID0gLTE7Ci0JaW50IGZkID0gb3BlbihnaXRfcGF0aCgiJXMiLCByZWZuYW1lKSwgT19SRE9OTFkpOworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgcmVmcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYREVQVEggNQogCi0JaWYgKGZkID49IDApIHsKLQkJY2hhciBidWZmZXJbNjBdOwotCQlpZiAocmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSkgPj0gNDApCi0JCQlyZXQgPSBnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKTsKLQkJY2xvc2UoZmQpOworI2lmbmRlZiBVU0VfU1lNTElOS19IRUFECisjZGVmaW5lIFVTRV9TWU1MSU5LX0hFQUQgMQorI2VuZGlmCisKK2ludCB2YWxpZGF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpidWYsIGJ1ZmZlclsyNTZdOworCWludCBsZW4sIGZkOworCisJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBNYWtlIHN1cmUgaXQgaXMgYSAicmVmcy8uLiIgc3ltbGluayAqLworCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJCWlmIChsZW4gPj0gNSAmJiAhbWVtY21wKCJyZWZzLyIsIGJ1ZmZlciwgNSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBBbnl0aGluZyBlbHNlLCBqdXN0IG9wZW4gaXQgYW5kIHRyeSB0byBzZWUgaWYgaXQgaXMgYSBzeW1ib2xpYyByZWYuCisJICovCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJbGVuID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwljbG9zZShmZCk7CisKKwkvKgorCSAqIElzIGl0IGEgc3ltYm9saWMgcmVmPworCSAqLworCWlmIChsZW4gPCA0IHx8IG1lbWNtcCgicmVmOiIsIGJ1ZmZlciwgNCkpCisJCXJldHVybiAtMTsKKwlidWYgPSBidWZmZXIgKyA0OworCWxlbiAtPSA0OworCXdoaWxlIChsZW4gJiYgaXNzcGFjZSgqYnVmKSkKKwkJYnVmKyssIGxlbi0tOworCWlmIChsZW4gPj0gNSAmJiAhbWVtY21wKCJyZWZzLyIsIGJ1ZiwgNSkpCisJCXJldHVybiAwOworCXJldHVybiAtMTsKK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWYoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHJlYWRpbmcpCit7CisJaW50IGRlcHRoID0gTUFYREVQVEgsIGxlbjsKKwljaGFyIGJ1ZmZlclsyNTZdOworCisJZm9yICg7OykgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY2hhciAqYnVmOworCQlpbnQgZmQ7CisKKwkJaWYgKC0tZGVwdGggPCAwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJLyogU3BlY2lhbCBjYXNlOiBub24tZXhpc3RpbmcgZmlsZS4KKwkJICogTm90IGhhdmluZyB0aGUgcmVmcy9oZWFkcy9uZXctYnJhbmNoIGlzIE9LCisJCSAqIGlmIHdlIGFyZSB3cml0aW5nIGludG8gaXQsIHNvIGlzIC5naXQvSEVBRAorCQkgKiB0aGF0IHBvaW50cyBhdCByZWZzL2hlYWRzL21hc3RlciBzdGlsbCB0byBiZQorCQkgKiBib3JuLiAgSXQgaXMgTk9UIE9LIGlmIHdlIGFyZSByZXNvbHZpbmcgZm9yCisJCSAqIHJlYWRpbmcuCisJCSAqLworCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJCWlmIChyZWFkaW5nIHx8IGVycm5vICE9IEVOT0VOVCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCW1lbXNldChzaGExLCAwLCAyMCk7CisJCQlyZXR1cm4gcGF0aDsKKwkJfQorCisJCS8qIEZvbGxvdyAibm9ybWFsaXplZCIgLSBpZSAicmVmcy8uLiIgc3ltbGlua3MgYnkgaGFuZCAqLworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJbGVuID0gcmVhZGxpbmsocGF0aCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwkJCWlmIChsZW4gPj0gNSAmJiAhbWVtY21wKCJyZWZzLyIsIGJ1ZmZlciwgNSkpIHsKKwkJCQlwYXRoID0gZ2l0X3BhdGgoIiUuKnMiLCBsZW4sIGJ1ZmZlcik7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBBbnl0aGluZyBlbHNlLCBqdXN0IG9wZW4gaXQgYW5kIHRyeSB0byB1c2UgaXQgYXMKKwkJICogYSByZWYKKwkJICovCisJCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gTlVMTDsKKwkJbGVuID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKKwkJY2xvc2UoZmQpOworCisJCS8qCisJCSAqIElzIGl0IGEgc3ltYm9saWMgcmVmPworCQkgKi8KKwkJaWYgKGxlbiA8IDQgfHwgbWVtY21wKCJyZWY6IiwgYnVmZmVyLCA0KSkKKwkJCWJyZWFrOworCQlidWYgPSBidWZmZXIgKyA0OworCQlsZW4gLT0gNDsKKwkJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKCpidWYpKQorCQkJYnVmKyssIGxlbi0tOworCQl3aGlsZSAobGVuICYmIGlzc3BhY2UoYnVmW2xlbi0xXSkpCisJCQlidWZbLS1sZW5dID0gMDsKKwkJcGF0aCA9IGdpdF9wYXRoKCIlLipzIiwgbGVuLCBidWYpOworCX0KKwlpZiAobGVuIDwgNDAgfHwgZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgc2hhMSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwYXRoOworfQorCitpbnQgY3JlYXRlX3N5bXJlZihjb25zdCBjaGFyICpnaXRfSEVBRCwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIpCit7CisJY29uc3QgY2hhciAqbG9ja3BhdGg7CisJY2hhciByZWZbMTAwMF07CisJaW50IGZkLCBsZW4sIHdyaXR0ZW47CisKKyNpZiBVU0VfU1lNTElOS19IRUFECisJdW5saW5rKGdpdF9IRUFEKTsKKwlpZiAoIXN5bWxpbmsocmVmc19oZWFkc19tYXN0ZXIsIGdpdF9IRUFEKSkKKwkJcmV0dXJuIDA7CisJZnByaW50ZihzdGRlcnIsICJubyBzeW1saW5rIC0gZmFsbGluZyBiYWNrIHRvIHN5bWJvbGljIHJlZlxuIik7CisjZW5kaWYKKworCWxlbiA9IHNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksICJyZWY6ICVzXG4iLCByZWZzX2hlYWRzX21hc3Rlcik7CisJaWYgKHNpemVvZihyZWYpIDw9IGxlbikgeworCQllcnJvcigicmVmbmFtZSB0b28gbG9uZzogJXMiLCByZWZzX2hlYWRzX21hc3Rlcik7CisJCXJldHVybiAtMTsKKwl9CisJbG9ja3BhdGggPSBta3BhdGgoIiVzLmxvY2siLCBnaXRfSEVBRCk7CisJZmQgPSBvcGVuKGxvY2twYXRoLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOwkKKwl3cml0dGVuID0gd3JpdGUoZmQsIHJlZiwgbGVuKTsKKwljbG9zZShmZCk7CisJaWYgKHdyaXR0ZW4gIT0gbGVuKSB7CisJCXVubGluayhsb2NrcGF0aCk7CisJCWVycm9yKCJVbmFibGUgdG8gd3JpdGUgdG8gJXMiLCBsb2NrcGF0aCk7CisJCXJldHVybiAtMjsKKwl9CisJaWYgKHJlbmFtZShsb2NrcGF0aCwgZ2l0X0hFQUQpIDwgMCkgeworCQl1bmxpbmsobG9ja3BhdGgpOworCQllcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSAlcyIsIGdpdF9IRUFEKTsKKwkJcmV0dXJuIC0zOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJlYWRfcmVmKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmIChyZXNvbHZlX3JlZihmaWxlbmFtZSwgc2hhMSwgMSkpCisJCXJldHVybiAwOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBkb19mb3JfZWFjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgaW50ICgqZm4pKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpKQpAQCAtNTQsNyArMTkzLDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAocmVhZF9yZWYocGF0aCwgc2hhMSkgPCAwKQorCQkJaWYgKHJlYWRfcmVmKGdpdF9wYXRoKCIlcyIsIHBhdGgpLCBzaGExKSA8IDApCiAJCQkJY29udGludWU7CiAJCQlpZiAoIWhhc19zaGExX2ZpbGUoc2hhMSkpCiAJCQkJY29udGludWU7CkBAIC03MSw3ICsyMTAsNyBAQAogaW50IGhlYWRfcmVmKGludCAoKmZuKShjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKSkKIHsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCWlmICghcmVhZF9yZWYoIkhFQUQiLCBzaGExKSkKKwlpZiAoIXJlYWRfcmVmKGdpdF9wYXRoKCJIRUFEIiksIHNoYTEpKQogCQlyZXR1cm4gZm4oIkhFQUQiLCBzaGExKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMSwzMyArMjQwLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZWFkX3JlZl9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKSB7Ci0JaW50IGZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotCWNoYXIgaGV4WzQxXTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXJldHVybiBlcnJvcigiQ291bGRuJ3Qgb3BlbiAlc1xuIiwgZmlsZW5hbWUpOwotCX0KLQlpZiAoKHJlYWQoZmQsIGhleCwgNDEpIDwgNDEpIHx8Ci0JICAgIChoZXhbNDBdICE9ICdcbicpIHx8Ci0JICAgIGdldF9zaGExX2hleChoZXgsIHNoYTEpKSB7Ci0JCWVycm9yKCJDb3VsZG4ndCByZWFkIGEgaGFzaCBmcm9tICVzXG4iLCBmaWxlbmFtZSk7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIC0xOwotCX0KLQljbG9zZShmZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBnZXRfcmVmX3NoYTEoY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWNoYXIgKmZpbGVuYW1lOwotCWludCByZXR2YWw7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisKIAlpZiAoY2hlY2tfcmVmX2Zvcm1hdChyZWYpKQogCQlyZXR1cm4gLTE7Ci0JZmlsZW5hbWUgPSByZWZfZmlsZV9uYW1lKHJlZik7Ci0JcmV0dmFsID0gcmVhZF9yZWZfZmlsZShmaWxlbmFtZSwgc2hhMSk7Ci0JZnJlZShmaWxlbmFtZSk7Ci0JcmV0dXJuIHJldHZhbDsKKwlmaWxlbmFtZSA9IGdpdF9wYXRoKCJyZWZzLyVzIiwgcmVmKTsKKwlyZXR1cm4gcmVhZF9yZWYoZmlsZW5hbWUsIHNoYTEpOwogfQogCiBzdGF0aWMgaW50IGxvY2tfcmVmX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvY2tfZmlsZW5hbWUsCkBAIC0xNDAsNyArMjYwLDcgQEAKIAkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBvcGVuIGxvY2sgZmlsZSBmb3IgJXM6ICVzIiwKIAkJCSAgICAgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAJfQotCXJldHZhbCA9IHJlYWRfcmVmX2ZpbGUoZmlsZW5hbWUsIGN1cnJlbnRfc2hhMSk7CisJcmV0dmFsID0gcmVhZF9yZWYoZmlsZW5hbWUsIGN1cnJlbnRfc2hhMSk7CiAJaWYgKG9sZF9zaGExKSB7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWNsb3NlKGZkKTsKQEAgLTIxNiwxNyArMzM2LDU0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorLyoKKyAqIE1ha2Ugc3VyZSAicmVmIiBpcyBzb21ldGhpbmcgcmVhc29uYWJsZSB0byBoYXZlIHVuZGVyICIuZ2l0L3JlZnMvIjsKKyAqIFdlIGRvIG5vdCBsaWtlIGl0IGlmOgorICoKKyAqIC0gYW55IHBhdGggY29tcG9uZW50IG9mIGl0IGJlZ2lucyB3aXRoICIuIiwgb3IKKyAqIC0gaXQgaGFzIGRvdWJsZSBkb3RzICIuLiIsIG9yCisgKiAtIGl0IGhhcyBBU0NJSSBjb250cm9sIGNoYXJhY3RlciwgIn4iLCAiXiIsICI6IiBvciBTUCwgYW55d2hlcmUsIG9yCisgKiAtIGl0IGVuZHMgd2l0aCBhICIvIi4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBiYWRfcmVmX2NoYXIoaW50IGNoKQoreworCXJldHVybiAoKCh1bnNpZ25lZCkgY2gpIDw9ICcgJyB8fAorCQljaCA9PSAnficgfHwgY2ggPT0gJ14nIHx8IGNoID09ICc6Jyk7Cit9CisKIGludCBjaGVja19yZWZfZm9ybWF0KGNvbnN0IGNoYXIgKnJlZikKIHsKLQljaGFyICptaWRkbGU7Ci0JaWYgKHJlZlswXSA9PSAnLicgfHwgcmVmWzBdID09ICcvJykKLQkJcmV0dXJuIC0xOwotCW1pZGRsZSA9IHN0cmNocihyZWYsICcvJyk7Ci0JaWYgKCFtaWRkbGUgfHwgIW1pZGRsZVsxXSkKLQkJcmV0dXJuIC0xOwotCWlmIChzdHJjaHIobWlkZGxlICsgMSwgJy8nKSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOworCWludCBjaCwgbGV2ZWw7CisJY29uc3QgY2hhciAqY3AgPSByZWY7CisKKwlsZXZlbCA9IDA7CisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKChjaCA9ICpjcCsrKSA9PSAnLycpCisJCQk7IC8qIHRvbGVyYXRlIGR1cGxpY2F0ZWQgc2xhc2hlcyAqLworCQlpZiAoIWNoKQorCQkJcmV0dXJuIC0xOyAvKiBzaG91bGQgbm90IGVuZCB3aXRoIHNsYXNoZXMgKi8KKworCQkvKiB3ZSBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aCBjb21wb25lbnQgKi8KKwkJaWYgKGNoID09ICcuJyB8fCBiYWRfcmVmX2NoYXIoY2gpKQorCQkJcmV0dXJuIC0xOworCisJCS8qIHNjYW4gdGhlIHJlc3Qgb2YgdGhlIHBhdGggY29tcG9uZW50ICovCisJCXdoaWxlICgoY2ggPSAqY3ArKykgIT0gMCkgeworCQkJaWYgKGJhZF9yZWZfY2hhcihjaCkpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGNoID09ICcvJykKKwkJCQlicmVhazsKKwkJCWlmIChjaCA9PSAnLicgJiYgKmNwID09ICcuJykKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwkJbGV2ZWwrKzsKKwkJaWYgKCFjaCkgeworCQkJaWYgKGxldmVsIDwgMikKKwkJCQlyZXR1cm4gLTE7IC8qIGF0IGxlYXN0IG9mIGZvcm0gImhlYWRzL2JsYWgiICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KIH0KIAogaW50IHdyaXRlX3JlZl9zaGExX3VubG9ja2VkKGNvbnN0IGNoYXIgKnJlZiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKZGlmZiAtLWdpdCBhL3Jldi1saXN0LmMgYi9yZXYtbGlzdC5jCmluZGV4IGU0MWQ1YTAuLjZlNmZmZGUgMTAwNjQ0Ci0tLSBhL3Jldi1saXN0LmMKKysrIGIvcmV2LWxpc3QuYwpAQCAtMSwzMCArMSw0MCBAQAogI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgogI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgogI2luY2x1ZGUgInRyZWUuaCIKICNpbmNsdWRlICJibG9iLmgiCiAjaW5jbHVkZSAiZXBvY2guaCIKKyNpbmNsdWRlICJkaWZmLmgiCiAKICNkZWZpbmUgU0VFTgkJKDF1IDw8IDApCiAjZGVmaW5lIElOVEVSRVNUSU5HCSgxdSA8PCAxKQogI2RlZmluZSBDT1VOVEVECQkoMXUgPDwgMikKICNkZWZpbmUgU0hPV04JCSgxdSA8PCAzKQorI2RlZmluZSBUUkVFQ0hBTkdFCSgxdSA8PCA0KQogCiBzdGF0aWMgY29uc3QgY2hhciByZXZfbGlzdF91c2FnZVtdID0KLQkiZ2l0LXJldi1saXN0IFtPUFRJT05dIGNvbW1pdC1pZCA8Y29tbWl0LWlkPlxuIgotCQkgICAgICAiICAtLW1heC1jb3VudD1uclxuIgotCQkgICAgICAiICAtLW1heC1hZ2U9ZXBvY2hcbiIKLQkJICAgICAgIiAgLS1taW4tYWdlPWVwb2NoXG4iCi0JCSAgICAgICIgIC0tcGFyZW50c1xuIgotCQkgICAgICAiICAtLWJpc2VjdFxuIgotCQkgICAgICAiICAtLW9iamVjdHNcbiIKLQkJICAgICAgIiAgLS11bnBhY2tlZFxuIgotCQkgICAgICAiICAtLWhlYWRlclxuIgotCQkgICAgICAiICAtLXByZXR0eVxuIgotCQkgICAgICAiICAtLW5vLW1lcmdlc1xuIgotCQkgICAgICAiICAtLW1lcmdlLW9yZGVyIFsgLS1zaG93LWJyZWFrcyBdXG4iCi0JCSAgICAgICIgIC0tdG9wby1vcmRlciI7CisiZ2l0LXJldi1saXN0IFtPUFRJT05dIDxjb21taXQtaWQ+Li4uIFsgLS0gcGF0aHMuLi4gXVxuIgorIiAgbGltaXRpbmcgb3V0cHV0OlxuIgorIiAgICAtLW1heC1jb3VudD1uclxuIgorIiAgICAtLW1heC1hZ2U9ZXBvY2hcbiIKKyIgICAgLS1taW4tYWdlPWVwb2NoXG4iCisiICAgIC0tc3BhcnNlXG4iCisiICAgIC0tbm8tbWVyZ2VzXG4iCisiICAgIC0tYWxsXG4iCisiICBvcmRlcmluZyBvdXRwdXQ6XG4iCisiICAgIC0tbWVyZ2Utb3JkZXIgWyAtLXNob3ctYnJlYWtzIF1cbiIKKyIgICAgLS10b3BvLW9yZGVyXG4iCisiICBmb3JtYXR0aW5nIG91dHB1dDpcbiIKKyIgICAgLS1wYXJlbnRzXG4iCisiICAgIC0tb2JqZWN0c1xuIgorIiAgICAtLXVucGFja2VkXG4iCisiICAgIC0taGVhZGVyIHwgLS1wcmV0dHlcbiIKKyIgIHNwZWNpYWwgcHVycG9zZTpcbiIKKyIgICAgLS1iaXNlY3QiCis7CiAKK3N0YXRpYyBpbnQgZGVuc2UgPSAxOwogc3RhdGljIGludCB1bnBhY2tlZCA9IDA7CiBzdGF0aWMgaW50IGJpc2VjdF9saXN0ID0gMDsKIHN0YXRpYyBpbnQgdGFnX29iamVjdHMgPSAwOwpAQCAtNDMsNiArNTMsNyBAQAogc3RhdGljIGludCBzdG9wX3RyYXZlcnNhbCA9IDA7CiBzdGF0aWMgaW50IHRvcG9fb3JkZXIgPSAwOwogc3RhdGljIGludCBub19tZXJnZXMgPSAwOworc3RhdGljIGNvbnN0IGNoYXIgKipwYXRocyA9IE5VTEw7CiAKIHN0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKQEAgLTc2LDYgKzg3LDMxIEBACiAJZmZsdXNoKHN0ZG91dCk7CiB9CiAKK3N0YXRpYyBpbnQgcmV3cml0ZV9vbmUoc3RydWN0IGNvbW1pdCAqKnBwKQoreworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIChUUkVFQ0hBTkdFIHwgVU5JTlRFUkVTVElORykpCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIC0xOworCQkqcHAgPSBwLT5wYXJlbnRzLT5pdGVtOworCX0KK30KKworc3RhdGljIHZvaWQgcmV3cml0ZV9wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCA9ICZjb21taXQtPnBhcmVudHM7CisJd2hpbGUgKCpwcCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9ICpwcDsKKwkJaWYgKHJld3JpdGVfb25lKCZwYXJlbnQtPml0ZW0pIDwgMCkgeworCQkJKnBwID0gcGFyZW50LT5uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJcHAgPSAmcGFyZW50LT5uZXh0OworCX0KK30KKwogc3RhdGljIGludCBmaWx0ZXJfY29tbWl0KHN0cnVjdCBjb21taXQgKiBjb21taXQpCiB7CiAJaWYgKHN0b3BfdHJhdmVyc2FsICYmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSkKQEAgLTg2LDEyICsxMjIsMTcgQEAKIAkJcmV0dXJuIENPTlRJTlVFOwogCWlmIChtYXhfYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPCBtYXhfYWdlKSkgewogCQlzdG9wX3RyYXZlcnNhbD0xOwotCQlyZXR1cm4gbWVyZ2Vfb3JkZXI/Q09OVElOVUU6U1RPUDsKKwkJcmV0dXJuIENPTlRJTlVFOwogCX0KIAlpZiAobWF4X2NvdW50ICE9IC0xICYmICFtYXhfY291bnQtLSkKIAkJcmV0dXJuIFNUT1A7CiAJaWYgKG5vX21lcmdlcyAmJiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkpCiAJCXJldHVybiBDT05USU5VRTsKKwlpZiAocGF0aHMgJiYgZGVuc2UpIHsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFQ0hBTkdFKSkKKwkJCXJldHVybiBDT05USU5VRTsKKwkJcmV3cml0ZV9wYXJlbnRzKGNvbW1pdCk7CisJfQogCXJldHVybiBETzsKIH0KIApAQCAtMTk0LDcgKzIzNSwxNyBAQAogCQlkaWUoInVua25vd24gcGVuZGluZyBvYmplY3QgJXMgKCVzKSIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIG5hbWUpOwogCX0KIAl3aGlsZSAob2JqZWN0cykgewotCQlwcmludGYoIiVzICVzXG4iLCBzaGExX3RvX2hleChvYmplY3RzLT5pdGVtLT5zaGExKSwgb2JqZWN0cy0+bmFtZSk7CisJCS8qIEFuIG9iamVjdCB3aXRoIG5hbWUgImZvb1xuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKwkJICogY2FuIGJlIHVzZWQgY29uZnVzZSBkb3duc3RyZWFtIGdpdC1wYWNrLW9iamVjdHMgdmVyeSBiYWRseS4KKwkJICovCisJCWNvbnN0IGNoYXIgKmVwID0gc3RyY2hyKG9iamVjdHMtPm5hbWUsICdcbicpOworCQlpZiAoZXApIHsKKwkJCXByaW50ZigiJXMgJS4qc1xuIiwgc2hhMV90b19oZXgob2JqZWN0cy0+aXRlbS0+c2hhMSksCisJCQkgICAgICAgKGludCkgKGVwIC0gb2JqZWN0cy0+bmFtZSksCisJCQkgICAgICAgb2JqZWN0cy0+bmFtZSk7CisJCX0KKwkJZWxzZQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgc2hhMV90b19oZXgob2JqZWN0cy0+aXRlbS0+c2hhMSksIG9iamVjdHMtPm5hbWUpOwogCQlvYmplY3RzID0gb2JqZWN0cy0+bmV4dDsKIAl9CiB9CkBAIC0zNjYsMjYgKzQxNywxOTggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaXNfZGlmZmVyZW50ID0gMDsKKworc3RhdGljIHZvaWQgZmlsZV9hZGRfcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaXNfZGlmZmVyZW50ID0gMTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCisJCSBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlzX2RpZmZlcmVudCA9IDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0ID0geworCS5yZWN1cnNpdmUgPSAxLAorCS5hZGRfcmVtb3ZlID0gZmlsZV9hZGRfcmVtb3ZlLAorCS5jaGFuZ2UgPSBmaWxlX2NoYW5nZSwKK307CisKK3N0YXRpYyBpbnQgc2FtZV90cmVlKHN0cnVjdCB0cmVlICp0MSwgc3RydWN0IHRyZWUgKnQyKQoreworCWlzX2RpZmZlcmVudCA9IDA7CisJaWYgKGRpZmZfdHJlZV9zaGExKHQxLT5vYmplY3Quc2hhMSwgdDItPm9iamVjdC5zaGExLCAiIiwgJmRpZmZfb3B0KSA8IDApCisJCXJldHVybiAwOworCXJldHVybiAhaXNfZGlmZmVyZW50OworfQorCitzdGF0aWMgaW50IHNhbWVfdHJlZV9hc19lbXB0eShzdHJ1Y3QgdHJlZSAqdDEpCit7CisJaW50IHJldHZhbDsKKwl2b2lkICp0cmVlOworCXN0cnVjdCB0cmVlX2Rlc2MgZW1wdHksIHJlYWw7CisKKwlpZiAoIXQxKQorCQlyZXR1cm4gMDsKKworCXRyZWUgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSh0MS0+b2JqZWN0LnNoYTEsICJ0cmVlIiwgJnJlYWwuc2l6ZSwgTlVMTCk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gMDsKKwlyZWFsLmJ1ZiA9IHRyZWU7CisKKwllbXB0eS5idWYgPSAiIjsKKwllbXB0eS5zaXplID0gMDsKKworCWlzX2RpZmZlcmVudCA9IDA7CisJcmV0dmFsID0gZGlmZl90cmVlKCZlbXB0eSwgJnJlYWwsICIiLCAmZGlmZl9vcHQpOworCWZyZWUodHJlZSk7CisKKwlyZXR1cm4gcmV0dmFsID49IDAgJiYgIWlzX2RpZmZlcmVudDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKnRyeV90b19zaW1wbGlmeV9tZXJnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50KQoreworCWlmICghY29tbWl0LT50cmVlKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlIChwYXJlbnQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQlwYXJzZV9jb21taXQocCk7CisJCWlmICghcC0+dHJlZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2FtZV90cmVlKGNvbW1pdC0+dHJlZSwgcC0+dHJlZSkpCisJCQlyZXR1cm4gcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYXJlbnRzX3RvX2xpc3Qoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCisJLyoKKwkgKiBJZiB0aGUgY29tbWl0IGlzIHVuaW50ZXJlc3RpbmcsIGRvbid0IHRyeSB0bworCSAqIHBydW5lIHBhcmVudHMgLSB3ZSB3YW50IHRoZSBtYXhpbWFsIHVuaW50ZXJlc3RpbmcKKwkgKiBzZXQuCisJICoKKwkgKiBOb3JtYWxseSB3ZSBoYXZlbid0IHBhcnNlZCB0aGUgcGFyZW50CisJICogeWV0LCBzbyB3ZSB3b24ndCBoYXZlIGEgcGFyZW50IG9mIGEgcGFyZW50CisJICogaGVyZS4gSG93ZXZlciwgaXQgbWF5IHR1cm4gb3V0IHRoYXQgd2UndmUKKwkgKiByZWFjaGVkIHRoaXMgY29tbWl0IHNvbWUgb3RoZXIgd2F5ICh3aGVyZSBpdAorCSAqIHdhc24ndCB1bmludGVyZXN0aW5nKSwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkCisJICogdG8gbWFyayBpdHMgcGFyZW50cyByZWN1cnNpdmVseSB0b28uLgorCSAqLworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJd2hpbGUgKHBhcmVudCkgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCXBhcnNlX2NvbW1pdChwKTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJaWYgKHAtPnBhcmVudHMpCisJCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcocCk7CisJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU0VFTikKKwkJCQljb250aW51ZTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQkJaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT2ssIHRoZSBjb21taXQgd2Fzbid0IHVuaW50ZXJlc3RpbmcuIElmIGl0CisJICogaXMgYSBtZXJnZSwgdHJ5IHRvIGZpbmQgdGhlIHBhcmVudCB0aGF0IGhhcworCSAqIG5vIGRpZmZlcmVuY2VzIGluIHRoZSBwYXRoIHNldCBpZiBvbmUgZXhpc3RzLgorCSAqLworCWlmIChwYXRocyAmJiBwYXJlbnQgJiYgcGFyZW50LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnByZWZlcnJlZDsKKworCQlwcmVmZXJyZWQgPSB0cnlfdG9fc2ltcGxpZnlfbWVyZ2UoY29tbWl0LCBwYXJlbnQpOworCQlpZiAocHJlZmVycmVkKSB7CisJCQlwYXJlbnQtPml0ZW0gPSBwcmVmZXJyZWQ7CisJCQlwYXJlbnQtPm5leHQgPSBOVUxMOworCQl9CisJfQorCisJd2hpbGUgKHBhcmVudCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCisJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKworCQlwYXJzZV9jb21taXQocCk7CisJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJY29udGludWU7CisJCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCQlpbnNlcnRfYnlfZGF0ZShwLCBsaXN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXByZXNzX2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKworCQlpZiAoIXBhcmVudCkgeworCQkJaWYgKCFzYW1lX3RyZWVfYXNfZW1wdHkoY29tbWl0LT50cmVlKSkKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFQ0hBTkdFOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBFeGFjdGx5IG9uZSBwYXJlbnQ/IENoZWNrIGlmIGl0IGxlYXZlcyB0aGUgdHJlZQorCQkgKiB1bmNoYW5nZWQKKwkJICovCisJCWlmICghcGFyZW50LT5uZXh0KSB7CisJCQlzdHJ1Y3QgdHJlZSAqdDEgPSBjb21taXQtPnRyZWU7CisJCQlzdHJ1Y3QgdHJlZSAqdDIgPSBwYXJlbnQtPml0ZW0tPnRyZWU7CisJCQlpZiAoIXQxIHx8ICF0MiB8fCBzYW1lX3RyZWUodDEsIHQyKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFQ0hBTkdFOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqbGltaXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdsaXN0ID0gTlVMTDsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwID0gJm5ld2xpc3Q7CiAJd2hpbGUgKGxpc3QpIHsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmbGlzdCwgU0VFTik7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkgPSBsaXN0OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOwogCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmY29tbWl0LT5vYmplY3Q7CiAKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWZyZWUoZW50cnkpOworCisJCWlmIChtYXhfYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPCBtYXhfYWdlKSkKKwkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKIAkJaWYgKHVucGFja2VkICYmIGhhc19zaGExX3BhY2sob2JqLT5zaGExKSkKIAkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJYWRkX3BhcmVudHNfdG9fbGlzdChjb21taXQsICZsaXN0KTsKIAkJaWYgKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CiAJCQltYXJrX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOwogCQkJaWYgKGV2ZXJ5Ym9keV91bmludGVyZXN0aW5nKGxpc3QpKQogCQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKG1pbl9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA+IG1pbl9hZ2UpKQorCQkJY29udGludWU7CiAJCXAgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcCktPm5leHQ7CiAJfQogCWlmICh0cmVlX29iamVjdHMpCiAJCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhuZXdsaXN0KTsKKwlpZiAocGF0aHMgJiYgZGVuc2UpCisJCWNvbXByZXNzX2xpc3QobmV3bGlzdCk7CiAJaWYgKGJpc2VjdF9saXN0KQogCQluZXdsaXN0ID0gZmluZF9iaXNlY3Rpb24obmV3bGlzdCk7CiAJcmV0dXJuIG5ld2xpc3Q7CkBAIC0zOTYsMTMgKzYxOSwxMCBAQAogCWFkZF9vYmplY3Qob2JqLCAmcGVuZGluZ19vYmplY3RzLCBuYW1lKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXRfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0X3JlZmVyZW5jZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CiAKLQlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCi0JCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKIAlvYmplY3QgPSBwYXJzZV9vYmplY3Qoc2hhMSk7CiAJaWYgKCFvYmplY3QpCiAJCWRpZSgiYmFkIG9iamVjdCAlcyIsIG5hbWUpOwpAQCAtNDc1LDE4ICs2OTUsMzUgQEAKIAljb21taXRfbGlzdF9pbnNlcnQoY29tLCBsc3QpOwogfQogCisvKiBmb3JfZWFjaF9yZWYoKSBjYWxsYmFjayBkb2VzIG5vdCBhbGxvdyB1c2VyIGRhdGEgLS0gWXVjay4gKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKipnbG9iYWxfbHN0OwogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitzdGF0aWMgaW50IGluY2x1ZGVfb25lX2NvbW1pdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogeworCXN0cnVjdCBjb21taXQgKmNvbSA9IGdldF9jb21taXRfcmVmZXJlbmNlKHBhdGgsIHNoYTEsIDApOworCWhhbmRsZV9vbmVfY29tbWl0KGNvbSwgZ2xvYmFsX2xzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hbGwoc3RydWN0IGNvbW1pdF9saXN0ICoqbHN0KQoreworCWdsb2JhbF9sc3QgPSBsc3Q7CisJZm9yX2VhY2hfcmVmKGluY2x1ZGVfb25lX2NvbW1pdCk7CisJZ2xvYmFsX2xzdCA9IE5VTEw7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKIAlpbnQgaSwgbGltaXRlZCA9IDA7CiAKLQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CiAJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKIAkJaW50IGZsYWdzOwotCQljaGFyICphcmcgPSBhcmd2W2ldOworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCQljaGFyICpkb3Rkb3Q7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAogCQlpZiAoIXN0cm5jbXAoYXJnLCAiLS1tYXgtY291bnQ9IiwgMTIpKSB7CiAJCQltYXhfY291bnQgPSBhdG9pKGFyZyArIDEyKTsKQEAgLTQ5NCwxMCArNzMxLDEyIEBACiAJCX0KIAkJaWYgKCFzdHJuY21wKGFyZywgIi0tbWF4LWFnZT0iLCAxMCkpIHsKIAkJCW1heF9hZ2UgPSBhdG9pKGFyZyArIDEwKTsKKwkJCWxpbWl0ZWQgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJuY21wKGFyZywgIi0tbWluLWFnZT0iLCAxMCkpIHsKIAkJCW1pbl9hZ2UgPSBhdG9pKGFyZyArIDEwKTsKKwkJCWxpbWl0ZWQgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWFkZXIiKSkgewpAQCAtNTI2LDYgKzc2NSwxMCBAQAogCQkJYmlzZWN0X2xpc3QgPSAxOwogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSkgeworCQkJaGFuZGxlX2FsbCgmbGlzdCk7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMiKSkgewogCQkJdGFnX29iamVjdHMgPSAxOwogCQkJdHJlZV9vYmplY3RzID0gMTsKQEAgLTU1MCw2ICs3OTMsMTggQEAKIAkJICAgICAgICBsaW1pdGVkID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZGVuc2UiKSkgeworCQkJZGVuc2UgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zcGFyc2UiKSkgeworCQkJZGVuc2UgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KIAogCQlpZiAoc2hvd19icmVha3MgJiYgIW1lcmdlX29yZGVyKQogCQkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOwpAQCAtNTU3LDE1ICs4MTIsMTkgQEAKIAkJZmxhZ3MgPSAwOwogCQlkb3Rkb3QgPSBzdHJzdHIoYXJnLCAiLi4iKTsKIAkJaWYgKGRvdGRvdCkgeworCQkJdW5zaWduZWQgY2hhciBmcm9tX3NoYTFbMjBdOwogCQkJY2hhciAqbmV4dCA9IGRvdGRvdCArIDI7Ci0JCQlzdHJ1Y3QgY29tbWl0ICpleGNsdWRlID0gTlVMTDsKLQkJCXN0cnVjdCBjb21taXQgKmluY2x1ZGUgPSBOVUxMOwogCQkJKmRvdGRvdCA9IDA7CiAJCQlpZiAoISpuZXh0KQogCQkJCW5leHQgPSAiSEVBRCI7Ci0JCQlleGNsdWRlID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnLCBVTklOVEVSRVNUSU5HKTsKLQkJCWluY2x1ZGUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShuZXh0LCAwKTsKLQkJCWlmIChleGNsdWRlICYmIGluY2x1ZGUpIHsKKwkJCWlmICghZ2V0X3NoYTEoYXJnLCBmcm9tX3NoYTEpICYmICFnZXRfc2hhMShuZXh0LCBzaGExKSkgeworCQkJCXN0cnVjdCBjb21taXQgKmV4Y2x1ZGU7CisJCQkJc3RydWN0IGNvbW1pdCAqaW5jbHVkZTsKKwkJCQkKKwkJCQlleGNsdWRlID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnLCBmcm9tX3NoYTEsIFVOSU5URVJFU1RJTkcpOworCQkJCWluY2x1ZGUgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShuZXh0LCBzaGExLCAwKTsKKwkJCQlpZiAoIWV4Y2x1ZGUgfHwgIWluY2x1ZGUpCisJCQkJCWRpZSgiSW52YWxpZCByZXZpc2lvbiByYW5nZSAlcy4uJXMiLCBhcmcsIG5leHQpOwogCQkJCWxpbWl0ZWQgPSAxOwogCQkJCWhhbmRsZV9vbmVfY29tbWl0KGV4Y2x1ZGUsICZsaXN0KTsKIAkJCQloYW5kbGVfb25lX2NvbW1pdChpbmNsdWRlLCAmbGlzdCk7CkBAIC01NzgsMTUgKzgzNywzMSBAQAogCQkJYXJnKys7CiAJCQlsaW1pdGVkID0gMTsKIAkJfQotCQljb21taXQgPSBnZXRfY29tbWl0X3JlZmVyZW5jZShhcmcsIGZsYWdzKTsKKwkJaWYgKGdldF9zaGExKGFyZywgc2hhMSkgPCAwKQorCQkJYnJlYWs7CisJCWNvbW1pdCA9IGdldF9jb21taXRfcmVmZXJlbmNlKGFyZywgc2hhMSwgZmxhZ3MpOwogCQloYW5kbGVfb25lX2NvbW1pdChjb21taXQsICZsaXN0KTsKIAl9CiAKKwlpZiAoIWxpc3QpCisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCXBhdGhzID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndiArIGkpOworCWlmIChwYXRocykgeworCQlsaW1pdGVkID0gMTsKKwkJZGlmZl90cmVlX3NldHVwX3BhdGhzKHBhdGhzKTsKKwl9CisKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSB2ZXJib3NlX2hlYWRlcjsKIAl0cmFja19vYmplY3RfcmVmcyA9IDA7CiAKIAlpZiAoIW1lcmdlX29yZGVyKSB7CQkKIAkJc29ydF9ieV9kYXRlKCZsaXN0KTsKKwkJaWYgKGxpc3QgJiYgIWxpbWl0ZWQgJiYgbWF4X2NvdW50ID09IDEgJiYKKwkJICAgICF0YWdfb2JqZWN0cyAmJiAhdHJlZV9vYmplY3RzICYmICFibG9iX29iamVjdHMpIHsKKwkJCXNob3dfY29tbWl0KGxpc3QtPml0ZW0pOworCQkJcmV0dXJuIDA7CisJCX0KIAkgICAgICAgIGlmIChsaW1pdGVkKQogCQkJbGlzdCA9IGxpbWl0X2xpc3QobGlzdCk7CiAJCWlmICh0b3BvX29yZGVyKQpkaWZmIC0tZ2l0IGEvcmV2LXBhcnNlLmMgYi9yZXYtcGFyc2UuYwppbmRleCAwZjU2MzBmLi41YTk4OTgyIDEwMDY0NAotLS0gYS9yZXYtcGFyc2UuYworKysgYi9yZXYtcGFyc2UuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgogI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgogCiAjZGVmaW5lIERPX1JFVlMJCTEKICNkZWZpbmUgRE9fTk9SRVYJMgpAQCAtMzEsNyArMzIsOSBAQAogc3RhdGljIGludCBpc19yZXZfYXJndW1lbnQoY29uc3QgY2hhciAqYXJnKQogewogCXN0YXRpYyBjb25zdCBjaGFyICpyZXZfYXJnc1tdID0geworCQkiLS1hbGwiLAogCQkiLS1iaXNlY3QiLAorCQkiLS1kZW5zZSIsCiAJCSItLWhlYWRlciIsCiAJCSItLW1heC1hZ2U9IiwKIAkJIi0tbWF4LWNvdW50PSIsCkBAIC00Miw2ICs0NSw3IEBACiAJCSItLXBhcmVudHMiLAogCQkiLS1wcmV0dHkiLAogCQkiLS1zaG93LWJyZWFrcyIsCisJCSItLXNwYXJzZSIsCiAJCSItLXRvcG8tb3JkZXIiLAogCQkiLS11bnBhY2tlZCIsCiAJCU5VTEwKQEAgLTEyNSw2ICsxMjksMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgc2hvd19kYXRlc3RyaW5nKGNvbnN0IGNoYXIgKmZsYWcsIGNvbnN0IGNoYXIgKmRhdGVzdHIpCit7CisJRklMRSAqZGF0ZTsKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAwXTsKKwlzdGF0aWMgY2hhciBjbWRbMTAwMF07CisJaW50IGxlbjsKKworCS8qIGRhdGUgaGFuZGxpbmcgcmVxdWlyZXMgYm90aCBmbGFncyBhbmQgcmV2cyAqLworCWlmICgoZmlsdGVyICYgKERPX0ZMQUdTIHwgRE9fUkVWUykpICE9IChET19GTEFHUyB8IERPX1JFVlMpKQorCQlyZXR1cm47CisJbGVuID0gc3RybGVuKGZsYWcpOworCW1lbWNweShidWZmZXIsIGZsYWcsIGxlbik7CisKKwlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAiZGF0ZSAtLWRhdGU9JXMgKyUlcyIsIHNxX3F1b3RlKGRhdGVzdHIpKTsKKwlkYXRlID0gcG9wZW4oY21kLCAiciIpOworCWlmICghZGF0ZSB8fCAhZmdldHMoYnVmZmVyICsgbGVuLCBzaXplb2YoYnVmZmVyKSAtIGxlbiwgZGF0ZSkpCisJCWRpZSgiZ2l0LXJldi1saXN0OiBiYWQgZGF0ZSBzdHJpbmciKTsKKwlwY2xvc2UoZGF0ZSk7CisJbGVuID0gc3RybGVuKGJ1ZmZlcik7CisJaWYgKGJ1ZmZlcltsZW4tMV0gPT0gJ1xuJykKKwkJYnVmZmVyWy0tbGVuXSA9IDA7CisJc2hvdyhidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqYXJnKQoreworCXNob3dfZGVmYXVsdCgpOworCWlmICgoZmlsdGVyICYgKERPX05PTkZMQUdTfERPX05PUkVWKSkgPT0gKERPX05PTkZMQUdTfERPX05PUkVWKSkKKwkJc2hvdyhhcmcpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJaW50IGksIGFzX2lzID0gMCwgdmVyaWZ5ID0gMDsKQEAgLTEzNiwxMiArMTcxLDE1IEBACiAJCWNoYXIgKmRvdGRvdDsKIAkKIAkJaWYgKGFzX2lzKSB7Ci0JCQlzaG93KGFyZyk7CisJCQlzaG93X2ZpbGUoYXJnKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICgqYXJnID09ICctJykgewogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgewogCQkJCWFzX2lzID0gMTsKKwkJCQkvKiBQYXNzIG9uIHRoZSAiLS0iIGlmIHdlIHNob3cgYW55dGhpbmcgYnV0IGZpbGVzLi4gKi8KKwkJCQlpZiAoZmlsdGVyICYgKERPX0ZMQUdTIHwgRE9fUkVWUykpCisJCQkJCXNob3dfZmlsZShhcmcpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZWZhdWx0IikpIHsKQEAgLTIwNyw2ICsyNDUsMjIgQEAKIAkJCQlwcmludGYoIiVzLy5naXRcbiIsIGN3ZCk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cm5jbXAoYXJnLCAiLS1zaW5jZT0iLCA4KSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1tYXgtYWdlPSIsIGFyZys4KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RybmNtcChhcmcsICItLWFmdGVyPSIsIDgpKSB7CisJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1heC1hZ2U9IiwgYXJnKzgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJuY21wKGFyZywgIi0tYmVmb3JlPSIsIDkpKSB7CisJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1pbi1hZ2U9IiwgYXJnKzkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJuY21wKGFyZywgIi0tdW50aWw9IiwgOCkpIHsKKwkJCQlzaG93X2RhdGVzdHJpbmcoIi0tbWluLWFnZT0iLCBhcmcrOCk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAodmVyaWZ5KQogCQkJCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7CiAJCQlzaG93X2ZsYWcoYXJnKTsKQEAgLTI0MCw5ICsyOTQsOCBAQAogCQl9CiAJCWlmICh2ZXJpZnkpCiAJCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOwotCQlpZiAoKGZpbHRlciAmIChET19OT05GTEFHU3xET19OT1JFVikpID09Ci0JCSAgICAoRE9fTk9ORkxBR1N8RE9fTk9SRVYpKQotCQkJc2hvdyhhcmcpOworCQlhc19pcyA9IDE7CisJCXNob3dfZmlsZShhcmcpOwogCX0KIAlzaG93X2RlZmF1bHQoKTsKIAlpZiAodmVyaWZ5ICYmIHJldnNfY291bnQgIT0gMSkKZGlmZiAtLWdpdCBhL3Jldi10cmVlLmMgYi9yZXYtdHJlZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjkyODE5Li4wMDAwMDAwCi0tLSBhL3Jldi10cmVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotI2luY2x1ZGUgImNhY2hlLmgiCi0jaW5jbHVkZSAiY29tbWl0LmgiCi0KLS8qCi0gKiByZXZpc2lvbi5oIGxlYXZlcyB0aGUgbG93IDE2IGJpdHMgb2YgdGhlICJmbGFncyIgZmllbGQgb2YgdGhlCi0gKiByZXZpc2lvbiBkYXRhIHN0cnVjdHVyZSB1bnVzZWQuIFdlIHVzZSBpdCBmb3IgYSAicmVhY2hhYmxlIGZyb20KLSAqIHRoaXMgY29tbWl0IDxOPiIgYml0bWFzay4KLSAqLwotI2RlZmluZSBNQVhfQ09NTUlUUyAxNgotI2RlZmluZSBSRUFDSEFCTEUgKDFVIDw8IDE2KQotCi0jZGVmaW5lIGNtaXRfZmxhZ3MoY21pdCkgKChjbWl0KS0+b2JqZWN0LmZsYWdzICYgflJFQUNIQUJMRSkKLQotc3RhdGljIGludCBzaG93X2VkZ2VzID0gMDsKLXN0YXRpYyBpbnQgYmFzZW1hc2sgPSAwOwotCi1zdGF0aWMgdm9pZCByZWFkX2NhY2hlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCkKLXsKLQlkaWUoIm5vIHJldnRyZWUgY2FjaGUgZmlsZSB5ZXQiKTsKLX0KLQotLyoKLSAqIFNvbWUgcmV2aXNpb25zIGFyZSBsZXNzIGludGVyZXN0aW5nIHRoYW4gb3RoZXJzLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiB3ZSB1c2UgYSBjYWNoZS1maWxlLCB0aGF0IG9uZSBtYXkgY29udGFpbgotICogcmV2aXNpb25zIHRoYXQgd2VyZSBuZXZlciB1c2VkLiBUaGV5IGFyZSBuZXZlciBpbnRlcmVzdGluZy4KLSAqCi0gKiBBbmQgc29tZXRpbWVzIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiAiZWRnZSIgY29tbWl0cywgaWUKLSAqIHBsYWNlcyB3aGVyZSB0aGUgbWFya2luZyBjaGFuZ2VzIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZC4KLSAqLwotc3RhdGljIGludCBpbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpyZXYpCi17Ci0JdW5zaWduZWQgbWFzayA9IGNtaXRfZmxhZ3MocmV2KTsKLQotCWlmICghbWFzaykKLQkJcmV0dXJuIDA7Ci0JaWYgKHNob3dfZWRnZXMpIHsKLQkJc3RydWN0IGNvbW1pdF9saXN0ICpwID0gcmV2LT5wYXJlbnRzOwotCQl3aGlsZSAocCkgewotCQkJaWYgKG1hc2sgIT0gY21pdF9mbGFncyhwLT5pdGVtKSkKLQkJCQlyZXR1cm4gMTsKLQkJCXAgPSBwLT5uZXh0OwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQlpZiAobWFzayAmIGJhc2VtYXNrKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi0vKgotICogVXNhZ2U6IGdpdC1yZXYtdHJlZSBbLS1lZGdlc10gWy0tY2FjaGUgPGNhY2hlLWZpbGU+XSA8Y29tbWl0LWlkPiBbPGNvbW1pdC1pZDI+XQotICoKLSAqIFRoZSBjYWNoZS1maWxlIGNhbiBiZSBxdWl0ZSBpbXBvcnRhbnQgZm9yIGJpZyB0cmVlcy4gVGhpcyBpcyBhbgotICogZXhwZW5zaXZlIG9wZXJhdGlvbiBpZiB5b3UgaGF2ZSB0byB3YWxrIHRoZSB3aG9sZSBjaGFpbiBvZgotICogcGFyZW50cyBpbiBhIHRyZWUgd2l0aCBhIGxvbmcgcmV2aXNpb24gaGlzdG9yeS4KLSAqLwotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotCWludCBpOwotCWludCBuciA9IDA7Ci0JdW5zaWduZWQgY2hhciBzaGExW01BWF9DT01NSVRTXVsyMF07Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKLQotCS8qCi0JICogRmlyc3QgLSBwaWNrIHVwIGFsbCB0aGUgcmV2aXNpb25zIHdlIGNhbiAoYm90aCBmcm9tCi0JICogY2FjaGVzIGFuZCBmcm9tIGNvbW1pdCBmaWxlIGNoYWlucykuCi0JICovCi0JZm9yIChpID0gMTsgaSA8IGFyZ2MgOyBpKyspIHsKLQkJY2hhciAqYXJnID0gYXJndltpXTsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwotCi0JCWlmICghc3RyY21wKGFyZywgIi0tY2FjaGUiKSkgewotCQkJcmVhZF9jYWNoZV9maWxlKGFyZ3ZbKytpXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghc3RyY21wKGFyZywgIi0tZWRnZXMiKSkgewotCQkJc2hvd19lZGdlcyA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChhcmdbMF0gPT0gJ14nKSB7Ci0JCQlhcmcrKzsKLQkJCWJhc2VtYXNrIHw9IDE8PG5yOwotCQl9Ci0JCWlmIChuciA+PSBNQVhfQ09NTUlUUyB8fCBnZXRfc2hhMShhcmcsIHNoYTFbbnJdKSkKLQkJCXVzYWdlKCJnaXQtcmV2LXRyZWUgWy0tZWRnZXNdIFstLWNhY2hlIDxjYWNoZS1maWxlPl0gPGNvbW1pdC1pZD4gWzxjb21taXQtaWQ+XSIpOwotCi0JCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTFbbnJdKTsKLQkJaWYgKCFjb21taXQgfHwgcGFyc2VfY29tbWl0KGNvbW1pdCkgPCAwKQotCQkJZGllKCJiYWQgY29tbWl0IG9iamVjdCIpOwotCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmbGlzdCk7Ci0JCW5yKys7Ci0JfQotCi0JLyoKLQkgKiBQYXJzZSBhbGwgdGhlIGNvbW1pdHMgaW4gZGF0ZSBvcmRlci4KLQkgKgotCSAqIFdlIHJlYWxseSBzaG91bGQgc3RvcCBvbmNlIHdlIGtub3cgZW5vdWdoLCBidXQgdGhhdCdzIGEKLQkgKiBkZWNpc2lvbiB0aGF0IGlzbid0IHRyaXZpYWwgdG8gbWFrZS4KLQkgKi8KLQl3aGlsZSAobGlzdCkKLQkJcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmbGlzdCwgUkVBQ0hBQkxFKTsKLQotCS8qCi0JICogTm93IHdlIGhhdmUgdGhlIG1heGltYWwgdHJlZS4gV2FsayB0aGUgZGlmZmVyZW50IHNoYSBmaWxlcyBiYWNrIHRvIHRoZSByb290LgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQltYXJrX3JlYWNoYWJsZSgmbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMVtpXSktPm9iamVjdCwgMSA8PCBpKTsKLQotCS8qCi0JICogTm93IHByaW50IG91dCB0aGUgcmVzdWx0cy4uCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG5yX29ianM7IGkrKykgewotCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBvYmpzW2ldOwotCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7Ci0JCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKLQotCQlpZiAob2JqLT50eXBlICE9IGNvbW1pdF90eXBlKQotCQkJY29udGludWU7Ci0KLQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikgb2JqOwotCi0JCWlmICghaW50ZXJlc3RpbmcoY29tbWl0KSkKLQkJCWNvbnRpbnVlOwotCi0JCXByaW50ZigiJWx1ICVzOiVkIiwgY29tbWl0LT5kYXRlLCBzaGExX3RvX2hleChvYmotPnNoYTEpLAotCQkJCSAgICBjbWl0X2ZsYWdzKGNvbW1pdCkpOwotCQlwID0gY29tbWl0LT5wYXJlbnRzOwotCQl3aGlsZSAocCkgewotCQkJcHJpbnRmKCIgJXM6JWQiLCBzaGExX3RvX2hleChwLT5pdGVtLT5vYmplY3Quc2hhMSksIAotCQkJICAgICAgIGNtaXRfZmxhZ3MocC0+aXRlbSkpOwotCQkJcCA9IHAtPm5leHQ7Ci0JCX0KLQkJcHJpbnRmKCJcbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3JzaC5jIGIvcnNoLmMKaW5kZXggYmFkNWNmZi4uZDY2NTI2OSAxMDA2NDQKLS0tIGEvcnNoLmMKKysrIGIvcnNoLmMKQEAgLTEsNTIgKzEsMTYgQEAKLSNpbmNsdWRlICJyc2guaCIKLQogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KIAorI2luY2x1ZGUgInJzaC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAjaW5jbHVkZSAiY2FjaGUuaCIKIAogI2RlZmluZSBDT01NQU5EX1NJWkUgNDA5NgogCiAvKgotICogV3JpdGUgYSBzaGVsbC1xdW90ZWQgdmVyc2lvbiBvZiBhIHN0cmluZyBpbnRvIGEgYnVmZmVyLCBhbmQKLSAqIHJldHVybiBieXRlcyB0aGF0IG91Z2h0IHRvIGJlIG91dHB1dCBleGNsdWRpbmcgZmluYWwgbnVsbC4KLSAqLwotc3RhdGljIGludCBzaGVsbF9xdW90ZShjaGFyICpidWYsIGludCBubWF4LCBjb25zdCBjaGFyICpzdHIpCi17Ci0JY2hhciBjaDsKLQlpbnQgbnE7Ci0JaW50IG9jID0gMDsKLQotCXdoaWxlICggKGNoID0gKnN0cisrKSApIHsKLQkJbnEgPSAwOwotCQlpZiAoIHN0cmNocigiICFcIiMkJSZcJygpKjs8PT4/W1xcXV5ge3x9IiwgY2gpICkKLQkJCW5xID0gMTsKLQotCQlpZiAoIG5xICkgewotCQkJaWYgKCBubWF4ID4gMSApIHsKLQkJCQkqYnVmKysgPSAnXFwnOwotCQkJCW5tYXgtLTsKLQkJCX0KLQkJCW9jKys7Ci0JCX0KLQotCQlpZiAoIG5tYXggPiAxICkgewotCQkJKmJ1ZisrID0gY2g7Ci0JCQlubWF4LS07Ci0JCX0KLQkJb2MrKzsKLQl9Ci0KLQlpZiAoIG5tYXggKQotCQkqYnVmID0gJ1wwJzsKLQotCXJldHVybiBvYzsKLX0KLQkJCQotLyoKLSAqIEFwcGVuZCBhIHN0cmluZyB0byBhIHN0cmluZyBidWZmZXIsIHdpdGggb3Igd2l0aG91dCBxdW90aW5nLiAgUmV0dXJuIHRydWUKLSAqIGlmIHRoZSBidWZmZXIgb3ZlcmZsb3dlZC4KKyAqIEFwcGVuZCBhIHN0cmluZyB0byBhIHN0cmluZyBidWZmZXIsIHdpdGggb3Igd2l0aG91dCBzaGVsbCBxdW90aW5nLgorICogUmV0dXJuIHRydWUgaWYgdGhlIGJ1ZmZlciBvdmVyZmxvd2VkLgogICovCiBzdGF0aWMgaW50IGFkZF90b19zdHJpbmcoY2hhciAqKnB0cnAsIGludCAqc2l6ZXAsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHF1b3RlKQogewpAQCAtNTYsNyArMjAsNyBAQAogCWludCBlcnIgPSAwOwogCiAJaWYgKCBxdW90ZSApIHsKLQkJb2MgPSBzaGVsbF9xdW90ZShwLCBzaXplLCBzdHIpOworCQlvYyA9IHNxX3F1b3RlX2J1ZihwLCBzaXplLCBzdHIpOwogCX0gZWxzZSB7CiAJCW9jID0gc3RybGVuKHN0cik7CiAJCW1lbWNweShwLCBzdHIsIChvYyA+PSBzaXplKSA/IHNpemUtMSA6IG9jKTsKQEAgLTEwNCwxMyArNjgsMTIgQEAKIAlpZiAoIXBhdGgpIHsKIAkJcmV0dXJuIGVycm9yKCJCYWQgVVJMOiAlcyIsIHVybCk7CiAJfQotCS8qICRHSVRfUlNIIDxob3N0PiAiZW52IEdJUl9ESVI9PHBhdGg+IDxyZW1vdGVfcHJvZz4gPGFyZ3MuLi4+IiAqLworCS8qICRHSVRfUlNIIDxob3N0PiAiZW52IEdJVF9ESVI9PHBhdGg+IDxyZW1vdGVfcHJvZz4gPGFyZ3MuLi4+IiAqLwogCXNpemVuID0gQ09NTUFORF9TSVpFOwogCXBvc24gPSBjb21tYW5kOwogCW9mID0gMDsKIAlvZiB8PSBhZGRfdG9fc3RyaW5nKCZwb3NuLCAmc2l6ZW4sICJlbnYgIiwgMCk7Ci0Jb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCBHSVRfRElSX0VOVklST05NRU5ULCAwKTsKLQlvZiB8PSBhZGRfdG9fc3RyaW5nKCZwb3NuLCAmc2l6ZW4sICI9IiwgMCk7CisJb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCBHSVRfRElSX0VOVklST05NRU5UICI9IiwgMCk7CiAJb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCBwYXRoLCAxKTsKIAlvZiB8PSBhZGRfdG9fc3RyaW5nKCZwb3NuLCAmc2l6ZW4sICIgIiwgMCk7CiAJb2YgfD0gYWRkX3RvX3N0cmluZygmcG9zbiwgJnNpemVuLCByZW1vdGVfcHJvZywgMSk7CmRpZmYgLS1naXQgYS9zZW5kLXBhY2suYyBiL3NlbmQtcGFjay5jCmluZGV4IDU1ZDhmZjcuLjNlZWIxOGYgMTAwNjQ0Ci0tLSBhL3NlbmQtcGFjay5jCisrKyBiL3NlbmQtcGFjay5jCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogCS8qIEJvdGggbmV3IGFuZCBvbGQgbXVzdCBiZSBjb21taXQtaXNoIGFuZCBuZXcgaXMgZGVzY2VuZGFudCBvZgogCSAqIG9sZC4gIE90aGVyd2lzZSB3ZSByZXF1aXJlIC0tZm9yY2UuCiAJICovCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qob2xkX3NoYTEpKTsKKwlvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChvbGRfc2hhMSksIE5VTEwsIDApOwogCWlmICghbyB8fCBvLT50eXBlICE9IGNvbW1pdF90eXBlKQogCQlyZXR1cm4gMDsKIAlvbGQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwogCi0JbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3QobmV3X3NoYTEpKTsKKwlvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChuZXdfc2hhMSksIE5VTEwsIDApOwogCWlmICghbyB8fCBvLT50eXBlICE9IGNvbW1pdF90eXBlKQogCQlyZXR1cm4gMDsKIAluZXcgPSAoc3RydWN0IGNvbW1pdCAqKSBvOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJaW50IG5ld19yZWZzOwogCiAJLyogTm8gZnVubnkgYnVzaW5lc3Mgd2l0aCB0aGUgbWF0Y2hlciAqLwotCXJlbW90ZV90YWlsID0gZ2V0X3JlbW90ZV9oZWFkcyhpbiwgJnJlbW90ZV9yZWZzLCAwLCBOVUxMKTsKKwlyZW1vdGVfdGFpbCA9IGdldF9yZW1vdGVfaGVhZHMoaW4sICZyZW1vdGVfcmVmcywgMCwgTlVMTCwgMSk7CiAJZ2V0X2xvY2FsX2hlYWRzKCk7CiAKIAkvKiBtYXRjaCB0aGVtIHVwICovCmRpZmYgLS1naXQgYS9zZXJ2ZXItaW5mby5jIGIvc2VydmVyLWluZm8uYwppbmRleCBhOWU1NjA3Li4wY2JhOGUxIDEwMDY0NAotLS0gYS9zZXJ2ZXItaW5mby5jCisrKyBiL3NlcnZlci1pbmZvLmMKQEAgLTksNyArOSwxNSBAQAogCiBzdGF0aWMgaW50IGFkZF9pbmZvX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogeworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisKIAlmcHJpbnRmKGluZm9fcmVmX2ZwLCAiJXMJJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwlpZiAoby0+dHlwZSA9PSB0YWdfdHlwZSkgeworCQlvID0gZGVyZWZfdGFnKG8sIHBhdGgsIDApOworCQlpZiAobykKKwkJCWZwcmludGYoaW5mb19yZWZfZnAsICIlcwklc157fVxuIiwKKwkJCQlzaGExX3RvX2hleChvLT5zaGExKSwgcGF0aCk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC01OSw2ICs2NywxNiBAQAogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CiAJCWZyZWUoY29tbWl0LT5idWZmZXIpOwogCQljb21taXQtPmJ1ZmZlciA9IE5VTEw7CisJfSBlbHNlIGlmIChvLT50eXBlID09IHRyZWVfdHlwZSkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IChzdHJ1Y3QgdHJlZSAqKW87CisJCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsICpuOworCQlmb3IgKGUgPSB0cmVlLT5lbnRyaWVzOyBlOyBlID0gbikgeworCQkJZnJlZShlLT5uYW1lKTsKKwkJCWUtPm5hbWUgPSBOVUxMOworCQkJbiA9IGUtPm5leHQ7CisJCQlmcmVlKGUpOworCQl9CisJCXRyZWUtPmVudHJpZXMgPSBOVUxMOwogCX0KIAlyZXR1cm4gbzsKIH0KZGlmZiAtLWdpdCBhL3NldHVwLmMgYi9zZXR1cC5jCmluZGV4IDM5NzM2NjguLmM0ODdkN2UgMTAwNjQ0Ci0tLSBhL3NldHVwLmMKKysrIGIvc2V0dXAuYwpAQCAtMSw4ICsxLDggQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCi1jaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNoYXIgKnBhdGgpCitjb25zdCBjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JY2hhciAqb3JpZyA9IHBhdGg7CisJY29uc3QgY2hhciAqb3JpZyA9IHBhdGg7CiAJZm9yICg7OykgewogCQljaGFyIGM7CiAJCWlmICgqcGF0aCAhPSAnLicpCkBAIC00NywxMCArNDcsMTAgQEAKIAlyZXR1cm4gcGF0aDsKIH0KIAotY29uc3QgY2hhciAqKmdldF9wYXRoc3BlYyhjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgKipwYXRoc3BlYykKK2NvbnN0IGNoYXIgKipnZXRfcGF0aHNwZWMoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCiB7Ci0JY2hhciAqZW50cnkgPSAqcGF0aHNwZWM7Ci0JY2hhciAqKnA7CisJY29uc3QgY2hhciAqZW50cnkgPSAqcGF0aHNwZWM7CisJY29uc3QgY2hhciAqKnA7CiAJaW50IHByZWZpeGxlbjsKIAogCWlmICghcHJlZml4ICYmICFlbnRyeSkKQEAgLTc2LDE4ICs3NiwyMCBAQAogICogVGVzdCBpdCBpdCBsb29rcyBsaWtlIHdlJ3JlIGF0IHRoZSB0b3AKICAqIGxldmVsIGdpdCBkaXJlY3RvcnkuIFdlIHdhbnQgdG8gc2VlIGEKICAqCi0gKiAgLSBhIEhFQUQgc3ltbGluayBhbmQgYSByZWZzLyBkaXJlY3RvcnkgdW5kZXIgIi5naXQiCiAgKiAgLSBlaXRoZXIgYSAuZ2l0L29iamVjdHMvIGRpcmVjdG9yeSBfb3JfIHRoZSBwcm9wZXIKICAqICAgIEdJVF9PQkpFQ1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiAgLSBhIHJlZnMvIGRpcmVjdG9yeSB1bmRlciAiLmdpdCIKKyAqICAtIGVpdGhlciBhIEhFQUQgc3ltbGluayBvciBhIEhFQUQgZmlsZSB0aGF0IGlzIGZvcm1hdHRlZCBhcworICogICAgYSBwcm9wZXIgInJlZjoiLgogICovCiBzdGF0aWMgaW50IGlzX3RvcGxldmVsX2RpcmVjdG9yeSh2b2lkKQogewotCXN0cnVjdCBzdGF0IHN0OwotCi0JcmV0dXJuCSFsc3RhdCgiLmdpdC9IRUFEIiwgJnN0KSAmJgotCQlTX0lTTE5LKHN0LnN0X21vZGUpICYmCi0JCSFhY2Nlc3MoIi5naXQvcmVmcy8iLCBYX09LKSAmJgotCQkoZ2V0ZW52KERCX0VOVklST05NRU5UKSB8fCAhYWNjZXNzKCIuZ2l0L29iamVjdHMvIiwgWF9PSykpOworCWlmIChhY2Nlc3MoIi5naXQvcmVmcy8iLCBYX09LKSB8fAorCSAgICBhY2Nlc3MoZ2V0ZW52KERCX0VOVklST05NRU5UKSA/CisJCSAgIGdldGVudihEQl9FTlZJUk9OTUVOVCkgOiAiLmdpdC9vYmplY3RzLyIsIFhfT0spIHx8CisJICAgIHZhbGlkYXRlX3N5bXJlZigiLmdpdC9IRUFEIikpCisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCiBjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5KHZvaWQpCmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDY2MzgyMDIuLjk0NmEzNTMgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC0yMCw2ICsyMCw4IEBACiAjZW5kaWYKICNlbmRpZgogCitjb25zdCB1bnNpZ25lZCBjaGFyIG51bGxfc2hhMVsyMF0gPSB7IDAsIH07CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hhMV9maWxlX29wZW5fZmxhZyA9IE9fTk9BVElNRTsKIAogc3RhdGljIHVuc2lnbmVkIGhleHZhbChjaGFyIGMpCkBAIC00Niw2MSArNDgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNoYXIgKmdpdF9kaXIsICpnaXRfb2JqZWN0X2RpciwgKmdpdF9pbmRleF9maWxlLCAqZ2l0X3JlZnNfZGlyLAotCSpnaXRfZ3JhZnRfZmlsZTsKLXN0YXRpYyB2b2lkIHNldHVwX2dpdF9lbnYodm9pZCkKLXsKLQlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2RpcikKLQkJZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKLQlnaXRfb2JqZWN0X2RpciA9IGdldGVudihEQl9FTlZJUk9OTUVOVCk7Ci0JaWYgKCFnaXRfb2JqZWN0X2RpcikgewotCQlnaXRfb2JqZWN0X2RpciA9IHhtYWxsb2Moc3RybGVuKGdpdF9kaXIpICsgOSk7Ci0JCXNwcmludGYoZ2l0X29iamVjdF9kaXIsICIlcy9vYmplY3RzIiwgZ2l0X2Rpcik7Ci0JfQotCWdpdF9yZWZzX2RpciA9IHhtYWxsb2Moc3RybGVuKGdpdF9kaXIpICsgNik7Ci0Jc3ByaW50ZihnaXRfcmVmc19kaXIsICIlcy9yZWZzIiwgZ2l0X2Rpcik7Ci0JZ2l0X2luZGV4X2ZpbGUgPSBnZXRlbnYoSU5ERVhfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2luZGV4X2ZpbGUpIHsKLQkJZ2l0X2luZGV4X2ZpbGUgPSB4bWFsbG9jKHN0cmxlbihnaXRfZGlyKSArIDcpOwotCQlzcHJpbnRmKGdpdF9pbmRleF9maWxlLCAiJXMvaW5kZXgiLCBnaXRfZGlyKTsKLQl9Ci0JZ2l0X2dyYWZ0X2ZpbGUgPSBnZXRlbnYoR1JBRlRfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2dyYWZ0X2ZpbGUpCi0JCWdpdF9ncmFmdF9maWxlID0gc3RyZHVwKGdpdF9wYXRoKCJpbmZvL2dyYWZ0cyIpKTsKLX0KLQotY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCkKLXsKLQlpZiAoIWdpdF9vYmplY3RfZGlyKQotCQlzZXR1cF9naXRfZW52KCk7Ci0JcmV0dXJuIGdpdF9vYmplY3RfZGlyOwotfQotCi1jaGFyICpnZXRfcmVmc19kaXJlY3Rvcnkodm9pZCkKLXsKLQlpZiAoIWdpdF9yZWZzX2RpcikKLQkJc2V0dXBfZ2l0X2VudigpOwotCXJldHVybiBnaXRfcmVmc19kaXI7Ci19Ci0KLWNoYXIgKmdldF9pbmRleF9maWxlKHZvaWQpCi17Ci0JaWYgKCFnaXRfaW5kZXhfZmlsZSkKLQkJc2V0dXBfZ2l0X2VudigpOwotCXJldHVybiBnaXRfaW5kZXhfZmlsZTsKLX0KLQotY2hhciAqZ2V0X2dyYWZ0X2ZpbGUodm9pZCkKLXsKLQlpZiAoIWdpdF9ncmFmdF9maWxlKQotCQlzZXR1cF9naXRfZW52KCk7Ci0JcmV0dXJuIGdpdF9ncmFmdF9maWxlOwotfQotCiBpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhjaGFyICpwYXRoKQogewogCWNoYXIgKnBvcyA9IHBhdGg7CisJaWYgKCpwb3MgPT0gJy8nKQorCQlwb3MrKzsKIAogCXdoaWxlIChwb3MpIHsKIAkJcG9zID0gc3RyY2hyKHBvcywgJy8nKTsKQEAgLTQ2Niw3ICs0MTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGFja2VkX2dpdCAqYWRkX3BhY2tlZF9naXQoY2hhciAqcGF0aCwgaW50IHBhdGhfbGVuKQorc3RydWN0IHBhY2tlZF9naXQgKmFkZF9wYWNrZWRfZ2l0KGNoYXIgKnBhdGgsIGludCBwYXRoX2xlbiwgaW50IGxvY2FsKQogewogCXN0cnVjdCBzdGF0IHN0OwogCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOwpAQCAtNDk0LDYgKzQ0Niw3IEBACiAJcC0+cGFja19iYXNlID0gTlVMTDsKIAlwLT5wYWNrX2xhc3RfdXNlZCA9IDA7CiAJcC0+cGFja191c2VfY250ID0gMDsKKwlwLT5wYWNrX2xvY2FsID0gbG9jYWw7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTUzNCw3ICs0ODcsNyBAQAogCXBhY2tlZF9naXQgPSBwYWNrOwogfQogCi1zdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2tlZF9naXRfb25lKGNoYXIgKm9iamRpcikKK3N0YXRpYyB2b2lkIHByZXBhcmVfcGFja2VkX2dpdF9vbmUoY2hhciAqb2JqZGlyLCBpbnQgbG9jYWwpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKIAlpbnQgbGVuOwpAQCAtNTU2LDcgKzUwOSw3IEBACiAKIAkJLyogd2UgaGF2ZSAuaWR4LiAgSXMgaXQgYSBmaWxlIHdlIGNhbiBtYXA/ICovCiAJCXN0cmNweShwYXRoICsgbGVuLCBkZS0+ZF9uYW1lKTsKLQkJcCA9IGFkZF9wYWNrZWRfZ2l0KHBhdGgsIGxlbiArIG5hbWVsZW4pOworCQlwID0gYWRkX3BhY2tlZF9naXQocGF0aCwgbGVuICsgbmFtZWxlbiwgbG9jYWwpOwogCQlpZiAoIXApCiAJCQljb250aW51ZTsKIAkJcC0+bmV4dCA9IHBhY2tlZF9naXQ7CkBAIC01NzIsMTEgKzUyNSwxMSBAQAogCiAJaWYgKHJ1bl9vbmNlKQogCQlyZXR1cm47Ci0JcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlwcmVwYXJlX3BhY2tlZF9naXRfb25lKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDEpOwogCXByZXBhcmVfYWx0X29kYigpOwogCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgewogCQlhbHQtPm5hbWVbMF0gPSAwOwotCQlwcmVwYXJlX3BhY2tlZF9naXRfb25lKGFsdC0+YmFzZSk7CisJCXByZXBhcmVfcGFja2VkX2dpdF9vbmUoYWx0LT5iYXNlLCAwKTsKIAl9CiAJcnVuX29uY2UgPSAxOwogfQpAQCAtODY0LDcgKzgxNyw4IEBACiAJCXN0cmNweSh0eXBlLCAidGFnIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRpZSgiY29ycnVwdGVkIHBhY2sgZmlsZSIpOworCQlkaWUoImNvcnJ1cHRlZCBwYWNrIGZpbGUgJXMgY29udGFpbmluZyBvYmplY3Qgb2Yga2luZCAlZCIsCisJCSAgICBwLT5wYWNrX25hbWUsIGtpbmQpOwogCX0KIAkqc3RvcmVfc2l6ZSA9IDA7IC8qIG5vdHlldCAqLwogfQpAQCAtOTAzLDcgKzg1Nyw4IEBACiAJCXN0cmNweSh0eXBlLCAidGFnIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRpZSgiY29ycnVwdGVkIHBhY2sgZmlsZSIpOworCQlkaWUoImNvcnJ1cHRlZCBwYWNrIGZpbGUgJXMgY29udGFpbmluZyBvYmplY3Qgb2Yga2luZCAlZCIsCisJCSAgICBwLT5wYWNrX25hbWUsIGtpbmQpOwogCX0KIAlpZiAoc2l6ZXApCiAJCSpzaXplcCA9IHNpemU7CkBAIC0xMDAzLDcgKzk1OCw3IEBACiAJcmV0dmFsID0gdW5wYWNrX2VudHJ5X2dlbnRseShlbnRyeSwgdHlwZSwgc2l6ZXApOwogCXVudXNlX3BhY2tlZF9naXQocCk7CiAJaWYgKCFyZXR2YWwpCi0JCWRpZSgiY29ycnVwdGVkIHBhY2sgZmlsZSIpOworCQlkaWUoImNvcnJ1cHRlZCBwYWNrIGZpbGUgJXMiLCBwLT5wYWNrX25hbWUpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEyMzcsNiArMTE5Miw3NyBAQAogCXJldHVybiBzaGExX2ZpbGVfbmFtZShzaGExKTsKIH0KIAorLyoKKyAqIExpbmsgdGhlIHRlbXBmaWxlIHRvIHRoZSBmaW5hbCBwbGFjZSwgcG9zc2libHkgY3JlYXRpbmcgdGhlCisgKiBsYXN0IGRpcmVjdG9yeSBsZXZlbCBhcyB5b3UgZG8gc28uCisgKgorICogUmV0dXJucyB0aGUgZXJybm8gb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGxpbmtfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNoYXIgKmZpbGVuYW1lKQoreworCWludCByZXQ7CisKKwlpZiAoIWxpbmsodG1wZmlsZSwgZmlsZW5hbWUpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IGlmIHRoYXQgZmFpbGVkCisJICogd2l0aCBhbiBFTk9FTlQuCisJICoKKwkgKiBSZS10cnkgdGhlICJsaW5rKCkiIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWtkaXIKKwkgKiBzdWNjZWVkcywgc2luY2UgYSByYWNlIG1pZ2h0IG1lYW4gdGhhdCBzb21lYm9keQorCSAqIGVsc2Ugc3VjY2VlZGVkLgorCSAqLworCXJldCA9IGVycm5vOworCWlmIChyZXQgPT0gRU5PRU5UKSB7CisJCWNoYXIgKmRpciA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisJCWlmIChkaXIpIHsKKwkJCSpkaXIgPSAwOworCQkJbWtkaXIoZmlsZW5hbWUsIDA3NzcpOworCQkJKmRpciA9ICcvJzsKKwkJCWlmICghbGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCQkJcmV0dXJuIDA7CisJCQlyZXQgPSBlcnJubzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTW92ZSB0aGUganVzdCB3cml0dGVuIG9iamVjdCBpbnRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlCisgKi8KK2ludCBtb3ZlX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgcmV0ID0gbGlua190ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOworCisJLyoKKwkgKiBDb2RhIGhhY2sgLSBjb2RhIGRvZXNuJ3QgbGlrZSBjcm9zcy1kaXJlY3RvcnkgbGlua3MsCisJICogc28gd2UgZmFsbCBiYWNrIHRvIGEgcmVuYW1lLCB3aGljaCB3aWxsIG1lYW4gdGhhdCBpdAorCSAqIHdvbid0IGJlIGFibGUgdG8gY2hlY2sgY29sbGlzaW9ucywgYnV0IHRoYXQncyBub3QgYQorCSAqIGJpZyBkZWFsLgorCSAqCisJICogVGhlIHNhbWUgaG9sZHMgZm9yIEZBVCBmb3JtYXR0ZWQgbWVkaWEuCisJICoKKwkgKiBXaGVuIHRoaXMgc3VjY2VlZHMsIHdlIGp1c3QgcmV0dXJuIDAuIFdlIGhhdmUgbm90aGluZworCSAqIGxlZnQgdG8gdW5saW5rLgorCSAqLworCWlmIChyZXQgJiYgcmV0ICE9IEVFWElTVCkgeworCQlpZiAoIXJlbmFtZSh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCQlyZXR1cm4gMDsKKwkJcmV0ID0gZXJybm87CisJfQorCXVubGluayh0bXBmaWxlKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gRUVYSVNUKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGVuYW1lICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihyZXQpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBGSVhNRSEhISBDb2xsaXNpb24gY2hlY2sgaGVyZSA/ICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCB3cml0ZV9zaGExX2ZpbGUodm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqcmV0dXJuc2hhMSkKIHsKIAlpbnQgc2l6ZTsKQEAgLTEyNDYsNyArMTI3Miw3IEBACiAJY2hhciAqZmlsZW5hbWU7CiAJc3RhdGljIGNoYXIgdG1wZmlsZVtQQVRIX01BWF07CiAJdW5zaWduZWQgY2hhciBoZHJbNTBdOwotCWludCBmZCwgaGRybGVuLCByZXQ7CisJaW50IGZkLCBoZHJsZW47CiAKIAkvKiBOb3JtYWxseSBpZiB3ZSBoYXZlIGl0IGluIHRoZSBwYWNrIHRoZW4gd2UgZG8gbm90IGJvdGhlciB3cml0aW5nCiAJICogaXQgb3V0IGludG8gLmdpdC9vYmplY3RzLz8/Lz97Mzh9IGZpbGUuCkBAIC0xMzA5LDMyICsxMzM1LDcgQEAKIAljbG9zZShmZCk7CiAJZnJlZShjb21wcmVzc2VkKTsKIAotCXJldCA9IGxpbmsodG1wZmlsZSwgZmlsZW5hbWUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXJldCA9IGVycm5vOwotCi0JCS8qCi0JCSAqIENvZGEgaGFjayAtIGNvZGEgZG9lc24ndCBsaWtlIGNyb3NzLWRpcmVjdG9yeSBsaW5rcywKLQkJICogc28gd2UgZmFsbCBiYWNrIHRvIGEgcmVuYW1lLCB3aGljaCB3aWxsIG1lYW4gdGhhdCBpdAotCQkgKiB3b24ndCBiZSBhYmxlIHRvIGNoZWNrIGNvbGxpc2lvbnMsIGJ1dCB0aGF0J3Mgbm90IGEKLQkJICogYmlnIGRlYWwuCi0JCSAqCi0JCSAqIFdoZW4gdGhpcyBzdWNjZWVkcywgd2UganVzdCByZXR1cm4gMC4gV2UgaGF2ZSBub3RoaW5nCi0JCSAqIGxlZnQgdG8gdW5saW5rLgotCQkgKi8KLQkJaWYgKHJldCA9PSBFWERFViAmJiAhcmVuYW1lKHRtcGZpbGUsIGZpbGVuYW1lKSkKLQkJCXJldHVybiAwOwotCX0KLQl1bmxpbmsodG1wZmlsZSk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9IEVFWElTVCkgewotCQkJZnByaW50ZihzdGRlcnIsICJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlczogJXMiLCBmaWxlbmFtZSwgc3RyZXJyb3IocmV0KSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJLyogRklYTUUhISEgQ29sbGlzaW9uIGNoZWNrIGhlcmUgPyAqLwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CiB9CiAKIGludCB3cml0ZV9zaGExX3RvX2ZkKGludCBmZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTE0MDksOCArMTQxMCw3IEBACiBpbnQgd3JpdGVfc2hhMV9mcm9tX2ZkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgY2hhciAqYnVmZmVyLAogCQkgICAgICAgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqYnVmcG9zbikKIHsKLQljaGFyICpmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwotCisJY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKIAlpbnQgbG9jYWw7CiAJel9zdHJlYW0gc3RyZWFtOwogCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKQEAgLTE0MTgsMTAgKzE0MTgsMTEgQEAKIAlpbnQgcmV0OwogCVNIQV9DVFggYzsKIAotCWxvY2FsID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy9vYmpfWFhYWFhYIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CiAKKwlsb2NhbCA9IG1rc3RlbXAodG1wZmlsZSk7CiAJaWYgKGxvY2FsIDwgMCkKLQkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBvcGVuICVzXG4iLCBmaWxlbmFtZSk7CisJCXJldHVybiBlcnJvcigiQ291bGRuJ3Qgb3BlbiAlcyBmb3IgJXNcbiIsIHRtcGZpbGUsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAogCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CiAKQEAgLTE0NTEsNyArMTQ1Miw3IEBACiAJCXNpemUgPSByZWFkKGZkLCBidWZmZXIgKyAqYnVmcG9zbiwgYnVmc2l6ZSAtICpidWZwb3NuKTsKIAkJaWYgKHNpemUgPD0gMCkgewogCQkJY2xvc2UobG9jYWwpOwotCQkJdW5saW5rKGZpbGVuYW1lKTsKKwkJCXVubGluayh0bXBmaWxlKTsKIAkJCWlmICghc2l6ZSkKIAkJCQlyZXR1cm4gZXJyb3IoIkNvbm5lY3Rpb24gY2xvc2VkPyIpOwogCQkJcGVycm9yKCJSZWFkaW5nIGZyb20gY29ubmVjdGlvbiIpOwpAQCAtMTQ2NCwxNSArMTQ2NSwxNSBAQAogCWNsb3NlKGxvY2FsKTsKIAlTSEExX0ZpbmFsKHJlYWxfc2hhMSwgJmMpOwogCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCXVubGluayhmaWxlbmFtZSk7CisJCXVubGluayh0bXBmaWxlKTsKIAkJcmV0dXJuIGVycm9yKCJGaWxlICVzIGNvcnJ1cHRlZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAl9CiAJaWYgKG1lbWNtcChzaGExLCByZWFsX3NoYTEsIDIwKSkgewotCQl1bmxpbmsoZmlsZW5hbWUpOworCQl1bmxpbmsodG1wZmlsZSk7CiAJCXJldHVybiBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2hcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAl9Ci0JCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgc2hhMV9maWxlX25hbWUoc2hhMSkpOwogfQogCiBpbnQgaGFzX3BhY2tfaW5kZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTE1MzQsMyArMTUzNSw0MiBAQAogCQltdW5tYXAoYnVmLCBzaXplKTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgaW5kZXhfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCB3cml0ZV9vYmplY3QpCit7CisJaW50IGZkOworCWNoYXIgKnRhcmdldDsKKworCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZSRUc6CisJCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gZXJyb3IoIm9wZW4oXCIlc1wiKTogJXMiLCBwYXRoLAorCQkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJaWYgKGluZGV4X2ZkKHNoYTEsIGZkLCBzdCwgd3JpdGVfb2JqZWN0LCBOVUxMKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLAorCQkJCSAgICAgcGF0aCk7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJdGFyZ2V0ID0geG1hbGxvYyhzdC0+c3Rfc2l6ZSsxKTsKKwkJaWYgKHJlYWRsaW5rKHBhdGgsIHRhcmdldCwgc3QtPnN0X3NpemUrMSkgIT0gc3QtPnN0X3NpemUpIHsKKwkJCWNoYXIgKmVycnN0ciA9IHN0cmVycm9yKGVycm5vKTsKKwkJCWZyZWUodGFyZ2V0KTsKKwkJCXJldHVybiBlcnJvcigicmVhZGxpbmsoXCIlc1wiKTogJXMiLCBwYXRoLAorCQkJICAgICAgICAgICAgIGVycnN0cik7CisJCX0KKwkJaWYgKCF3cml0ZV9vYmplY3QpIHsKKwkJCXVuc2lnbmVkIGNoYXIgaGRyWzUwXTsKKwkJCWludCBoZHJsZW47CisJCQl3cml0ZV9zaGExX2ZpbGVfcHJlcGFyZSh0YXJnZXQsIHN0LT5zdF9zaXplLCAiYmxvYiIsCisJCQkJCQlzaGExLCBoZHIsICZoZHJsZW4pOworCQl9IGVsc2UgaWYgKHdyaXRlX3NoYTFfZmlsZSh0YXJnZXQsIHN0LT5zdF9zaXplLCAiYmxvYiIsIHNoYTEpKQorCQkJcmV0dXJuIGVycm9yKCIlczogZmFpbGVkIHRvIGluc2VydCBpbnRvIGRhdGFiYXNlIiwKKwkJCQkgICAgIHBhdGgpOworCQlmcmVlKHRhcmdldCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBlcnJvcigiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIsIHBhdGgpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NoYTFfbmFtZS5jIGIvc2hhMV9uYW1lLmMKaW5kZXggYjRmZWQ5Mi4uYmUxNzU1YSAxMDA2NDQKLS0tIGEvc2hhMV9uYW1lLmMKKysrIGIvc2hhMV9uYW1lLmMKQEAgLTEsMzMgKzEsNTQgQEAKICNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCiAKIHN0YXRpYyBpbnQgZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUoaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlzdGF0aWMgY2hhciBkaXJuYW1lW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OwogCWNoYXIgaGV4WzQwXTsKLQlESVIgKmRpcjsKLQlpbnQgZm91bmQ7CisJaW50IGZvdW5kID0gMDsKKwlzdGF0aWMgc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmZha2VlbnQ7CiAKLQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICIlcy8lLjJzIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgbmFtZSk7Ci0JZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKwlpZiAoIWZha2VlbnQpIHsKKwkJY29uc3QgY2hhciAqb2JqZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwkJaW50IG9iamRpcl9sZW4gPSBzdHJsZW4ob2JqZGlyKTsKKwkJaW50IGVudGxlbiA9IG9iamRpcl9sZW4gKyA0MzsKKwkJZmFrZWVudCA9IHhtYWxsb2Moc2l6ZW9mKCpmYWtlZW50KSArIGVudGxlbik7CisJCW1lbWNweShmYWtlZW50LT5iYXNlLCBvYmpkaXIsIG9iamRpcl9sZW4pOworCQlmYWtlZW50LT5uYW1lID0gZmFrZWVudC0+YmFzZSArIG9iamRpcl9sZW4gKyAxOworCQlmYWtlZW50LT5uYW1lWy0xXSA9ICcvJzsKKwl9CisJZmFrZWVudC0+bmV4dCA9IGFsdF9vZGJfbGlzdDsKKwogCXNwcmludGYoaGV4LCAiJS4ycyIsIG5hbWUpOwotCWZvdW5kID0gMDsKLQlpZiAoZGlyKSB7CisJZm9yIChhbHQgPSBmYWtlZW50OyBhbHQgJiYgZm91bmQgPCAyOyBhbHQgPSBhbHQtPm5leHQpIHsKIAkJc3RydWN0IGRpcmVudCAqZGU7CisJCURJUiAqZGlyOworCQlzcHJpbnRmKGFsdC0+bmFtZSwgIiUuMnMvIiwgbmFtZSk7CisJCWRpciA9IG9wZW5kaXIoYWx0LT5iYXNlKTsKKwkJaWYgKCFkaXIpCisJCQljb250aW51ZTsKIAkJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgewogCQkJaWYgKHN0cmxlbihkZS0+ZF9uYW1lKSAhPSAzOCkKIAkJCQljb250aW51ZTsKLQkJCWlmIChtZW1jbXAoZGUtPmRfbmFtZSwgbmFtZSArIDIsIGxlbi0yKSkKKwkJCWlmIChtZW1jbXAoZGUtPmRfbmFtZSwgbmFtZSArIDIsIGxlbiAtIDIpKQogCQkJCWNvbnRpbnVlOwotCQkJbWVtY3B5KGhleCArIDIsIGRlLT5kX25hbWUsIDM4KTsKLQkJCWlmICgrK2ZvdW5kID4gMSkKKwkJCWlmICghZm91bmQpIHsKKwkJCQltZW1jcHkoaGV4ICsgMiwgZGUtPmRfbmFtZSwgMzgpOworCQkJCWZvdW5kKys7CisJCQl9CisJCQllbHNlIGlmIChtZW1jbXAoaGV4ICsgMiwgZGUtPmRfbmFtZSwgMzgpKSB7CisJCQkJZm91bmQgPSAyOwogCQkJCWJyZWFrOworCQkJfQogCQl9CiAJCWNsb3NlZGlyKGRpcik7CiAJfQogCWlmIChmb3VuZCA9PSAxKQogCQlyZXR1cm4gZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkgPT0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZm91bmQ7CiB9CiAKIHN0YXRpYyBpbnQgbWF0Y2hfc2hhKHVuc2lnbmVkIGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYSwgY29uc3QgdW5zaWduZWQgY2hhciAqYikKQEAgLTQ4LDkgKzY5LDExIEBACiBzdGF0aWMgaW50IGZpbmRfc2hvcnRfcGFja2VkX29iamVjdChpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICptYXRjaCwgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1bnNpZ25lZCBjaGFyIGZvdW5kX3NoYTFbMjBdOworCWludCBmb3VuZCA9IDA7CiAKIAlwcmVwYXJlX3BhY2tlZF9naXQoKTsKLQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCWZvciAocCA9IHBhY2tlZF9naXQ7IHAgJiYgZm91bmQgPCAyOyBwID0gcC0+bmV4dCkgewogCQl1bnNpZ25lZCBudW0gPSBudW1fcGFja2VkX29iamVjdHMocCk7CiAJCXVuc2lnbmVkIGZpcnN0ID0gMCwgbGFzdCA9IG51bTsKIAkJd2hpbGUgKGZpcnN0IDwgbGFzdCkgewpAQCAtNzQsMTkgKzk3LDYxIEBACiAJCQl1bnNpZ25lZCBjaGFyIG5vd1syMF0sIG5leHRbMjBdOwogCQkJbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBmaXJzdCwgbm93KTsKIAkJCWlmIChtYXRjaF9zaGEobGVuLCBtYXRjaCwgbm93KSkgewotCQkJCWlmIChudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGZpcnN0KzEsIG5leHQpIHx8ICFtYXRjaF9zaGEobGVuLCBtYXRjaCwgbmV4dCkpIHsKLQkJCQkJbWVtY3B5KHNoYTEsIG5vdywgMjApOwotCQkJCQlyZXR1cm4gMTsKKwkJCQlpZiAobnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBmaXJzdCsxLCBuZXh0KSB8fAorCQkJCSAgICAhbWF0Y2hfc2hhKGxlbiwgbWF0Y2gsIG5leHQpKSB7CisJCQkJCS8qIHVuaXF1ZSB3aXRoaW4gdGhpcyBwYWNrICovCisJCQkJCWlmICghZm91bmQpIHsKKwkJCQkJCW1lbWNweShmb3VuZF9zaGExLCBub3csIDIwKTsKKwkJCQkJCWZvdW5kKys7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAobWVtY21wKGZvdW5kX3NoYTEsIG5vdywgMjApKSB7CisJCQkJCQlmb3VuZCA9IDI7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLyogbm90IGV2ZW4gdW5pcXVlIHdpdGhpbiB0aGlzIHBhY2sgKi8KKwkJCQkJZm91bmQgPSAyOworCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAJCX0KIAl9CisJaWYgKGZvdW5kID09IDEpCisJCW1lbWNweShzaGExLCBmb3VuZF9zaGExLCAyMCk7CisJcmV0dXJuIGZvdW5kOworfQorCisjZGVmaW5lIFNIT1JUX05BTUVfTk9UX0ZPVU5EICgtMSkKKyNkZWZpbmUgU0hPUlRfTkFNRV9BTUJJR1VPVVMgKC0yKQorCitzdGF0aWMgaW50IGZpbmRfdW5pcXVlX3Nob3J0X29iamVjdChpbnQgbGVuLCBjaGFyICpjYW5vbmljYWwsCisJCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJlcywgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgaGFzX3VucGFja2VkLCBoYXNfcGFja2VkOworCXVuc2lnbmVkIGNoYXIgdW5wYWNrZWRfc2hhMVsyMF0sIHBhY2tlZF9zaGExWzIwXTsKKworCWhhc191bnBhY2tlZCA9IGZpbmRfc2hvcnRfb2JqZWN0X2ZpbGVuYW1lKGxlbiwgY2Fub25pY2FsLCB1bnBhY2tlZF9zaGExKTsKKwloYXNfcGFja2VkID0gZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KGxlbiwgcmVzLCBwYWNrZWRfc2hhMSk7CisJaWYgKCFoYXNfdW5wYWNrZWQgJiYgIWhhc19wYWNrZWQpCisJCXJldHVybiBTSE9SVF9OQU1FX05PVF9GT1VORDsKKwlpZiAoMSA8IGhhc191bnBhY2tlZCB8fCAxIDwgaGFzX3BhY2tlZCkKKwkJcmV0dXJuIFNIT1JUX05BTUVfQU1CSUdVT1VTOworCWlmIChoYXNfdW5wYWNrZWQgIT0gaGFzX3BhY2tlZCkgeworCQltZW1jcHkoc2hhMSwgKGhhc19wYWNrZWQgPyBwYWNrZWRfc2hhMSA6IHVucGFja2VkX3NoYTEpLCAyMCk7CisJCXJldHVybiAwOworCX0KKwkvKiBCb3RoIGhhdmUgdW5pcXVlIG9uZXMgLS0gZG8gdGhleSBtYXRjaD8gKi8KKwlpZiAobWVtY21wKHBhY2tlZF9zaGExLCB1bnBhY2tlZF9zaGExLCAyMCkpCisJCXJldHVybiAtMjsKKwltZW1jcHkoc2hhMSwgcGFja2VkX3NoYTEsIDIwKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfc2hvcnRfc2hhMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIGludCBnZXRfc2hvcnRfc2hhMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICBpbnQgcXVpZXRseSkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgc3RhdHVzOwogCWNoYXIgY2Fub25pY2FsWzQwXTsKIAl1bnNpZ25lZCBjaGFyIHJlc1syMF07CiAKQEAgLTExMiwyNiArMTc3LDUzIEBACiAJCQl2YWwgPDw9IDQ7CiAJCXJlc1tpID4+IDFdIHw9IHZhbDsKIAl9Ci0JaWYgKGZpbmRfc2hvcnRfb2JqZWN0X2ZpbGVuYW1lKGksIGNhbm9uaWNhbCwgc2hhMSkpCi0JCXJldHVybiAwOwotCWlmIChmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoaSwgcmVzLCBzaGExKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIC0xOworCisJc3RhdHVzID0gZmluZF91bmlxdWVfc2hvcnRfb2JqZWN0KGksIGNhbm9uaWNhbCwgcmVzLCBzaGExKTsKKwlpZiAoIXF1aWV0bHkgJiYgKHN0YXR1cyA9PSBTSE9SVF9OQU1FX0FNQklHVU9VUykpCisJCXJldHVybiBlcnJvcigic2hvcnQgU0hBMSAlLipzIGlzIGFtYmlndW91cy4iLCBsZW4sIGNhbm9uaWNhbCk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBnZXRfc2hhMV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCkKK2NvbnN0IGNoYXIgKmZpbmRfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbGVuKQogewotCWNoYXIgYnVmZmVyWzYwXTsKLQlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpbnQgbGVuOworCWludCBzdGF0dXM7CisJc3RhdGljIGNoYXIgaGV4WzQxXTsKKwltZW1jcHkoaGV4LCBzaGExX3RvX2hleChzaGExKSwgNDApOworCXdoaWxlIChsZW4gPCA0MCkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFfcmV0WzIwXTsKKwkJc3RhdHVzID0gZ2V0X3Nob3J0X3NoYTEoaGV4LCBsZW4sIHNoYTFfcmV0LCAxKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWhleFtsZW5dID0gMDsKKwkJCXJldHVybiBoZXg7CisJCX0KKwkJaWYgKHN0YXR1cyAhPSBTSE9SVF9OQU1FX0FNQklHVU9VUykKKwkJCXJldHVybiBOVUxMOworCQlsZW4rKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CiAKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gLTE7Ci0JbGVuID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0JY2xvc2UoZmQpOwotCWlmIChsZW4gPCA0MCkKLQkJcmV0dXJuIC0xOwotCXJldHVybiBnZXRfc2hhMV9oZXgoYnVmZmVyLCByZXN1bHQpOworc3RhdGljIGludCBhbWJpZ3VvdXNfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzbGFzaCA9IDE7CisKKwlmb3IgKDs7KSB7CisJCXN3aXRjaCAoKnBhdGgrKykgeworCQljYXNlICdcMCc6CisJCQlicmVhazsKKwkJY2FzZSAnLyc6CisJCQlpZiAoc2xhc2gpCisJCQkJYnJlYWs7CisJCQlzbGFzaCA9IDE7CisJCQljb250aW51ZTsKKwkJY2FzZSAnLic6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXNsYXNoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiBzbGFzaDsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3NoYTFfYmFzaWMoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExKQpAQCAtMTQ4LDkgKzI0MCwxMyBAQAogCWlmIChsZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChzdHIsIHNoYTEpKQogCQlyZXR1cm4gMDsKIAorCS8qIEFjY2VwdCBvbmx5IHVuYW1iaWd1b3VzIHJlZiBwYXRocy4gKi8KKwlpZiAoYW1iaWd1b3VzX3BhdGgoc3RyKSkKKwkJcmV0dXJuIC0xOworCiAJZm9yIChwID0gcHJlZml4OyAqcDsgcCsrKSB7CiAJCWNoYXIgKnBhdGhuYW1lID0gZ2l0X3BhdGgoIiVzLyUuKnMiLCAqcCwgbGVuLCBzdHIpOwotCQlpZiAoIWdldF9zaGExX2ZpbGUocGF0aG5hbWUsIHNoYTEpKQorCQlpZiAoIXJlYWRfcmVmKHBhdGhuYW1lLCBzaGExKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMjA4LDYgKzMwNCw4NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHBlZWxfb25pb24oY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBjaGFyIG91dGVyWzIwXTsKKwljb25zdCBjaGFyICpzcDsKKwljb25zdCBjaGFyICp0eXBlX3N0cmluZyA9IE5VTEw7CisJc3RydWN0IG9iamVjdCAqbzsKKworCS8qCisJICogInJlZl57dHlwZX0iIGRlcmVmZXJlbmNlcyByZWYgcmVwZWF0ZWRseSB1bnRpbCB5b3UgY2Fubm90CisJICogZGVyZWZlcmVuY2UgYW55bW9yZSwgb3IgeW91IGdldCBhbiBvYmplY3Qgb2YgZ2l2ZW4gdHlwZSwKKwkgKiB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICAicmVmXnt9IiBtZWFucyBqdXN0IGRlcmVmZXJlbmNlCisJICogdGFncyB1bnRpbCB5b3UgZ2V0IGEgbm9uLXRhZy4gICJyZWZeMCIgaXMgYSBzaG9ydGhhbmQgZm9yCisJICogInJlZl57Y29tbWl0fSIuICAiY29tbWl0Xnt0cmVlfSIgY291bGQgYmUgdXNlZCB0byBmaW5kIHRoZQorCSAqIHRvcC1sZXZlbCB0cmVlIG9mIHRoZSBnaXZlbiBjb21taXQuCisJICovCisJaWYgKGxlbiA8IDQgfHwgbmFtZVtsZW4tMV0gIT0gJ30nKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgPD0gc3A7IHNwLS0pIHsKKwkJaW50IGNoID0gKnNwOworCQlpZiAoY2ggPT0gJ3snICYmIG5hbWUgPCBzcCAmJiBzcFstMV0gPT0gJ14nKQorCQkJYnJlYWs7CisJfQorCWlmIChzcCA8PSBuYW1lKQorCQlyZXR1cm4gLTE7CisKKwlzcCsrOyAvKiBiZWdpbm5pbmcgb2YgdHlwZSBuYW1lLCBvciBjbG9zaW5nIGJyYWNlIGZvciBlbXB0eSAqLworCWlmICghc3RybmNtcChjb21taXRfdHlwZSwgc3AsIDYpICYmIHNwWzZdID09ICd9JykKKwkJdHlwZV9zdHJpbmcgPSBjb21taXRfdHlwZTsKKwllbHNlIGlmICghc3RybmNtcCh0cmVlX3R5cGUsIHNwLCA0KSAmJiBzcFs0XSA9PSAnfScpCisJCXR5cGVfc3RyaW5nID0gdHJlZV90eXBlOworCWVsc2UgaWYgKCFzdHJuY21wKGJsb2JfdHlwZSwgc3AsIDQpICYmIHNwWzRdID09ICd9JykKKwkJdHlwZV9zdHJpbmcgPSBibG9iX3R5cGU7CisJZWxzZSBpZiAoc3BbMF0gPT0gJ30nKQorCQl0eXBlX3N0cmluZyA9IE5VTEw7CisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZ2V0X3NoYTFfMShuYW1lLCBzcCAtIG5hbWUgLSAyLCBvdXRlcikpCisJCXJldHVybiAtMTsKKworCW8gPSBwYXJzZV9vYmplY3Qob3V0ZXIpOworCWlmICghbykKKwkJcmV0dXJuIC0xOworCWlmICghdHlwZV9zdHJpbmcpIHsKKwkJbyA9IGRlcmVmX3RhZyhvLCBuYW1lLCBzcCAtIG5hbWUgLSAyKTsKKwkJaWYgKCFvIHx8ICghby0+cGFyc2VkICYmICFwYXJzZV9vYmplY3Qoby0+c2hhMSkpKQorCQkJcmV0dXJuIC0xOworCQltZW1jcHkoc2hhMSwgby0+c2hhMSwgMjApOworCX0KKwllbHNlIHsKKwkJLyogQXQgdGhpcyBwb2ludCwgdGhlIHN5bnRheCBsb29rIGNvcnJlY3QsIHNvCisJCSAqIGlmIHdlIGRvIG5vdCBnZXQgdGhlIG5lZWRlZCBvYmplY3QsIHdlIHNob3VsZAorCQkgKiBiYXJmLgorCQkgKi8KKworCQl3aGlsZSAoMSkgeworCQkJaWYgKCFvIHx8ICghby0+cGFyc2VkICYmICFwYXJzZV9vYmplY3Qoby0+c2hhMSkpKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChvLT50eXBlID09IHR5cGVfc3RyaW5nKSB7CisJCQkJbWVtY3B5KHNoYTEsIG8tPnNoYTEsIDIwKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWlmIChvLT50eXBlID09IHRhZ190eXBlKQorCQkJCW8gPSAoKHN0cnVjdCB0YWcqKSBvKS0+dGFnZ2VkOworCQkJZWxzZSBpZiAoby0+dHlwZSA9PSBjb21taXRfdHlwZSkKKwkJCQlvID0gJigoKHN0cnVjdCBjb21taXQgKikgbyktPnRyZWUtPm9iamVjdCk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKCIlLipzOiBleHBlY3RlZCAlcyB0eXBlLCBidXQgdGhlIG9iamVjdCBkZXJlZmVyZW5jZXMgdG8gJXMgdHlwZSIsCisJCQkJCSAgICAgbGVuLCBuYW1lLCB0eXBlX3N0cmluZywKKwkJCQkJICAgICBvLT50eXBlKTsKKwkJCWlmICghby0+cGFyc2VkKQorCQkJCXBhcnNlX29iamVjdChvLT5zaGExKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnZXRfc2hhMV8xKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJaW50IHBhcmVudCwgcmV0OwpAQCAtMjQ5LDEwICs0MjMsMTQgQEAKIAkJcmV0dXJuIGdldF9udGhfYW5jZXN0b3IobmFtZSwgbGVuMSwgc2hhMSwgcGFyZW50KTsKIAl9CiAKKwlyZXQgPSBwZWVsX29uaW9uKG5hbWUsIGxlbiwgc2hhMSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCiAJcmV0ID0gZ2V0X3NoYTFfYmFzaWMobmFtZSwgbGVuLCBzaGExKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdldF9zaG9ydF9zaGExKG5hbWUsIGxlbiwgc2hhMSk7CisJcmV0dXJuIGdldF9zaG9ydF9zaGExKG5hbWUsIGxlbiwgc2hhMSwgMCk7CiB9CiAKIC8qCkBAIC0yNjEsNSArNDM5LDYgQEAKICAqLwogaW50IGdldF9zaGExKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CisJcHJlcGFyZV9hbHRfb2RiKCk7CiAJcmV0dXJuIGdldF9zaGExXzEobmFtZSwgc3RybGVuKG5hbWUpLCBzaGExKTsKIH0KZGlmZiAtLWdpdCBhL3NoZWxsLmMgYi9zaGVsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDc4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGVsbC5jCkBAIC0wLDAgKzEsNTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBpbnQgZG9fZ2VuZXJpY19jbWQoY29uc3QgY2hhciAqbWUsIGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpteV9hcmd2WzRdOworCisJYXJnID0gc3FfZGVxdW90ZShhcmcpOworCWlmICghYXJnKQorCQlkaWUoImJhZCBhcmd1bWVudCIpOworCisJbXlfYXJndlswXSA9IG1lOworCW15X2FyZ3ZbMV0gPSBhcmc7CisJbXlfYXJndlsyXSA9IE5VTEw7CisKKwlyZXR1cm4gZXhlY3ZwKG1lLCAoY2hhcioqKSBteV9hcmd2KTsKK30KKworc3RhdGljIHN0cnVjdCBjb21tYW5kcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpleGVjKShjb25zdCBjaGFyICptZSwgY2hhciAqYXJnKTsKK30gY21kX2xpc3RbXSA9IHsKKwl7ICJnaXQtcmVjZWl2ZS1wYWNrIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7ICJnaXQtdXBsb2FkLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgTlVMTCB9LAorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNoYXIgKnByb2c7CisJc3RydWN0IGNvbW1hbmRzICpjbWQ7CisKKwkvKiBXZSB3YW50IHRvIHNlZSAiLWMgY21kIGFyZ3MiLCBhbmQgbm90aGluZyBlbHNlICovCisJaWYgKGFyZ2MgIT0gMyB8fCBzdHJjbXAoYXJndlsxXSwgIi1jIikpCisJCWRpZSgiV2hhdCBkbyB5b3UgdGhpbmsgSSBhbT8gQSBzaGVsbD8iKTsKKworCXByb2cgPSBhcmd2WzJdOworCWFyZ3YgKz0gMjsKKwlhcmdjIC09IDI7CisJZm9yIChjbWQgPSBjbWRfbGlzdCA7IGNtZC0+bmFtZSA7IGNtZCsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oY21kLT5uYW1lKTsKKwkJY2hhciAqYXJnOworCQlpZiAoc3RybmNtcChjbWQtPm5hbWUsIHByb2csIGxlbikpCisJCQljb250aW51ZTsKKwkJYXJnID0gTlVMTDsKKwkJc3dpdGNoIChwcm9nW2xlbl0pIHsKKwkJY2FzZSAnXDAnOgorCQkJYXJnID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJCWFyZyA9IHByb2cgKyBsZW4gKyAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlleGl0KGNtZC0+ZXhlYyhjbWQtPm5hbWUsIGFyZykpOworCX0KKwlkaWUoInVucmVjb2duaXplZCBjb21tYW5kICclcyciLCBwcm9nKTsKK30KZGlmZiAtLWdpdCBhL3Nob3ctYnJhbmNoLmMgYi9zaG93LWJyYW5jaC5jCmluZGV4IDU3NzhhNTkuLjcwMTIwMDAgMTAwNjQ0Ci0tLSBhL3Nob3ctYnJhbmNoLmMKKysrIGIvc2hvdy1icmFuY2guYwpAQCAtMTMzLDI1ICsxMzMsMjggQEAKIAkJCW50aCA9IDA7CiAJCQl3aGlsZSAocGFyZW50cykgewogCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOwotCQkJCWNoYXIgbmV3bmFtZVsxMDAwXTsKKwkJCQljaGFyIG5ld25hbWVbMTAwMF0sICplbjsKIAkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKIAkJCQludGgrKzsKIAkJCQlpZiAocC0+b2JqZWN0LnV0aWwpCiAJCQkJCWNvbnRpbnVlOworCQkJCWVuID0gbmV3bmFtZTsKIAkJCQlzd2l0Y2ggKG4tPmdlbmVyYXRpb24pIHsKIAkJCQljYXNlIDA6Ci0JCQkJCXNwcmludGYobmV3bmFtZSwgIiVzXiVkIiwKLQkJCQkJCW4tPmhlYWRfbmFtZSwgbnRoKTsKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzIiwgbi0+aGVhZF9uYW1lKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSAxOgotCQkJCQlzcHJpbnRmKG5ld25hbWUsICIlc15eJWQiLAotCQkJCQkJbi0+aGVhZF9uYW1lLCBudGgpOworCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiJXNeIiwgbi0+aGVhZF9uYW1lKTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKLQkJCQkJc3ByaW50ZihuZXduYW1lLCAiJXN+JWReJWQiLAotCQkJCQkJbi0+aGVhZF9uYW1lLCBuLT5nZW5lcmF0aW9uLAotCQkJCQkJbnRoKTsKKwkJCQkJZW4gKz0gc3ByaW50ZihlbiwgIiVzfiVkIiwKKwkJCQkJCW4tPmhlYWRfbmFtZSwgbi0+Z2VuZXJhdGlvbik7CisJCQkJCWJyZWFrOwogCQkJCX0KKwkJCQlpZiAobnRoID09IDEpCisJCQkJCWVuICs9IHNwcmludGYoZW4sICJeIik7CisJCQkJZWxzZQorCQkJCQllbiArPSBzcHJpbnRmKGVuLCAiXiVkIiwgbnRoKTsKIAkJCQluYW1lX2NvbW1pdChwLCBzdHJkdXAobmV3bmFtZSksIDApOwogCQkJCWkrKzsKIAkJCQluYW1lX2ZpcnN0X3BhcmVudF9jaGFpbihwKTsKQEAgLTIwNSw3ICsyMDgsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2hvd19vbmVfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3N0YXRpYyB2b2lkIHNob3dfb25lX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBub19uYW1lKQogewogCWNoYXIgcHJldHR5WzEyOF0sICpjcDsKIAlzdHJ1Y3QgY29tbWl0X25hbWUgKm5hbWUgPSBjb21taXQtPm9iamVjdC51dGlsOwpAQCAtMjE4LDExICsyMjEsMjEgQEAKIAkJY3AgPSBwcmV0dHkgKyA4OwogCWVsc2UKIAkJY3AgPSBwcmV0dHk7Ci0JaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7Ci0JCXByaW50ZigiWyVzIiwgbmFtZS0+aGVhZF9uYW1lKTsKLQkJaWYgKG5hbWUtPmdlbmVyYXRpb24pCi0JCQlwcmludGYoIn4lZCIsIG5hbWUtPmdlbmVyYXRpb24pOwotCQlwcmludGYoIl0gIik7CisKKwlpZiAoIW5vX25hbWUpIHsKKwkJaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7CisJCQlwcmludGYoIlslcyIsIG5hbWUtPmhlYWRfbmFtZSk7CisJCQlpZiAobmFtZS0+Z2VuZXJhdGlvbikgeworCQkJCWlmIChuYW1lLT5nZW5lcmF0aW9uID09IDEpCisJCQkJCXByaW50ZigiXiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCJ+JWQiLCBuYW1lLT5nZW5lcmF0aW9uKTsKKwkJCX0KKwkJCXByaW50ZigiXSAiKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlslc10gIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgNykpOwogCX0KIAlwdXRzKGNwKTsKIH0KQEAgLTI0Nyw3ICsyNjAsNyBAQAogCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKIAlpZiAoIWNvbW1pdCkKIAkJcmV0dXJuIDA7Ci0JaWYgKE1BWF9SRVZTIDwgcmVmX25hbWVfY250KSB7CisJaWYgKE1BWF9SRVZTIDw9IHJlZl9uYW1lX2NudCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IGlnbm9yaW5nICVzOyAiCiAJCQkiY2Fubm90IGhhbmRsZSBtb3JlIHRoYW4gJWQgcmVmcyIsCiAJCQlyZWZuYW1lLCBNQVhfUkVWUyk7CkBAIC0zNDksMTEgKzM2MiwxMyBAQAogCWludCBhbGxfaGVhZHMgPSAwLCBhbGxfdGFncyA9IDA7CiAJaW50IGFsbF9tYXNrLCBhbGxfcmV2cywgc2hvd25fbWVyZ2VfcG9pbnQ7CiAJY2hhciBoZWFkX3BhdGhbMTI4XTsKKwljb25zdCBjaGFyICpoZWFkX3BhdGhfcDsKIAlpbnQgaGVhZF9wYXRoX2xlbjsKIAl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CiAJaW50IG1lcmdlX2Jhc2UgPSAwOwogCWludCBpbmRlcGVuZGVudCA9IDA7Ci0JY2hhciAqKmxhYmVsOworCWludCBub19uYW1lID0gMDsKKwlpbnQgc2hhMV9uYW1lID0gMDsKIAogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKIApAQCAtMzY5LDYgKzM4NCwxMCBAQAogCQkJZXh0cmEgPSAxOwogCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGlzdCIpKQogCQkJZXh0cmEgPSAtMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW5hbWUiKSkKKwkJCW5vX25hbWUgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hhMS1uYW1lIikpCisJCQlzaGExX25hbWUgPSAxOwogCQllbHNlIGlmICghc3RybmNtcChhcmcsICItLW1vcmU9IiwgNykpCiAJCQlleHRyYSA9IGF0b2koYXJnICsgNyk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1tZXJnZS1iYXNlIikpCkBAIC00MzAsMTEgKzQ0OSwxNSBAQAogCWlmICgwIDw9IGV4dHJhKQogCQlqb2luX3JldnMoJmxpc3QsICZzZWVuLCBudW1fcmV2LCBleHRyYSk7CiAKLQloZWFkX3BhdGhfbGVuID0gcmVhZGxpbmsoIi5naXQvSEVBRCIsIGhlYWRfcGF0aCwgc2l6ZW9mKGhlYWRfcGF0aCktMSk7Ci0JaWYgKChoZWFkX3BhdGhfbGVuIDwgMCkgfHwgZ2V0X3NoYTEoIkhFQUQiLCBoZWFkX3NoYTEpKQorCWhlYWRfcGF0aF9wID0gcmVzb2x2ZV9yZWYoZ2l0X3BhdGgoIkhFQUQiKSwgaGVhZF9zaGExLCAxKTsKKwlpZiAoaGVhZF9wYXRoX3ApIHsKKwkJaGVhZF9wYXRoX2xlbiA9IHN0cmxlbihoZWFkX3BhdGhfcCk7CisJCW1lbWNweShoZWFkX3BhdGgsIGhlYWRfcGF0aF9wLCBoZWFkX3BhdGhfbGVuICsgMSk7CisJfQorCWVsc2UgeworCQloZWFkX3BhdGhfbGVuID0gMDsKIAkJaGVhZF9wYXRoWzBdID0gMDsKLQllbHNlCi0JCWhlYWRfcGF0aFtoZWFkX3BhdGhfbGVuXSA9IDA7CisJfQogCiAJaWYgKG1lcmdlX2Jhc2UpCiAJCXJldHVybiBzaG93X21lcmdlX2Jhc2Uoc2VlbiwgbnVtX3Jldik7CkBAIC00NjAsNyArNDgzLDggQEAKIAkJCQlwcmludGYoIiVjIFslc10gIiwKIAkJCQkgICAgICAgaXNfaGVhZCA/ICcqJyA6ICchJywgcmVmX25hbWVbaV0pOwogCQkJfQotCQkJc2hvd19vbmVfY29tbWl0KHJldltpXSk7CisJCQkvKiBoZWFkZXIgbGluZXMgbmV2ZXIgbmVlZCBuYW1lICovCisJCQlzaG93X29uZV9jb21taXQocmV2W2ldLCAxKTsKIAkJfQogCQlpZiAoMCA8PSBleHRyYSkgewogCQkJZm9yIChpID0gMDsgaSA8IG51bV9yZXY7IGkrKykKQEAgLTQ3NSw3ICs0OTksOCBAQAogCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJnNlZW4pOwogCiAJLyogR2l2ZSBuYW1lcyB0byBjb21taXRzICovCi0JbmFtZV9jb21taXRzKHNlZW4sIHJldiwgcmVmX25hbWUsIG51bV9yZXYpOworCWlmICghc2hhMV9uYW1lICYmICFub19uYW1lKQorCQluYW1lX2NvbW1pdHMoc2VlbiwgcmV2LCByZWZfbmFtZSwgbnVtX3Jldik7CiAKIAlhbGxfbWFzayA9ICgoMXUgPDwgKFJFVl9TSElGVCArIG51bV9yZXYpKSAtIDEpOwogCWFsbF9yZXZzID0gYWxsX21hc2sgJiB+KCgxdSA8PCBSRVZfU0hJRlQpIC0gMSk7CkBAIC00ODUsNyArNTEwLDYgQEAKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX29uZV9jb21taXQoJnNlZW4pOwogCQlpbnQgdGhpc19mbGFnID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CiAJCWludCBpc19tZXJnZV9wb2ludCA9ICh0aGlzX2ZsYWcgJiBhbGxfcmV2cykgPT0gYWxsX3JldnM7Ci0JCXN0YXRpYyBjaGFyICpvYnZpb3VzW10gPSB7ICIiIH07CiAKIAkJaWYgKGlzX21lcmdlX3BvaW50KQogCQkJc2hvd25fbWVyZ2VfcG9pbnQgPSAxOwpAQCAtNDk2LDkgKzUyMCw3IEBACiAJCQkJCT8gJysnIDogJyAnKTsKIAkJCXB1dGNoYXIoJyAnKTsKIAkJfQotCQlzaG93X29uZV9jb21taXQoY29tbWl0KTsKLQkJaWYgKG51bV9yZXYgPT0gMSkKLQkJCWxhYmVsID0gb2J2aW91czsKKwkJc2hvd19vbmVfY29tbWl0KGNvbW1pdCwgbm9fbmFtZSk7CiAJCWlmIChzaG93bl9tZXJnZV9wb2ludCAmJiBpc19tZXJnZV9wb2ludCkKIAkJCWlmICgtLWV4dHJhIDwgMCkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NzaC1mZXRjaC5jIGIvc3NoLWZldGNoLmMKaW5kZXggNjgzYTFlNC4uYmYwMWZiYyAxMDA2NDQKLS0tIGEvc3NoLWZldGNoLmMKKysrIGIvc3NoLWZldGNoLmMKQEAgLTM2LDEyICszNiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcHJlZmV0Y2hlcyA9IDA7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKmluX3RyYW5zaXQgPSBOVUxMOworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKmVuZF9vZl90cmFuc2l0ID0gJmluX3RyYW5zaXQ7CisKIHZvaWQgcHJlZmV0Y2godW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAljaGFyIHR5cGUgPSAnbyc7CisJc3RydWN0IG9iamVjdF9saXN0ICpub2RlOworCWlmIChwcmVmZXRjaGVzID4gMTAwKSB7CisJCWZldGNoKGluX3RyYW5zaXQtPml0ZW0tPnNoYTEpOworCX0KKwlub2RlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9iamVjdF9saXN0KSk7CisJbm9kZS0+bmV4dCA9IE5VTEw7CisJbm9kZS0+aXRlbSA9IGxvb2t1cF91bmtub3duX29iamVjdChzaGExKTsKKwkqZW5kX29mX3RyYW5zaXQgPSBub2RlOworCWVuZF9vZl90cmFuc2l0ID0gJm5vZGUtPm5leHQ7CiAJZm9yY2Vfd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CiAJZm9yY2Vfd3JpdGUoZmRfb3V0LCBzaGExLCAyMCk7Ci0JLy9tZW1jcHkocmVxdWVzdGVkICsgMjAgKiBwcmVmZXRjaGVzKyssIHNoYTEsIDIwKTsKKwlwcmVmZXRjaGVzKys7CiB9CiAKIHN0YXRpYyBjaGFyIGNvbm5fYnVmWzQwOTZdOwpAQCAtNTEsNiArNjUsMTggQEAKIHsKIAlpbnQgcmV0OwogCXNpZ25lZCBjaGFyIHJlbW90ZTsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnRlbXA7CisKKwlpZiAobWVtY21wKHNoYTEsIGluX3RyYW5zaXQtPml0ZW0tPnNoYTEsIDIwKSkgeworCQkvLyB3ZSBtdXN0IGhhdmUgYWxyZWFkeSBmZXRjaGVkIGl0IHRvIGNsZWFuIHRoZSBxdWV1ZQorCQlyZXR1cm4gaGFzX3NoYTFfZmlsZShzaGExKSA/IDAgOiAtMTsKKwl9CisJcHJlZmV0Y2hlcy0tOworCXRlbXAgPSBpbl90cmFuc2l0OworCWluX3RyYW5zaXQgPSBpbl90cmFuc2l0LT5uZXh0OworCWlmICghaW5fdHJhbnNpdCkKKwkJZW5kX29mX3RyYW5zaXQgPSAmaW5fdHJhbnNpdDsKKwlmcmVlKHRlbXApOwogCiAJaWYgKGNvbm5fYnVmX3Bvc24pIHsKIAkJcmVtb3RlID0gY29ubl9idWZbMF07CkBAIC0xMTksNiArMTQ1LDggQEAKIAkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3cnKSB7CiAJCQl3cml0ZV9yZWYgPSBhcmd2W2FyZyArIDFdOwogCQkJYXJnKys7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworCQkJZ2V0X3JlY292ZXIgPSAxOwogCQl9CiAJCWFyZysrOwogCX0KZGlmZiAtLWdpdCBhL3N5bWJvbGljLXJlZi5jIGIvc3ltYm9saWMtcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyZDdhYwotLS0gL2Rldi9udWxsCisrKyBiL3N5bWJvbGljLXJlZi5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBnaXRfc3ltYm9saWNfcmVmX3VzYWdlW10gPQorImdpdC1zeW1ib2xpYy1yZWYgbmFtZSBbcmVmXSI7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bXJlZihjb25zdCBjaGFyICpIRUFEKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY29uc3QgY2hhciAqZ2l0X0hFQUQgPSBzdHJkdXAoZ2l0X3BhdGgoIiVzIiwgSEVBRCkpOworCWNvbnN0IGNoYXIgKmdpdF9yZWZzX2hlYWRzX21hc3RlciA9IHJlc29sdmVfcmVmKGdpdF9IRUFELCBzaGExLCAwKTsKKwlpZiAoZ2l0X3JlZnNfaGVhZHNfbWFzdGVyKSB7CisJCS8qIHdlIHdhbnQgdG8gc3RyaXAgdGhlIC5naXQvIHBhcnQgKi8KKwkJaW50IHBmeGxlbiA9IHN0cmxlbihnaXRfSEVBRCkgLSBzdHJsZW4oSEVBRCk7CisJCXB1dHMoZ2l0X3JlZnNfaGVhZHNfbWFzdGVyICsgcGZ4bGVuKTsKKwl9CisJZWxzZQorCQlkaWUoIk5vIHN1Y2ggcmVmOiAlcyIsIEhFQUQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMjoKKwkJY2hlY2tfc3ltcmVmKGFyZ3ZbMV0pOworCQlicmVhazsKKwljYXNlIDM6CisJCWNyZWF0ZV9zeW1yZWYoc3RyZHVwKGdpdF9wYXRoKCIlcyIsIGFyZ3ZbMV0pKSwgYXJndlsyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVzYWdlKGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3QvTWFrZWZpbGUgYi90L01ha2VmaWxlCmluZGV4IDY4ODJlMjMuLjVjNzZhZmYgMTAwNjQ0Ci0tLSBhL3QvTWFrZWZpbGUKKysrIGIvdC9NYWtlZmlsZQpAQCAtNCwxMSArNCwxOSBAQAogIwogCiAjR0lUX1RFU1RfT1BUUz0tLXZlcmJvc2UgLS1kZWJ1ZworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorVEFSID89ICQoVEFSKQorCisjIFNoZWxsIHF1b3RlOworIyBSZXN1bHQgb2YgdGhpcyBuZWVkcyB0byBiZSBwbGFjZWQgaW5zaWRlICcnCitzaHEgPSAkKHN1YnN0ICcsJ1wnJywkKDEpKQorIyBUaGlzIGhhcyBzdXJyb3VuZGluZyAnJworc2hlbGxxdW90ZSA9ICckKGNhbGwgc2hxLCQoMSkpJwogCiBUID0gJCh3aWxkY2FyZCB0WzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCkKIAogYWxsOgotCUAkKGZvcmVhY2ggdCwkVCxlY2hvICIqKiogJHQgKioqIjsgc2ggJHQgJChHSVRfVEVTVF9PUFRTKSB8fCBleGl0OyApCisJQCQoZm9yZWFjaCB0LCRULGVjaG8gIioqKiAkdCAqKioiOyAkKGNhbGwgc2hlbGxxdW90ZSwkKFNIRUxMX1BBVEgpKSAkdCAkKEdJVF9URVNUX09QVFMpIHx8IGV4aXQ7ICkKIAlAcm0gLWZyIHRyYXNoCiAKIGNsZWFuOgpkaWZmIC0tZ2l0IGEvdC9kaWZmLWxpYi5zaCBiL3QvZGlmZi1saWIuc2gKaW5kZXggYTkxMmY0My4uNzQ1YTFiMCAxMDA3NTUKLS0tIGEvdC9kaWZmLWxpYi5zaAorKysgYi90L2RpZmYtbGliLnNoCkBAIC0yOSw3ICsyOSwxMyBAQAogY29tcGFyZV9kaWZmX3BhdGNoICgpIHsKICAgICAjIFdoZW4gaGV1cmlzdGljcyBhcmUgaW1wcm92ZWQsIHRoZSBzY29yZSBudW1iZXJzIHdvdWxkIGNoYW5nZS4KICAgICAjIElnbm9yZSB0aGVtIHdoaWxlIGNvbXBhcmluZy4KLSAgICBzZWQgLWUgJy9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QnIDwiJDEiID4udG1wLTEKLSAgICBzZWQgLWUgJy9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QnIDwiJDIiID4udG1wLTIKKyAgICBzZWQgLWUgJworCS9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QKKwkvXmluZGV4IFswLTlhLWZdKlwuXC5bMC05YS1mXS9kCisgICAgJyA8IiQxIiA+LnRtcC0xCisgICAgc2VkIC1lICcKKwkvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kCisJL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0vZAorICAgICcgPCIkMiIgPi50bXAtMgogICAgIGRpZmYgLXUgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCiB9CmRpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaAppbmRleCAzNjQ5ZjBmLi5kZmY3ZDY5IDEwMDc1NQotLS0gYS90L3QwMDAwLWJhc2ljLnNoCisrKyBiL3QvdDAwMDAtYmFzaWMuc2gKQEAgLTI4LDEyICsyOCwxMiBAQAogICAgICcuZ2l0L29iamVjdHMgc2hvdWxkIGJlIGVtcHR5IGFmdGVyIGdpdC1pbml0LWRiIGluIGFuIGVtcHR5IHJlcG8uJyBcCiAgICAgJ2NtcCAtcyAvZGV2L251bGwgc2hvdWxkLWJlLWVtcHR5JyAKIAotIyBhbHNvIGl0IHNob3VsZCBoYXZlIDI1OCBzdWJkaXJlY3RvcmllczsgMjU2IGZhbi1vdXQsIHBhY2ssIGFuZCBpbmZvLgotIyAyNTkgaXMgY291bnRpbmcgIm9iamVjdHMiIGl0c2VsZgorIyBhbHNvIGl0IHNob3VsZCBoYXZlIDIgc3ViZGlyZWN0b3JpZXM7IG5vIGZhbi1vdXQgYW55bW9yZSwgcGFjaywgYW5kIGluZm8uCisjIDMgaXMgY291bnRpbmcgIm9iamVjdHMiIGl0c2VsZgogZmluZCAuZ2l0L29iamVjdHMgLXR5cGUgZCAtcHJpbnQgPmZ1bGwtb2YtZGlyZWN0b3JpZXMKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICcuZ2l0L29iamVjdHMgc2hvdWxkIGhhdmUgMjU4IHN1YmRpcmVjdG9yaWVzLicgXAotICAgICd0ZXN0ICQod2MgLWwgPCBmdWxsLW9mLWRpcmVjdG9yaWVzKSA9IDI1OScKKyAgICAnLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMuJyBcCisgICAgJ3Rlc3QgJCh3YyAtbCA8IGZ1bGwtb2YtZGlyZWN0b3JpZXMpID0gMycKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcwpAQCAtODUsNyArODUsNyBAQAogZG9uZQogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2FkZGluZyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMgd2l0aCBnaXQtdXBkYXRlLWluZGV4IC0tYWRkLicgXAotICAgICdmaW5kIHBhdGgqICEgLXR5cGUgZCAtcHJpbnQwIHwgeGFyZ3MgLTAgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCcKKyAgICAnZmluZCBwYXRoKiAhIC10eXBlIGQgLXByaW50IHwgeGFyZ3MgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCcKIAogIyBTaG93IHRoZW0gYW5kIHNlZSB0aGF0IG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKZGlmZiAtLWdpdCBhL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaAppbmRleCBjMzg3ZTllLi5kMGFmOGMzIDEwMDc1NQotLS0gYS90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKKysrIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCkBAIC0xNTgsNDkgKzE1OCwzMyBAQAogCiBXZSBoYXZlIHNvIGZhciB0ZXN0ZWQgb25seSBlbXB0eSBpbmRleCBhbmQgY2xlYW4tYW5kLW1hdGNoaW5nLUEgaW5kZXgKIGNhc2Ugd2hpY2ggYXJlIHRyaXZpYWwuICBNYWtlIHN1cmUgaW5kZXggcmVxdWlyZW1lbnRzIGFyZSBhbHNvCi1jaGVja2VkLiAgVGhlIHRhYmxlIGFsc28gbGlzdHMgYWx0ZXJuYXRpdmUgc2VtYW50aWNzIHdoaWNoIGlzIG5vdAotY3VycmVudGx5IGltcGxlbWVudGVkLgorY2hlY2tlZC4KIAotImdpdC1kaWZmLXRyZWUgLW0gTyBBIEIiCisiZ2l0LXJlYWQtdHJlZSAtbSBPIEEgQiIKIAogICAgICBPICAgICAgIEEgICAgICAgQiAgICAgICAgIHJlc3VsdCAgICAgIGluZGV4IHJlcXVpcmVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAxICBtaXNzaW5nIG1pc3NpbmcgbWlzc2luZyAgIC0gICAgICAgICAgIG11c3Qgbm90IGV4aXN0LgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAyICBtaXNzaW5nIG1pc3NpbmcgZXhpc3RzICAgIG5vIG1lcmdlICAgIG11c3Qgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIChBTFQpICAgICAgICAgICAgICAgICAgICAgIHRha2UgQiogICAgIG11c3QgbWF0Y2ggQiwgaWYgZXhpc3RzLgorICAyICBtaXNzaW5nIG1pc3NpbmcgZXhpc3RzICAgIHRha2UgQiogICAgIG11c3QgbWF0Y2ggQiwgaWYgZXhpc3RzLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAzICBtaXNzaW5nIGV4aXN0cyAgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgKEFMVCkgICAgICAgICAgICAgICAgICAgICAgdGFrZSBBKiAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgIDMgIG1pc3NpbmcgZXhpc3RzICBtaXNzaW5nICAgdGFrZSBBKiAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIDQgIG1pc3NpbmcgZXhpc3RzICBBIT1CICAgICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgNSAgbWlzc2luZyBleGlzdHMgIEE9PUIgICAgICBubyBtZXJnZSAgICBtdXN0IG1hdGNoIEEgYW5kIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAtdG8tZGF0ZSwgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIChBTFQpICAgICAgICAgICAgICAgICAgICAgIHRha2UgQSAgICAgIG11c3QgbWF0Y2ggQSwgaWYgZXhpc3RzLgorICA1ICBtaXNzaW5nIGV4aXN0cyAgQT09QiAgICAgIHRha2UgQSAgICAgIG11c3QgbWF0Y2ggQSwgaWYgZXhpc3RzLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICA2ICBleGlzdHMgIG1pc3NpbmcgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3Qgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIChBTFQpICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSAgICAgIG11c3Qgbm90IGV4aXN0LgorICA2ICBleGlzdHMgIG1pc3NpbmcgbWlzc2luZyAgIHJlbW92ZSAgICAgIG11c3Qgbm90IGV4aXN0LgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICA3ICBleGlzdHMgIG1pc3NpbmcgTyE9QiAgICAgIG5vIG1lcmdlICAgIG11c3Qgbm90IGV4aXN0LgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICA4ICBleGlzdHMgIG1pc3NpbmcgTz09QiAgICAgIG5vIG1lcmdlICAgIG11c3Qgbm90IGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIChBTFQpICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSAgICAgIG11c3Qgbm90IGV4aXN0LgorICA4ICBleGlzdHMgIG1pc3NpbmcgTz09QiAgICAgIHJlbW92ZSAgICAgIG11c3Qgbm90IGV4aXN0LgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICA5ICBleGlzdHMgIE8hPUEgICAgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gMTAgIGV4aXN0cyAgTz09QSAgICBtaXNzaW5nICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAoQUxUKSAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgICAgICBkaXR0bworIDEwICBleGlzdHMgIE89PUEgICAgbWlzc2luZyAgIHJlbW92ZSAgICAgIGRpdHRvCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgMTEgIGV4aXN0cyAgTyE9QSAgICBPIT1CICAgICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQogICAgICAgICAgICAgICAgICAgICAgQSE9QiAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KQEAgLTIxMCwxMCArMTk0LDcgQEAKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAxMyAgZXhpc3RzICBPIT1BICAgIE89PUIgICAgICB0YWtlIEEgICAgICBtdXN0IG1hdGNoIEEsIGlmIGV4aXN0cy4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAxNCAgZXhpc3RzICBPPT1BICAgIE8hPUIgICAgICB0YWtlIEIgICAgICBtdXN0IG1hdGNoIEEgYW5kIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXAtdG8tZGF0ZSwgaWYgZXhpc3RzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIChBTFQpICAgICAgICAgICAgICAgICAgICAgIHRha2UgQiAgICAgIGlmIGV4aXN0cywgbXVzdCBlaXRoZXIgKDEpCisgMTQgIGV4aXN0cyAgTz09QSAgICBPIT1CICAgICAgdGFrZSBCICAgICAgaWYgZXhpc3RzLCBtdXN0IGVpdGhlciAoMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBBIGFuZCBiZSB1cC10by1kYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgyKSBtYXRjaCBCLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjIzLDkgKzIwNCw5IEBACiAgICAgICptdWx0aSogaW4gb25lICBpbiBhbm90aGVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vdGU6IGlmIHdlIHdhbnQgdG8gaW1wbGVtZW50IDJBTFQgYW5kIDNBTFQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLgotVGhlIHRyZWUgQSBtYXkgY29udGFpbiBERiAoZmlsZSkgd2hlbiB0cmVlIEIgcmVxdWlyZSBERiB0byBiZSBhCi1kaXJlY3RvcnkgYnkgaGF2aW5nIERGL0RGIChmaWxlKS4KK05vdGU6IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBpbiBjYXNlIDIgYW5kIDMuICBUaGUgdHJlZSBBIG1heSBjb250YWluCitERiAoZmlsZSkgd2hlbiB0cmVlIEIgcmVxdWlyZSBERiB0byBiZSBhIGRpcmVjdG9yeSBieSBoYXZpbmcgREYvREYKKyhmaWxlKS4KIAogRU5EX09GX0NBU0VfVEFCTEUKIApkaWZmIC0tZ2l0IGEvdC90MTIwMC10dXRvcmlhbC5zaCBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYjc5OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKQEAgLTAsMCArMSwxNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdC1yZXYtcGFyc2Ugd2l0aCBkaWZmZXJlbnQgcGFyZW50IG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvICJIZWxsbyBXb3JsZCIgPiBoZWxsbworZWNobyAiU2lsbHkgZXhhbXBsZSIgPiBleGFtcGxlCisKK2dpdC11cGRhdGUtaW5kZXggLS1hZGQgaGVsbG8gZXhhbXBsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iJyAidGVzdCBibG9iID0gXCIkKGdpdC1jYXQtZmlsZSAtdCA1NTdkYjAzKVwiIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIDU1N2RiMDMnICJ0ZXN0IFwiSGVsbG8gV29ybGRcIiA9IFwiJChnaXQtY2F0LWZpbGUgYmxvYiA1NTdkYjAzKVwiIgorCitlY2hvICJJdCdzIGEgbmV3IGRheSBmb3IgZ2l0IiA+PmhlbGxvCitjYXQgPiBkaWZmLmV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9oZWxsbyBiL2hlbGxvCitpbmRleCA1NTdkYjAzLi4yNjM0MTRmIDEwMDY0NAorLS0tIGEvaGVsbG8KKysrKyBiL2hlbGxvCitAQCAtMSArMSwyIEBACisgSGVsbG8gV29ybGQKKytJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CitFT0YKK2dpdC1kaWZmLWZpbGVzIC1wID4gZGlmZi5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLWZpbGVzIC1wJyAnY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0JworZ2l0IGRpZmYgPiBkaWZmLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYnICdjbXAgZGlmZi5leHBlY3QgZGlmZi5vdXRwdXQnCisKK3RyZWU9JChnaXQtd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZScgInRlc3QgODk4OGRhMTVkMDc3ZDQ4MjlmYzUxZDg1NDRjMDk3ZGVmNjY0NGRiYiA9ICR0cmVlIgorCitvdXRwdXQ9IiQoZWNobyAiSW5pdGlhbCBjb21taXQiIHwgZ2l0LWNvbW1pdC10cmVlICQoZ2l0LXdyaXRlLXRyZWUpIDI+JjEgPiAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0JyAidGVzdCAnQ29tbWl0dGluZyBpbml0aWFsIHRyZWUgODk4OGRhMTVkMDc3ZDQ4MjlmYzUxZDg1NDRjMDk3ZGVmNjY0NGRiYicgPSBcIiRvdXRwdXRcIiIKKworZ2l0LWRpZmYtaW5kZXggLXAgSEVBRCA+IGRpZmYub3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi1pbmRleCAtcCBIRUFEJyAnY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0JworCitnaXQgZGlmZiBIRUFEID4gZGlmZi5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICdjbXAgZGlmZi5leHBlY3QgZGlmZi5vdXRwdXQnCisKKyNybSBoZWxsbworI3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1yZWFkLXRyZWUgLS1yZXNldCBIRUFEJyAiZ2l0LXJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgOyB0ZXN0IFwiaGVsbG86IG5lZWRzIHVwZGF0ZVwiID0gXCIkKGdpdC11cGRhdGUtaW5kZXggLS1yZWZyZXNoKVwiIgorCitjYXQgPiB3aGF0Y2hhbmdlZC5leHBlY3QgPDwgRU9GCitkaWZmLXRyZWUgVkFSSUFCTEUgKGZyb20gcm9vdCkKK0F1dGhvcjogVkFSSUFCTEUKK0RhdGU6ICAgVkFSSUFCTEUKKworICAgIEluaXRpYWwgY29tbWl0CisKK2RpZmYgLS1naXQgYS9leGFtcGxlIGIvZXhhbXBsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYyNGM3NGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2V4YW1wbGUKK0BAIC0wLDAgKzEgQEAKKytTaWxseSBleGFtcGxlCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU1N2RiMDMKKy0tLSAvZGV2L251bGwKKysrKyBiL2hlbGxvCitAQCAtMCwwICsxIEBACisrSGVsbG8gV29ybGQKK0VPRgorCitnaXQtd2hhdGNoYW5nZWQgLXAgLS1yb290IHwgXAorCXNlZCAtZSAiMXMvXlwoLlx7MTBcfVwpLlx7NDBcfS9cMVZBUklBQkxFLyIgXAorCQktZSAiMiwzcy9eXCguXHs4XH1cKS4qJC9cMVZBUklBQkxFLyIgXAorPiB3aGF0Y2hhbmdlZC5vdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC13aGF0Y2hhbmdlZCAtcCAtLXJvb3QnICdjbXAgd2hhdGNoYW5nZWQuZXhwZWN0IHdoYXRjaGFuZ2VkLm91dHB1dCcKKworZ2l0IHRhZyBteS1maXJzdC10YWcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YWcgbXktZmlyc3QtdGFnJyAnY21wIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL3RhZ3MvbXktZmlyc3QtdGFnJworCisjIFRPRE86IHRlc3QgZ2l0LWNsb25lCisKK2dpdCBjaGVja291dCAtYiBteWJyYW5jaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoJyAnY21wIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL215YnJhbmNoJworCitjYXQgPiBicmFuY2guZXhwZWN0IDw8RU9GCisgIG1hc3RlcgorKiBteWJyYW5jaAorRU9GCisKK2dpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoJyAnY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dCcKKworZ2l0IGNoZWNrb3V0IG15YnJhbmNoCitlY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvCitnaXQgY29tbWl0IC1tICdTb21lIHdvcmsuJyBoZWxsbworCitnaXQgY2hlY2tvdXQgbWFzdGVyCisKK2VjaG8gIlBsYXksIHBsYXksIHBsYXkiID4+aGVsbG8KK2VjaG8gIkxvdHMgb2YgZnVuIiA+PmV4YW1wbGUKK2dpdCBjb21taXQgLW0gJ1NvbWUgZnVuLicgaGVsbG8gZXhhbXBsZQorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgcmVzb2x2ZSBub3cgZmFpbHMnICdnaXQgcmVzb2x2ZSBIRUFEIG15YnJhbmNoICJNZXJnZSB3b3JrIGluIG15YnJhbmNoIicKKworY2F0ID4gaGVsbG8gPDwgRU9GCitIZWxsbyBXb3JsZAorSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorUGxheSwgcGxheSwgcGxheQorV29yaywgd29yaywgd29yaworRU9GCisKK2dpdCBjb21taXQgLW0gJ01lcmdlZCAibXlicmFuY2giIGNoYW5nZXMuJyBoZWxsbworCitjYXQgPiBzaG93LWJyYW5jaC5leHBlY3QgPDwgRU9GCisqIFttYXN0ZXJdIE1lcmdlZCAibXlicmFuY2giIGNoYW5nZXMuCisgISBbbXlicmFuY2hdIFNvbWUgd29yay4KKy0tCisrICBbbWFzdGVyXSBNZXJnZWQgIm15YnJhbmNoIiBjaGFuZ2VzLgorKysgW215YnJhbmNoXSBTb21lIHdvcmsuCitFT0YKKworZ2l0IHNob3ctYnJhbmNoIG1hc3RlciBteWJyYW5jaCA+IHNob3ctYnJhbmNoLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoJyAnY21wIHNob3ctYnJhbmNoLmV4cGVjdCBzaG93LWJyYW5jaC5vdXRwdXQnCisKK2dpdCBjaGVja291dCBteWJyYW5jaAorCitjYXQgPiByZXNvbHZlLmV4cGVjdCA8PCBFT0YKK1VwZGF0aW5nIGZyb20gVkFSSUFCTEUgdG8gVkFSSUFCTEUuCisgZXhhbXBsZSB8ICAgIDEgKworIGhlbGxvICAgfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKK0VPRgorCitnaXQgcmVzb2x2ZSBIRUFEIG1hc3RlciAiTWVyZ2UgdXBzdHJlYW0gY2hhbmdlcy4iIHwgXAorCXNlZCAtZSAiMXMvWzAtOWEtZl1cezQwXH0vVkFSSUFCTEUvZyIgPiByZXNvbHZlLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc29sdmUnICdjbXAgcmVzb2x2ZS5leHBlY3QgcmVzb2x2ZS5vdXRwdXQnCisKK2NhdCA+IHNob3ctYnJhbmNoMi5leHBlY3QgPDwgRU9GCishIFttYXN0ZXJdIE1lcmdlZCAibXlicmFuY2giIGNoYW5nZXMuCisgKiBbbXlicmFuY2hdIE1lcmdlZCAibXlicmFuY2giIGNoYW5nZXMuCistLQorKysgW21hc3Rlcl0gTWVyZ2VkICJteWJyYW5jaCIgY2hhbmdlcy4KK0VPRgorCitnaXQgc2hvdy1icmFuY2ggbWFzdGVyIG15YnJhbmNoID4gc2hvdy1icmFuY2gyLm91dHB1dAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoJyAnY21wIHNob3ctYnJhbmNoMi5leHBlY3Qgc2hvdy1icmFuY2gyLm91dHB1dCcKKworIyBUT0RPOiB0ZXN0IGdpdCBmZXRjaAorCisjIFRPRE86IHRlc3QgZ2l0IHB1c2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlcGFjaycgJ2dpdCByZXBhY2snCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHJ1bmUtcGFja2VkJyAnZ2l0IHBydW5lLXBhY2tlZCcKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJy0+IG9ubHkgcGFja2VkIG9iamVjdHMnICdmaW5kIC10eXBlIGYgLmdpdC9vYmplY3RzL1swLTlhLWZdWzAtOWEtZl0nCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoIGIvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaAppbmRleCA1YmVhYWEzLi5mZGUyYmIyIDEwMDc1NQotLS0gYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCisrKyBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKQEAgLTY3LDQgKzY3LDE2IEBACiAgICAgICAgPm91dHB1dCAmJgogICAgICBkaWZmIC11IGV4cGVjdCBvdXRwdXQnCiAKKyMgVGVzdCBcclxuIChNU0RPUy1saWtlIHN5c3RlbXMpCitlY2hvIC1uZSAnKi4xXHJcbi8qLjNcclxuISouNlxyXG4nID4uZ2l0aWdub3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQtbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCBcclxuIGxpbmUgZW5kaW5ncy4nIFwKKyAgICAnZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgZGlmZiAtdSBleHBlY3Qgb3V0cHV0JworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2ggYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0MmYxMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWxzLWZpbGVzIHRlc3QgKC0tIHRvIHRlcm1pbmF0ZSB0aGUgcGF0aCBsaXN0KS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIC1mb28JLSBhIGZpbGUgd2l0aCBhIGZ1bm55IG5hbWUuCisgICAgLS0JCS0gYW5vdGhlciBmaWxlIHdpdGggYSBmdW5ueSBuYW1lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCXNldHVwIFwKKwknZWNobyBmcm90eiA+cGF0aDAgJiYKKwllY2hvIGZyb3R6ID4uLy1mb28gJiYKKwllY2hvIGZyb3R6ID4uLy0tJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0LWxzLWZpbGVzIHdpdGhvdXQgcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0LWxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKyAgICAgZGlmZiAtdSBvdXRwdXQgLSA8PEVPRgorLS0KKy1mb28KK291dHB1dAorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0LWxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0LWxzLWZpbGVzIC0tb3RoZXJzIHBhdGgwID5vdXRwdXQgJiYKKwlkaWZmIC11IG91dHB1dCAtIDw8RU9GCitwYXRoMAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQtbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uIHdpdGggLS0uJyBcCisgICAgJ2dpdC1scy1maWxlcyAtLW90aGVycyAtLSBwYXRoMCA+b3V0cHV0ICYmCisJZGlmZiAtdSBvdXRwdXQgLSA8PEVPRgorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0LWxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tIC0tLicgXAorICAgICdnaXQtbHMtZmlsZXMgLS1vdGhlcnMgLS0gLS0gPm91dHB1dCAmJgorCWRpZmYgLXUgb3V0cHV0IC0gPDxFT0YKKy0tCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdC1scy1maWxlcyB3aXRoIG5vIHBhdGggcmVzdHJpY3Rpb24uJyBcCisgICAgJ2dpdC1scy1maWxlcyAtLW90aGVycyAtLSA+b3V0cHV0ICYmCisJZGlmZiAtdSBvdXRwdXQgLSA8PEVPRgorLS0KKy1mb28KK291dHB1dAorcGF0aDAKK0VPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZjMTk3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMTAtbHMtZmlsZXMta2lsbGVkLW1vZGlmaWVkLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWxzLWZpbGVzIC1rIGFuZCAtbSBmbGFncyB0ZXN0LgorCitUaGlzIHRlc3QgcHJlcGFyZXMgdGhlIGZvbGxvd2luZyBpbiB0aGUgY2FjaGU6CisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy9maWxlMyAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCithbmQgdGhlIGZvbGxvd2luZyBvbiB0aGUgZmlsZXN5c3RlbToKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMiAgICAgICAtIGEgZmlsZQorICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDQJLSBhIGZpbGUKKyAgICBwYXRoNQktIGEgc3ltbGluaworICAgIHBhdGg2L2ZpbGU2IC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisKK2dpdC1scy1maWxlcyAtayBzaG91bGQgcmVwb3J0IHRoYXQgZXhpc3RpbmcgZmlsZXN5c3RlbQorb2JqZWN0cyBleGNlcHQgcGF0aDQsIHBhdGg1IGFuZCBwYXRoNi9maWxlNiB0byBiZSBraWxsZWQuCisKK0Fsc28gZm9yIG1vZGlmaWNhdGlvbiB0ZXN0LCB0aGUgY2FjaGUgYW5kIHdvcmtpbmcgdHJlZSBoYXZlOgorCisgICAgcGF0aDcgICAgICAgLSBhbiBlbXB0eSBmaWxlLCBtb2RpZmllZCB0byBhIG5vbi1lbXB0eSBmaWxlLgorICAgIHBhdGg4ICAgICAgIC0gYSBub24tZW1wdHkgZmlsZSwgbW9kaWZpZWQgdG8gYW4gZW1wdHkgZmlsZS4KKyAgICBwYXRoOQktIGFuIGVtcHR5IGZpbGUsIGNhY2hlIGRpcnRpZWQuCisgICAgcGF0aDEwCS0gYSBub24tZW1wdHkgZmlsZSwgY2FjaGUgZGlydGllZC4KKworV2Ugc2hvdWxkIHJlcG9ydCBwYXRoMCwgcGF0aDEsIHBhdGgyL2ZpbGUyLCBwYXRoMy9maWxlMywgcGF0aDcgYW5kIHBhdGg4Cittb2RpZmllZCB3aXRob3V0IHJlcG9ydGluZyBwYXRoOSBhbmQgcGF0aDEwLgorJworLiAuL3Rlc3QtbGliLnNoCisKK2RhdGUgPnBhdGgwCitsbiAtcyB4eXp6eSBwYXRoMQorbWtkaXIgcGF0aDIgcGF0aDMKK2RhdGUgPnBhdGgyL2ZpbGUyCitkYXRlID5wYXRoMy9maWxlMworOiA+cGF0aDcKK2RhdGUgPnBhdGg4Cis6ID5wYXRoOQorZGF0ZSA+cGF0aDEwCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4nIFwKKyAgICAiZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAtLSBwYXRoMCBwYXRoMSBwYXRoPy9maWxlPyBwYXRoNyBwYXRoOCBwYXRoOSBwYXRoMTAiCisKK3JtIC1mciBwYXRoPyA7IyBsZWF2ZSBwYXRoMTAgYWxvbmUKK2RhdGUgPnBhdGgyCitsbiAtcyBmcm90eiBwYXRoMworbG4gLXMgbml0Zm9sIHBhdGg1Citta2RpciBwYXRoMCBwYXRoMSBwYXRoNgorZGF0ZSA+cGF0aDAvZmlsZTAKK2RhdGUgPnBhdGgxL2ZpbGUxCitkYXRlID5wYXRoNi9maWxlNgorZGF0ZSA+cGF0aDcKKzogPnBhdGg4Cis6ID5wYXRoOQordG91Y2ggcGF0aDEwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQtbHMtZmlsZXMgLWsgdG8gc2hvdyBraWxsZWQgZmlsZXMuJyBcCisgICAgJ2dpdC1scy1maWxlcyAtayA+Lm91dHB1dCcKK2NhdCA+LmV4cGVjdGVkIDw8RU9GCitwYXRoMC9maWxlMAorcGF0aDEvZmlsZTEKK3BhdGgyCitwYXRoMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBnaXQtbHMtZmlsZXMgLWsgb3V0cHV0LicgXAorICAgICdkaWZmIC5vdXRwdXQgLmV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0LWxzLWZpbGVzIC1tIHRvIHNob3cgbW9kaWZpZWQgZmlsZXMuJyBcCisgICAgJ2dpdC1scy1maWxlcyAtbSA+Lm91dHB1dCcKK2NhdCA+LmV4cGVjdGVkIDw8RU9GCitwYXRoMAorcGF0aDEKK3BhdGgyL2ZpbGUyCitwYXRoMy9maWxlMworcGF0aDcKK3BhdGg4CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGdpdC1scy1maWxlcyAtbSBvdXRwdXQuJyBcCisgICAgJ2RpZmYgLm91dHB1dCAuZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAxMC1scy1maWxlcy1raWxsZWQuc2ggYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmUxOGJhYS4uMDAwMDAwMAotLS0gYS90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KLSMKLQotdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWxzLWZpbGVzIC1rIGZsYWcgdGVzdC4KLQotVGhpcyB0ZXN0IHByZXBhcmVzIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNhY2hlOgotCi0gICAgcGF0aDAgICAgICAgLSBhIGZpbGUKLSAgICBwYXRoMSAgICAgICAtIGEgc3ltbGluawotICAgIHBhdGgyL2ZpbGUyIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5Ci0gICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKLQotYW5kIHRoZSBmb2xsb3dpbmcgb24gdGhlIGZpbGVzeXN0ZW06Ci0KLSAgICBwYXRoMC9maWxlMCAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQotICAgIHBhdGgxL2ZpbGUxIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5Ci0gICAgcGF0aDIgICAgICAgLSBhIGZpbGUKLSAgICBwYXRoMyAgICAgICAtIGEgc3ltbGluawotICAgIHBhdGg0CS0gYSBmaWxlCi0gICAgcGF0aDUJLSBhIHN5bWxpbmsKLSAgICBwYXRoNi9maWxlNiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQotCi1naXQtbHMtZmlsZXMgLWsgc2hvdWxkIHJlcG9ydCB0aGF0IGV4aXN0aW5nIGZpbGVzeXN0ZW0KLW9iamVjdHMgZXhjZXB0IHBhdGg0LCBwYXRoNSBhbmQgcGF0aDYvZmlsZTYgdG8gYmUga2lsbGVkLgotJwotLiAuL3Rlc3QtbGliLnNoCi0KLWRhdGUgPnBhdGgwCi1sbiAtcyB4eXp6eSBwYXRoMQotbWtkaXIgcGF0aDIgcGF0aDMKLWRhdGUgPnBhdGgyL2ZpbGUyCi1kYXRlID5wYXRoMy9maWxlMwotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdC11cGRhdGUtaW5kZXggLS1hZGQgdG8gYWRkIHZhcmlvdXMgcGF0aHMuJyBcCi0gICAgImdpdC11cGRhdGUtaW5kZXggLS1hZGQgLS0gcGF0aDAgcGF0aDEgcGF0aD8vZmlsZT8iCi0KLXJtIC1mciBwYXRoPwotZGF0ZSA+cGF0aDIKLWxuIC1zIGZyb3R6IHBhdGgzCi1sbiAtcyBuaXRmb2wgcGF0aDUKLW1rZGlyIHBhdGgwIHBhdGgxIHBhdGg2Ci1kYXRlID5wYXRoMC9maWxlMAotZGF0ZSA+cGF0aDEvZmlsZTEKLWRhdGUgPnBhdGg2L2ZpbGU2Ci0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdnaXQtbHMtZmlsZXMgLWsgdG8gc2hvdyBraWxsZWQgZmlsZXMuJyBcCi0gICAgJ2dpdC1scy1maWxlcyAtayA+Lm91dHB1dCcKLWNhdCA+LmV4cGVjdGVkIDw8RU9GCi1wYXRoMC9maWxlMAotcGF0aDEvZmlsZTEKLXBhdGgyCi1wYXRoMwotRU9GCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBnaXQtbHMtZmlsZXMgLWsgb3V0cHV0LicgXAotICAgICdkaWZmIC5vdXRwdXQgLmV4cGVjdGVkJwotdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaCBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTAzNjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaApAQCAtMCwwICsxLDE2MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWxzLXRyZWUgZGlyZWN0b3J5IGFuZCBmaWxlbmFtZXMgaGFuZGxpbmcuCisKK1RoaXMgdGVzdCBydW5zIGdpdC1scy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICAxLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICAyLnR4dCAgICAgICAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMC9hL2IvYy8xLnR4dCAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9iL2MvMS50eHQgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8xLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy8yLnR4dCAgICAgICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworVGVzdCB0aGUgaGFuZGxpbmcgb2YgbXVsaXRwbGUgZGlyZWN0b3JpZXMgd2hpY2ggaGF2ZSBtYXRjaGluZyBmaWxlCitlbnRyaWVzLiAgQWxzbyB0ZXN0IG9kZCBmaWxlbmFtZSBhbmQgbWlzc2luZyBlbnRyaWVzIGhhbmRsaW5nLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdlY2hvIDExMSA+MS50eHQgJiYKKyAgICAgZWNobyAyMjIgPjIudHh0ICYmCisgICAgIG1rZGlyIHBhdGgwIHBhdGgwL2EgcGF0aDAvYS9iIHBhdGgwL2EvYi9jICYmCisgICAgIGVjaG8gMTExID5wYXRoMC9hL2IvYy8xLnR4dCAmJgorICAgICBta2RpciBwYXRoMSBwYXRoMS9iIHBhdGgxL2IvYyAmJgorICAgICBlY2hvIDExMSA+cGF0aDEvYi9jLzEudHh0ICYmCisgICAgIG1rZGlyIHBhdGgyICYmCisgICAgIGVjaG8gMTExID5wYXRoMi8xLnR4dCAmJgorICAgICBta2RpciBwYXRoMyAmJgorICAgICBlY2hvIDExMSA+cGF0aDMvMS50eHQgJiYKKyAgICAgZWNobyAyMjIgPnBhdGgzLzIudHh0ICYmCisgICAgIGZpbmQgKi50eHQgcGF0aCogXCggLXR5cGUgZiAtbyAtdHlwZSBsIFwpIC1wcmludCB8CisgICAgIHhhcmdzIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgJiYKKyAgICAgdHJlZT1gZ2l0LXdyaXRlLXRyZWVgICYmCisgICAgIGVjaG8gJHRyZWUnCisKK194NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgordGVzdF9vdXRwdXQgKCkgeworICAgIHNlZCAtZSAicy8gJF94NDAJLyBYCS8iIDxjdXJyZW50ID5jaGVjaworICAgIGRpZmYgLXUgZXhwZWN0ZWQgY2hlY2sKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcGxhaW4nIFwKKyAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAKKzA0MDAwMCB0cmVlIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcmVjdXJzaXZlJyBcCisgICAgJ2dpdC1scy10cmVlIC1yICR0cmVlID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCTIudHh0CiswNDAwMDAgdHJlZSBYCXBhdGgwCiswNDAwMDAgdHJlZSBYCXBhdGgwL2EKKzA0MDAwMCB0cmVlIFgJcGF0aDAvYS9iCiswNDAwMDAgdHJlZSBYCXBhdGgwL2EvYi9jCisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CiswNDAwMDAgdHJlZSBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgxL2IKKzA0MDAwMCB0cmVlIFgJcGF0aDEvYi9jCisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMgorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMworMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8yLnR4dAorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXIgMS50eHQnIFwKKyAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgMS50eHQgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyIHBhdGgxL2IvYy8xLnR4dCcgXAorICAgICdnaXQtbHMtdHJlZSAkdHJlZSBwYXRoMS9iL2MvMS50eHQgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDEvYi9jLzEudHh0CitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlciBhbGwgMS50eHQgZmlsZXMnIFwKKyAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgMS50eHQgcGF0aDAvYS9iL2MvMS50eHQgcGF0aDEvYi9jLzEudHh0IHBhdGgyLzEudHh0IHBhdGgzLzEudHh0ID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXIgZGlyZWN0b3JpZXMnIFwKKyAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgcGF0aDMgcGF0aDIgcGF0aDAvYS9iL2MgcGF0aDEvYi9jIHBhdGgwL2EgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDMKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDAvYS9iL2MKKzEwMDY0NCBibG9iIFgJcGF0aDAvYS9iL2MvMS50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDEvYi9jCisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMC9hCiswNDAwMDAgdHJlZSBYCXBhdGgwL2EvYgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXIgb2RkIG5hbWVzJyBcCisgICAgJ2dpdC1scy10cmVlICR0cmVlIDEudHh0IC8xLnR4dCAvLzEudHh0IHBhdGgzLzEudHh0IC9wYXRoMy8xLnR4dCAvL3BhdGgzLy8xLnR4dCBwYXRoMyAvcGF0aDMvIHBhdGgzLy8gPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDMKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDMKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKKzA0MDAwMCB0cmVlIFgJcGF0aDMKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyIG1pc3NpbmcgZmlsZXMgYW5kIGV4dHJhIHNsYXNoZXMnIFwKKyAgICAnZ2l0LWxzLXRyZWUgJHRyZWUgMS50eHQvIGFiYy50eHQgcGF0aDMvLzIzLnR4dCBwYXRoMy8yLnR4dC8vLyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDAtZnVubnktbmFtZXMuc2ggYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5N2MzNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BhdGhuYW1lcyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMuCisKK1RoaXMgdGVzdCB0cmllcyBwYXRobmFtZXMgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGluIHRoZSB3b3JraW5nCit0cmVlLCBpbmRleCwgYW5kIHRyZWUgb2JqZWN0cy4KKycKKworIyBzaW5jZSBGQVQvTlRGUyBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcywgc2tpcCB0aGlzIHRlc3QKK3Rlc3QgIiQodW5hbWUgLW8gMj4vZGV2L251bGwpIiA9IEN5Z3dpbiAmJiBleGl0IDAKKworLiAuL3Rlc3QtbGliLnNoCisKK3AwPSduby1mdW5ueScKK3AxPSd0YWJzCWFuZCBzcGFjZXMnCitwMj0nanVzdCBzcGFjZScKKworY2F0ID4iJHAwIiA8PFxFT0YKKzEuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKzIuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKzMuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KK0VPRgorCitjYXQgPiIkcDEiICIkcDAiCitlY2hvICdGb28gQmFyIEJheicgPiIkcDIiCisKK2VjaG8gJ2p1c3Qgc3BhY2UKK25vLWZ1bm55JyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1scy1maWxlcyBuby1mdW5ueScgXAorCSdnaXQtdXBkYXRlLWluZGV4IC0tYWRkICIkcDAiICIkcDIiICYmCisJZ2l0LWxzLWZpbGVzID5jdXJyZW50ICYmCisJZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCit0MD1gZ2l0LXdyaXRlLXRyZWVgCitlY2hvICIkdDAiID50MAorCitlY2hvICdqdXN0IHNwYWNlCituby1mdW5ueQorInRhYnNcdGFuZCBzcGFjZXMiJyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1scy1maWxlcyB3aXRoLWZ1bm55JyBcCisJJ2dpdC11cGRhdGUtaW5kZXggLS1hZGQgIiRwMSIgJiYKKwlnaXQtbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gJ2p1c3Qgc3BhY2UKK25vLWZ1bm55Cit0YWJzCWFuZCBzcGFjZXMnID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWxzLWZpbGVzIC16IHdpdGgtZnVubnknIFwKKwknZ2l0LWxzLWZpbGVzIC16IHwgdHIgXFwwIFxcMDEyID5jdXJyZW50ICYmCisJZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCit0MT1gZ2l0LXdyaXRlLXRyZWVgCitlY2hvICIkdDEiID50MQorCitlY2hvICdqdXN0IHNwYWNlCituby1mdW5ueQorInRhYnNcdGFuZCBzcGFjZXMiJyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1scy10cmVlIHdpdGggZnVubnknIFwKKwknZ2l0LWxzLXRyZWUgLXIgJHQxIHwgc2VkIC1lICJzL15bXgldKgkvLyIgPmN1cnJlbnQgJiYKKwkgZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCitlY2hvICdBCSJ0YWJzXHRhbmQgc3BhY2VzIicgPmV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi1pbmRleCB3aXRoLWZ1bm55JyBcCisJJ2dpdC1kaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgJHQwID5jdXJyZW50ICYmCisJZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gJ0EKK3RhYnMJYW5kIHNwYWNlcycgPmV4cGVjdGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi1pbmRleCAteiB3aXRoLWZ1bm55JyBcCisJJ2dpdC1kaWZmLWluZGV4IC16IC0tbmFtZS1zdGF0dXMgJHQwIHwgdHIgXFwwIFxcMDEyID5jdXJyZW50ICYmCisJZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIC16IHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtdHJlZSAteiAtLW5hbWUtc3RhdHVzICR0MCAkdDEgfCB0ciBcXDAgXFwwMTIgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gJ0NOVU0Jbm8tZnVubnkJInRhYnNcdGFuZCBzcGFjZXMiJyA+ZXhwZWN0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgLUMgd2l0aC1mdW5ueScgXAorCSdnaXQtZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tbmFtZS1zdGF0dXMgXAorCQkkdDAgJHQxIHwgc2VkIC1lICdzL15DWzAtOV0qL0NOVU0vJyA+Y3VycmVudCAmJgorCWRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworZWNobyAnUk5VTQluby1mdW5ueQkidGFic1x0YW5kIHNwYWNlcyInID5leHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWRpZmYtdHJlZSBkZWxldGUgd2l0aC1mdW5ueScgXAorCSdnaXQtdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkcDAiICYmCisJZ2l0LWRpZmYtaW5kZXggLU0gLS1uYW1lLXN0YXR1cyBcCisJCSR0MCB8IHNlZCAtZSAncy9eUlswLTldKi9STlVNLycgPmN1cnJlbnQgJiYKKwlkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gJ2RpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHRhbmQgc3BhY2VzIgorc2ltaWxhcml0eSBpbmRleCBOVU0lCityZW5hbWUgZnJvbSBuby1mdW5ueQorcmVuYW1lIHRvICJ0YWJzXHRhbmQgc3BhY2VzIicgPmV4cGVjdGVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1kaWZmLXRyZWUgZGVsZXRlIHdpdGgtZnVubnknIFwKKwknZ2l0LWRpZmYtaW5kZXggLU0gLXAgJHQwIHwKKwkgc2VkIC1lICJzL2luZGV4IFswLTldKiUvaW5kZXggTlVNJS8iID5jdXJyZW50ICYmCisJIGRpZmYgLXUgZXhwZWN0ZWQgY3VycmVudCcKKworY2htb2QgK3ggIiRwMSIKK2VjaG8gJ2RpZmYgLS1naXQgYS9uby1mdW5ueSAiYi90YWJzXHRhbmQgc3BhY2VzIgorb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK3NpbWlsYXJpdHkgaW5kZXggTlVNJQorcmVuYW1lIGZyb20gbm8tZnVubnkKK3JlbmFtZSB0byAidGFic1x0YW5kIHNwYWNlcyInID5leHBlY3RlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIGRlbGV0ZSB3aXRoLWZ1bm55JyBcCisJJ2dpdC1kaWZmLWluZGV4IC1NIC1wICR0MCB8CisJIHNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA+Y3VycmVudCAmJgorCSBkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK2VjaG8gPmV4cGVjdGVkICcgInRhYnNcdGFuZCBzcGFjZXMiCisgMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWRpZmYtdHJlZSByZW5hbWUgd2l0aC1mdW5ueSBhcHBsaWVkJyBcCisJJ2dpdC1kaWZmLWluZGV4IC1NIC1wICR0MCB8CisJIGdpdC1hcHBseSAtLXN0YXQgfCBzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPmN1cnJlbnQgJiYKKwkgZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCitlY2hvID5leHBlY3RlZCAnIG5vLWZ1bm55CisgInRhYnNcdGFuZCBzcGFjZXMiCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtZGlmZi10cmVlIGRlbGV0ZSB3aXRoLWZ1bm55IGFwcGxpZWQnIFwKKwknZ2l0LWRpZmYtaW5kZXggLXAgJHQwIHwKKwkgZ2l0LWFwcGx5IC0tc3RhdCB8IHNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA+Y3VycmVudCAmJgorCSBkaWZmIC11IGV4cGVjdGVkIGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hcHBseSBub24tZ2l0IGRpZmYnIFwKKwknZ2l0LWRpZmYtaW5kZXggLXAgJHQwIHwKKwkgc2VkIC1uZSAiL15bLStAXS9wIiB8CisJIGdpdC1hcHBseSAtLXN0YXQgfCBzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPmN1cnJlbnQgJiYKKwkgZGlmZiAtdSBleHBlY3RlZCBjdXJyZW50JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2ggYi90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCmluZGV4IDkxMDE1ZDcuLmJlYjZkOGYgMTAwNzU1Ci0tLSBhL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2gKKysrIGIvdC90NDAwMC1kaWZmLWZvcm1hdC5zaApAQCAtNyw2ICs3LDcgQEAKIAogJwogLiAuL3Rlc3QtbGliLnNoCisuIC4uL2RpZmYtbGliLnNoCiAKIGVjaG8gPnBhdGgwICdMaW5lIDEKIExpbmUgMgpAQCAtNDgsMTUgKzQ5LDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGdpdC1kaWZmLWZpbGVzIC1wIG91dHB1dC4nIFwKLSAgICAnY21wIC1zIGN1cnJlbnQgZXhwZWN0ZWQnCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICdidWlsZCBzYW1lIGRpZmYgdXNpbmcgZ2l0LWRpZmYtaGVscGVyLicgXAotICAgICdnaXQtZGlmZi1maWxlcyAteiB8IGdpdC1kaWZmLWhlbHBlciAteiA+Y3VycmVudCcKLQotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgZ2l0LWRpZmYtaGVscGVyIG91dHB1dC4nIFwKLSAgICAnY21wIC1zIGN1cnJlbnQgZXhwZWN0ZWQnCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2ggYi90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoCmluZGV4IGJlNDc0ODUuLjJlM2MyMGQgMTAwNzU1Ci0tLSBhL3QvdDQwMDEtZGlmZi1yZW5hbWUuc2gKKysrIGIvdC90NDAwMS1kaWZmLXJlbmFtZS5zaApAQCAtNyw2ICs3LDcgQEAKIAogJwogLiAuL3Rlc3QtbGliLnNoCisuIC4uL2RpZmYtbGliLnNoCiAKIGVjaG8gPnBhdGgwICdMaW5lIDEKIExpbmUgMgpAQCAtNjEsNiArNjIsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgdGhlIG91dHB1dC4nIFwKLSAgICAnZGlmZiAtSSAic2ltaWxhcml0eS4qIiA+L2Rldi9udWxsIGN1cnJlbnQgZXhwZWN0ZWQnCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDQtZGlmZi1yZW5hbWUtc3ltbGluay5zaCBiL3QvdDQwMDQtZGlmZi1yZW5hbWUtc3ltbGluay5zaAppbmRleCBmNTk2MTRhLi5hMjNhYWEwIDEwMDc1NQotLS0gYS90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKKysrIGIvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoCkBAIC0xMCw2ICsxMCw3IEBACiBieSBhbiBlZGl0IGZvciB0aGVtLgogJwogLiAuL3Rlc3QtbGliLnNoCisuIC4uL2RpZmYtbGliLnNoCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCkBAIC02MSw2ICs2Miw2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBkaWZmIG91dHB1dCcgXAotICAgICdkaWZmIC11IGN1cnJlbnQgZXhwZWN0ZWQnCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaCBiL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaAppbmRleCA1NjM2ZjRmLi42ODRmZDIzIDEwMDc1NQotLS0gYS90L3Q0MDA1LWRpZmYtcmVuYW1lLTIuc2gKKysrIGIvdC90NDAwNS1kaWZmLXJlbmFtZS0yLnNoCkBAIC00MCwzOCArNDAsNiBAQAogICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMxKScgXAogICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLSMgbWFrZSBzdXJlIGRpZmYtaGVscGVyIGNhbiBncm9rIGl0LgotbXYgZXhwZWN0ZWQgZGlmZi1yYXcKLUdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0LWRpZmYtaGVscGVyIDxkaWZmLXJhdyA+Y3VycmVudAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLWRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCi1jb3B5IGZyb20gQ09QWUlORwotY29weSB0byBDT1BZSU5HLjEKLS0tLSBhL0NPUFlJTkcKLSsrKyBiL0NPUFlJTkcuMQotQEAgLTYgKzYgQEAKLS0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCi0rIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjIKLXJlbmFtZSBmcm9tIENPUFlJTkcKLXJlbmFtZSB0byBDT1BZSU5HLjIKLS0tLSBhL0NPUFlJTkcKLSsrKyBiL0NPUFlJTkcuMgotQEAgLTIgKzIgQEAKLS0gTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0Ci0rIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHLlAuTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0Ci1AQCAtNiArNiBAQAotLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLSsgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gRy5QLkx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLUBAIC0xMiArMTIgQEAKLS0JVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgotKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEcuUC5MIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KLUVPRgotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gZGlmZi1oZWxwZXIgKCMxKScgXAotICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTk0LDM2ICs2Miw2IEBACiAgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzIpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKIAotIyBtYWtlIHN1cmUgZGlmZi1oZWxwZXIgY2FuIGdyb2sgaXQuCi1tdiBleHBlY3RlZCBkaWZmLXJhdwotR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQtZGlmZi1oZWxwZXIgPGRpZmYtcmF3ID5jdXJyZW50Ci1jYXQgPmV4cGVjdGVkIDw8XEVPRgotZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCi0tLS0gYS9DT1BZSU5HCi0rKysgYi9DT1BZSU5HCi1AQCAtMiArMiBAQAotLSBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKLSsgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEcuUC5MIGFzIGZhciBhcyB0aGlzIHByb2plY3QKLUBAIC02ICs2IEBACi0tIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHLlAuTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotQEAgLTEyICsxMiBAQAotLQlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCi0rCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRy5QLkwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgotZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjEKLWNvcHkgZnJvbSBDT1BZSU5HCi1jb3B5IHRvIENPUFlJTkcuMQotLS0tIGEvQ09QWUlORwotKysrIGIvQ09QWUlORy4xCi1AQCAtNiArNiBAQAotLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLSsgSG93ZXZlciwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCi1FT0YKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIGRpZmYtaGVscGVyICgjMiknIFwKLSAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCi0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIHRoZSBzYW1lIENPUFlJTkcgYW5kCkBAIC0xNDUsMjIgKzgzLDQgQEAKICAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMyknIFwKICAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJwogCi0jIG1ha2Ugc3VyZSBkaWZmLWhlbHBlciBjYW4gZ3JvayBpdC4KLW12IGV4cGVjdGVkIGRpZmYtcmF3Ci1HSVRfRElGRl9PUFRTPS0tdW5pZmllZD0wIGdpdC1kaWZmLWhlbHBlciA8ZGlmZi1yYXcgPmN1cnJlbnQKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi1kaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMQotY29weSBmcm9tIENPUFlJTkcKLWNvcHkgdG8gQ09QWUlORy4xCi0tLS0gYS9DT1BZSU5HCi0rKysgYi9DT1BZSU5HLjEKLUBAIC02ICs2IEBACi0tIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotKyBIb3dldmVyLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLUVPRgotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gZGlmZi1oZWxwZXIgKCMzKScgXAotICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKLQogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA5LWRpZmYtcmVuYW1lLTQuc2ggYi90L3Q0MDA5LWRpZmYtcmVuYW1lLTQuc2gKaW5kZXggZWE4MTE1Mi4uMmYyZjhiMSAxMDA3NTUKLS0tIGEvdC90NDAwOS1kaWZmLXJlbmFtZS00LnNoCisrKyBiL3QvdDQwMDktZGlmZi1yZW5hbWUtNC5zaApAQCAtNDQsMzggKzQ0LDYgQEAKICAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMSknIFwKICAgICAnY29tcGFyZV9kaWZmX3Jhd196IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLSMgbWFrZSBzdXJlIGRpZmYtaGVscGVyIGNhbiBncm9rIGl0LgotbXYgY3VycmVudCBkaWZmLXJhdwotR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQtZGlmZi1oZWxwZXIgLXogPGRpZmYtcmF3ID5jdXJyZW50Ci1jYXQgPmV4cGVjdGVkIDw8XEVPRgotZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjEKLWNvcHkgZnJvbSBDT1BZSU5HCi1jb3B5IHRvIENPUFlJTkcuMQotLS0tIGEvQ09QWUlORwotKysrIGIvQ09QWUlORy4xCi1AQCAtNiArNiBAQAotLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLSsgSG93ZXZlciwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCi1kaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMgotcmVuYW1lIGZyb20gQ09QWUlORwotcmVuYW1lIHRvIENPUFlJTkcuMgotLS0tIGEvQ09QWUlORwotKysrIGIvQ09QWUlORy4yCi1AQCAtMiArMiBAQAotLSBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKLSsgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEcuUC5MIGFzIGZhciBhcyB0aGlzIHByb2plY3QKLUBAIC02ICs2IEBACi0tIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHLlAuTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotQEAgLTEyICsxMiBAQAotLQlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCi0rCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgRy5QLkwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgotRU9GCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSBkaWZmLWhlbHBlciAoIzEpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMTAxLDM2ICs2OSw2IEBACiAgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzIpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJwogCi0jIG1ha2Ugc3VyZSBkaWZmLWhlbHBlciBjYW4gZ3JvayBpdC4KLW12IGN1cnJlbnQgZGlmZi1yYXcKLUdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0LWRpZmYtaGVscGVyIC16IDxkaWZmLXJhdyA+Y3VycmVudAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLWRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwotLS0tIGEvQ09QWUlORwotKysrIGIvQ09QWUlORwotQEAgLTIgKzIgQEAKLS0gTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0Ci0rIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHLlAuTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0Ci1AQCAtNiArNiBAQAotLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLSsgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gRy5QLkx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKLUBAIC0xMiArMTIgQEAKLS0JVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgotKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEcuUC5MIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KLWRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCi1jb3B5IGZyb20gQ09QWUlORwotY29weSB0byBDT1BZSU5HLjEKLS0tLSBhL0NPUFlJTkcKLSsrKyBiL0NPUFlJTkcuMQotQEAgLTYgKzYgQEAKLS0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCi0rIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotRU9GCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSBkaWZmLWhlbHBlciAoIzIpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZApAQCAtMTU0LDIyICs5Miw0IEBACiAgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzMpJyBcCiAgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJwogCi0jIG1ha2Ugc3VyZSBkaWZmLWhlbHBlciBjYW4gZ3JvayBpdC4KLW12IGN1cnJlbnQgZGlmZi1yYXcKLUdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0LWRpZmYtaGVscGVyIC16IDxkaWZmLXJhdyA+Y3VycmVudAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLWRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCi1jb3B5IGZyb20gQ09QWUlORwotY29weSB0byBDT1BZSU5HLjEKLS0tLSBhL0NPUFlJTkcKLSsrKyBiL0NPUFlJTkcuMQotQEAgLTYgKzYgQEAKLS0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCi0rIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQotRU9GCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAotICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSBkaWZmLWhlbHBlciAoIzMpJyBcCi0gICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJwotCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDItYXBwbHktcmVuYW1lLnNoIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKaW5kZXggNTMwY2M0ZC4uMDQwMWQ3YiAxMDA3NTUKLS0tIGEvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKKysrIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKQEAgLTMyLDYgKzMyLDYgQEAKICAgICAnZ2l0LWFwcGx5IC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2gnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgdmFsaWRhdGUgXAotICAgICd0ZXN0IC1mIGJhciAmJiBscyAtbCBiYXIgfCBncmVwICJeLS4ueC4ueC4ueCInCisgICAgJ3Rlc3QgLWYgYmFyICYmIGxzIC1sIGJhciB8IGdyZXAgIl4tLi54Li4uLi4uIicKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAwLXRhci10cmVlLnNoIGIvdC90NTAwMC10YXItdHJlZS5zaAppbmRleCA2YmYzNDA2Li40ZGIxYmIxIDEwMDc1NQotLS0gYS90L3Q1MDAwLXRhci10cmVlLnNoCisrKyBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKQEAgLTQxLDggKzQxLDggQEAKICAgICAgZmluZCBhIC10eXBlIGwgfCB4YXJncyBnaXQtdXBkYXRlLWluZGV4IC0tYWRkICYmCiAgICAgIHRyZWVpZD1gZ2l0LXdyaXRlLXRyZWVgICYmCiAgICAgIGVjaG8gJHRyZWVpZCA+dHJlZWlkICYmCi0gICAgIFRaPUdNVCBHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjcgMjI6MDA6MDAiIFwKLSAgICAgZ2l0LWNvbW1pdC10cmVlICR0cmVlaWQgPC9kZXYvbnVsbCA+LmdpdC9IRUFEJworICAgICBnaXQtdXBkYXRlLXJlZiBIRUFEICQoVFo9R01UIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMDowMCIgXAorICAgICBnaXQtY29tbWl0LXRyZWUgJHRyZWVpZCA8L2Rldi9udWxsKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdC10YXItdHJlZScgXApAQCAtNTAsNyArNTAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZmlsZSBtb2RpZmljYXRpb24gdGltZScgXAotICAgICdUWj1HTVQgdGFyIHR2ZiBiLnRhciBhL2EgfAorICAgICdUWj1HTVQgJFRBUiB0dmYgYi50YXIgYS9hIHwKICAgICAgYXdrIFx7cHJpbnRcIFwkNCxcIFwobGVuZ3RoXChcJDVcKVw8N1wpXCA/XCBcJDVcIjowMFwiXCA6XCBcJDVcfSBcCiAgICAgID5iLm10aW1lICYmCiAgICAgIGVjaG8gIjIwMDUtMDUtMjcgMjI6MDA6MDAiID5leHBlY3RlZC5tdGltZSAmJgpAQCAtNTksMTEgKzU5LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0LWdldC10YXItY29tbWl0LWlkJyBcCiAgICAgJ2dpdC1nZXQtdGFyLWNvbW1pdC1pZCA8Yi50YXIgPmIuY29tbWl0aWQgJiYKLSAgICAgZGlmZiAuZ2l0L0hFQUQgYi5jb21taXRpZCcKKyAgICAgZGlmZiAuZ2l0LyQoZ2l0LXN5bWJvbGljLXJlZiBIRUFEKSBiLmNvbW1pdGlkJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZXh0cmFjdCB0YXIgYXJjaGl2ZScgXAotICAgICcoY2QgYiAmJiB0YXIgeGYgLSkgPGIudGFyJworICAgICcoY2QgYiAmJiAkVEFSIHhmIC0pIDxiLnRhcicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcycgXApAQCAtODAsNyArODAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZXh0cmFjdCB0YXIgYXJjaGl2ZSB3aXRoIHByZWZpeCcgXAotICAgICcoY2QgYyAmJiB0YXIgeGYgLSkgPGMudGFyJworICAgICcoY2QgYyAmJiAkVEFSIHhmIC0pIDxjLnRhcicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGVuYW1lcyB3aXRoIHByZWZpeCcgXApkaWZmIC0tZ2l0IGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaCBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKaW5kZXggYmI2MjMzNi4uNWI1MDUzNiAxMDA3NTUKLS0tIGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaAorKysgYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCkBAIC00OSw3ICs0OSw3IEBACiAgICAgIGdpdC11bnBhY2stb2JqZWN0cyA8dGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayIKIAogdW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKLWNkICRUUkFTSC8uZ2l0MgorY2QgIiRUUkFTSC8uZ2l0MiIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NoZWNrIHVucGFjayB3aXRob3V0IGRlbHRhJyBcCkBAIC02MSw3ICs2MSw3IEBACiAJICAgICByZXR1cm4gMQogCSB9CiAgICAgIGRvbmUnCi1jZCAkVFJBU0gKK2NkICIkVFJBU0giCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdwYWNrIHdpdGggZGVsdGEnIFwKQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgZ2l0LXVucGFjay1vYmplY3RzIDx0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrJwogCiB1bnNldCBHSVRfT0JKRUNUX0RJUkVDVE9SWQotY2QgJFRSQVNILy5naXQyCitjZCAiJFRSQVNILy5naXQyIgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NoZWNrIHVucGFjayB3aXRoIGRlbHRhJyBcCiAgICAgJyhjZCAuLi8uZ2l0ICYmIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCkgfApAQCAtOTEsNyArOTEsNyBAQAogCSAgICAgcmV0dXJuIDEKIAkgfQogICAgICBkb25lJwotY2QgJFRSQVNICitjZCAiJFRSQVNIIgogCiBybSAtZnIgLmdpdDIKIG1rZGlyIC5naXQyCkBAIC0xNjUsNCArMTY1LDIyIEBACiAKICAgICAgOicKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2J1aWxkIHBhY2sgaW5kZXggZm9yIGFuIGV4aXN0aW5nIHBhY2snIFwKKyAgICAnY3AgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayB0ZXN0LTMucGFjayAmJgorICAgICBnaXQtaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGdpdC1pbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGNwIHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgZ2l0LWluZGV4LXBhY2sgLW8gdG1wLmlkeCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIGdpdC1pbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCAmJgorCisgICAgIDonCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMC1zZW5kLXBhY2suc2ggYi90L3Q1NDAwLXNlbmQtcGFjay5zaAppbmRleCA1OWNlNzdiLi43ZmMzYmQ3IDEwMDc1NQotLS0gYS90L3Q1NDAwLXNlbmQtcGFjay5zaAorKysgYi90L3Q1NDAwLXNlbmQtcGFjay5zaApAQCAtOCw2ICs4LDkgQEAKICcKIC4gLi90ZXN0LWxpYi5zaAogCit0b3VjaCBjcGlvLXRlc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtpbmcgY3BpbycgJ2VjaG8gY3Bpby10ZXN0IHwgY3BpbyAtbyA+IC9kZXYvbnVsbCcKKwogY250PScxJwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJdHJlZT0kKGdpdC13cml0ZS10cmVlKSAmJgpAQCAtMjAsMTIgKzIzLDEyIEBACiAJICAgIGNvbW1pdD0kKGVjaG8gIkNvbW1pdCAjJGkiIHwgZ2l0LWNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQpICYmCiAJICAgIHBhcmVudD0kY29tbWl0IHx8IHJldHVybiAxCiAJZG9uZSAmJgotCWVjaG8gIiRjb21taXQiID4uZ2l0L0hFQUQgJiYKKwlnaXQtdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgogCWdpdC1jbG9uZSAtbCAuLy4gdmljdGltICYmCiAJY2QgdmljdGltICYmCiAJZ2l0LWxvZyAmJgogCWNkIC4uICYmCi0JZWNobyAkemVybyA+LmdpdC9IRUFEICYmCisJZ2l0LXVwZGF0ZS1yZWYgSEVBRCAiJHplcm8iICYmCiAJcGFyZW50PSR6ZXJvICYmCiAJZm9yIGkgaW4gJGNudAogCWRvCkBAIC0zMyw3ICszNiw3IEBACiAJICAgIGNvbW1pdD0kKGVjaG8gIlJlYmFzZSAjJGkiIHwgZ2l0LWNvbW1pdC10cmVlICR0cmVlIC1wICRwYXJlbnQpICYmCiAJICAgIHBhcmVudD0kY29tbWl0IHx8IHJldHVybiAxCiAJZG9uZSAmJgotCWVjaG8gIiRjb21taXQiID4uZ2l0L0hFQUQgJiYKKwlnaXQtdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgogCWVjaG8gUmViYXNlICYmCiAJZ2l0LWxvZycKIApkaWZmIC0tZ2l0IGEvdC90NTUwMC1mZXRjaC1wYWNrLnNoIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ODFiZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKQEAgLTAsMCArMSwxMzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRlc3QgZmV0Y2gtcGFjay91cGxvYWQtcGFjayBwYWlyLgorCisjIFNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zCisKK2Z1bmN0aW9uIHNob3dfY291bnQgKCkgeworCWNvbW1pdF9jb3VudD0kKCgkY29tbWl0X2NvdW50KzEpKQorCXByaW50ZiAiICAgICAgJWRcciIgJGNvbW1pdF9jb3VudAorfQorCitmdW5jdGlvbiBhZGQgKCkgeworCWxvY2FsIG5hbWU9JDEKKwlsb2NhbCB0ZXh0PSIkQCIKKwlsb2NhbCBicmFuY2g9JHtuYW1lOjA6MX0KKwlsb2NhbCBwYXJlbnRzPSIiCisKKwlzaGlmdAorCXdoaWxlIHRlc3QgJDE7IGRvCisJCXBhcmVudHM9IiRwYXJlbnRzIC1wICQxIgorCQlzaGlmdAorCWRvbmUKKworCWVjaG8gIiR0ZXh0IiA+IHRlc3QudHh0CisJZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCB0ZXN0LnR4dAorCXRyZWU9JChnaXQtd3JpdGUtdHJlZSkKKwkjIG1ha2Ugc3VyZSB0aW1lc3RhbXBzIGFyZSBpbiBjb3JyZWN0IG9yZGVyCisJc2VjPSQoKCRzZWMrMSkpCisJY29tbWl0PSQoZWNobyAiJHRleHQiIHwgR0lUX0FVVEhPUl9EQVRFPSRzZWMgXAorCQlnaXQtY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMgMj4+bG9nMi50eHQpCisJZXhwb3J0ICRuYW1lPSRjb21taXQKKwllY2hvICRjb21taXQgPiAuZ2l0L3JlZnMvaGVhZHMvJGJyYW5jaAorCWV2YWwgJHticmFuY2h9VElQPSRjb21taXQKK30KKworZnVuY3Rpb24gY291bnRfb2JqZWN0cyAoKSB7CisJbHMgLmdpdC9vYmplY3RzLz8/LyogMj4+bG9nMi50eHQgfCB3YyAtbCB8IHRyIC1kICIgIgorfQorCitmdW5jdGlvbiB0ZXN0X2V4cGVjdF9vYmplY3RfY291bnQgKCkgeworCWxvY2FsIG1lc3NhZ2U9JDEKKwlsb2NhbCBjb3VudD0kMgorCisJb3V0cHV0PSIkKGNvdW50X29iamVjdHMpIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCQkibmV3IG9iamVjdCBjb3VudCAkbWVzc2FnZSIgXAorCQkidGVzdCAkY291bnQgPSAkb3V0cHV0IgorfQorCitmdW5jdGlvbiB0ZXN0X3JlcGFjayAoKSB7CisJbG9jYWwgcmVwPSQxCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZXBhY2sgJiYgcHJ1bmUtcGFja2VkIGluICRyZXAiIFwKKwkJJyhnaXQtcmVwYWNrICYmIGdpdC1wcnVuZS1wYWNrZWQpMj4+bG9nLnR4dCcKK30KKworZnVuY3Rpb24gcHVsbF90b19jbGllbnQgKCkgeworCWxvY2FsIG51bWJlcj0kMQorCWxvY2FsIGhlYWRzPSQyCisJbG9jYWwgY291bnQ9JDMKKwlsb2NhbCBub19zdHJpY3RfY291bnRfY2hlY2s9JDQKKworCWNkIGNsaWVudAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRudW1iZXIgcHVsbCIgXAorCQkiZ2l0LWZldGNoLXBhY2sgLXYgLi4gJGhlYWRzID4gbG9nLnR4dCAyPiYxIgorCWNhc2UgIiRoZWFkcyIgaW4gKkEqKSBlY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0E7OyBlc2FjCisJY2FzZSAiJGhlYWRzIiBpbiAqQiopIGVjaG8gJEJUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQjs7IGVzYWMKKwlnaXQtc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy8ke2hlYWRzOjA6MX0KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIiAnZ2l0LWZzY2stb2JqZWN0cyAtLWZ1bGwgPiBmc2NrLnR4dCAyPiYxJworCXRlc3RfZXhwZWN0X29iamVjdF9jb3VudCAiYWZ0ZXIgJG51bWJlciBwdWxsIiAkY291bnQKKwlwYWNrX2NvdW50PSQoZ3JlcCBQYWNraW5nIGxvZy50eHR8dHIgLWRjICIwLTkiKQorCXRlc3QgLXogIiRwYWNrX2NvdW50IiAmJiBwYWNrX2NvdW50PTAKKwlpZiBbIC16ICIkbm9fc3RyaWN0X2NvdW50X2NoZWNrIiBdOyB0aGVuCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1pbmltYWwgY291bnQiICJ0ZXN0ICRjb3VudCA9ICRwYWNrX2NvdW50IgorCWVsc2UKKwkJdGVzdCAkY291bnQgIT0gJHBhY2tfY291bnQgJiYgXAorCQkJZWNobyAiV0FSTklORzogJHBhY2tfY291bnQgb2JqZWN0cyB0cmFuc21pdHRlZCwgb25seSAkY291bnQgb2Ygd2hpY2ggd2VyZSBuZWVkZWQiCisJZmkKKwljZCAuLgorfQorCisjIEhlcmUgYmVnaW5zIHRoZSBhY3R1YWwgdGVzdGluZworCisjIEExIC0gLi4uIC0gQTIwIC0gQTIxCisjICAgIFwKKyMgICAgICBCMSAgLSAgIEIyIC0gLi4gLSBCNzAKKworIyBjbGllbnQgcHVsbHMgQTIwLCBCMS4gVGhlbiB0cmFja3Mgb25seSBCLiBUaGVuIHB1bGxzIEEuCisKKygKKwlta2RpciBjbGllbnQgJiYKKwljZCBjbGllbnQgJiYKKwlnaXQtaW5pdC1kYiAyPj4gbG9nMi50eHQKKykKKworYWRkIEExCisKK3ByZXY9MTsgY3VyPTI7IHdoaWxlIFsgJGN1ciAtbGUgMTAgXTsgZG8KKwlhZGQgQSRjdXIgJChldmFsIGVjaG8gXCRBJHByZXYpCisJcHJldj0kY3VyCisJY3VyPSQoKCRjdXIrMSkpCitkb25lCisKK2FkZCBCMSAkQTEKKworZWNobyAkQVRJUCA+IC5naXQvcmVmcy9oZWFkcy9BCitlY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0IKK2dpdC1zeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL0IKKworcHVsbF90b19jbGllbnQgMXN0ICJCIEEiICQoKDExKjMpKQorCisoY2QgY2xpZW50OyB0ZXN0X3JlcGFjayBjbGllbnQpCisKK2FkZCBBMTEgJEExMAorCitwcmV2PTE7IGN1cj0yOyB3aGlsZSBbICRjdXIgLWxlIDY1IF07IGRvCisJYWRkIEIkY3VyICQoZXZhbCBlY2hvIFwkQiRwcmV2KQorCXByZXY9JGN1cgorCWN1cj0kKCgkY3VyKzEpKQorZG9uZQorCitwdWxsX3RvX2NsaWVudCAybmQgIkIiICQoKDY0KjMpKQorCisoY2QgY2xpZW50OyB0ZXN0X3JlcGFjayBjbGllbnQpCisKK3B1bGxfdG9fY2xpZW50IDNyZCAiQSIgJCgoMSozKSkgIyBvbGQgZmFpbHMKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAxLW9sZC1mZXRjaC1hbmQtdXBsb2FkLnNoIGIvdC90NTUwMS1vbGQtZmV0Y2gtYW5kLXVwbG9hZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZGE1MTMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMS1vbGQtZmV0Y2gtYW5kLXVwbG9hZC5zaApAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKworIyBUZXN0IHRoYXQgdGhlIGN1cnJlbnQgZmV0Y2gtcGFjay91cGxvYWQtcGFjayBwbGF5cyBuaWNlbHkgd2l0aAorIyBhbiBvbGQgY291bnRlcnBhcnQKKworY2QgJChkaXJuYW1lICQwKSB8fCBleGl0IDEKKwordG1wPSQobWt0ZW1wIC90bXAvdG1wLVhYWFhYWFhYKQorCityZXR2YWw9MAorCitpZiBbIC16ICIkMSIgXTsgdGhlbgorCWxpc3Q9ImZldGNoIHVwbG9hZCIKK2Vsc2UKKwlsaXN0PSIkQCIKK2ZpCisKK2ZvciBpIGluICRsaXN0OyBkbworCWNhc2UgIiRpIiBpbgorCWZldGNoKSBwZ209Im9sZC1naXQtZmV0Y2gtcGFjayI7IHJlcGxhY2U9IiRwZ20iOzsKKwl1cGxvYWQpIHBnbT0ib2xkLWdpdC11cGxvYWQtcGFjayI7IHJlcGxhY2U9ImdpdC1mZXRjaC1wYWNrIC0tZXhlYz0kcGdtIjs7CisJYm90aCkgcGdtPSJvbGQtZ2l0LXVwbG9hZC1wYWNrIjsgcmVwbGFjZT0ib2xkLWdpdC1mZXRjaC1wYWNrIC0tZXhlYz0kcGdtIjs7CisJZXNhYworCisJaWYgd2hpY2ggJHBnbSAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICJUZXN0aW5nIHdpdGggJHBnbSIKKwkJc2VkIC1lICJzL2dpdC1mZXRjaC1wYWNrLyRyZXBsYWNlL2ciIFwKKwkJCS1lICJzLyMgb2xkIGZhaWxzL3dhcm4vIiA8IHQ1NTAwLWZldGNoLXBhY2suc2ggPiAkdG1wCisKKwkJc2ggJHRtcCB8fCByZXR2YWw9JD8KKwkJcm0gJHRtcAorCisJCXRlc3QgJHJldHZhbCAhPSAwICYmIGV4aXQgJHJldHZhbAorCWVsc2UKKwkJZWNobyAiU2tpcHBpbmcgdGVzdCBmb3IgJGksIHNpbmNlIEkgY2Fubm90IGZpbmQgJHBnbSIKKwlmaQorZG9uZQorCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvdC90NjAwMS1yZXYtbGlzdC1tZXJnZS1vcmRlci5zaCBiL3QvdDYwMDEtcmV2LWxpc3QtbWVyZ2Utb3JkZXIuc2gKaW5kZXggMDEwMTI0Mi4uOGVjOWViYiAxMDA3NTUKLS0tIGEvdC90NjAwMS1yZXYtbGlzdC1tZXJnZS1vcmRlci5zaAorKysgYi90L3Q2MDAxLXJldi1saXN0LW1lcmdlLW9yZGVyLnNoCkBAIC0xMDgsNyArMTA4LDcgQEAKIHNhdmVfdGFnIGczIHVuaXF1ZV9jb21taXQgZzUgdHJlZSAtcCBnMgogc2F2ZV90YWcgZzQgdW5pcXVlX2NvbW1pdCBnNiB0cmVlIC1wIGczIC1wIGgyCiAKLXRhZyBsNSA+IC5naXQvSEVBRAorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgaGFzIGNvcnJlY3QgbnVtYmVyIG9mIGVudHJpZXMnICdnaXQtcmV2LWxpc3QgSEVBRCB8IHdjIC1sIHwgdHIgLXMgIiAiJyA8PEVPRgogMTkKZGlmZiAtLWdpdCBhL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoIGIvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKaW5kZXggZDBhNGZmMi4uNjkzZGU5YiAxMDA3NTUKLS0tIGEvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKKysrIGIvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKQEAgLTcsMjAgKzcsNiBAQAogLiAuL3Rlc3QtbGliLnNoCiAuIC4uL3Q2MDAwbGliLnNoICMgdDZ4eHggc3BlY2lmaWMgZnVuY3Rpb25zCiAKLWJjX2V4cHIoKQotewotYmMgPDxFT0YKLXNjYWxlPTEKLWRlZmluZSBhYnMoeCkgewotCWlmICh4Pj0wKSB7IHJldHVybiAoeCk7IH0gZWxzZSB7IHJldHVybiAoLXgpOyB9Ci19Ci1kZWZpbmUgZmxvb3IoeCkgewotCXNhdmU9c2NhbGU7IHNjYWxlPTA7IHJlc3VsdD14LzE7IHNjYWxlPXNhdmU7IHJldHVybiAocmVzdWx0KTsKLX0KLSQqCi1FT0YKLX0KLQogIyB1c2FnZTogdGVzdF9iaXNlY3Rpb24gbWF4LWRpZmYgYmlzZWN0LW9wdGlvbiBoZWFkIF5wcnVuZS4uLgogIwogIyBlLmcuIHRlc3RfYmlzZWN0aW9uIDEgLS1iaXNlY3QgbDEgXmwwCkBAIC0zNSw4ICsyMSwxOSBAQAogICAgICAgICBfaGVhZD0kMQogCXNoaWZ0IDEKIAlfYmlzZWN0aW9uX3NpemU9JChnaXQtcmV2LWxpc3QgJF9iaXNlY3Rpb24gIiRAIiB8IHdjIC1sKQotCVsgLW4gIiRfbGlzdF9zaXplIiAtYSAtbiAiJF9iaXNlY3Rpb25fc2l6ZSIgXSB8fCBlcnJvciAidGVzdF9iaXNlY3Rpb25fZGlmZiBmYWlsZWQiCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAiYmlzZWN0aW9uIGRpZmYgJF9iaXNlY3Rfb3B0aW9uICRfaGVhZCAkKiA8PSAkX21heF9kaWZmIiAiWyAkKGJjX2V4cHIgImZsb29yKGFicygkX2xpc3Rfc2l6ZS8yKS0kX2Jpc2VjdGlvbl9zaXplKSIpIC1sZSAkX21heF9kaWZmIF0iCisJWyAtbiAiJF9saXN0X3NpemUiIC1hIC1uICIkX2Jpc2VjdGlvbl9zaXplIiBdIHx8CisJZXJyb3IgInRlc3RfYmlzZWN0aW9uX2RpZmYgZmFpbGVkIgorCisJIyBUZXN0IGlmIGJpc2VjdGlvbiBzaXplIGlzIGNsb3NlIHRvIGhhbGYgb2YgbGlzdCBzaXplIHdpdGhpbgorCSMgdG9sZXJhbmNlLgorCSMgCisJX2Jpc2VjdF9lcnI9YGV4cHIgJF9saXN0X3NpemUgLSAkX2Jpc2VjdGlvbl9zaXplIFwqIDJgCisJdGVzdCAiJF9iaXNlY3RfZXJyIiAtbHQgMCAmJiBfYmlzZWN0X2Vycj1gZXhwciAwIC0gJF9iaXNlY3RfZXJyYAorCV9iaXNlY3RfZXJyPWBleHByICRfYmlzZWN0X2VyciAvIDJgIDsgIyBmbG9vcgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImJpc2VjdGlvbiBkaWZmICRfYmlzZWN0X29wdGlvbiAkX2hlYWQgJCogPD0gJF9tYXhfZGlmZiIgXAorCSd0ZXN0ICRfYmlzZWN0X2VyciAtbGUgJF9tYXhfZGlmZicKIH0KIAogZGF0ZSA+cGF0aDAKQEAgLTYxLDcgKzU4LDcgQEAKIG9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKIG9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE3IiBzYXZlX3RhZyBsNCB1bmlxdWVfY29tbWl0IGw0IHRyZWUgLXAgbDMKIG9uX2NvbW1pdHRlcl9kYXRlICIxOTcxLTA4LTE2IDAwOjAwOjE4IiBzYXZlX3RhZyBsNSB1bmlxdWVfY29tbWl0IGw1IHRyZWUgLXAgbDQKLXRhZyBsNSA+IC5naXQvSEVBRAorZ2l0LXVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKIAogCiAjICAgICBFCmRpZmYgLS1naXQgYS90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2ggYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKaW5kZXggODhkMTRlZS4uM2M0YzQ0YyAxMDA3NTUKLS0tIGEvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCisrKyBiL3QvdDYwMDMtcmV2LWxpc3QtdG9wby1vcmRlci5zaApAQCAtNzcsNyArNzcsNyBAQAogc2F2ZV90YWcgZzMgdW5pcXVlX2NvbW1pdCBnNSB0cmVlIC1wIGcyCiBzYXZlX3RhZyBnNCB1bmlxdWVfY29tbWl0IGc2IHRyZWUgLXAgZzMgLXAgaDIKIAotdGFnIGw1ID4gLmdpdC9IRUFECitnaXQtdXBkYXRlLXJlZiBIRUFEICQodGFnIGw1KQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBoYXMgY29ycmVjdCBudW1iZXIgb2YgZW50cmllcycgJ2dpdC1yZXYtbGlzdCBIRUFEIHwgd2MgLWwgfCB0ciAtcyAiICInIDw8RU9GCiAxOQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKaW5kZXggMTUyM2QyZS4uYThmMjM5ZCAxMDA3NTUKLS0tIGEvdC90ZXN0LWxpYi5zaAorKysgYi90L3Rlc3QtbGliLnNoCkBAIC01LDkgKzUsMTAgQEAKIAogIyBGb3IgcmVwZWF0YWJpbGl0eSwgcmVzZXQgdGhlIGVudmlyb25tZW50IHRvIGtub3duIHZhbHVlLgogTEFORz1DCitMQ19BTEw9QwogUEFHRVI9Y2F0CiBUWj1VVEMKLWV4cG9ydCBMQU5HIFBBR0VSIFRaCitleHBvcnQgTEFORyBMQ19BTEwgUEFHRVIgVFoKIHVuc2V0IEFVVEhPUl9EQVRFCiB1bnNldCBBVVRIT1JfRU1BSUwKIHVuc2V0IEFVVEhPUl9OQU1FCkBAIC0xNjMsNCArMTY0LDggQEAKIHJtIC1mciAiJHRlc3QiCiBta2RpciAiJHRlc3QiCiBjZCAiJHRlc3QiCi1naXQtaW5pdC1kYiAyPi9kZXYvbnVsbCB8fCBlcnJvciAiY2Fubm90IHJ1biBnaXQtaW5pdC1kYiIKK2dpdC1pbml0LWRiIC0tdGVtcGxhdGU9Li4vLi4vdGVtcGxhdGVzL2JsdC8gMj4vZGV2L251bGwgfHwKK2Vycm9yICJjYW5ub3QgcnVuIGdpdC1pbml0LWRiIgorCittdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKKwpkaWZmIC0tZ2l0IGEvdGFnLmMgYi90YWcuYwppbmRleCBiMWFiNzVmLi5lNTc0YzRiIDEwMDY0NAotLS0gYS90YWcuYworKysgYi90YWcuYwpAQCAtMywxMCArMywxNSBAQAogCiBjb25zdCBjaGFyICp0YWdfdHlwZSA9ICJ0YWciOwogCi1zdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IG9iamVjdCAqbykKK3N0cnVjdCBvYmplY3QgKmRlcmVmX3RhZyhzdHJ1Y3Qgb2JqZWN0ICpvLCBjb25zdCBjaGFyICp3YXJuLCBpbnQgd2FybmxlbikKIHsKIAl3aGlsZSAobyAmJiBvLT50eXBlID09IHRhZ190eXBlKQogCQlvID0gcGFyc2Vfb2JqZWN0KCgoc3RydWN0IHRhZyAqKW8pLT50YWdnZWQtPnNoYTEpOworCWlmICghbyAmJiB3YXJuKSB7CisJCWlmICghd2FybmxlbikKKwkJCXdhcm5sZW4gPSBzdHJsZW4od2Fybik7CisJCWVycm9yKCJtaXNzaW5nIG9iamVjdCByZWZlcmVuY2VkIGJ5ICclLipzJyIsIHdhcm5sZW4sIHdhcm4pOworCX0KIAlyZXR1cm4gbzsKIH0KIApkaWZmIC0tZ2l0IGEvdGFnLmggYi90YWcuaAppbmRleCAzNmU1MzI0Li43YTBjYjAwIDEwMDY0NAotLS0gYS90YWcuaAorKysgYi90YWcuaApAQCAtMTUsNiArMTUsNiBAQAogZXh0ZXJuIHN0cnVjdCB0YWcgKmxvb2t1cF90YWcoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gaW50IHBhcnNlX3RhZ19idWZmZXIoc3RydWN0IHRhZyAqaXRlbSwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiBpbnQgcGFyc2VfdGFnKHN0cnVjdCB0YWcgKml0ZW0pOwotZXh0ZXJuIHN0cnVjdCBvYmplY3QgKmRlcmVmX3RhZyhzdHJ1Y3Qgb2JqZWN0ICopOworZXh0ZXJuIHN0cnVjdCBvYmplY3QgKmRlcmVmX3RhZyhzdHJ1Y3Qgb2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIAogI2VuZGlmIC8qIFRBR19IICovCmRpZmYgLS1naXQgYS90YXItdHJlZS5jIGIvdGFyLXRyZWUuYwppbmRleCAyNzE2YWUzLi45NzBjNGJiIDEwMDY0NAotLS0gYS90YXItdHJlZS5jCisrKyBiL3Rhci10cmVlLmMKQEAgLTM1Myw2ICszNTMsOCBAQAogCiAJCWlmIChzaXplIDwgbmFtZWxlbiArIDIwIHx8IHNzY2FuZihidWZmZXIsICIlbyIsICZtb2RlKSAhPSAxKQogCQkJZGllKCJjb3JydXB0ICd0cmVlJyBmaWxlIik7CisJCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNSRUcobW9kZSkpCisJCQltb2RlIHw9IChtb2RlICYgMDEwMCkgPyAwNzc3IDogMDY2NjsKIAkJYnVmZmVyID0gc2hhMSArIDIwOwogCQlzaXplIC09IG5hbWVsZW4gKyAyMDsKIApkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzLy5naXRpZ25vcmUgYi90ZW1wbGF0ZXMvLmdpdGlnbm9yZQppbmRleCBjYTY4MGM1Li42NzU5ZWNiIDEwMDY0NAotLS0gYS90ZW1wbGF0ZXMvLmdpdGlnbm9yZQorKysgYi90ZW1wbGF0ZXMvLmdpdGlnbm9yZQpAQCAtMSArMSwyIEBACiBibHQKK2JvaWxlcnBsYXRlcy5tYWRlCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvTWFrZWZpbGUgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKaW5kZXggNzc2ZTZjOC4uMDdlOTI4ZSAxMDA2NDQKLS0tIGEvdGVtcGxhdGVzL01ha2VmaWxlCisrKyBiL3RlbXBsYXRlcy9NYWtlZmlsZQpAQCAtMSwxNyArMSwyNiBAQAogIyBtYWtlIGFuZCBpbnN0YWxsIHNhbXBsZSB0ZW1wbGF0ZXMKIAotSU5TVEFMTD1pbnN0YWxsCi1wcmVmaXg9JChIT01FKQotdGVtcGxhdGVfZGlyPSQocHJlZml4KS9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMvCitJTlNUQUxMID89IGluc3RhbGwKK1RBUiA/PSB0YXIKK3ByZWZpeCA/PSAkKEhPTUUpCit0ZW1wbGF0ZV9kaXIgPz0gJChwcmVmaXgpL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcy8KICMgREVTVERJUj0KIAotYWxsOiBib2lsZXJwbGF0ZXMgY3VzdG9tCisjIFNoZWxsIHF1b3RlOworIyBSZXN1bHQgb2YgdGhpcyBuZWVkcyB0byBiZSBwbGFjZWQgaW5zaWRlICcnCitzaHEgPSAkKHN1YnN0ICcsJ1wnJywkKDEpKQorIyBUaGlzIGhhcyBzdXJyb3VuZGluZyAnJworc2hlbGxxdW90ZSA9ICckKGNhbGwgc2hxLCQoMSkpJworCithbGw6IGJvaWxlcnBsYXRlcy5tYWRlIGN1c3RvbQogCWZpbmQgYmx0CiAKICMgUHV0IHRlbXBsYXRlcyB0aGF0IGNhbiBiZSBjb3BpZWQgc3RyYWlnaHQgZnJvbSB0aGUgc291cmNlCiAjIGluIGEgZmlsZSBkaXJlYy0tdG9yeS0tZmlsZSBpbiB0aGUgc291cmNlLiAgVGhleSB3aWxsIGJlCiAjIGp1c3QgY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbi4KLWJvaWxlcnBsYXRlczoKKworYnBzcmMgPSAkKGZpbHRlci1vdXQgJX4sJCh3aWxkY2FyZCAqLS0qKSkKK2JvaWxlcnBsYXRlcy5tYWRlIDogJChicHNyYykKIAlscyAqLS0qIDI+L2Rldi9udWxsIHwgXAogCXdoaWxlIHJlYWQgYm9pbGVycGxhdGU7IFwKIAlkbyBcCkBAIC0yNCw2ICszMyw3IEBACiAJCSopIGNwICQkYm9pbGVycGxhdGUgYmx0LyQkZHN0IDs7IFwKIAkJZXNhYyB8fCBleGl0OyBcCiAJZG9uZSB8fCBleGl0CisJZGF0ZSA+JEAKIAogIyBJZiB5b3UgbmVlZCBidWlsZC10YWlsb3JlZCB0ZW1wbGF0ZXMsIGJ1aWxkIHRoZW0gaW50byBibHQvCiAjIGRpcmVjdG9yeSB5b3Vyc2VsZiBoZXJlLgpAQCAtMzEsOCArNDEsOSBAQAogCTogbm8gY3VzdG9tIHRlbXBsYXRlcyB5ZXQKIAogY2xlYW46Ci0Jcm0gLXJmIGJsdAorCXJtIC1yZiBibHQgYm9pbGVycGxhdGVzLm1hZGUKIAogaW5zdGFsbDogYWxsCi0JJChJTlNUQUxMKSAtZCAtbTc1NSAkKERFU1RESVIpJCh0ZW1wbGF0ZV9kaXIpCi0JdGFyIENjZiBibHQgLSAuIHwgdGFyIEN4ZiAkKERFU1RESVIpJCh0ZW1wbGF0ZV9kaXIpIC0KKwkkKElOU1RBTEwpIC1kIC1tNzU1ICQoY2FsbCBzaGVsbHF1b3RlLCQoREVTVERJUikkKHRlbXBsYXRlX2RpcikpCisJKGNkIGJsdCAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJChjYWxsIHNoZWxscXVvdGUsJChERVNURElSKSQodGVtcGxhdGVfZGlyKSkgJiYgJChUQVIpIHhmIC0pCmRpZmYgLS1naXQgYS90cmVlLWRpZmYuYyBiL3RyZWUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjA2YTkKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLWRpZmYuYwpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRyZWUgZGlmZiBnZW5lcmF0aW9uCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKworLy8gV2hhdCBwYXRocyBhcmUgd2UgaW50ZXJlc3RlZCBpbj8KK3N0YXRpYyBpbnQgbnJfcGF0aHMgPSAwOworc3RhdGljIGNvbnN0IGNoYXIgKipwYXRocyA9IE5VTEw7CitzdGF0aWMgaW50ICpwYXRobGVucyA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MpCit7CisJdm9pZCAqYnVmID0gZGVzYy0+YnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRlc2MtPnNpemU7CisJaW50IGxlbiA9IHN0cmxlbihidWYpICsgMSArIDIwOworCisJaWYgKHNpemUgPCBsZW4pCisJCWRpZSgiY29ycnVwdCB0cmVlIGZpbGUiKTsKKwlkZXNjLT5idWYgPSBidWYgKyBsZW47CisJZGVzYy0+c2l6ZSA9IHNpemUgLSBsZW47Cit9CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYWN0KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKipwYXRocCwgdW5zaWduZWQgaW50ICptb2RlcCkKK3sKKwl2b2lkICp0cmVlID0gZGVzYy0+YnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGRlc2MtPnNpemU7CisJaW50IGxlbiA9IHN0cmxlbih0cmVlKSsxOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSB0cmVlICsgbGVuOworCWNvbnN0IGNoYXIgKnBhdGggPSBzdHJjaHIodHJlZSwgJyAnKTsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKworCWlmICghcGF0aCB8fCBzaXplIDwgbGVuICsgMjAgfHwgc3NjYW5mKHRyZWUsICIlbyIsICZtb2RlKSAhPSAxKQorCQlkaWUoImNvcnJ1cHQgdHJlZSBmaWxlIik7CisJKnBhdGhwID0gcGF0aCsxOworCSptb2RlcCA9IERJRkZfRklMRV9DQU5PTl9NT0RFKG1vZGUpOworCXJldHVybiBzaGExOworfQorCitzdGF0aWMgY2hhciAqbWFsbG9jX2Jhc2UoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4pCit7CisJaW50IGJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJY2hhciAqbmV3YmFzZSA9IHhtYWxsb2MoYmFzZWxlbiArIHBhdGhsZW4gKyAyKTsKKwltZW1jcHkobmV3YmFzZSwgYmFzZSwgYmFzZWxlbik7CisJbWVtY3B5KG5ld2Jhc2UgKyBiYXNlbGVuLCBwYXRoLCBwYXRobGVuKTsKKwltZW1jcHkobmV3YmFzZSArIGJhc2VsZW4gKyBwYXRobGVuLCAiLyIsIDIpOworCXJldHVybiBuZXdiYXNlOworfQorCitzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgaW50IGNvbXBhcmVfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICp0MSwgc3RydWN0IHRyZWVfZGVzYyAqdDIsIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwl1bnNpZ25lZCBtb2RlMSwgbW9kZTI7CisJY29uc3QgY2hhciAqcGF0aDEsICpwYXRoMjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCAqc2hhMjsKKwlpbnQgY21wLCBwYXRobGVuMSwgcGF0aGxlbjI7CisKKwlzaGExID0gZXh0cmFjdCh0MSwgJnBhdGgxLCAmbW9kZTEpOworCXNoYTIgPSBleHRyYWN0KHQyLCAmcGF0aDIsICZtb2RlMik7CisKKwlwYXRobGVuMSA9IHN0cmxlbihwYXRoMSk7CisJcGF0aGxlbjIgPSBzdHJsZW4ocGF0aDIpOworCWNtcCA9IGJhc2VfbmFtZV9jb21wYXJlKHBhdGgxLCBwYXRobGVuMSwgbW9kZTEsIHBhdGgyLCBwYXRobGVuMiwgbW9kZTIpOworCWlmIChjbXAgPCAwKSB7CisJCXNob3dfZW50cnkob3B0LCAiLSIsIHQxLCBiYXNlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY21wID4gMCkgeworCQlzaG93X2VudHJ5KG9wdCwgIisiLCB0MiwgYmFzZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIW9wdC0+ZmluZF9jb3BpZXNfaGFyZGVyICYmCisJICAgICFtZW1jbXAoc2hhMSwgc2hhMiwgMjApICYmIG1vZGUxID09IG1vZGUyKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGZpbGVtb2RlIGhhcyBjaGFuZ2VkIHRvL2Zyb20gYSBkaXJlY3RvcnkgZnJvbS90byBhIHJlZ3VsYXIKKwkgKiBmaWxlLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGl0IGEgcmVtb3ZlIGFuZCBhbiBhZGQuCisJICovCisJaWYgKFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKSB7CisJCXNob3dfZW50cnkob3B0LCAiLSIsIHQxLCBiYXNlKTsKKwkJc2hvd19lbnRyeShvcHQsICIrIiwgdDIsIGJhc2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAob3B0LT5yZWN1cnNpdmUgJiYgU19JU0RJUihtb2RlMSkpIHsKKwkJaW50IHJldHZhbDsKKwkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIHBhdGgxLCBwYXRobGVuMSk7CisJCWlmIChvcHQtPnRyZWVfaW5fcmVjdXJzaXZlKQorCQkJb3B0LT5jaGFuZ2Uob3B0LCBtb2RlMSwgbW9kZTIsCisJCQkJICAgIHNoYTEsIHNoYTIsIGJhc2UsIHBhdGgxKTsKKwkJcmV0dmFsID0gZGlmZl90cmVlX3NoYTEoc2hhMSwgc2hhMiwgbmV3YmFzZSwgb3B0KTsKKwkJZnJlZShuZXdiYXNlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwgc2hhMSwgc2hhMiwgYmFzZSwgcGF0aDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGludGVyZXN0aW5nKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBtb2RlOworCWludCBpOworCWludCBiYXNlbGVuLCBwYXRobGVuOworCisJaWYgKCFucl9wYXRocykKKwkJcmV0dXJuIDE7CisKKwkodm9pZClleHRyYWN0KGRlc2MsICZwYXRoLCAmbW9kZSk7CisKKwlwYXRobGVuID0gc3RybGVuKHBhdGgpOworCWJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisKKwlmb3IgKGk9MDsgaSA8IG5yX3BhdGhzOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbWF0Y2ggPSBwYXRoc1tpXTsKKwkJaW50IG1hdGNobGVuID0gcGF0aGxlbnNbaV07CisKKwkJaWYgKGJhc2VsZW4gPj0gbWF0Y2hsZW4pIHsKKwkJCS8qIElmIGl0IGRvZXNuJ3QgbWF0Y2gsIG1vdmUgYWxvbmcuLi4gKi8KKwkJCWlmIChzdHJuY21wKGJhc2UsIG1hdGNoLCBtYXRjaGxlbikpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRoZSBiYXNlIGlzIGEgc3ViZGlyZWN0b3J5IG9mIGEgcGF0aCB3aGljaCB3YXMgc3BlY2lmaWVkLiAqLworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKiBEb2VzIHRoZSBiYXNlIG1hdGNoPyAqLworCQlpZiAoc3RybmNtcChiYXNlLCBtYXRjaCwgYmFzZWxlbikpCisJCQljb250aW51ZTsKKworCQltYXRjaCArPSBiYXNlbGVuOworCQltYXRjaGxlbiAtPSBiYXNlbGVuOworCisJCWlmIChwYXRobGVuID4gbWF0Y2hsZW4pCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2hsZW4gPiBwYXRobGVuKSB7CisJCQlpZiAobWF0Y2hbcGF0aGxlbl0gIT0gJy8nKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFTX0lTRElSKG1vZGUpKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0cm5jbXAocGF0aCwgbWF0Y2gsIHBhdGhsZW4pKQorCQkJY29udGludWU7CisKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOyAvKiBObyBtYXRjaGVzICovCit9CisKKy8qIEEgd2hvbGUgc3ViLXRyZWUgd2VudCBhd2F5IG9yIGFwcGVhcmVkICovCitzdGF0aWMgdm9pZCBzaG93X3RyZWUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJd2hpbGUgKGRlc2MtPnNpemUpIHsKKwkJaWYgKGludGVyZXN0aW5nKGRlc2MsIGJhc2UpKQorCQkJc2hvd19lbnRyeShvcHQsIHByZWZpeCwgZGVzYywgYmFzZSk7CisJCXVwZGF0ZV90cmVlX2VudHJ5KGRlc2MpOworCX0KK30KKworLyogQSBmaWxlIGVudHJ5IHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLworc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpiYXNlKQoreworCXVuc2lnbmVkIG1vZGU7CisJY29uc3QgY2hhciAqcGF0aDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gZXh0cmFjdChkZXNjLCAmcGF0aCwgJm1vZGUpOworCisJaWYgKG9wdC0+cmVjdXJzaXZlICYmIFNfSVNESVIobW9kZSkpIHsKKwkJY2hhciB0eXBlWzIwXTsKKwkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJCXN0cnVjdCB0cmVlX2Rlc2MgaW5uZXI7CisJCXZvaWQgKnRyZWU7CisKKwkJdHJlZSA9IHJlYWRfc2hhMV9maWxlKHNoYTEsIHR5cGUsICZpbm5lci5zaXplKTsKKwkJaWYgKCF0cmVlIHx8IHN0cmNtcCh0eXBlLCAidHJlZSIpKQorCQkJZGllKCJjb3JydXB0IHRyZWUgc2hhICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCWlubmVyLmJ1ZiA9IHRyZWU7CisJCXNob3dfdHJlZShvcHQsIHByZWZpeCwgJmlubmVyLCBuZXdiYXNlKTsKKworCQlmcmVlKHRyZWUpOworCQlmcmVlKG5ld2Jhc2UpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHQtPmFkZF9yZW1vdmUob3B0LCBwcmVmaXhbMF0sIG1vZGUsIHNoYTEsIGJhc2UsIHBhdGgpOworCXJldHVybiAwOworfQorCitpbnQgZGlmZl90cmVlKHN0cnVjdCB0cmVlX2Rlc2MgKnQxLCBzdHJ1Y3QgdHJlZV9kZXNjICp0MiwgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXdoaWxlICh0MS0+c2l6ZSB8IHQyLT5zaXplKSB7CisJCWlmIChucl9wYXRocyAmJiB0MS0+c2l6ZSAmJiAhaW50ZXJlc3RpbmcodDEsIGJhc2UpKSB7CisJCQl1cGRhdGVfdHJlZV9lbnRyeSh0MSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobnJfcGF0aHMgJiYgdDItPnNpemUgJiYgIWludGVyZXN0aW5nKHQyLCBiYXNlKSkgeworCQkJdXBkYXRlX3RyZWVfZW50cnkodDIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF0MS0+c2l6ZSkgeworCQkJc2hvd19lbnRyeShvcHQsICIrIiwgdDIsIGJhc2UpOworCQkJdXBkYXRlX3RyZWVfZW50cnkodDIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF0Mi0+c2l6ZSkgeworCQkJc2hvd19lbnRyeShvcHQsICItIiwgdDEsIGJhc2UpOworCQkJdXBkYXRlX3RyZWVfZW50cnkodDEpOworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChjb21wYXJlX3RyZWVfZW50cnkodDEsIHQyLCBiYXNlLCBvcHQpKSB7CisJCWNhc2UgLTE6CisJCQl1cGRhdGVfdHJlZV9lbnRyeSh0MSk7CisJCQljb250aW51ZTsKKwkJY2FzZSAwOgorCQkJdXBkYXRlX3RyZWVfZW50cnkodDEpOworCQkJLyogRmFsbHRocm91Z2ggKi8KKwkJY2FzZSAxOgorCQkJdXBkYXRlX3RyZWVfZW50cnkodDIpOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJnaXQtZGlmZi10cmVlOiBpbnRlcm5hbCBlcnJvciIpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRpZmZfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCBjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJdm9pZCAqdHJlZTEsICp0cmVlMjsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQxLCB0MjsKKwlpbnQgcmV0dmFsOworCisJdHJlZTEgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShvbGQsICJ0cmVlIiwgJnQxLnNpemUsIE5VTEwpOworCWlmICghdHJlZTEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgc291cmNlIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG9sZCkpOworCXRyZWUyID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UobmV3LCAidHJlZSIsICZ0Mi5zaXplLCBOVUxMKTsKKwlpZiAoIXRyZWUyKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGRlc3RpbmF0aW9uIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KG5ldykpOworCXQxLmJ1ZiA9IHRyZWUxOworCXQyLmJ1ZiA9IHRyZWUyOworCXJldHZhbCA9IGRpZmZfdHJlZSgmdDEsICZ0MiwgYmFzZSwgb3B0KTsKKwlmcmVlKHRyZWUxKTsKKwlmcmVlKHRyZWUyKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGNvdW50X3BhdGhzKGNvbnN0IGNoYXIgKipwYXRocykKK3sKKwlpbnQgaSA9IDA7CisJd2hpbGUgKCpwYXRocysrKQorCQlpKys7CisJcmV0dXJuIGk7Cit9CisKK3ZvaWQgZGlmZl90cmVlX3NldHVwX3BhdGhzKGNvbnN0IGNoYXIgKipwKQoreworCWlmIChwKSB7CisJCWludCBpOworCisJCXBhdGhzID0gcDsKKwkJbnJfcGF0aHMgPSBjb3VudF9wYXRocyhwYXRocyk7CisJCXBhdGhsZW5zID0geG1hbGxvYyhucl9wYXRocyAqIHNpemVvZihpbnQpKTsKKwkJZm9yIChpPTA7IGk8bnJfcGF0aHM7IGkrKykKKwkJCXBhdGhsZW5zW2ldID0gc3RybGVuKHBhdGhzW2ldKTsKKwl9Cit9CmRpZmYgLS1naXQgYS91cGRhdGUtaW5kZXguYyBiL3VwZGF0ZS1pbmRleC5jCmluZGV4IDhmZTAxNWIuLjViYmMzZGUgMTAwNjQ0Ci0tLSBhL3VwZGF0ZS1pbmRleC5jCisrKyBiL3VwZGF0ZS1pbmRleC5jCkBAIC00LDYgKzQsOCBAQAogICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQogICovCiAjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgogCiAvKgogICogRGVmYXVsdCB0byBub3QgYWxsb3dpbmcgY2hhbmdlcyB0byB0aGUgbGlzdCBvZiBmaWxlcy4gVGhlCkBAIC0xMiw4ICsxNCwxNSBAQAogICogbGlrZSAiZ2l0LXVwZGF0ZS1pbmRleCAqIiBhbmQgc3VkZGVubHkgaGF2aW5nIGFsbCB0aGUgb2JqZWN0CiAgKiBmaWxlcyBiZSByZXZpc2lvbiBjb250cm9sbGVkLgogICovCi1zdGF0aWMgaW50IGFsbG93X2FkZCA9IDAsIGFsbG93X3JlbW92ZSA9IDAsIGFsbG93X3JlcGxhY2UgPSAwLCBub3RfbmV3ID0gMCwgcXVpZXQgPSAwLCBpbmZvX29ubHkgPSAwOworc3RhdGljIGludCBhbGxvd19hZGQ7CitzdGF0aWMgaW50IGFsbG93X3JlbW92ZTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVwbGFjZTsKK3N0YXRpYyBpbnQgYWxsb3dfdW5tZXJnZWQ7IC8qIC0tcmVmcmVzaCBuZWVkaW5nIG1lcmdlIGlzIG5vdCBlcnJvciAqLworc3RhdGljIGludCBub3RfbmV3OyAvKiAtLXJlZnJlc2ggbm90IGhhdmluZyB3b3JraW5nIHRyZWUgZmlsZXMgaXMgbm90IGVycm9yICovCitzdGF0aWMgaW50IHF1aWV0OyAvKiAtLXJlZnJlc2ggbmVlZGluZyB1cGRhdGUgaXMgbm90IGVycm9yICovCitzdGF0aWMgaW50IGluZm9fb25seTsKIHN0YXRpYyBpbnQgZm9yY2VfcmVtb3ZlOworc3RhdGljIGludCB2ZXJib3NlOwogCiAvKiBUaHJlZSBmdW5jdGlvbnMgdG8gYWxsb3cgb3ZlcmxvYWRlZCBwb2ludGVyIHJldHVybjsgc2VlIGxpbnV4L2Vyci5oICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKQEAgLTMxLDEzICs0MCwyNCBAQAogCXJldHVybiAodW5zaWduZWQgbG9uZylwdHIgPiAodW5zaWduZWQgbG9uZyktMTAwMEw7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX2ZpbGVfdG9fY2FjaGUoY2hhciAqcGF0aCkKK3N0YXRpYyB2b2lkIHJlcG9ydChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZwOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwl2YV9zdGFydCh2cCwgZm10KTsKKwl2cHJpbnRmKGZtdCwgdnApOworCXB1dGNoYXIoJ1xuJyk7CisJdmFfZW5kKHZwKTsKK30KKworc3RhdGljIGludCBhZGRfZmlsZV90b19jYWNoZShjb25zdCBjaGFyICpwYXRoKQogewogCWludCBzaXplLCBuYW1lbGVuLCBvcHRpb24sIHN0YXR1czsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwogCXN0cnVjdCBzdGF0IHN0OwotCWludCBmZDsKLQljaGFyICp0YXJnZXQ7CiAKIAlzdGF0dXMgPSBsc3RhdChwYXRoLCAmc3QpOwogCWlmIChzdGF0dXMgPCAwIHx8IFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKQEAgLTY4LDQyICs4OCwyNyBAQAogCQkJcmV0dXJuIGVycm9yKCJsc3RhdChcIiVzXCIpOiAlcyIsIHBhdGgsCiAJCQkJICAgICBzdHJlcnJvcihlcnJubykpOwogCX0KKwogCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CiAJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CiAJY2UgPSB4bWFsbG9jKHNpemUpOwogCW1lbXNldChjZSwgMCwgc2l6ZSk7CiAJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKIAlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgJnN0KTsKKwogCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3Quc3RfbW9kZSk7Ci0JY2UtPmNlX2ZsYWdzID0gaHRvbnMobmFtZWxlbik7Ci0Jc3dpdGNoIChzdC5zdF9tb2RlICYgU19JRk1UKSB7Ci0JY2FzZSBTX0lGUkVHOgotCQlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOwotCQlpZiAoZmQgPCAwKQotCQkJcmV0dXJuIGVycm9yKCJvcGVuKFwiJXNcIik6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJaWYgKGluZGV4X2ZkKGNlLT5zaGExLCBmZCwgJnN0LCAhaW5mb19vbmx5LCBOVUxMKSA8IDApCi0JCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLCBwYXRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lGTE5LOgotCQl0YXJnZXQgPSB4bWFsbG9jKHN0LnN0X3NpemUrMSk7Ci0JCWlmIChyZWFkbGluayhwYXRoLCB0YXJnZXQsIHN0LnN0X3NpemUrMSkgIT0gc3Quc3Rfc2l6ZSkgewotCQkJY2hhciAqZXJyc3RyID0gc3RyZXJyb3IoZXJybm8pOwotCQkJZnJlZSh0YXJnZXQpOwotCQkJcmV0dXJuIGVycm9yKCJyZWFkbGluayhcIiVzXCIpOiAlcyIsIHBhdGgsCi0JCQkgICAgICAgICAgICAgZXJyc3RyKTsKLQkJfQotCQlpZiAoaW5mb19vbmx5KSB7Ci0JCQl1bnNpZ25lZCBjaGFyIGhkcls1MF07Ci0JCQlpbnQgaGRybGVuOwotCQkJd3JpdGVfc2hhMV9maWxlX3ByZXBhcmUodGFyZ2V0LCBzdC5zdF9zaXplLCAiYmxvYiIsCi0JCQkJCQljZS0+c2hhMSwgaGRyLCAmaGRybGVuKTsKLQkJfSBlbHNlIGlmICh3cml0ZV9zaGExX2ZpbGUodGFyZ2V0LCBzdC5zdF9zaXplLCAiYmxvYiIsIGNlLT5zaGExKSkKLQkJCXJldHVybiBlcnJvcigiJXM6IGZhaWxlZCB0byBpbnNlcnQgaW50byBkYXRhYmFzZSIsIHBhdGgpOwotCQlmcmVlKHRhcmdldCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBlcnJvcigiJXM6IHVuc3VwcG9ydGVkIGZpbGUgdHlwZSIsIHBhdGgpOworCWlmICghdHJ1c3RfZXhlY3V0YWJsZV9iaXQpIHsKKwkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cworCQkgKiBmcm9tIGl0LgorCQkgKi8KKwkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOworCQlpZiAoMCA8PSBwb3MpCisJCQljZS0+Y2VfbW9kZSA9IGFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9tb2RlOwogCX0KKwljZS0+Y2VfZmxhZ3MgPSBodG9ucyhuYW1lbGVuKTsKKworCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCAmc3QsICFpbmZvX29ubHkpKQorCQlyZXR1cm4gLTE7CiAJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CiAJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CiAJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkKQEAgLTExMiw0NyArMTE3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb21wYXJlX2RhdGEoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQotewotCWludCBtYXRjaCA9IC0xOwotCWludCBmZCA9IG9wZW4oY2UtPm5hbWUsIE9fUkRPTkxZKTsKLQotCWlmIChmZCA+PSAwKSB7Ci0JCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JCWlmICghaW5kZXhfZmQoc2hhMSwgZmQsIHN0LCAwLCBOVUxMKSkKLQkJCW1hdGNoID0gbWVtY21wKHNoYTEsIGNlLT5zaGExLCAyMCk7Ci0JCWNsb3NlKGZkKTsKLQl9Ci0JcmV0dXJuIG1hdGNoOwotfQotCi1zdGF0aWMgaW50IGNvbXBhcmVfbGluayhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCB1bnNpZ25lZCBsb25nIGV4cGVjdGVkX3NpemUpCi17Ci0JaW50IG1hdGNoID0gLTE7Ci0JY2hhciAqdGFyZ2V0OwotCXZvaWQgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JY2hhciB0eXBlWzEwXTsKLQlpbnQgbGVuOwotCi0JdGFyZ2V0ID0geG1hbGxvYyhleHBlY3RlZF9zaXplKTsKLQlsZW4gPSByZWFkbGluayhjZS0+bmFtZSwgdGFyZ2V0LCBleHBlY3RlZF9zaXplKTsKLQlpZiAobGVuICE9IGV4cGVjdGVkX3NpemUpIHsKLQkJZnJlZSh0YXJnZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKGNlLT5zaGExLCB0eXBlLCAmc2l6ZSk7Ci0JaWYgKCFidWZmZXIpIHsKLQkJZnJlZSh0YXJnZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChzaXplID09IGV4cGVjdGVkX3NpemUpCi0JCW1hdGNoID0gbWVtY21wKGJ1ZmZlciwgdGFyZ2V0LCBzaXplKTsKLQlmcmVlKGJ1ZmZlcik7Ci0JZnJlZSh0YXJnZXQpOwotCXJldHVybiBtYXRjaDsKLX0KLQogLyoKICAqICJyZWZyZXNoIiBkb2VzIG5vdCBjYWxjdWxhdGUgYSBuZXcgc2hhMSBmaWxlIG9yIGJyaW5nIHRoZQogICogY2FjaGUgdXAtdG8tZGF0ZSBmb3IgbW9kZS9jb250ZW50IGNoYW5nZXMuIEJ1dCB3aGF0IGl0CkBAIC0xNzUsMjggKzEzOSwxMSBAQAogCiAJY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCk7CiAJaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gY2U7CisJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBJZiB0aGUgbW9kZSBvciB0eXBlIGhhcyBjaGFuZ2VkLCB0aGVyZSdzIG5vIHBvaW50IGluIHRyeWluZwotCSAqIHRvIHJlZnJlc2ggdGhlIGVudHJ5IC0gaXQncyBub3QgZ29pbmcgdG8gbWF0Y2gKLQkgKi8KLQlpZiAoY2hhbmdlZCAmIChNT0RFX0NIQU5HRUQgfCBUWVBFX0NIQU5HRUQpKQorCWlmIChjZV9tb2RpZmllZChjZSwgJnN0KSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKLQljYXNlIFNfSUZSRUc6Ci0JCWlmIChjb21wYXJlX2RhdGEoY2UsICZzdCkpCi0JCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lGTE5LOgotCQlpZiAoY29tcGFyZV9saW5rKGNlLCBzdC5zdF9zaXplKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9Ci0KIAlzaXplID0gY2Vfc2l6ZShjZSk7CiAJdXBkYXRlZCA9IHhtYWxsb2Moc2l6ZSk7CiAJbWVtY3B5KHVwZGF0ZWQsIGNlLCBzaXplKTsKQEAgLTIxMywxNiArMTYwLDIwIEBACiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICpuZXc7CiAJCWNlID0gYWN0aXZlX2NhY2hlW2ldOwogCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7Ci0JCQlwcmludGYoIiVzOiBuZWVkcyBtZXJnZVxuIiwgY2UtPm5hbWUpOwotCQkJaGFzX2Vycm9ycyA9IDE7CiAJCQl3aGlsZSAoKGkgPCBhY3RpdmVfbnIpICYmCiAJCQkgICAgICAgISBzdHJjbXAoYWN0aXZlX2NhY2hlW2ldLT5uYW1lLCBjZS0+bmFtZSkpCiAJCQkJaSsrOwogCQkJaS0tOworCQkJaWYgKGFsbG93X3VubWVyZ2VkKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRmKCIlczogbmVlZHMgbWVyZ2VcbiIsIGNlLT5uYW1lKTsKKwkJCWhhc19lcnJvcnMgPSAxOwogCQkJY29udGludWU7CiAJCX0KIAogCQluZXcgPSByZWZyZXNoX2VudHJ5KGNlKTsKKwkJaWYgKCFuZXcpCisJCQljb250aW51ZTsKIAkJaWYgKElTX0VSUihuZXcpKSB7CiAJCQlpZiAobm90X25ldyAmJiBQVFJfRVJSKG5ldykgPT0gLUVOT0VOVCkKIAkJCQljb250aW51ZTsKQEAgLTI3OSw3ICsyMzAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHZlcmlmeV9wYXRoKGNoYXIgKnBhdGgpCitzdGF0aWMgaW50IHZlcmlmeV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJY2hhciBjOwogCkBAIC0zMDUsNyArMjU2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYWRkX2NhY2hlaW5mbyhjaGFyICphcmcxLCBjaGFyICphcmcyLCBjaGFyICphcmczKQorc3RhdGljIGludCBhZGRfY2FjaGVpbmZvKGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIsIGNvbnN0IGNoYXIgKmFyZzMpCiB7CiAJaW50IHNpemUsIGxlbiwgb3B0aW9uOwogCXVuc2lnbmVkIGludCBtb2RlOwpAQCAtMzMwLDE2ICsyODEsMTI5IEBACiAJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKIAlvcHRpb24gPSBhbGxvd19hZGQgPyBBRERfQ0FDSEVfT0tfVE9fQUREIDogMDsKIAlvcHRpb24gfD0gYWxsb3dfcmVwbGFjZSA/IEFERF9DQUNIRV9PS19UT19SRVBMQUNFIDogMDsKLQlyZXR1cm4gYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pOworCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBhZGQgdG8gdGhlIGluZGV4IC0gbWlzc2luZyAtLWFkZCBvcHRpb24/IiwKKwkJCSAgICAgYXJnMyk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIGFyZzMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNobW9kX3BhdGgoaW50IGZsaXAsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXVuc2lnbmVkIGludCBtb2RlOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC0xOworCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKKwlpZiAoIVNfSVNSRUcobW9kZSkpCisJCXJldHVybiAtMTsKKwlzd2l0Y2ggKGZsaXApIHsKKwljYXNlICcrJzoKKwkJY2UtPmNlX21vZGUgfD0gaHRvbmwoMDExMSk7IGJyZWFrOworCWNhc2UgJy0nOgorCQljZS0+Y2VfbW9kZSAmPSBodG9ubCh+MDExMSk7IGJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJYWN0aXZlX2NhY2hlX2NoYW5nZWQgPSAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNhY2hlX2ZpbGUgY2FjaGVfZmlsZTsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorc3RhdGljIHZvaWQgdXBkYXRlX29uZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwcmVmaXhfbGVuZ3RoKQogewotCWludCBpLCBuZXdmZCwgZW50cmllcywgaGFzX2Vycm9ycyA9IDA7CisJY29uc3QgY2hhciAqcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CisJaWYgKCF2ZXJpZnlfcGF0aChwKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklnbm9yaW5nIHBhdGggJXNcbiIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCWlmIChmb3JjZV9yZW1vdmUpIHsKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocCkpCisJCQlkaWUoImdpdC11cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLCBwYXRoKTsKKwkJcmVwb3J0KCJyZW1vdmUgJyVzJyIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCWlmIChhZGRfZmlsZV90b19jYWNoZShwKSkKKwkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBmaWxlICVzIiwgcGF0aCk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2luZGV4X2luZm8oaW50IGxpbmVfdGVybWluYXRpb24pCit7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJc3RyYnVmX2luaXQoJmJ1Zik7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqcHRyOworCQljaGFyICpwYXRoX25hbWU7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXVuc2lnbmVkIGludCBtb2RlOworCisJCXJlYWRfbGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbik7CisJCWlmIChidWYuZW9mKQorCQkJYnJlYWs7CisKKwkJbW9kZSA9IHN0cnRvdWwoYnVmLmJ1ZiwgJnB0ciwgOCk7CisJCWlmIChwdHIgPT0gYnVmLmJ1ZiB8fCAqcHRyICE9ICcgJyB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KHB0ciArIDEsIHNoYTEpIHx8CisJCSAgICBwdHJbNDFdICE9ICdcdCcpCisJCQlnb3RvIGJhZF9saW5lOworCisJCXB0ciArPSA0MjsKKworCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBwdHJbMF0gPT0gJyInKQorCQkJcGF0aF9uYW1lID0gdW5xdW90ZV9jX3N0eWxlKHB0ciwgTlVMTCk7CisJCWVsc2UKKwkJCXBhdGhfbmFtZSA9IHB0cjsKKworCQlpZiAoIXZlcmlmeV9wYXRoKHBhdGhfbmFtZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSWdub3JpbmcgcGF0aCAlc1xuIiwgcGF0aF9uYW1lKTsKKwkJCWlmIChwYXRoX25hbWUgIT0gcHRyKQorCQkJCWZyZWUocGF0aF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFtb2RlKSB7CisJCQkvKiBtb2RlID09IDAgbWVhbnMgdGhlcmUgaXMgbm8gc3VjaCBwYXRoIC0tIHJlbW92ZSAqLworCQkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aF9uYW1lKSkKKwkJCQlkaWUoImdpdC11cGRhdGUtaW5kZXg6IHVuYWJsZSB0byByZW1vdmUgJXMiLAorCQkJCSAgICBwdHIpOworCQl9CisJCWVsc2UgeworCQkJLyogbW9kZSAnICcgc2hhMSAnXHQnIG5hbWUKKwkJCSAqIHB0clstMV0gcG9pbnRzIGF0IHRhYiwKKwkJCSAqIHB0clstNDFdIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2hhMQorCQkJICovCisJCQlwdHJbLTQyXSA9IHB0clstMV0gPSAwOworCQkJaWYgKGFkZF9jYWNoZWluZm8oYnVmLmJ1ZiwgcHRyLTQxLCBwYXRoX25hbWUpKQorCQkJCWRpZSgiZ2l0LXVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHVwZGF0ZSAlcyIsCisJCQkJICAgIHBhdGhfbmFtZSk7CisJCX0KKwkJaWYgKHBhdGhfbmFtZSAhPSBwdHIpCisJCQlmcmVlKHBhdGhfbmFtZSk7CisJCWNvbnRpbnVlOworCisJYmFkX2xpbmU6CisJCWRpZSgibWFsZm9ybWVkIGluZGV4IGluZm8gJXMiLCBidWYuYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHVwZGF0ZV9pbmRleF91c2FnZVtdID0KKyJnaXQtdXBkYXRlLWluZGV4IFstcV0gWy0tYWRkXSBbLS1yZXBsYWNlXSBbLS1yZW1vdmVdIFstLXVubWVyZ2VkXSBbLS1yZWZyZXNoXSBbLS1jYWNoZWluZm9dIFstLWNobW9kPSgrfC0peF0gWy0taW5mby1vbmx5XSBbLS1mb3JjZS1yZW1vdmVdIFstLXN0ZGluXSBbLS1pbmRleC1pbmZvXSBbLS1pZ25vcmUtbWlzc2luZ10gWy16XSBbLS12ZXJib3NlXSBbLS1dIDxmaWxlPi4uLiI7CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgbmV3ZmQsIGVudHJpZXMsIGhhc19lcnJvcnMgPSAwLCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKIAlpbnQgYWxsb3dfb3B0aW9ucyA9IDE7CisJaW50IHJlYWRfZnJvbV9zdGRpbiA9IDA7CiAJY29uc3QgY2hhciAqcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWludCBwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCiAJbmV3ZmQgPSBob2xkX2luZGV4X2ZpbGVfZm9yX3VwZGF0ZSgmY2FjaGVfZmlsZSwgZ2V0X2luZGV4X2ZpbGUoKSk7CiAJaWYgKG5ld2ZkIDwgMCkKQEAgLTM1MCw3ICs0MTQsNyBAQAogCQlkaWUoImNhY2hlIGNvcnJ1cHRlZCIpOwogCiAJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKLQkJY2hhciAqcGF0aCA9IGFyZ3ZbaV07CisJCWNvbnN0IGNoYXIgKnBhdGggPSBhcmd2W2ldOwogCiAJCWlmIChhbGxvd19vcHRpb25zICYmICpwYXRoID09ICctJykgewogCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0tIikpIHsKQEAgLTM3Myw2ICs0MzcsMTAgQEAKIAkJCQlhbGxvd19yZW1vdmUgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0tdW5tZXJnZWQiKSkgeworCQkJCWFsbG93X3VubWVyZ2VkID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKHBhdGgsICItLXJlZnJlc2giKSkgewogCQkJCWhhc19lcnJvcnMgfD0gcmVmcmVzaF9jYWNoZSgpOwogCQkJCWNvbnRpbnVlOwpAQCAtMzg1LDYgKzQ1MywxNCBAQAogCQkJCWkgKz0gMzsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKHBhdGgsICItLWNobW9kPS14IikgfHwKKwkJCSAgICAhc3RyY21wKHBhdGgsICItLWNobW9kPSt4IikpIHsKKwkJCQlpZiAoYXJnYyA8PSBpKzEpCisJCQkJCWRpZSgiZ2l0LXVwZGF0ZS1pbmRleDogJXMgPHBhdGg+IiwgcGF0aCk7CisJCQkJaWYgKGNobW9kX3BhdGgocGF0aFs4XSwgYXJndlsrK2ldKSkKKwkJCQkJZGllKCJnaXQtdXBkYXRlLWluZGV4OiAlcyBjYW5ub3QgY2htb2QgJXMiLCBwYXRoLCBhcmd2W2ldKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKHBhdGgsICItLWluZm8tb25seSIpKSB7CiAJCQkJaW5mb19vbmx5ID0gMTsKIAkJCQljb250aW51ZTsKQEAgLTM5MywyOSArNDY5LDUwIEBACiAJCQkJZm9yY2VfcmVtb3ZlID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi16IikpIHsKKwkJCQlsaW5lX3Rlcm1pbmF0aW9uID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKHBhdGgsICItLXN0ZGluIikpIHsKKwkJCQlpZiAoaSAhPSBhcmdjIC0gMSkKKwkJCQkJZGllKCItLXN0ZGluIG11c3QgYmUgYXQgdGhlIGVuZCIpOworCQkJCXJlYWRfZnJvbV9zdGRpbiA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1pbmRleC1pbmZvIikpIHsKKwkJCQlhbGxvd19hZGQgPSBhbGxvd19yZXBsYWNlID0gYWxsb3dfcmVtb3ZlID0gMTsKKwkJCQlyZWFkX2luZGV4X2luZm8obGluZV90ZXJtaW5hdGlvbik7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1pZ25vcmUtbWlzc2luZyIpKSB7CiAJCQkJbm90X25ldyA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS12ZXJib3NlIikpIHsKKwkJCQl2ZXJib3NlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKHBhdGgsICItaCIpIHx8ICFzdHJjbXAocGF0aCwgIi0taGVscCIpKQorCQkJCXVzYWdlKHVwZGF0ZV9pbmRleF91c2FnZSk7CiAJCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgcGF0aCk7CiAJCX0KLQkJcGF0aCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwLCBwYXRoKTsKLQkJaWYgKCF2ZXJpZnlfcGF0aChwYXRoKSkgewotCQkJZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBwYXRoICVzXG4iLCBhcmd2W2ldKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChmb3JjZV9yZW1vdmUpIHsKLQkJCWlmIChyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQotCQkJCWRpZSgiZ2l0LXVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsIHBhdGgpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGFkZF9maWxlX3RvX2NhY2hlKHBhdGgpKQotCQkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBmaWxlICVzIiwgcGF0aCk7CisJCXVwZGF0ZV9vbmUocGF0aCwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoKTsKIAl9Ci0JaWYgKHdyaXRlX2NhY2hlKG5ld2ZkLCBhY3RpdmVfY2FjaGUsIGFjdGl2ZV9ucikgfHwKLQkgICAgY29tbWl0X2luZGV4X2ZpbGUoJmNhY2hlX2ZpbGUpKQotCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgY2FjaGVmaWxlIik7CisJaWYgKHJlYWRfZnJvbV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwkJc3RyYnVmX2luaXQoJmJ1Zik7CisJCXdoaWxlICgxKSB7CisJCQlyZWFkX2xpbmUoJmJ1Ziwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pOworCQkJaWYgKGJ1Zi5lb2YpCisJCQkJYnJlYWs7CisJCQl1cGRhdGVfb25lKGJ1Zi5idWYsIHByZWZpeCwgcHJlZml4X2xlbmd0aCk7CisJCX0KKwl9CisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CisJCWlmICh3cml0ZV9jYWNoZShuZXdmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCSAgICBjb21taXRfaW5kZXhfZmlsZSgmY2FjaGVfZmlsZSkpCisJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgY2FjaGVmaWxlIik7CisJfQogCiAJcmV0dXJuIGhhc19lcnJvcnMgPyAxIDogMDsKIH0KZGlmZiAtLWdpdCBhL3VwZGF0ZS1yZWYuYyBiL3VwZGF0ZS1yZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWRjM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvdXBkYXRlLXJlZi5jCkBAIC0wLDAgKzEsODEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZ2l0X3VwZGF0ZV9yZWZfdXNhZ2VbXSA9ICJnaXQtdXBkYXRlLXJlZiA8cmVmbmFtZT4gPHZhbHVlPiBbPG9sZHZhbD5dIjsKKworc3RhdGljIGludCByZV92ZXJpZnkoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqb2xkc2hhMSwgdW5zaWduZWQgY2hhciAqY3VycnNoYTEpCit7CisJY2hhciBidWZbNDBdOworCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpLCBucjsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJbnIgPSByZWFkKGZkLCBidWYsIDQwKTsKKwljbG9zZShmZCk7CisJaWYgKG5yICE9IDQwIHx8IGdldF9zaGExX2hleChidWYsIGN1cnJzaGExKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gbWVtY21wKG9sZHNoYTEsIGN1cnJzaGExLCAyMCkgPyAtMSA6IDA7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICpoZXg7CisJY29uc3QgY2hhciAqcmVmbmFtZSwgKnZhbHVlLCAqb2xkdmFsLCAqcGF0aCwgKmxvY2twYXRoOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIG9sZHNoYTFbMjBdLCBjdXJyc2hhMVsyMF07CisJaW50IGZkLCB3cml0dGVuOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWlmIChhcmdjIDwgMyB8fCBhcmdjID4gNCkKKwkJdXNhZ2UoZ2l0X3VwZGF0ZV9yZWZfdXNhZ2UpOworCisJcmVmbmFtZSA9IGFyZ3ZbMV07CisJdmFsdWUgPSBhcmd2WzJdOworCW9sZHZhbCA9IGFyZ3ZbM107CisJaWYgKGdldF9zaGExKHZhbHVlLCBzaGExKSA8IDApCisJCWRpZSgiJXM6IG5vdCBhIHZhbGlkIFNIQTEiLCB2YWx1ZSk7CisJbWVtc2V0KG9sZHNoYTEsIDAsIDIwKTsKKwlpZiAob2xkdmFsICYmIGdldF9zaGExKG9sZHZhbCwgb2xkc2hhMSkgPCAwKQorCQlkaWUoIiVzOiBub3QgYSB2YWxpZCBvbGQgU0hBMSIsIG9sZHZhbCk7CisKKwlwYXRoID0gcmVzb2x2ZV9yZWYoZ2l0X3BhdGgoIiVzIiwgcmVmbmFtZSksIGN1cnJzaGExLCAhIW9sZHZhbCk7CisJaWYgKCFwYXRoKQorCQlkaWUoIk5vIHN1Y2ggcmVmOiAlcyIsIHJlZm5hbWUpOworCisJaWYgKG9sZHZhbCkgeworCQlpZiAobWVtY21wKGN1cnJzaGExLCBvbGRzaGExLCAyMCkpCisJCQlkaWUoIlJlZiAlcyBjaGFuZ2VkIHRvICVzIiwgcmVmbmFtZSwgc2hhMV90b19oZXgoY3VycnNoYTEpKTsKKwkJLyogTm90aGluZyB0byBkbz8gKi8KKwkJaWYgKCFtZW1jbXAob2xkc2hhMSwgc2hhMSwgMjApKQorCQkJZXhpdCgwKTsKKwl9CisJcGF0aCA9IHN0cmR1cChwYXRoKTsKKwlsb2NrcGF0aCA9IG1rcGF0aCgiJXMubG9jayIsIHBhdGgpOworCisJZmQgPSBvcGVuKGxvY2twYXRoLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2NjYpOworCWlmIChmZCA8IDApCisJCWRpZSgiVW5hYmxlIHRvIGNyZWF0ZSAlcyIsIGxvY2twYXRoKTsKKwloZXggPSBzaGExX3RvX2hleChzaGExKTsKKwloZXhbNDBdID0gJ1xuJzsKKwl3cml0dGVuID0gd3JpdGUoZmQsIGhleCwgNDEpOworCWNsb3NlKGZkKTsKKwlpZiAod3JpdHRlbiAhPSA0MSkgeworCQl1bmxpbmsobG9ja3BhdGgpOworCQlkaWUoIlVuYWJsZSB0byB3cml0ZSB0byAlcyIsIGxvY2twYXRoKTsKKwl9CisKKwkvKgorCSAqIFJlLXJlYWQgdGhlIHJlZiBhZnRlciBnZXR0aW5nIHRoZSBsb2NrIHRvIHZlcmlmeQorCSAqLworCWlmIChvbGR2YWwgJiYgcmVfdmVyaWZ5KHBhdGgsIG9sZHNoYTEsIGN1cnJzaGExKSA8IDApIHsKKwkJdW5saW5rKGxvY2twYXRoKTsKKwkJZGllKCJSZWYgbG9jayBmYWlsZWQiKTsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHksIHJlcGxhY2UgdGhlIG9sZCByZWYgd2l0aCB0aGUgbmV3IG9uZQorCSAqLworCWlmIChyZW5hbWUobG9ja3BhdGgsIHBhdGgpIDwgMCkgeworCQl1bmxpbmsobG9ja3BhdGgpOworCQlkaWUoIlVuYWJsZSB0byBjcmVhdGUgJXMiLCBwYXRoKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS91cGxvYWQtcGFjay5jIGIvdXBsb2FkLXBhY2suYwppbmRleCBkYTEwNzQyLi5iZTYzMTMyIDEwMDY0NAotLS0gYS91cGxvYWQtcGFjay5jCisrKyBiL3VwbG9hZC1wYWNrLmMKQEAgLTEsMTQgKzEsMjYgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgogCi1zdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfcGFja191c2FnZVtdID0gImdpdC11cGxvYWQtcGFjayA8ZGlyPiI7CitzdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfcGFja191c2FnZVtdID0gImdpdC11cGxvYWQtcGFjayBbLS1zdHJpY3RdIFstLXRpbWVvdXQ9bm5dIDxkaXI+IjsKIAotI2RlZmluZSBNQVhfSEFTICgxNikKLSNkZWZpbmUgTUFYX05FRURTICgyNTYpCi1zdGF0aWMgaW50IG5yX2hhcyA9IDAsIG5yX25lZWRzID0gMDsKKyNkZWZpbmUgVEhFWV9IQVZFICgxVSA8PCAwKQorI2RlZmluZSBPVVJfUkVGICgxVSA8PCAxKQorI2RlZmluZSBXQU5URUQgKDFVIDw8IDIpCisjZGVmaW5lIE1BWF9IQVMgMjU2CisjZGVmaW5lIE1BWF9ORUVEUyAyNTYKK3N0YXRpYyBpbnQgbnJfaGFzID0gMCwgbnJfbmVlZHMgPSAwLCBtdWx0aV9hY2sgPSAwLCBucl9vdXJfcmVmcyA9IDA7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBoYXNfc2hhMVtNQVhfSEFTXVsyMF07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBuZWVkc19zaGExW01BWF9ORUVEU11bMjBdOworc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0ID0gMDsKKworc3RhdGljIHZvaWQgcmVzZXRfdGltZW91dCh2b2lkKQoreworCWFsYXJtKHRpbWVvdXQpOworfQogCiBzdGF0aWMgaW50IHN0cmlwKGNoYXIgKmxpbmUsIGludCBsZW4pCiB7CkBAIC0yMSw2ICszMyw3IEBACiB7CiAJaW50IGZkWzJdOwogCXBpZF90IHBpZDsKKwlpbnQgY3JlYXRlX2Z1bGxfcGFjayA9IChucl9vdXJfcmVmcyA9PSBucl9uZWVkcyAmJiAhbnJfaGFzKTsKIAogCWlmIChwaXBlKGZkKSA8IDApCiAJCWRpZSgiZ2l0LXVwbG9hZC1wYWNrOiB1bmFibGUgdG8gY3JlYXRlIHBpcGUiKTsKQEAgLTMwLDEwICs0MywxOCBAQAogCiAJaWYgKCFwaWQpIHsKIAkJaW50IGk7Ci0JCWludCBhcmdzID0gbnJfaGFzICsgbnJfbmVlZHMgKyA1OwotCQljaGFyICoqYXJndiA9IHhtYWxsb2MoYXJncyAqIHNpemVvZihjaGFyICopKTsKLQkJY2hhciAqYnVmID0geG1hbGxvYyhhcmdzICogNDUpOwotCQljaGFyICoqcCA9IGFyZ3Y7CisJCWludCBhcmdzOworCQljaGFyICoqYXJndjsKKwkJY2hhciAqYnVmOworCQljaGFyICoqcDsKKworCQlpZiAoY3JlYXRlX2Z1bGxfcGFjaykKKwkJCWFyZ3MgPSAxMDsKKwkJZWxzZQorCQkJYXJncyA9IG5yX2hhcyArIG5yX25lZWRzICsgNTsKKwkJYXJndiA9IHhtYWxsb2MoYXJncyAqIHNpemVvZihjaGFyICopKTsKKwkJYnVmID0geG1hbGxvYyhhcmdzICogNDUpOworCQlwID0gYXJndjsKIAogCQlkdXAyKGZkWzFdLCAxKTsKIAkJY2xvc2UoMCk7CkBAIC00MSwxNyArNjIsMjIgQEAKIAkJY2xvc2UoZmRbMV0pOwogCQkqcCsrID0gImdpdC1yZXYtbGlzdCI7CiAJCSpwKysgPSAiLS1vYmplY3RzIjsKLQkJZm9yIChpID0gMDsgaSA8IG5yX25lZWRzOyBpKyspIHsKLQkJCSpwKysgPSBidWY7Ci0JCQltZW1jcHkoYnVmLCBzaGExX3RvX2hleChuZWVkc19zaGExW2ldKSwgNDEpOwotCQkJYnVmICs9IDQxOworCQlpZiAoY3JlYXRlX2Z1bGxfcGFjayB8fCBNQVhfTkVFRFMgPD0gbnJfbmVlZHMpCisJCQkqcCsrID0gIi0tYWxsIjsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnJfbmVlZHM7IGkrKykgeworCQkJCSpwKysgPSBidWY7CisJCQkJbWVtY3B5KGJ1Ziwgc2hhMV90b19oZXgobmVlZHNfc2hhMVtpXSksIDQxKTsKKwkJCQlidWYgKz0gNDE7CisJCQl9CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IG5yX2hhczsgaSsrKSB7Ci0JCQkqcCsrID0gYnVmOwotCQkJKmJ1ZisrID0gJ14nOwotCQkJbWVtY3B5KGJ1Ziwgc2hhMV90b19oZXgoaGFzX3NoYTFbaV0pLCA0MSk7Ci0JCQlidWYgKz0gNDE7Ci0JCX0KKwkJaWYgKCFjcmVhdGVfZnVsbF9wYWNrKQorCQkJZm9yIChpID0gMDsgaSA8IG5yX2hhczsgaSsrKSB7CisJCQkJKnArKyA9IGJ1ZjsKKwkJCQkqYnVmKysgPSAnXic7CisJCQkJbWVtY3B5KGJ1Ziwgc2hhMV90b19oZXgoaGFzX3NoYTFbaV0pLCA0MSk7CisJCQkJYnVmICs9IDQxOworCQkJfQogCQkqcCsrID0gTlVMTDsKIAkJZXhlY3ZwKCJnaXQtcmV2LWxpc3QiLCBhcmd2KTsKIAkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IHVuYWJsZSB0byBleGVjIGdpdC1yZXYtbGlzdCIpOwpAQCAtNjUsMTUgKzkxLDI3IEBACiAKIHN0YXRpYyBpbnQgZ290X3NoYTEoY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWludCBucjsKIAlpZiAoZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkpCiAJCWRpZSgiZ2l0LXVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIG9iamVjdCwgZ290ICclcyciLCBoZXgpOwogCWlmICghaGFzX3NoYTFfZmlsZShzaGExKSkKIAkJcmV0dXJuIDA7Ci0JbnIgPSBucl9oYXM7Ci0JaWYgKG5yIDwgTUFYX0hBUykgewotCQltZW1jcHkoaGFzX3NoYTFbbnJdLCBzaGExLCAyMCk7Ci0JCW5yX2hhcyA9IG5yKzE7CisJaWYgKG5yX2hhcyA8IE1BWF9IQVMpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF9vYmplY3Qoc2hhMSk7CisJCWlmICghKG8gJiYgby0+cGFyc2VkKSkKKwkJCW8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisJCWlmICghbykKKwkJCWRpZSgib29wcyAoJXMpIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQlpZiAoby0+dHlwZSA9PSBjb21taXRfdHlwZSkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJaWYgKG8tPmZsYWdzICYgVEhFWV9IQVZFKQorCQkJCXJldHVybiAwOworCQkJby0+ZmxhZ3MgfD0gVEhFWV9IQVZFOworCQkJZm9yIChwYXJlbnRzID0gKChzdHJ1Y3QgY29tbWl0KilvKS0+cGFyZW50czsKKwkJCSAgICAgcGFyZW50czsKKwkJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQkJcGFyZW50cy0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRIRVlfSEFWRTsKKwkJfQorCQltZW1jcHkoaGFzX3NoYTFbbnJfaGFzKytdLCBzaGExLCAyMCk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtODEsNDUgKzExOSw0NyBAQAogc3RhdGljIGludCBnZXRfY29tbW9uX2NvbW1pdHModm9pZCkKIHsKIAlzdGF0aWMgY2hhciBsaW5lWzEwMDBdOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgbGFzdF9zaGExWzIwXTsKIAlpbnQgbGVuOwogCisJdHJhY2tfb2JqZWN0X3JlZnMgPSAwOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKIAlmb3IoOzspIHsKIAkJbGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOworCQlyZXNldF90aW1lb3V0KCk7CiAKIAkJaWYgKCFsZW4pIHsKLQkJCXBhY2tldF93cml0ZSgxLCAiTkFLXG4iKTsKKwkJCWlmIChucl9oYXMgPT0gMCB8fCBtdWx0aV9hY2spCisJCQkJcGFja2V0X3dyaXRlKDEsICJOQUtcbiIpOwogCQkJY29udGludWU7CiAJCX0KIAkJbGVuID0gc3RyaXAobGluZSwgbGVuKTsKIAkJaWYgKCFzdHJuY21wKGxpbmUsICJoYXZlICIsIDUpKSB7Ci0JCQlpZiAoZ290X3NoYTEobGluZSs1LCBzaGExKSkgewotCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7Ci0JCQkJYnJlYWs7CisJCQlpZiAoZ290X3NoYTEobGluZSs1LCBzaGExKSAmJgorCQkJCQkobXVsdGlfYWNrIHx8IG5yX2hhcyA9PSAxKSkgeworCQkJCWlmIChucl9oYXMgPj0gTUFYX0hBUykKKwkJCQkJbXVsdGlfYWNrID0gMDsKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlcyVzXG4iLAorCQkJCQlzaGExX3RvX2hleChzaGExKSwKKwkJCQkJbXVsdGlfYWNrID8gICIgY29udGludWUiIDogIiIpOworCQkJCWlmIChtdWx0aV9hY2spCisJCQkJCW1lbWNweShsYXN0X3NoYTEsIHNoYTEsIDIwKTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKGxpbmUsICJkb25lIikpIHsKKwkJCWlmIChucl9oYXMgPiAwKSB7CisJCQkJaWYgKG11bHRpX2FjaykKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXNcbiIsCisJCQkJCQkJc2hhMV90b19oZXgobGFzdF9zaGExKSk7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IGV4cGVjdGVkIFNIQTEgbGlzdCwgZ290ICclcyciLCBsaW5lKTsKIAl9Ci0KLQlmb3IgKDs7KSB7Ci0JCWxlbiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKLQkJaWYgKCFsZW4pCi0JCQljb250aW51ZTsKLQkJbGVuID0gc3RyaXAobGluZSwgbGVuKTsKLQkJaWYgKCFzdHJuY21wKGxpbmUsICJoYXZlICIsIDUpKSB7Ci0JCQlnb3Rfc2hhMShsaW5lKzUsIHNoYTEpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFzdHJjbXAobGluZSwgImRvbmUiKSkKLQkJCWJyZWFrOwotCQlkaWUoImdpdC11cGxvYWQtcGFjazogZXhwZWN0ZWQgU0hBMSBsaXN0LCBnb3QgJyVzJyIsIGxpbmUpOwotCX0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByZWNlaXZlX25lZWRzKHZvaWQpCkBAIC0xMjksMzAgKzE2OSw3MiBAQAogCiAJbmVlZHMgPSAwOwogCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKKwkJdW5zaWduZWQgY2hhciBkdW1teVsyMF0sICpzaGExX2J1ZjsKIAkJbGVuID0gcGFja2V0X3JlYWRfbGluZSgwLCBsaW5lLCBzaXplb2YobGluZSkpOworCQlyZXNldF90aW1lb3V0KCk7CiAJCWlmICghbGVuKQogCQkJcmV0dXJuIG5lZWRzOwogCi0JCS8qCi0JCSAqIFRoaXMgaXMgcHVyZWx5IHRoZW9yZXRpY2FsIHJpZ2h0IG5vdzogZ2l0LWZldGNoLXBhY2sgb25seQotCQkgKiBldmVyIGFza3MgZm9yIGEgc2luZ2xlIEhFQUQKKwkJc2hhMV9idWYgPSBkdW1teTsKKwkJaWYgKG5lZWRzID09IE1BWF9ORUVEUykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIndhcm5pbmc6IHN1cHBvcnRpbmcgb25seSBhIG1heCBvZiAlZCByZXF1ZXN0cy4gIgorCQkJCSJzZW5kaW5nIGV2ZXJ5dGhpbmcgaW5zdGVhZC5cbiIsCisJCQkJTUFYX05FRURTKTsKKwkJfQorCQllbHNlIGlmIChuZWVkcyA8IE1BWF9ORUVEUykKKwkJCXNoYTFfYnVmID0gbmVlZHNfc2hhMVtuZWVkc107CisKKwkJaWYgKHN0cm5jbXAoIndhbnQgIiwgbGluZSwgNSkgfHwgZ2V0X3NoYTFfaGV4KGxpbmUrNSwgc2hhMV9idWYpKQorCQkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IHByb3RvY29sIGVycm9yLCAiCisJCQkgICAgImV4cGVjdGVkIHRvIGdldCBzaGEsIG5vdCAnJXMnIiwgbGluZSk7CisJCWlmIChzdHJzdHIobGluZSs0NSwgIm11bHRpX2FjayIpKQorCQkJbXVsdGlfYWNrID0gMTsKKworCQkvKiBXZSBoYXZlIHNlbnQgYWxsIG91ciByZWZzIGFscmVhZHksIGFuZCB0aGUgb3RoZXIgZW5kCisJCSAqIHNob3VsZCBoYXZlIGNob3NlbiBvdXQgb2YgdGhlbTsgb3RoZXJ3aXNlIHRoZXkgYXJlCisJCSAqIGFza2luZyBmb3Igbm9uc2Vuc2UuCisJCSAqCisJCSAqIEhtcGguICBXZSBtYXkgbGF0ZXIgd2FudCB0byBhbGxvdyAid2FudCIgbGluZSB0aGF0CisJCSAqIGFza3MgZm9yIHNvbWV0aGluZyBsaWtlICJtYXN0ZXJ+MTAiIChzeW1ib2xpYykuLi4KKwkJICogd291bGQgaXQgbWFrZSBzZW5zZT8gIEkgZG9uJ3Qga25vdy4KIAkJICovCi0JCWlmIChuZWVkcyA+PSBNQVhfTkVFRFMpCi0JCQlkaWUoIkknbSBvbmx5IGRvaW5nIGEgbWF4IG9mICVkIHJlcXVlc3RzIiwgTUFYX05FRURTKTsKLQkJaWYgKHN0cm5jbXAoIndhbnQgIiwgbGluZSwgNSkgfHwgZ2V0X3NoYTFfaGV4KGxpbmUrNSwgbmVlZHNfc2hhMVtuZWVkc10pKQotCQkJZGllKCJnaXQtdXBsb2FkLXBhY2s6IHByb3RvY29sIGVycm9yLCBleHBlY3RlZCB0byBnZXQgc2hhLCBub3QgJyVzJyIsIGxpbmUpOwotCQluZWVkcysrOworCQlvID0gbG9va3VwX29iamVjdChzaGExX2J1Zik7CisJCWlmICghbyB8fCAhKG8tPmZsYWdzICYgT1VSX1JFRikpCisJCQlkaWUoImdpdC11cGxvYWQtcGFjazogbm90IG91ciByZWYgJXMiLCBsaW5lKzUpOworCQlpZiAoIShvLT5mbGFncyAmIFdBTlRFRCkpIHsKKwkJCW8tPmZsYWdzIHw9IFdBTlRFRDsKKwkJCW5lZWRzKys7CisJCX0KIAl9CiB9CiAKIHN0YXRpYyBpbnQgc2VuZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzXG4iLCBzaGExX3RvX2hleChzaGExKSwgcmVmbmFtZSk7CisJc3RhdGljIGNoYXIgKmNhcGFiaWxpdGllcyA9ICJtdWx0aV9hY2siOworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qoc2hhMSk7CisKKwlpZiAoY2FwYWJpbGl0aWVzKQorCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzJWMlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHJlZm5hbWUsCisJCQkwLCBjYXBhYmlsaXRpZXMpOworCWVsc2UKKwkJcGFja2V0X3dyaXRlKDEsICIlcyAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSksIHJlZm5hbWUpOworCWNhcGFiaWxpdGllcyA9IE5VTEw7CisJaWYgKCEoby0+ZmxhZ3MgJiBPVVJfUkVGKSkgeworCQlvLT5mbGFncyB8PSBPVVJfUkVGOworCQlucl9vdXJfcmVmcysrOworCX0KKwlpZiAoby0+dHlwZSA9PSB0YWdfdHlwZSkgeworCQlvID0gZGVyZWZfdGFnKG8sIHJlZm5hbWUsIDApOworCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzXnt9XG4iLCBzaGExX3RvX2hleChvLT5zaGExKSwgcmVmbmFtZSk7CisJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHVwbG9hZF9wYWNrKHZvaWQpCiB7CisJcmVzZXRfdGltZW91dCgpOwogCWhlYWRfcmVmKHNlbmRfcmVmKTsKIAlmb3JfZWFjaF9yZWYoc2VuZF9yZWYpOwogCXBhY2tldF9mbHVzaCgxKTsKQEAgLTE2NywxOCArMjQ5LDQzIEBACiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJY29uc3QgY2hhciAqZGlyOwotCWlmIChhcmdjICE9IDIpCisJaW50IGk7CisJaW50IHN0cmljdCA9IDA7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QiKSkgeworCQkJc3RyaWN0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RybmNtcChhcmcsICItLXRpbWVvdXQ9IiwgMTApKSB7CisJCQl0aW1lb3V0ID0gYXRvaShhcmcrMTApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwl9CisJCisJaWYgKGkgIT0gYXJnYy0xKQogCQl1c2FnZSh1cGxvYWRfcGFja191c2FnZSk7Ci0JZGlyID0gYXJndlsxXTsKKwlkaXIgPSBhcmd2W2ldOwogCiAJLyogY2hkaXIgdG8gdGhlIGRpcmVjdG9yeS4gSWYgdGhhdCBmYWlscywgdHJ5IGFwcGVuZGluZyAiLmdpdCIgKi8KIAlpZiAoY2hkaXIoZGlyKSA8IDApIHsKLQkJaWYgKGNoZGlyKG1rcGF0aCgiJXMuZ2l0IiwgZGlyKSkgPCAwKQorCQlpZiAoc3RyaWN0IHx8IGNoZGlyKG1rcGF0aCgiJXMuZ2l0IiwgZGlyKSkgPCAwKQogCQkJZGllKCJnaXQtdXBsb2FkLXBhY2sgdW5hYmxlIHRvIGNoZGlyIHRvICVzIiwgZGlyKTsKIAl9Ci0JY2hkaXIoIi5naXQiKTsKKwlpZiAoIXN0cmljdCkKKwkJY2hkaXIoIi5naXQiKTsKKwogCWlmIChhY2Nlc3MoIm9iamVjdHMiLCBYX09LKSB8fCBhY2Nlc3MoInJlZnMiLCBYX09LKSkKIAkJZGllKCJnaXQtdXBsb2FkLXBhY2s6ICVzIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGdpdCBhcmNoaXZlIiwgZGlyKTsKKwogCXB1dGVudigiR0lUX0RJUj0uIik7CiAJdXBsb2FkX3BhY2soKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3VzYWdlLmMgYi91c2FnZS5jCmluZGV4IDg2MjExYzkuLmRmYTg3ZmUgMTAwNjQ0Ci0tLSBhL3VzYWdlLmMKKysrIGIvdXNhZ2UuYwpAQCAtMTUsNyArMTUsNyBAQAogdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnIpCiB7CiAJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXNcbiIsIGVycik7Ci0JZXhpdCgxKTsKKwlleGl0KDEyOSk7CiB9CiAKIHZvaWQgZGllKGNvbnN0IGNoYXIgKmVyciwgLi4uKQpAQCAtMjUsNyArMjUsNyBAQAogCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKIAlyZXBvcnQoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7CiAJdmFfZW5kKHBhcmFtcyk7Ci0JZXhpdCgxKTsKKwlleGl0KDEyOCk7CiB9CiAKIGludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKZGlmZiAtLWdpdCBhL3Zhci5jIGIvdmFyLmMKaW5kZXggM2YxMzEyNi4uNTFjZjg2YSAxMDA2NDQKLS0tIGEvdmFyLmMKKysrIGIvdmFyLmMKQEAgLTQyLDYgKzQyLDE1IEBACiAJcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIGludCBzaG93X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJcHJpbnRmKCIlcz0lc1xuIiwgdmFyLCB2YWx1ZSk7CisJZWxzZQorCQlwcmludGYoIiVzXG4iLCB2YXIpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICp2YWw7CkBAIC01Miw5ICs2MSwxMSBAQAogCXZhbCA9IE5VTEw7CiAKIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICItbCIpID09IDApIHsKKwkJZ2l0X2NvbmZpZyhzaG93X2NvbmZpZyk7CiAJCWxpc3RfdmFycygpOwogCQlyZXR1cm4gMDsKIAl9CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwogCXZhbCA9IHJlYWRfdmFyKGFyZ3ZbMV0pOwogCWlmICghdmFsKQogCQl1c2FnZSh2YXJfdXNhZ2UpOwpkaWZmIC0tZ2l0IGEvdmVyaWZ5LXBhY2suYyBiL3ZlcmlmeS1wYWNrLmMKaW5kZXggODBiNjBhNi4uYzk5ZGI5ZGQgMTAwNjQ0Ci0tLSBhL3ZlcmlmeS1wYWNrLmMKKysrIGIvdmVyaWZ5LXBhY2suYwpAQCAtMTUsMTIgKzE1LDEyIEBACiAJCQlsZW4tLTsKIAkJfQogCQkvKiBTaG91bGQgbmFtZSBmb28uaWR4IG5vdyAqLwotCQlpZiAoKGcgPSBhZGRfcGFja2VkX2dpdChhcmcsIGxlbikpKQorCQlpZiAoKGcgPSBhZGRfcGFja2VkX2dpdChhcmcsIGxlbiwgMSkpKQogCQkJYnJlYWs7CiAJCS8qIE5vPyAgZGlkIHlvdSBuYW1lIGp1c3QgZm9vPyAqLwogCQlzdHJjcHkoYXJnICsgbGVuLCAiLmlkeCIpOwogCQlsZW4gKz0gNDsKLQkJaWYgKChnID0gYWRkX3BhY2tlZF9naXQoYXJnLCBsZW4pKSkKKwkJaWYgKChnID0gYWRkX3BhY2tlZF9naXQoYXJnLCBsZW4sIDEpKSkKIAkJCWJyZWFrOwogCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIG5vdCBmb3VuZC4iLCBhcmcpOwogCX0K